001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.forms.formmodel;
018:
019: import org.apache.commons.lang.enums.ValuedEnum;
020:
021: /**
022: * The state of a widget. States are ordered from the most featured ("active")
023: * to the most constrained ("invisible"), so that state combinations can be
024: * computed: a widget's combined state is the strictest between the widget's own
025: * state and its parent state.
026: *
027: * @version $Id: WidgetState.java 449149 2006-09-23 03:58:05Z crossley $
028: */
029: public class WidgetState extends ValuedEnum {
030:
031: private static final int ACTIVE_VALUE = 4;
032:
033: private static final int DISABLED_VALUE = 3;
034:
035: private static final int OUTPUT_VALUE = 2;
036:
037: private static final int INVISIBLE_VALUE = 1;
038:
039: /**
040: * Active state. This is the default state, where widgets read their values
041: * from the request and display them.
042: */
043: public static final WidgetState ACTIVE = new WidgetState("active",
044: ACTIVE_VALUE);
045:
046: /**
047: * Disabled state, value is displayed but user input is ignored. The widget should be
048: * rendered in a manner that indicates that this widget could be active, but is currently not.
049: */
050: public static final WidgetState DISABLED = new WidgetState(
051: "disabled", DISABLED_VALUE);
052:
053: /**
054: * Output state, value is displayed but user input is ignored. The widget should be rendered
055: * as plain text, giving no indication that it could be input.
056: */
057: public static final WidgetState OUTPUT = new WidgetState("output",
058: OUTPUT_VALUE);
059:
060: /**
061: * Invisible state. Values are not displayed and user input is ignored.
062: */
063: public static final WidgetState INVISIBLE = new WidgetState(
064: "invisible", INVISIBLE_VALUE);
065:
066: /**
067: * Private constructor
068: */
069: private WidgetState(String name, int value) {
070: super (name, value);
071: }
072:
073: /**
074: * Get a state given its name. Valid names are "active", "disabled",
075: * "invisible".
076: *
077: * @param name the state name
078: * @return the state, or <code>null</code> if <code>name</code> doesn't
079: * denote a known state name
080: */
081: public static WidgetState stateForName(String name) {
082: return (WidgetState) getEnum(WidgetState.class, name);
083: }
084:
085: /**
086: * Determine the strictest of two states. "invisible" is stricter than
087: * "disabled" which is stricter than "active"
088: *
089: * @param one a state
090: * @param two another state
091: * @return the strictes of <code>one</code> and <code>two</code>
092: */
093: public static WidgetState strictest(WidgetState one, WidgetState two) {
094: return (one.getValue() < two.getValue()) ? one : two;
095: }
096:
097: /**
098: * Test if the current state is stricter than another one.
099: *
100: * @param other a state
101: * @return <code>true</code> if <code>this</code> is stricter
102: * than <code>other</code>
103: */
104: public boolean stricterThan(WidgetState other) {
105: return this .getValue() < other.getValue();
106: }
107:
108: /**
109: * Does this state accept user inputs?
110: *
111: * @return <code>true</code> if this state accepts user inputs.
112: */
113: public boolean isAcceptingInputs() {
114: return this .getValue() == ACTIVE_VALUE;
115: }
116:
117: /**
118: * Does this state display widget values?
119: *
120: * @return <code>true</code> if this state displays widget values.
121: */
122: public boolean isDisplayingValues() {
123: return this .getValue() > INVISIBLE_VALUE;
124: }
125:
126: /**
127: * Does this state validate widget values?
128: *
129: * @return <code>true</code> if this state validates widget values.
130: */
131: public boolean isValidatingValues() {
132: return this .getValue() == ACTIVE_VALUE;
133: }
134:
135: // Potential features provided by ValuedEnum that don't seem to be needed now
136: //
137: // public static WidgetState stateForValue(int stateValue) {
138: // return (WidgetState) getEnum(WidgetState.class, stateValue);
139: // }
140: //
141: // public static Map getEnumMap() {
142: // return getEnumMap(WidgetState.class);
143: // }
144: //
145: // public static List getStateList() {
146: // return getEnumList(WidgetState.class);
147: // }
148: //
149: // public static Iterator iterator() {
150: // return iterator(WidgetState.class);
151: // }
152:
153: }
|