View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.cli2.validation;
18  
19  import java.util.Iterator;
20  import java.util.List;
21  import java.util.Set;
22  
23  import org.apache.commons.cli2.resource.ResourceConstants;
24  import org.apache.commons.cli2.resource.ResourceHelper;
25  
26  /**
27   * The <code>EnumValidator</code> validates the string argument
28   * values are valid.
29   *
30   * The following example shows how to limit the valid values
31   * for the color argument to 'red', 'green', or 'blue'.
32   *
33   * <pre>
34   * Set values = new HashSet();
35   * values.add("red");
36   * values.add("green");
37   * values.add("blue");
38   * ...
39   * ArgumentBuilder builder = new ArgumentBuilder();
40   * Argument color =
41   *     builder.withName("color");
42   *            .withValidator(new EnumValidator(values));
43   * </pre>
44   *
45   * @author John Keyes
46   */
47  public class EnumValidator implements Validator {
48      /** List of permitted values */
49      private Set validValues;
50  
51      /**
52       * Creates a new EnumValidator for the specified values.
53       *
54       * @param values The list of permitted values
55       */
56      public EnumValidator(final Set values) {
57          setValidValues(values);
58      }
59  
60      /**
61       * Validate the list of values against the list of permitted values.
62       *
63       * @see org.apache.commons.cli2.validation.Validator#validate(java.util.List)
64       */
65      public void validate(final List values)
66          throws InvalidArgumentException {
67          for (final Iterator iter = values.iterator(); iter.hasNext();) {
68              final String value = (String) iter.next();
69  
70              if (!this.validValues.contains(value)) {
71                  throw new InvalidArgumentException(ResourceHelper.getResourceHelper().getMessage(ResourceConstants.ENUM_ILLEGAL_VALUE,
72                                                                                                   new Object[] {
73                                                                                                       value,
74                                                                                                       getValuesAsString()
75                                                                                                   }));
76              }
77          }
78      }
79  
80      /**
81       * Returns the permitted values in a comma separated String
82       *
83       * @return String formatted list of values
84       */
85      String getValuesAsString() {
86          final StringBuffer buff = new StringBuffer();
87  
88          buff.append("[");
89  
90          for (final Iterator iter = this.validValues.iterator(); iter.hasNext();) {
91              buff.append("'").append(iter.next()).append("'");
92  
93              if (iter.hasNext()) {
94                  buff.append(", ");
95              }
96          }
97  
98          buff.append("]");
99  
100         return buff.toString();
101     }
102 
103     /**
104      * Returns the Set of valid argument values.
105      *
106      * @return Returns the Set of valid argument values.
107      */
108     public Set getValidValues() {
109         return validValues;
110     }
111 
112     /**
113      * Specifies the Set of valid argument values.
114      *
115      * @param validValues The Set of valid argument values.
116      */
117     protected void setValidValues(Set validValues) {
118         this.validValues = validValues;
119     }
120 }