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.commons.cli2;
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    public class DisplaySetting {
030    
031        private static final Set all = new HashSet();
032    
033        /**
034         * A Set guaranteed to contain all possible DisplaySetting values
035         */
036        public static final Set ALL = Collections.unmodifiableSet(all);
037    
038        /**
039         * A Set guaranteed to contain no DisplaySetting values
040         */
041        public static final Set NONE = Collections.EMPTY_SET;
042    
043        /**
044         * Indicates that aliases should be included
045         */
046        public static final DisplaySetting DISPLAY_ALIASES =
047            new DisplaySetting("DISPLAY_ALIASES");
048    
049        /**
050         * Indicates that optionality should be included
051         */
052        public static final DisplaySetting DISPLAY_OPTIONAL =
053            new DisplaySetting("DISPLAY_OPTIONAL");
054    
055        /**
056         * Indicates that optional child groups should be displayed in square
057         * brackets.
058         */
059        public static final DisplaySetting DISPLAY_OPTIONAL_CHILD_GROUP =
060            new DisplaySetting("DISPLAY_OPTIONAL_CHILD_GROUP");
061    
062        /**
063         * Indicates that property options should be included
064         */
065        public static final DisplaySetting DISPLAY_PROPERTY_OPTION =
066            new DisplaySetting("DISPLAY_PROPERTY_OPTION");
067    
068        /**
069         * Indicates that switches should be included enabled
070         */
071        public static final DisplaySetting DISPLAY_SWITCH_ENABLED =
072            new DisplaySetting("DISPLAY_SWITCH_ENABLED");
073    
074        /**
075         * Indicates that switches should be included disabled
076         */
077        public static final DisplaySetting DISPLAY_SWITCH_DISABLED =
078            new DisplaySetting("DISPLAY_SWITCH_DISABLED");
079    
080        /**
081         * Indicates that group names should be included
082         */
083        public static final DisplaySetting DISPLAY_GROUP_NAME =
084            new DisplaySetting("DISPLAY_GROUP_NAME");
085    
086        /**
087         * Indicates that groups should be included expanded
088         */
089        public static final DisplaySetting DISPLAY_GROUP_EXPANDED =
090            new DisplaySetting("DISPLAY_GROUP_EXPANDED");
091    
092        /**
093         * Indicates that group arguments should be included
094         */
095        public static final DisplaySetting DISPLAY_GROUP_ARGUMENT =
096            new DisplaySetting("DISPLAY_GROUP_ARGUMENT");
097    
098        /**
099         * Indicates that group outer brackets should be included
100         */
101        public static final DisplaySetting DISPLAY_GROUP_OUTER =
102            new DisplaySetting("DISPLAY_GROUP_OUTER");
103    
104        /**
105         * Indicates that arguments should be included numbered
106         */
107        public static final DisplaySetting DISPLAY_ARGUMENT_NUMBERED =
108            new DisplaySetting("DISPLAY_ARGUMENT_NUMBERED");
109    
110        /**
111         * Indicates that arguments should be included bracketed
112         */
113        public static final DisplaySetting DISPLAY_ARGUMENT_BRACKETED =
114            new DisplaySetting("DISPLAY_ARGUMENT_BRACKETED");
115    
116        /**
117         * Indicates that arguments of Parents should be included
118         */
119        public static final DisplaySetting DISPLAY_PARENT_ARGUMENT =
120            new DisplaySetting("DISPLAY_PARENT_ARGUMENT");
121    
122        /**
123         * Indicates that children of Parents should be included
124         */
125        public static final DisplaySetting DISPLAY_PARENT_CHILDREN =
126            new DisplaySetting("DISPLAY_PARENT_CHILDREN");
127    
128        /**
129         * The name of the setting
130         */
131        private final String name;
132    
133        /**
134         * The hashCode of the setting
135         */
136        private final int hashCode;
137    
138        /**
139         * Creates a new DisplaySetting with the specified name
140         * @param name the name of the setting
141         */
142        private DisplaySetting(final String name) {
143            this.name = name;
144            this.hashCode = name.hashCode();
145            all.add(this);
146        }
147    
148        public int hashCode() {
149            return hashCode;
150        }
151    
152        public boolean equals(final Object that) {
153            if (that instanceof DisplaySetting) {
154                return name.compareTo(that.toString()) == 0;
155            }
156            return false;
157        }
158    
159        public String toString() {
160            return name;
161        }
162    }