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: */package org.apache.geronimo.kernel.management;
017:
018: import java.io.Serializable;
019:
020: /**
021: * This class contains a type safe enumeration of the states from the J2EE Management specification.
022: *
023: * @version $Rev: 476049 $ $Date: 2006-11-16 20:35:17 -0800 (Thu, 16 Nov 2006) $
024: */
025: public final class State implements Serializable {
026: public static final int STARTING_INDEX = 0;
027: public static final int RUNNING_INDEX = 1;
028: public static final int STOPPING_INDEX = 2;
029: public static final int STOPPED_INDEX = 3;
030: public static final int FAILED_INDEX = 4;
031:
032: public static final State STARTING = new State("starting",
033: STARTING_INDEX, NotificationType.STATE_STARTING);
034: public static final State RUNNING = new State("running",
035: RUNNING_INDEX, NotificationType.STATE_RUNNING);
036: public static final State STOPPING = new State("stopping",
037: STOPPING_INDEX, NotificationType.STATE_STOPPING);
038: public static final State STOPPED = new State("stopped",
039: STOPPED_INDEX, NotificationType.STATE_STOPPED);
040: public static final State FAILED = new State("failed",
041: FAILED_INDEX, NotificationType.STATE_FAILED);
042:
043: private static final State[] fromInt = { STARTING, RUNNING,
044: STOPPING, STOPPED, FAILED };
045:
046: /**
047: * Get a State from an int index
048: *
049: * @param index int index of the state
050: * @return The State instance or null if no such State.
051: */
052: public static State fromInt(int index) {
053: if (index < 0 || index >= fromInt.length) {
054: return null;
055: }
056: return fromInt[index];
057: }
058:
059: /**
060: * Get a State from an Integer index
061: *
062: * @param index Integer index of the state
063: * @return The State instance or null if no such State.
064: */
065: public static State fromInteger(Integer index) {
066: return fromInt(index.intValue());
067: }
068:
069: public static String toString(int state) {
070: if (state < 0 || state >= fromInt.length) {
071: throw new IllegalArgumentException(
072: "State must be between 0 and " + fromInt.length);
073: }
074: return fromInt[state].name;
075: }
076:
077: /**
078: * The user readable name of this state from the J2EE Management specification
079: */
080: private final String name;
081:
082: /**
083: * The state index from the J2EE Management specification
084: */
085: private final int index;
086:
087: /**
088: * Type value to be broadcasted on entering this state.
089: */
090: private final String eventTypeValue;
091:
092: private State(String name, int index, String anEventTypeValue) {
093: this .name = name;
094: this .index = index;
095: eventTypeValue = anEventTypeValue;
096: }
097:
098: /**
099: * Gets the integer value of this state as specified in the J2EE Management specification
100: */
101: public int toInt() {
102: return index;
103: }
104:
105: /**
106: * Gets the event type that should be send after changeing to this state.
107: *
108: * @return the event type that should be sent after a transistion to this state
109: */
110: public String getEventTypeValue() {
111: return eventTypeValue;
112: }
113:
114: public String getName() {
115: return name;
116: }
117:
118: public boolean isRunning() {
119: return this == State.RUNNING;
120: }
121:
122: public boolean isStopped() {
123: return this == State.STOPPED;
124: }
125:
126: public boolean isFailed() {
127: return this == State.FAILED;
128: }
129:
130: public String toString() {
131: return name;
132: }
133:
134: private Object readResolve() {
135: return fromInt[index];
136: }
137: }
|