001 /**
002 * Copyright 2005-2013 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 */
016 package org.kuali.rice.krad.uif.modifier;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.krad.datadictionary.parse.BeanTag;
020 import org.kuali.rice.krad.uif.container.Group;
021 import org.kuali.rice.krad.uif.view.View;
022 import org.kuali.rice.krad.uif.component.Component;
023 import org.kuali.rice.krad.uif.field.Field;
024
025 import java.util.ArrayList;
026 import java.util.HashSet;
027 import java.util.List;
028 import java.util.Set;
029
030 /**
031 * Pulls <code>Label</code> instances out of a contained field so they will
032 * be placed separately in the <code>LayoutManager</code>
033 *
034 * @author Kuali Rice Team (rice.collab@kuali.org)
035 */
036 @BeanTag(name = "labelSeparator-modifier-bean", parent = "Uif-LabelSeparator-Modifier")
037 public class LabelSeparateModifier extends ComponentModifierBase {
038 private static final long serialVersionUID = -4304947796868636298L;
039
040 public LabelSeparateModifier() {
041 super();
042 }
043
044 /**
045 * Iterates through the <code>Group</code> items and if the label field is
046 * not null and should be rendered, adds it to the new field list
047 * immediately before the <code>Field</code> item the label applies to.
048 * Finally the new list of components is set on the group
049 *
050 * @see org.kuali.rice.krad.uif.modifier.ComponentModifier#performModification(org.kuali.rice.krad.uif.view.View,
051 * java.lang.Object, org.kuali.rice.krad.uif.component.Component)
052 */
053 @Override
054 public void performModification(View view, Object model, Component component) {
055 if ((component != null) && !(component instanceof Group)) {
056 throw new IllegalArgumentException("Compare field initializer only support Group components, found type: "
057 + component.getClass());
058 }
059
060 if (component == null) {
061 return;
062 }
063
064 // list that will be built
065 List<Component> groupFields = new ArrayList<Component>();
066
067 Group group = (Group) component;
068 for (Component item : group.getItems()) {
069 if (item instanceof Field) {
070 Field field = (Field) item;
071
072 // pull out label field
073 if (field.getFieldLabel() != null && field.getFieldLabel().isRender()) {
074 field.getFieldLabel().addStyleClass("displayWith-" + field.getId());
075 if (!field.isRender() && StringUtils.isBlank(field.getProgressiveRender())) {
076 field.getFieldLabel().setRender(false);
077 }
078 else if(!field.isRender() && StringUtils.isNotBlank(field.getProgressiveRender())){
079 field.getFieldLabel().setRender(true);
080 String prefixStyle = "";
081 if(StringUtils.isNotBlank(field.getFieldLabel().getStyle())){
082 prefixStyle = field.getFieldLabel().getStyle();
083 }
084 field.getFieldLabel().setStyle(prefixStyle + ";" + "display: none;");
085 }
086
087 groupFields.add(field.getFieldLabel());
088
089 // set boolean to indicate label field should not be
090 // rendered with the attribute
091 field.setLabelRendered(true);
092 }
093 }
094
095 groupFields.add(item);
096 }
097
098 // update group
099 group.setItems(groupFields);
100 }
101
102 /**
103 * @see org.kuali.rice.krad.uif.modifier.ComponentModifier#getSupportedComponents()
104 */
105 @Override
106 public Set<Class<? extends Component>> getSupportedComponents() {
107 Set<Class<? extends Component>> components = new HashSet<Class<? extends Component>>();
108 components.add(Group.class);
109
110 return components;
111 }
112
113 }