/* * Copyright 2011 PrimeFaces Extensions. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id: MasterDetailLevel.java 496 2011-11-29 13:58:25Z Zoigln@googlemail.com $ */ package org.primefaces.extensions.component.masterdetail; import javax.el.ValueExpression; import javax.faces.component.UIComponentBase; import java.util.ArrayList; import java.util.List; /** * <code>MasterDetailLevel</code> component. * * @author Oleg Varaksin / last modified by $Author: Zoigln@googlemail.com $ * @version $Revision: 496 $ */ public class MasterDetailLevel extends UIComponentBase { public static final String COMPONENT_FAMILY = "org.primefaces.extensions.component"; private static final String DEFAULT_RENDERER = "org.primefaces.extensions.component.MasterDetailLevel"; private static final String OPTIMIZED_PACKAGE = "org.primefaces.extensions.component."; /** * Properties that are tracked by state saving. * * @author Oleg Varaksin / last modified by $Author: Zoigln@googlemail.com $ * @version $Revision: 496 $ */ protected enum PropertyKeys { level, contextVar, levelLabel, levelDisabled; private String toString; PropertyKeys(final String toString) { this.toString = toString; } PropertyKeys() { } @Override public String toString() { return ((this.toString != null) ? this.toString : super.toString()); } } public MasterDetailLevel() { setRendererType(DEFAULT_RENDERER); } @Override public String getFamily() { return COMPONENT_FAMILY; } public int getLevel() { return (Integer) getStateHelper().eval(PropertyKeys.level, null); } public void setLevel(final int level) { setAttribute(PropertyKeys.level, level); } public String getContextVar() { return (String) getStateHelper().eval(PropertyKeys.contextVar, null); } public void setContextVar(final String contextVar) { setAttribute(PropertyKeys.contextVar, contextVar); } public String getLevelLabel() { return (String) getStateHelper().eval(PropertyKeys.levelLabel, null); } public void setLevelLabel(final String levelLabel) { setAttribute(PropertyKeys.levelLabel, levelLabel); } public boolean isLevelDisabled() { return (Boolean) getStateHelper().eval(PropertyKeys.levelDisabled, false); } public void setLevelDisabled(final boolean levelDisabled) { setAttribute(PropertyKeys.levelDisabled, levelDisabled); } public void setAttribute(final PropertyKeys property, final Object value) { getStateHelper().put(property, value); @SuppressWarnings("unchecked") List<String> setAttributes = (List<String>) this.getAttributes().get("javax.faces.component.UIComponentBase.attributesThatAreSet"); if (setAttributes == null) { final String cname = this.getClass().getName(); if (cname != null && cname.startsWith(OPTIMIZED_PACKAGE)) { setAttributes = new ArrayList<String>(6); this.getAttributes().put( "javax.faces.component.UIComponentBase.attributesThatAreSet", setAttributes); } } if (setAttributes != null && value == null) { final String attributeName = property.toString(); final ValueExpression ve = getValueExpression(attributeName); if (ve == null) { setAttributes.remove(attributeName); } else if (!setAttributes.contains(attributeName)) { setAttributes.add(attributeName); } } } }