| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| package org.apache.cocoon.forms.formmodel; |
| |
| import org.apache.commons.lang.enums.ValuedEnum; |
| |
| /** |
| * The state of a widget. States are ordered from the most featured ("active") |
| * to the most constrained ("invisible"), so that state combinations can be |
| * computed: a widget's combined state is the strictest between the widget's own |
| * state and its parent state. |
| * |
| * @version $Id$ |
| */ |
| public class WidgetState extends ValuedEnum { |
| |
| private static final int ACTIVE_VALUE = 4; |
| |
| private static final int DISABLED_VALUE = 3; |
| |
| private static final int OUTPUT_VALUE = 2; |
| |
| private static final int INVISIBLE_VALUE = 1; |
| |
| /** |
| * Active state. This is the default state, where widgets read their values |
| * from the request and display them. |
| */ |
| public static final WidgetState ACTIVE = new WidgetState("active", ACTIVE_VALUE); |
| |
| /** |
| * Disabled state, value is displayed but user input is ignored. The widget should be |
| * rendered in a manner that indicates that this widget could be active, but is currently not. |
| */ |
| public static final WidgetState DISABLED = new WidgetState("disabled", DISABLED_VALUE); |
| |
| /** |
| * Output state, value is displayed but user input is ignored. The widget should be rendered |
| * as plain text, giving no indication that it could be input. |
| */ |
| public static final WidgetState OUTPUT = new WidgetState("output", OUTPUT_VALUE); |
| |
| /** |
| * Invisible state. Values are not displayed and user input is ignored. |
| */ |
| public static final WidgetState INVISIBLE = new WidgetState("invisible", INVISIBLE_VALUE); |
| |
| /** |
| * Private constructor |
| */ |
| private WidgetState(String name, int value) { |
| super(name, value); |
| } |
| |
| /** |
| * Get a state given its name. Valid names are "active", "disabled", |
| * "invisible". |
| * |
| * @param name the state name |
| * @return the state, or <code>null</code> if <code>name</code> doesn't |
| * denote a known state name |
| */ |
| public static WidgetState stateForName(String name) { |
| return (WidgetState) getEnum(WidgetState.class, name); |
| } |
| |
| /** |
| * Determine the strictest of two states. "invisible" is stricter than |
| * "disabled" which is stricter than "active" |
| * |
| * @param one a state |
| * @param two another state |
| * @return the strictes of <code>one</code> and <code>two</code> |
| */ |
| public static WidgetState strictest(WidgetState one, WidgetState two) { |
| return (one.getValue() < two.getValue()) ? one : two; |
| } |
| |
| /** |
| * Test if the current state is stricter than another one. |
| * |
| * @param other a state |
| * @return <code>true</code> if <code>this</code> is stricter |
| * than <code>other</code> |
| */ |
| public boolean stricterThan(WidgetState other) { |
| return this.getValue() < other.getValue(); |
| } |
| |
| /** |
| * Does this state accept user inputs? |
| * |
| * @return <code>true</code> if this state accepts user inputs. |
| */ |
| public boolean isAcceptingInputs() { |
| return this.getValue() == ACTIVE_VALUE; |
| } |
| |
| /** |
| * Does this state display widget values? |
| * |
| * @return <code>true</code> if this state displays widget values. |
| */ |
| public boolean isDisplayingValues() { |
| return this.getValue() > INVISIBLE_VALUE; |
| } |
| |
| /** |
| * Does this state validate widget values? |
| * |
| * @return <code>true</code> if this state validates widget values. |
| */ |
| public boolean isValidatingValues() { |
| return this.getValue() == ACTIVE_VALUE; |
| } |
| |
| // Potential features provided by ValuedEnum that don't seem to be needed now |
| // |
| // public static WidgetState stateForValue(int stateValue) { |
| // return (WidgetState) getEnum(WidgetState.class, stateValue); |
| // } |
| // |
| // public static Map getEnumMap() { |
| // return getEnumMap(WidgetState.class); |
| // } |
| // |
| // public static List getStateList() { |
| // return getEnumList(WidgetState.class); |
| // } |
| // |
| // public static Iterator iterator() { |
| // return iterator(WidgetState.class); |
| // } |
| |
| } |