/* $Id: ExtensionMechanismsFactory.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:
* tfmorris
*******************************************************************************
*
* Some portions of this file was previously release using the BSD License:
*/
// 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 factory for ExstensionMechanisms.
*/
public interface ExtensionMechanismsFactory extends Factory {
/**
* Create an empty but initialized instance of a UML Stereotype.
*
* @return an initialized UML Stereotype instance.
*/
//Object createStereotype();
/**
* Create an empty but initialized instance of a UML TaggedValue.
*
* @return an initialized UML TaggedValue instance.
*/
Object createTaggedValue();
/**
* Build a stereotype which has the given name and a base class which
* matches the type of the given model element.
* <p>
* <em>NOTE:</em> Most users will want to find and use an existing
* stereotype, often from a profile, so uses of this method should be rare.
*
* @param theModelElementObject a Model Element that the stereotype
* will be applied to. The stereotype will
* have its BaseClass set to an appropriate
* value for this kind of Model Elements.
* @param theName the name for the stereotype
* @param theNamespaceObject the namespace the stereotype will be
* created within.
* @return the resulting stereotype object
* @throws IllegalArgumentException if either argument is null.
*/
// TODO: MVW: This needs rethinking/rework! I have the following questions:
// Why does it not search for a stereotype in the namespace using
// properties and only create a new stereotype if it will actually be used?
// Ie, why is there not a getStereotype(String name, String baseClass)?
// (edited by d00mst)
Object buildStereotype(Object theModelElementObject,
Object theName,
Object theNamespaceObject);
/**
* Builds an initialized stereotype.
*
* @param theModelElementObject the baseclass for the new stereotype
* @param theName the name for the new stereotype
* @param model the current model of interest
* @param models all the models
* @return the new stereotype
*/
Object buildStereotype(Object theModelElementObject, String theName,
Object model, Collection models);
/**
* Builds an initialized stereotype.
*
* @param text is the name of the stereotype
* @param ns namespace where the stereotype lives (is known)
* @return an initialized stereotype.
*/
Object buildStereotype(String text, Object ns);
/**
* Build an initialized instance of a UML TaggedValue.
*
* @param tag is the tag name (a String).
* @param value a String to use as the dataValue
* @return an initialized UML TaggedValue instance.
* @deprecated for 0.25.5 by tfmorris. Use
* {@link #buildTaggedValue(Object, String[])}.
*/
@Deprecated
Object buildTaggedValue(String tag, String value);
/**
* Build an initialized instance of a UML TaggedValue.
*
* @param type TagDefinition which defines the type of the TaggedValue
* @param values is an array of Strings to be used as the dataValues.
* @return an initialized UML TaggedValue instance.
*/
Object buildTaggedValue(Object type, String[] values);
/**
* Copy tagged value collection from one model element to another. New
* copies are created of the tagged values themselves and of the dataValues
* they contain, but not of the referenced type or reference values.
*
* @param source
* ModelElement to copy from
* @param target
* ModelElement to copy to
*/
public void copyTaggedValues(Object source, Object target);
/**
* Copies a stereotype.
*
* @param source is the stereotype to copy.
* @param ns is the namespace to put the copy in.
* @return a newly created stereotype
*/
Object copyStereotype(Object source, Object ns);
/**
* Build an initialized instance of a TagDefinition with the default tagType
* of "String". Only one of the two parameters <code>stereotype</code> and
* <code>namespace</code> may be specified.
*
* @param name
* is the name of the TagDefinition
* @param stereotype
* is the optional stereotype owning the TagDefinition
* @param namespace
* is the namespace to put the TagDefinition.
* @return a newly created TagDefinition.
*/
Object buildTagDefinition(String name, Object stereotype,
Object namespace);
/**
* Build an initialized instance of a TagDefinition. Only one of the two
* parameters <code>stereotype</code> and <code>namespace</code> may be
* specified.
*
* @param name
* is the name of the TagDefinition
* @param stereotype
* is the optional stereotype owning the TagDefinition
* @param namespace
* is the namespace to put the TagDefinition.
* @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.
* @return a newly created TagDefinition.
*/
Object buildTagDefinition(String name, Object stereotype, Object namespace,
String tagType);
/**
* Create a TagDefinition.
*
* @return a TagDefinition
*/
Object createTagDefinition();
/**
* Create an empty Stereotype element.
*
* @return a Stereotype
*/
Object createStereotype();
/**
* Copy a TagDefinition into the given namespace or stereotype.
*
* @param aTd The TagDefinition to copy
* @param aNs A Namespace or a stereotype into which place the copy
* @return A copy of the tagdefinition
*/
Object copyTagDefinition(Object aTd, Object aNs);
}