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}