Java tutorial
/* * ==================================================================== * This software is subject to the terms of the Common Public License * Agreement, available at the following URL: * http://www.opensource.org/licenses/cpl.html . * You must accept the terms of that agreement to use this software. * ==================================================================== */ package com.eyeq.pivot4j.ui.property; import java.io.Serializable; import java.util.LinkedList; import java.util.List; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.SubnodeConfiguration; import org.apache.commons.lang.NullArgumentException; import org.apache.commons.lang.ObjectUtils; import com.eyeq.pivot4j.el.ExpressionEvaluator; import com.eyeq.pivot4j.ui.RenderContext; import com.eyeq.pivot4j.ui.condition.Condition; import com.eyeq.pivot4j.ui.condition.ConditionFactory; public class ConditionalProperty extends AbstractProperty { private String defaultValue; private ConditionFactory conditionFactory; private List<ConditionalValue> values; /** * @param conditionFactory */ ConditionalProperty(ConditionFactory conditionFactory) { if (conditionFactory == null) { throw new NullArgumentException("conditionFactory"); } this.conditionFactory = conditionFactory; } /** * @param name * @param conditionFactory */ public ConditionalProperty(String name, ConditionFactory conditionFactory) { super(name); if (conditionFactory == null) { throw new NullArgumentException("conditionFactory"); } this.conditionFactory = conditionFactory; } /** * @param name * @param defaultValue * @param values * @param conditionFactory */ public ConditionalProperty(String name, String defaultValue, List<ConditionalValue> values, ConditionFactory conditionFactory) { super(name); if (conditionFactory == null) { throw new NullArgumentException("conditionFactory"); } this.defaultValue = defaultValue; this.values = values; this.conditionFactory = conditionFactory; } /** * @return the conditionFactory */ protected ConditionFactory getConditionFactory() { return conditionFactory; } /** * @return the defaultValue */ public String getDefaultValue() { return defaultValue; } /** * @param defaultValue * the defaultValue to set */ public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } /** * @return the values */ public List<ConditionalValue> getValues() { return values; } /** * @param values * the values to set */ public void setValues(List<ConditionalValue> values) { this.values = values; } @Override public String getValue(RenderContext context) { if (values == null) { return null; } String value = null; for (ConditionalValue conditionValue : values) { if (conditionValue.getCondition().matches(context)) { value = conditionValue.getValue(); } } if (value == null) { value = defaultValue; } if (value != null) { ExpressionEvaluator evaluator = context.getExpressionEvaluator(); value = ObjectUtils.toString(evaluator.evaluate(value, context.getExpressionContext())); } return value; } /** * @see com.eyeq.pivot4j.ui.property.AbstractProperty#saveState() */ @Override public Serializable saveState() { Serializable[] states = null; if (values != null) { states = new Serializable[values.size()]; int index = 0; for (ConditionalValue value : values) { Condition condition = value.getCondition(); states[index++] = new Serializable[] { condition.getName(), condition.saveState(), value.getValue() }; } } return new Serializable[] { super.saveState(), defaultValue, states }; } /** * @see com.eyeq.pivot4j.ui.property.AbstractProperty#restoreState(java.io.Serializable) */ @Override public void restoreState(Serializable state) { Serializable[] states = (Serializable[]) state; super.restoreState(states[0]); this.defaultValue = (String) states[1]; Serializable[] conditionStates = (Serializable[]) states[2]; if (conditionStates == null) { this.values = null; } else { this.values = new LinkedList<ConditionalValue>(); for (Serializable conditionState : conditionStates) { Serializable[] stateValues = (Serializable[]) conditionState; Condition condition = conditionFactory.createCondition((String) stateValues[0]); condition.restoreState(stateValues[1]); values.add(new ConditionalValue(condition, (String) stateValues[2])); } } } /** * @see com.eyeq.pivot4j.ui.property.AbstractProperty#saveSettings(org.apache.commons.configuration.HierarchicalConfiguration) */ @Override public void saveSettings(HierarchicalConfiguration configuration) { super.saveSettings(configuration); if (defaultValue != null) { configuration.setProperty("default", defaultValue); } if (values != null) { int index = 0; configuration.setProperty("conditions", ""); SubnodeConfiguration configurations = configuration.configurationAt("conditions"); for (ConditionalValue value : values) { String prefix = String.format("condition-property(%s)", index++); configurations.setProperty(prefix + ".condition", ""); configurations.setProperty(prefix + ".value", value.getValue()); SubnodeConfiguration conditionConfig = configurations.configurationAt(prefix + ".condition"); value.getCondition().saveSettings(conditionConfig); } } } /** * @see com.eyeq.pivot4j.ui.property.AbstractProperty#restoreSettings(org.apache * .commons.configuration.HierarchicalConfiguration) */ @Override public void restoreSettings(HierarchicalConfiguration configuration) { super.restoreSettings(configuration); this.defaultValue = configuration.getString("default"); this.values = new LinkedList<ConditionalValue>(); try { List<HierarchicalConfiguration> configurations = configuration .configurationsAt("conditions.condition-property"); for (HierarchicalConfiguration propertyConfig : configurations) { String name = propertyConfig.getString("condition[@name]"); Condition condition = conditionFactory.createCondition(name); condition.restoreSettings(propertyConfig.configurationAt("condition")); String value = propertyConfig.getString("value"); values.add(new ConditionalValue(condition, value)); } } catch (IllegalArgumentException e) { } } }