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.mlm.plugin.organization;
028:
029: import java.util.Collection;
030: import java.util.Enumeration;
031: import java.util.Iterator;
032:
033: import org.cougaar.core.blackboard.IncrementalSubscription;
034: import org.cougaar.mlm.plugin.RandomButtonPusher;
035: import org.cougaar.mlm.plugin.UICoordinator;
036: import org.cougaar.planning.ldm.plan.Task;
037: import org.cougaar.util.UnaryPredicate;
038:
039: /**
040: * The GSLRescindPlugin will rescind the ?? task
041: *
042: */
043:
044: public class GLSRescindPlugin extends GLSGUIBasePlugin {
045: private static final String MIN_SLEEP_PROP = "org.cougaar.mlm.plugin.organization.GLSRescindPlugin.minSleepTime";
046: private static final int MIN_SLEEP_DFLT = 60000;
047: private static final String MAX_SLEEP_PROP = "org.cougaar.mlm.plugin.organization.GLSRescindPlugin.maxSleepTime";
048: private static final int MAX_SLEEP_DFLT = 180000;
049: private static final String ENABLED_PROP = "org.cougaar.mlm.plugin.organization.GLSRescindPlugin.enabled";
050: private static final String ENABLED_DFLT = "false";
051: private static final String HIDDEN_PROP = "org.cougaar.mlm.plugin.organization.GLSRescindPlugin.hidden";
052: private static final String HIDDEN_DFLT = "true";
053: private IncrementalSubscription myPrivateStateSubscription;
054: private MyPrivateState myPrivateState = null;
055: private IncrementalSubscription rescindGLSRootSubscription;
056:
057: private static UnaryPredicate rescindGLSRootPredicate = new UnaryPredicate() {
058: public boolean execute(Object o) {
059: if (o instanceof java.lang.String)
060: return ((o.toString())
061: .equalsIgnoreCase("rescindGLSRoot"));
062: return false;
063: }
064: };
065:
066: private static class MyPrivateState extends RandomButtonPusher {
067: boolean hidden;
068:
069: MyPrivateState() {
070: super (Integer.getInteger(MIN_SLEEP_PROP, MIN_SLEEP_DFLT)
071: .intValue(), Integer.getInteger(MAX_SLEEP_PROP,
072: MAX_SLEEP_DFLT).intValue(), "true"
073: .equalsIgnoreCase(System.getProperty(ENABLED_PROP,
074: ENABLED_DFLT)));
075: hidden = "true".equalsIgnoreCase(System.getProperty(
076: HIDDEN_PROP, HIDDEN_DFLT));
077: }
078:
079: public boolean isHidden() {
080: return hidden;
081: }
082: }
083:
084: public void rescindPSP(OplanWrapper wrapper) {
085: if (wrapper.tasks.isEmpty())
086: return;
087: for (Iterator i = wrapper.tasks.iterator(); i.hasNext();) {
088: Task t = (Task) i.next();
089: publishRemove(t);
090: System.out.println("\n"
091: + formatDate(System.currentTimeMillis())
092: + " Rescinded Task: " + t);
093: }
094: }
095:
096: public void buttonPushed(OplanWrapper wrapper) {
097: if (wrapper.tasks.isEmpty())
098: return;
099:
100: openTransaction();
101: for (Iterator i = wrapper.tasks.iterator(); i.hasNext();) {
102: Task t = (Task) i.next();
103: publishRemove(t);
104: System.out.println("\n"
105: + formatDate(System.currentTimeMillis())
106: + " Rescinded Task: " + t);
107: }
108: closeTransactionDontReset();
109: }
110:
111: protected boolean isPrivateStateOk() {
112: return myPrivateState != null;
113: }
114:
115: protected String getGLSLabelText(int nTasks) {
116: if (nTasks > 0) {
117: return nTasks + " task" + ((nTasks == 1) ? "" : "s")
118: + " to rescind";
119: } else {
120: return "No tasks to rescind";
121: }
122: }
123:
124: protected String getButtonText() {
125: return "Rescind GLS Root";
126: }
127:
128: protected String getGUITitle() {
129: return "GLSRescindPlugin";
130: }
131:
132: protected void createSubscriptions() {
133: myPrivateStateSubscription = RandomButtonPusher.subscribe(
134: getDelegate(), MyPrivateState.class);
135: rescindGLSRootSubscription = (IncrementalSubscription) getBlackboardService()
136: .subscribe(rescindGLSRootPredicate);
137: }
138:
139: public void rescindThePSP() {
140: OplanWrapper wrapper = (OplanWrapper) oplanCombo
141: .getSelectedItem();
142: if (wrapper != null)
143: rescindPSP(wrapper);
144: }
145:
146: protected void additionalExecute() {
147: Collection rescindIt = rescindGLSRootSubscription
148: .getAddedCollection();
149: if (rescindIt != null && rescindIt.size() > 0) {
150: for (Iterator iterator = rescindIt.iterator(); iterator
151: .hasNext();) {
152: Object object = iterator.next();
153: getBlackboardService().publishRemove(object);
154: }
155: rescindThePSP();
156: }
157: }
158:
159: protected void restorePrivateState() {
160: handlePrivateState(myPrivateStateSubscription.elements());
161: }
162:
163: protected void createPrivateState() {
164: publishAdd(new MyPrivateState()); // Prime the pump
165: }
166:
167: protected void handlePrivateState() {
168: if (myPrivateStateSubscription.hasChanged()) {
169: handlePrivateState(myPrivateStateSubscription
170: .getAddedList());
171: }
172: }
173:
174: private void handlePrivateState(Enumeration e) {
175: if (myPrivateState == null && e.hasMoreElements()) {
176: myPrivateState = (MyPrivateState) e.nextElement();
177: if (!myPrivateState.isHidden()) {
178: UICoordinator.layoutSecondRow(panel, myPrivateState
179: .init("Random Rescind", getDelegate(),
180: glsButton));
181: }
182: checkButtonEnable();
183: }
184: }
185: }
|