001    /**
002     * Copyright 2003-2004 The Apache Software Foundation
003     * Copyright 2005 Stephen McConnell
004     *
005     * Licensed under the Apache License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * 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 net.dpml.cli;
018    
019    import java.util.Collections;
020    import java.util.HashSet;
021    import java.util.Set;
022    
023    /**
024     * An enum of possible display settings. These settings are used to control the
025     * presence of various features in the String representations of options,
026     * CommandLines and usage strings.  Usually a Set of DisplaySetting instances
027     * will be passed to a method that will lookup the presence of the values.
028     *
029     * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
030     * @version 1.0.0
031     */
032    public final class DisplaySetting 
033    {
034        private static final Set ALL_SETTINGS = new HashSet();
035    
036        /**
037         * A Set guarenteed to contain all possible DisplaySetting values
038         */
039        public static final Set ALL = Collections.unmodifiableSet( ALL_SETTINGS );
040        
041        /**
042         * A Set guarenteed to contain no DisplaySetting values
043         */
044        public static final Set NONE = Collections.EMPTY_SET;
045        
046        /**
047         * Indicates that aliases should be included
048         */
049        public static final DisplaySetting DISPLAY_ALIASES =
050            new DisplaySetting( "DISPLAY_ALIASES" );
051        
052        /**
053         * Indicates that optionality should be included
054         */
055        public static final DisplaySetting DISPLAY_OPTIONAL =
056            new DisplaySetting( "DISPLAY_OPTIONAL" );
057        
058        /**
059         * Indicates that property options should be included
060         */
061        public static final DisplaySetting DISPLAY_PROPERTY_OPTION =
062            new DisplaySetting( "DISPLAY_PROPERTY_OPTION" );
063        
064        /**
065         * Indicates that switches should be included enabled
066         */
067        public static final DisplaySetting DISPLAY_SWITCH_ENABLED =
068            new DisplaySetting( "DISPLAY_SWITCH_ENABLED" );
069        
070        /**
071         * Indicates that switches should be included disabled
072         */
073        public static final DisplaySetting DISPLAY_SWITCH_DISABLED =
074            new DisplaySetting( "DISPLAY_SWITCH_DISABLED" );
075        
076        /**
077         * Indicates that group names should be included
078         */
079        public static final DisplaySetting DISPLAY_GROUP_NAME =
080            new DisplaySetting( "DISPLAY_GROUP_NAME" );
081        
082        /**
083         * Indicates that groups should be included expanded
084         */
085        public static final DisplaySetting DISPLAY_GROUP_EXPANDED =
086            new DisplaySetting( "DISPLAY_GROUP_EXPANDED" );
087        
088        /**
089         * Indicates that group arguments should be included
090         */
091        public static final DisplaySetting DISPLAY_GROUP_ARGUMENT =
092            new DisplaySetting( "DISPLAY_GROUP_ARGUMENT" );
093        
094        /**
095         * Indicates that group outer brackets should be included
096         */
097        public static final DisplaySetting DISPLAY_GROUP_OUTER =
098            new DisplaySetting( "DISPLAY_GROUP_OUTER" );
099        
100        /**
101         * Indicates that arguments should be included numbered
102         */
103        public static final DisplaySetting DISPLAY_ARGUMENT_NUMBERED =
104            new DisplaySetting( "DISPLAY_ARGUMENT_NUMBERED" );
105        
106        /**
107         * Indicates that arguments should be included bracketed
108         */
109        public static final DisplaySetting DISPLAY_ARGUMENT_BRACKETED =
110            new DisplaySetting( "DISPLAY_ARGUMENT_BRACKETED" );
111        
112        /**
113         * Indicates that arguments of Parents should be included
114         */
115        public static final DisplaySetting DISPLAY_PARENT_ARGUMENT =
116            new DisplaySetting( "DISPLAY_PARENT_ARGUMENT" );
117        
118        /**
119         * Indicates that children of Parents should be included
120         */
121        public static final DisplaySetting DISPLAY_PARENT_CHILDREN =
122            new DisplaySetting( "DISPLAY_PARENT_CHILDREN" );
123        
124        /**
125         * The name of the setting
126         */
127        private final String m_name;
128        
129        /**
130         * The hashCode of the setting
131         */
132        private final int m_hashCode;
133    
134        /**
135         * Creates a new DisplaySetting with the specified name
136         * @param name the name of the setting
137         */
138        private DisplaySetting( final String name ) 
139        {
140            m_name = name;
141            m_hashCode = name.hashCode();
142            ALL_SETTINGS.add( this );
143        }
144    
145       /**
146        * Return the instance hashcode value.
147        * @return the hash value
148        */
149        public int hashCode() 
150        {
151            return m_hashCode;
152        }
153    
154       /**
155        * Test this object for equality with the supplied object.
156        * @param that the other object
157        * @return true if the objects are equal
158        */
159        public boolean equals( final Object that ) 
160        {
161            if( that instanceof DisplaySetting )
162            {
163                return m_name.compareTo( that.toString() ) == 0;
164            }
165            return false;
166        }
167    
168       /**
169        * Return a string representation of the instance.
170        * @return the string
171        */
172        public String toString()
173        {
174            return m_name;
175        }
176    }