001: /*
002: * <copyright>
003: *
004: * Copyright 2000-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: package org.cougaar.tools.csmart.society;
027:
028: import org.cougaar.tools.csmart.core.property.ModifiableComponent;
029:
030: import java.io.FileFilter;
031: import java.net.URL;
032:
033: /**
034: * The interface for adding and removing nodes from a society.
035: */
036: public interface SocietyComponent extends ModifiableComponent {
037:
038: void setName(String newName);
039:
040: /**
041: * Get the name of the society.
042: * @return the name of the society
043: */
044: String getSocietyName();
045:
046: /**
047: * Get the agents, both assigned and unassigned.
048: * @return array of agent components
049: */
050: AgentComponent[] getAgents();
051:
052: /**
053: * Returns the description of this society
054: *
055: * @return an <code>URL</code> value
056: */
057: URL getDescription();
058:
059: /**
060: * Set by the experiment controller to indicate that the
061: * society is running.
062: * The society is running from the moment that any node
063: * is successfully created
064: * (via the app-server's "create" method)
065: * until all nodes are terminated (aborted, self terminated, or
066: * manually terminated).
067: * @param isRunning flag indicating whether or not the society is running
068: */
069: void setRunning(boolean isRunning);
070:
071: /**
072: * Returns whether or not the society is running,
073: * i.e. can be dynamically monitored.
074: * Running societies are not editable, but they can be copied,
075: * and the copy can be edited.
076: * @return true if society is running and false otherwise
077: */
078: boolean isRunning();
079:
080: /**
081: * Return a file filter which can be used to fetch
082: * the metrics files for this experiment.
083: * @return <code>FileFilter</code> to get metrics files for this experiment
084: */
085: FileFilter getResultFileFilter();
086:
087: /**
088: * Return a file filter which can be used to delete
089: * the files generated by this experiment.
090: * @return <code>FileFilter</code> for cleanup
091: */
092: FileFilter getCleanupFileFilter();
093:
094: /**
095: * Returns whether the society is self terminating or must
096: * be manually terminated.
097: * Self terminating nodes cause the app-server to send back
098: * a "process-destroyed" message when the node terminates.
099: * @return true if society is self terminating
100: */
101: boolean isSelfTerminating();
102:
103: /**
104: * Save this society to the database. Only to be used
105: * after creating a new society. Not to be used from DB societies
106: * which are already in the database.
107: *
108: * @return a <code>boolean</code>, false on error
109: */
110: boolean saveToDatabase();
111:
112: /**
113: * Copy this Society and save the copy to the database, under
114: * the given new name. If the save fails, the new society
115: * will be marked modified when this method returns
116: *
117: * @param name a <code>String</code> new society name
118: * @return a <code>ModifiableComponent</code> new society
119: */
120: ModifiableComponent copyAndSave(String name);
121:
122: // /**
123: // * Set the assembly id for this Society.
124: // * @param assemblyId the assembly id for this Society
125: // */
126: // void setAssemblyId(String assemblyId);
127:
128: /**
129: * Get the assembly id for this Society.
130: * @return a <code>String</code> which is the assembly id for this Society
131: */
132: String getAssemblyId();
133:
134: /**
135: * Has this society been modified, such that a save would do something.
136: *
137: * @return a <code>boolean</code>, false if no save necessary
138: */
139: boolean isModified();
140: }
|