/* $Id: ExtensionMechanismsHelper.java 17747 2010-01-10 21:16:51Z linus $
*******************************************************************************
* Copyright (c) 2009 Contributors - see below
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* thn
*******************************************************************************
*
* Some portions of this file was previously release using the BSD License:
*/
// Copyright (c) 2005-2008 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 of the ExtensionMechanisms.
*/
public interface ExtensionMechanismsHelper {
/**
* Returns all stereotypes in a given namespace,
* and all those in any sub-namespace of the given namespace.
*
* @param ns is the namespace.
* @return a Collection with the stereotypes.
*/
Collection getStereotypes(Object ns);
/**
* Finds a stereotype in a given namespace,
* and all those in any sub-namespace of the given namespace.
* Returns null if no such stereotype is found.
* <p>
* TODO: What if stereo.getName() or stereo.getBaseClass() is null?
* Then you know immediately that none will be found, but is that the
* correct answer?
* Currently, null is returned in these cases. <p>
*
* TODO: This function should not take a stereotype object as parameter,
* but a name and a baseclass. <p>
* TODO: Currently only works for stereotypes with only one baseclass. <p>
* TODO: Currently only works for stereotypes where the baseclass is
* equal to the given one - inheritance does not work.
*
* @return the stereotype found or null.
* @param ns is the namespace.
* @param stereo is the stereotype.
*/
Object getStereotype(Object ns, Object stereo);
/**
* Searches for a stereotype just like the given stereotype in all
* given models (and their sub-namespaces).
* The given stereotype can not have its namespace set yet;
* otherwise it will be returned itself!
*
* TODO: This function should not take a stereotype object as parameter,
* but a name and a baseclass. <p>
* TODO: Currently only works for stereotypes with only one baseclass. <p>
* TODO: Should it only search for stereotypes owned by the Model object?
*
* @param models a collection of models
* @param stereo is the given stereotype
* @return Stereotype
*/
Object getStereotype(Collection models, Object stereo);
/**
* @param m the ModelElement
* @return the name of the metatype (i.e UML type) of this Element
* @deprecated for 0.27.3 by tfmorris. Use {@link MetaTypes#getName(Object)}
*/
@Deprecated
String getMetaModelName(Object m);
/**
* Returns all possible stereotypes for some
* modelelement. Possible stereotypes are those stereotypes that
* are owned by the same namespace the modelelement is owned by
* and that have a baseclass that is the same as the
* metamodelelement name of the modelelement.
*
* @param modelElement is the model element
* @param models the models to search in
* @return Collection
*/
Collection getAllPossibleStereotypes(Collection models,
Object modelElement);
/**
* Returns <code>true</code> if the given stereotype has a baseclass that
* equals the baseclass of the given ModelElement or one of the superclasses
* of the given ModelElement.
*
* @param theModelElement
* is the model element
* @param theStereotype
* is the stereotype
* @return boolean
*/
boolean isValidStereotype(Object theModelElement, Object theStereotype);
/**
* Get all stereotypes from all Models in the list. <p>
*
* Finds also all stereotypes owned by any sub-namespaces of the Model.
*
* @return the collection of stereotypes in all models
* in the current project
* @param models the models to search
*/
Collection getStereotypes(Collection models);
/**
* Sets the stereotype of some modelelement. The method also
* copies a stereotype that is not a part of the current model to
* the current model.<p>
*
* @param modelElement is the model element
* @param stereotype is the stereotype
*/
void addCopyStereotype(Object modelElement, Object stereotype);
/**
* Tests if a stereotype has a given name and given base class.
* While comparing the baseclass, inheritance is not considered.
*
* @param object is the stereotype.
* @param name is the name of the stereotype.
* @param base is a string representing the base class of the stereotype.
* @return true if object is a stereotype with the desired characteristics.
*/
boolean isStereotype(Object object, String name, String base);
/**
* Tests if a stereotype is or inherits from a stereotype with some
* name and base class.
*
* @param object is the stereotype.
* @param name is the name of the stereotype.
* @param base is the base class of the stereotype.
* @return true if object is a (descendant of a) stereotype with the
* desired characteristics.
*/
boolean isStereotypeInh(Object object, String name, String base);
/**
* Add an extended element to a stereotype.
*
* @param handle Stereotype
* @param extendedElement ExtensionPoint
*/
void addExtendedElement(Object handle, Object extendedElement);
/**
* Add a baseclass to some stereotype.
*
* @param handle the stereotype
* @param baseClass the baseclass to add
*/
void addBaseClass(Object handle, Object baseClass);
/**
* Remove baseclass from some stereotype.
*
* @param handle the stereotype
* @param baseClass the baseclass to remove
*/
void removeBaseClass(Object handle, Object baseClass);
/**
* Set the icon for a stereotype.
*
* @param handle Stereotype
* @param icon String
*/
void setIcon(Object handle, Object icon);
/**
* Set the tagType of a TaggedDefinition. This controls the range of legal
* values for the associated TaggedValues.
*
* @param handle the taggedValue
* @param tagType A string containing the name of the type for values that
* may be assigned to this tag. This can either be the name
* of a datatype (e.g. "String", "Integer" or "Boolean") or
* the name of a metaclass for more complex types of tagged
* values.
*/
void setTagType(Object handle, String tagType);
/**
* Set the type of a taggedvalue.
*
* @param handle the taggedValue
* @param type the tagDefinition
*/
void setType(Object handle, Object type);
/**
* Sets the dataValues of the given TaggedValue to a single String value.
* Provided for backward compatibility with UML 1.3. new uses should use
* setDataValues.
*
* @param handle
* is the tagged value
* @param value
* is the value
* @deprecated for 0.25.5 by tfmorris. Use
* {@link #setDataValues(Object, String[])}.
*/
@Deprecated
void setValueOfTag(Object handle, String value);
/**
* Sets the dataValues of the given TaggedValue.
*
* @param handle is the tagged value
* @param values an array of String values
*/
void setDataValues(Object handle, String[] values);
//additional support for tagged values
/**
* Add a tagged value.
*
* @param handle The model element to add to.
* @param taggedValue The tagged value to add.
*/
void addTaggedValue(Object handle, Object taggedValue);
/**
* Apply a profile to a model or another profile.
*
* @param handle The model or profile.
* @param profile The to be applied profile.
*/
public void applyProfile(Object handle, Object profile);
/**
* Remove a tagged value.
*
* @param handle The model element to remove from.
* @param taggedValue The tagged value to remove.
*/
void removeTaggedValue(Object handle, Object taggedValue);
/**
* Set the list of tagged values for a model element.
*
* @param handle The model element to set for.
* @param taggedValues A Collection of tagged values.
*/
void setTaggedValue(Object handle, Collection taggedValues);
/**
* Unapply a profile to a model or another profile.
*
* @param handle The model or profile.
* @param profile The to be unapplied profile.
*/
public void unapplyProfile(Object handle, Object profile);
/**
* Returns <code>true</code> if the given ModelElement has a Stereotype
* with the given name.
*
* @param element the given ModelElement
* @param name the given name
* @return true if there is such a stereotype
*/
boolean hasStereotype(Object element, String name);
/**
* Make a profile applicable. Usually a profile edited in a UML design
* environment like ArgoUML is not directly applicable, but needs to be
* shifted to the metamodel level, so that it can serve as an extension
* to the UML metamodel.
*
* @param handle the profile before made applicable to a model
* @return the profile made applicable to a model
*/
Object makeProfileApplicable(Object handle);
}