View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one
    3    * or more contributor license agreements. See the NOTICE file
    4    * distributed with this work for additional information
    5    * regarding copyright ownership. The ASF licenses this file
    6    * to you under the Apache License, Version 2.0 (the
    7    * "License"); you may not use this file except in compliance
    8    * with the License. You may obtain a copy of the License at
    9    *
    10   * http://www.apache.org/licenses/LICENSE-2.0
    11   *
    12   * Unless required by applicable law or agreed to in writing,
    13   * software distributed under the License is distributed on an
    14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    15   * KIND, either express or implied. See the License for the
    16   * specific language governing permissions and limitations
    17   * under the License.
    18   */
    19
    20  package org.apache.ws.commons.schema.constants;
    21
    22  public abstract class Enum {
    23
    24      public static String NULL = "NULL";
    25
    26      protected Enum(String value) {
    27          setValue(value);
    28      }
    29
    30      protected Enum() {
    31          this(NULL);
    32      }
    33
    34      protected abstract String[] getValues();
    35
    36      protected String value = NULL;
    37
    38      public void setValue(String value) {
    39          if (value.equals(Enum.NULL))
    40              this.value = Enum.NULL;
    41          else {
    42              //the value can be a list of space seperated items
    43              String possibleValues[] = getValues();
    44              String[] valuesToBeTested = value.split("\\s");
    45              for (int i = 0; i < valuesToBeTested.length; i++) {
    46                  for (int j = 0; j < possibleValues.length; j++) {
    47                      if (possibleValues[j].equals(valuesToBeTested[i])) {
    48                          break;
    49                      }
    50                      if (i == possibleValues.length - 1)
    51                          throw new EnumValueException("Bad Enumeration value '" + value + "'");
    52                  }
    53              }
    54
    55              //when we reach here we have tested all the values to be correct (applicable)
    56               this.value = value;
    57
    58
    59          }
    60      }
    61
    62      public String getValue() {
    63          return value;
    64      }
    65
    66      public String toString() {
    67          return value;
    68      }
    69
    70      public boolean equals(Object what) {
    71          return what.getClass().equals(this.getClass()) &&
    72                  ((Enum) what).getValue().equals(this.getValue());
    73      }
    74
    75      public static class EnumValueException extends RuntimeException {
    76          /**
    77           *
    78           */
    79          private static final long serialVersionUID = 1L;
    80
    81          public EnumValueException(String mesg) {
    82              super(mesg);
    83          }
    84      }
    85
    86      protected static final int index(String value, String values[]) {
    87          for (int i = 0; i < values.length; i++) {
    88              if (value.equals(values[i]))
    89                  return i;
    90          }
    91          return -1;
    92      }
    93  }
    94
    95