Ptidej-v5.2-master/POM Tests/data/ArgoUML_0.28/src/org/argouml/model/ActivityGraphsHelper.java
// $Id: ActivityGraphsHelper.java 12665 2007-05-26 17:40:24Z bobtarling $
// Copyright (c) 2005-2007 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
// software and its documentation without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph appear in all copies. This software program and
// documentation are copyrighted by The Regents of the University of
// California. The software program and documentation are supplied "AS
// IS", without any accompanying services from The Regents. The Regents
// does not warrant that the operation of the program will be
// uninterrupted or error-free. The end-user understands that the program
// was developed for research purposes and is advised not to rely
// exclusively on the program for any reason. IN NO EVENT SHALL THE
// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

package org.argouml.model;

import java.util.Collection;

/**
 * The interface for the helper for ActivityGraphs.<p>
 *
 * Created from the old ActivityGraphsHelper.
 */
public interface ActivityGraphsHelper {
    /**
     * Finds the Classifier to which a given ObjectFlowState
     * refers by its given name. This function may be used for when the user
     * types the name of a classifier in the diagram, in an ObjectFlowState.
     *
     * @author MVW
     * @param ofs the given ObjectFlowState
     * @param s   the given String that represents
     *            the name of the "type" Classifier
     * @return    the found classifier or null
     */
    Object findClassifierByName(Object ofs, String s);

    /**
     * Find a state of a Classifier by its name.
     * This routine is used to make the connection between
     * a ClassifierInState and its State.
     *
     * @author mvw
     * @param c the Classifier. If this is not a Classifier, then
     *          IllegalArgumentException is thrown.
     * @param s the string that represents the name of
     *          the state we are looking for. If "" or null, then
     *          null is returned straight away.
     * @return  the State (as Object) or null, if not found.
     */
    Object findStateByName(Object c, String s);

    /**
     * Returns true if an activitygraph may be added to the given
     * context. To decouple ArgoUML as much as possible from the
     * model implementation, the parameter of the method is of
     * type Object.<p>
     *
     * An ActivityGraph specifies the dynamics of<ol>
     * <li> a Package, or
     * <li> a Classifier (including UseCase), or
     * <li> a BehavioralFeature.
     * </ol>
     *
     * @param context the given context
     * @return boolean true if an activitygraph may be added
     */
    boolean isAddingActivityGraphAllowed(Object context);

    /**
     * @author mvw
     * @param classifierInState the classifierInState
     * @param state the state that will be linked
     */
    void addInState(Object classifierInState, Object state);
    
    
    /**
     * Replace the complete collection of states by the given new one. 
     * This function only modifies the model for added or removed states.
     * 
     * @param classifierInState the ClassifierInState to be altered
     * @param newStates the collection of states
     */
    void setInStates(Object classifierInState, Collection newStates);
    
    /**
     * Replace the complete collection of the partition contents 
     * by the given new one. 
     * This function only modifies the model for added or removed modelelements.
     * 
     * @param partition the partition to be altered
     * @param newContents the new contents of the partition (modelelements)
     */
    void setContents(Object partition, Collection newContents);
    
    /**
     * Add a model element to a partition
     * @param partition the partition to contain the model element
     * @param modeElement the model element to place in the partition
     */
    void addContent(Object partition, Object modeElement);
    
    /**
     * Remove a model element from a partition
     * @param partition the partition currently containing the model element
     * @param modeElement the model element to be removed from the partition
     */
    void removeContent(Object partition, Object modeElement);

    /**
     * Set the isSynch attribute of an ObjectFlowState.
     * 
     * @param objectFlowState
     *            the element for which to set the attribute
     * @param isSynch
     *            true if this ObjectFlowState is a synch state.
     */
    void setSynch(Object objectFlowState, boolean isSynch);

    /**
     * Add a Parameter to an ObjectFlowState.
     * 
     * @param objectFlowState
     *            the ObjectFlowState
     * @param parameter
     *            the Parameter
     */
    void addParameter(Object objectFlowState, Object parameter);

    /**
     * Remove Parameter from an ObjectFlowState.
     * 
     * @param objectFlowState
     *            the ObjectFlowState
     * @param parameter
     *            the Parameter to remove
     */
    void removeParameter(Object objectFlowState, Object parameter);

    /**
     * @param objectFlowState
     *            the ObjectFlowState.
     * @param parameters
     *            the collection of Parameters. Pass
     *            {@link java.util.Collections#EMPTY_SET} if there are no
     *            Parameters.
     */
    void setParameters(Object objectFlowState, Collection parameters);
}
