001/**
002 * Copyright 2005-2018 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.krad.uif.layout.collections;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
020import org.kuali.rice.krad.uif.UifConstants;
021import org.kuali.rice.krad.uif.container.Group;
022import org.kuali.rice.krad.uif.field.Field;
023import org.kuali.rice.krad.uif.field.FieldGroup;
024import org.kuali.rice.krad.uif.layout.CollectionLayoutManager;
025import org.kuali.rice.krad.uif.layout.LayoutManagerBase;
026import org.kuali.rice.krad.uif.lifecycle.ViewLifecycleRestriction;
027import org.kuali.rice.krad.uif.view.ExpressionEvaluator;
028import org.kuali.rice.krad.uif.element.Pager;
029import org.kuali.rice.krad.util.KRADUtils;
030
031import java.util.Map;
032
033/**
034 * Base class for collection layout managers.
035 *
036 * @author Kuali Rice Team (rice.collab@kuali.org)
037 */
038public abstract class CollectionLayoutManagerBase extends LayoutManagerBase implements CollectionLayoutManager {
039    private static final long serialVersionUID = 5530678364562263669L;
040
041    private Group addLineGroup;
042    private Field selectFieldPrototype;
043    private FieldGroup subCollectionFieldGroupPrototype;
044
045    private Pager pagerWidget;
046
047    /**
048     * {@inheritDoc}
049     */
050    @Override
051    @BeanTagAttribute
052    public Group getAddLineGroup() {
053        return addLineGroup;
054    }
055
056    /**
057     * {@inheritDoc}
058     */
059    @Override
060    public void setAddLineGroup(Group addLineGroup) {
061        this.addLineGroup = addLineGroup;
062    }
063
064    /**
065     * Method to add and enter key add to the given Group. Will use given lineContext and expressionEvaluator if action
066     * string starts with '@{'.
067     *
068     * @param group
069     * @param lineContext
070     * @param expressionEvaluator
071     * @param enterKeyAction
072     */
073    protected void addEnterKeyDataAttributeToGroup(Group group, Map<String, Object> lineContext,
074            ExpressionEvaluator expressionEvaluator, String enterKeyAction) {
075        if (StringUtils.isNotBlank(enterKeyAction)) {
076            String action = enterKeyAction;
077            if (action.contains("@{")) {
078                action = expressionEvaluator.evaluateExpressionTemplate(lineContext, enterKeyAction);
079            }
080
081            group.addDataAttribute(UifConstants.DataAttributes.ENTER_KEY, KRADUtils.convertToHTMLAttributeSafeString(
082                    action));
083        }
084    }
085
086    /**
087     * {@inheritDoc}
088     */
089    @Override
090    @ViewLifecycleRestriction(UifConstants.ViewPhases.INITIALIZE)
091    @BeanTagAttribute
092    public Field getSelectFieldPrototype() {
093        return selectFieldPrototype;
094    }
095
096    /**
097     * {@inheritDoc}
098     */
099    @Override
100    public void setSelectFieldPrototype(Field selectFieldPrototype) {
101        this.selectFieldPrototype = selectFieldPrototype;
102    }
103
104    /**
105     * {@inheritDoc}
106     */
107    @Override
108    @ViewLifecycleRestriction(UifConstants.ViewPhases.INITIALIZE)
109    @BeanTagAttribute
110    public FieldGroup getSubCollectionFieldGroupPrototype() {
111        return this.subCollectionFieldGroupPrototype;
112    }
113
114    /**
115     * {@inheritDoc}
116     */
117    @Override
118    public void setSubCollectionFieldGroupPrototype(FieldGroup subCollectionFieldGroupPrototype) {
119        this.subCollectionFieldGroupPrototype = subCollectionFieldGroupPrototype;
120    }
121
122    /**
123     * {@inheritDoc}
124     */
125    @Override
126    @BeanTagAttribute
127    public Pager getPagerWidget() {
128        return pagerWidget;
129    }
130
131    /**
132     * {@inheritDoc}
133     */
134    @Override
135    public void setPagerWidget(Pager pagerWidget) {
136        this.pagerWidget = pagerWidget;
137    }
138}