001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.planning.plugin.legacy;
028:
029: import org.cougaar.core.component.Component;
030: import org.cougaar.util.StateModelException;
031:
032: /**
033: * implement the standard state model
034: *
035: **/
036: public abstract class StateModelAdapter implements PluginStateModel,
037: Component {
038:
039: /** current reflection of Plugin run state **/
040: private int runState = UNINITIALIZED;
041:
042: /** Plugin State model accessor.
043: **/
044: public final int getModelState() {
045: return runState;
046: }
047:
048: /** simple initialize method.
049: * Transits the state to UNLOADED.
050: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
051: **/
052: public synchronized void initialize() throws StateModelException {
053: transitState("initialize()", UNINITIALIZED, UNLOADED);
054: }
055:
056: /** Notice which Agent we are.
057: * also transit to LOADED.
058: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
059: **/
060: public synchronized void load(Object obj)
061: throws StateModelException {
062: transitState("load()", UNLOADED, LOADED);
063: }
064:
065: /** This version of start just transits to ACTIVE.
066: * Daemon subclasses may want to start threads here.
067: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
068: **/
069: public synchronized void start() throws StateModelException {
070: transitState("start()", LOADED, ACTIVE);
071: }
072:
073: /**
074: *Just change the state to IDLE.
075: ** @exception org.cougaar.util.StateModelException Cannot transition to new state.
076: **/
077: public synchronized void suspend() throws StateModelException {
078: transitState("suspend()", ACTIVE, IDLE);
079: }
080:
081: /**
082: * Transit from IDLE to ACTIVE .
083: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
084: **/
085: public synchronized void resume() throws StateModelException {
086: transitState("resume()", IDLE, ACTIVE);
087: }
088:
089: /**
090: * Transit from IDLE to LOADED.
091: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
092: **/
093: public synchronized void stop() throws StateModelException {
094: transitState("stop()", IDLE, LOADED);
095: }
096:
097: /** Transit from ACTIVE to LOADED.
098: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
099: **/
100: public synchronized void halt() throws StateModelException {
101: transitState("halt()", ACTIVE, LOADED);
102: }
103:
104: /** Transit from LOADED to UNLOADED.
105: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
106: **/
107: public synchronized void unload() throws StateModelException {
108: transitState("unload()", LOADED, UNLOADED);
109: }
110:
111: /** Accomplish the state transition.
112: * Be careful and complain if we are in an inappropriate starting state.
113: * @exception org.cougaar.util.StateModelException If Cannot transition to new state.
114: **/
115: private synchronized void transitState(String op,
116: int expectedState, int endState) throws StateModelException {
117: if (runState != expectedState) {
118: throw new StateModelException("" + this + "." + op
119: + " called in inappropriate state (" + runState
120: + ")");
121: } else {
122: runState = endState;
123: }
124: }
125:
126: }
|