View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  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  
18  package org.apache.geronimo.kernel.management;
19  
20  import java.io.Serializable;
21  
22  
23  /**
24   * This class contains a type safe enumeration of the states from the J2EE Management specification.
25   *
26   * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
27   */
28  public final class State implements Serializable {
29      public static final int STARTING_INDEX = 0;
30      public static final int RUNNING_INDEX = 1;
31      public static final int STOPPING_INDEX = 2;
32      public static final int STOPPED_INDEX = 3;
33      public static final int FAILED_INDEX = 4;
34  
35      public static final State STARTING = new State("starting", STARTING_INDEX, NotificationType.STATE_STARTING);
36      public static final State RUNNING = new State("running", RUNNING_INDEX, NotificationType.STATE_RUNNING);
37      public static final State STOPPING = new State("stopping", STOPPING_INDEX, NotificationType.STATE_STOPPING);
38      public static final State STOPPED = new State("stopped", STOPPED_INDEX, NotificationType.STATE_STOPPED);
39      public static final State FAILED = new State("failed", FAILED_INDEX, NotificationType.STATE_FAILED);
40  
41      private static final State[] fromInt = {STARTING, RUNNING, STOPPING, STOPPED, FAILED};
42  
43      /**
44       * Get a State from an int index
45       *
46       * @param index int index of the state
47       * @return The State instance or null if no such State.
48       */
49      public static State fromInt(int index) {
50          if (index < 0 || index >= fromInt.length) {
51              return null;
52          }
53          return fromInt[index];
54      }
55  
56      /**
57       * Get a State from an Integer index
58       *
59       * @param index Integer index of the state
60       * @return The State instance or null if no such State.
61       */
62      public static State fromInteger(Integer index) {
63          return fromInt(index.intValue());
64      }
65  
66      public static String toString(int state) {
67          if (state < 0 || state >= fromInt.length) {
68              throw new IllegalArgumentException("State must be between 0 and " + fromInt.length);
69          }
70          return fromInt[state].name;
71      }
72  
73      /**
74       * The user readable name of this state from the J2EE Management specification
75       */
76      private final String name;
77  
78      /**
79       * The state index from the J2EE Management specification
80       */
81      private final int index;
82  
83      /**
84       * Type value to be broadcasted on entering this state.
85       */
86      private final String eventTypeValue;
87  
88      private State(String name, int index, String anEventTypeValue) {
89          this.name = name;
90          this.index = index;
91          eventTypeValue = anEventTypeValue;
92      }
93  
94      /**
95       * Gets the integer value of this state as specified in the J2EE Management specification
96       */
97      public int toInt() {
98          return index;
99      }
100 
101     /**
102      * Gets the event type that should be send after changeing to this state.
103      *
104      * @return the event type that should be sent after a transistion to this state
105      */
106     public String getEventTypeValue() {
107         return eventTypeValue;
108     }
109 
110     public String getName() {
111         return name;
112     }
113 
114     public boolean isRunning() {
115         return this == State.RUNNING;
116     }
117 
118     public boolean isStopped() {
119         return this == State.STOPPED;
120     }
121 
122     public boolean isFailed() {
123         return this == State.FAILED;
124     }
125 
126     public String toString() {
127         return name;
128     }
129 
130     private Object readResolve() {
131         return fromInt[index];
132     }
133 }