|
What this is
Other links
The source code// $Id: UmlHelper.java,v 1.20 2004/08/08 12:43:09 mvw Exp $ // Copyright (c) 1996-2004 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.uml; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collection; import java.util.Iterator; import org.apache.log4j.Logger; import org.argouml.model.uml.behavioralelements.activitygraphs.ActivityGraphsHelper; import org.argouml.model.uml.behavioralelements.collaborations.CollaborationsHelper; import org.argouml.model.uml.behavioralelements.commonbehavior.CommonBehaviorHelper; import org.argouml.model.uml.behavioralelements.statemachines.StateMachinesHelper; import org.argouml.model.uml.behavioralelements.usecases.UseCasesHelper; import org.argouml.model.uml.foundation.core.CoreHelper; import org.argouml.model.uml.foundation.datatypes.DataTypesHelper; import org.argouml.model.uml.foundation.extensionmechanisms.ExtensionMechanismsHelper; import org.argouml.model.uml.modelmanagement.ModelManagementHelper; import org.argouml.model.ModelFacade; import org.argouml.uml.diagram.static_structure.ui.CommentEdge; import ru.novosoft.uml.MBase; /** * Helper class for UML metamodel. * * @since ARGO0.11.2 * @author Thierry Lach * @stereotype singleton */ public class UmlHelper { private static final Logger LOG = Logger.getLogger(UmlHelper.class); /** Singleton instance. */ private static UmlHelper singleton = new UmlHelper(); /** Don't allow instantiation. */ private UmlHelper() { } /** * Ensures that all of the elements in a model are registered * to the UmlModelListener. This is useful when the MModel is * not created by the UmlFactory. * * @param model the UML model */ public void addListenersToModel(Object model) { if (!ModelFacade.isAModel(model)) throw new IllegalArgumentException(); addListenersToMBase(model); } /** * Internal recursive worker to add UmlModelListener. * * @param mbase the element to add listeners to */ protected void addListenersToMBase(Object mbase) { if (!ModelFacade.isABase(mbase)) throw new IllegalArgumentException(); UmlFactory.getFactory().addListenersToModelElement(mbase); Collection elements = ((MBase) mbase).getModelElementContents(); if (elements != null) { Iterator iterator = elements.iterator(); while (iterator.hasNext()) { Object o = iterator.next(); if (o instanceof MBase) { addListenersToMBase(o); } } } } /** Singleton instance access method. * * @return the singleton */ public static UmlHelper getHelper() { return singleton; } /** Returns the package helper for the UML * package Foundation::ExtensionMechanisms. * * @return the ExtensionMechanisms helper instance. */ public ExtensionMechanismsHelper getExtensionMechanisms() { return ExtensionMechanismsHelper.getHelper(); } /** Returns the package helper for the UML * package Foundation::DataTypes. * * @return the DataTypes helper instance. */ public DataTypesHelper getDataTypes() { return DataTypesHelper.getHelper(); } /** Returns the package helper for the UML * package Foundation::Core. * * @return the Core helper instance. */ public CoreHelper getCore() { return CoreHelper.getHelper(); } /** Returns the package helper for the UML * package BehavioralElements::CommonBehavior. * * @return the CommonBehavior helper instance. */ public CommonBehaviorHelper getCommonBehavior() { return CommonBehaviorHelper.getHelper(); } /** Returns the package helper for the UML * package BehavioralElements::UseCases. * * @return the UseCases helper instance. */ public UseCasesHelper getUseCases() { return UseCasesHelper.getHelper(); } /** Returns the package helper for the UML * package BehavioralElements::StateMachines. * * @return the StateMachines helper instance. */ public StateMachinesHelper getStateMachines() { return StateMachinesHelper.getHelper(); } /** Returns the package helper for the UML * package BehavioralElements::Collaborations. * * @return the Collaborations helper instance. */ public CollaborationsHelper getCollaborations() { return CollaborationsHelper.getHelper(); } /** Returns the package helper for the UML * package BehavioralElements::ActivityGraphs. * * @return the ActivityGraphs helper instance. */ public ActivityGraphsHelper getActivityGraphs() { return ActivityGraphsHelper.getHelper(); } /** Returns the package helper for the UML * package ModelManagement. * * @return the ModelManagement helper instance. */ public ModelManagementHelper getModelManagement() { return ModelManagementHelper.getHelper(); } /** * Returns the correct helper on basis of the package of base * @param base the modelelement * @return Object the helper */ public Object getHelper(Object base) { if (base instanceof MBase) { String name = base.getClass().getName(); name = name.substring(0, name.lastIndexOf('.')); name = name.substring(name.lastIndexOf('.') + 1, name.length()); Method[] methods = this.getClass().getMethods(); for (int i = 0; i < methods.length; i++) { String methodname = methods[i].getName(); if (methodname.toLowerCase().indexOf(name) >= 0) { try { return methods[i].invoke(this, new Object[] {}); } catch (IllegalAccessException e) { LOG.warn(e); } catch (InvocationTargetException e) { LOG.warn(e); } } } } return null; } /** * Returns the owner of some modelelement object. In most cases this will be * the owning namespace but in some cases it will be null (the root model) * or for instance the owning class with an attribute. * @param handle the modelelement * @return Object the owner */ public Object getOwner(Object handle) { if (handle instanceof MBase) { return ((MBase) handle).getModelElementContainer(); } return null; } /** * Utility method to quickly delete a collection of modelelements. This * method should only be called from within the model component. The only * reason it is public is that the other helpers/factories are in other * packages and therefore cannot see this method if it is not public. * @param col a collection of modelelements */ public void deleteCollection(Collection col) { Iterator it = col.iterator(); while (it.hasNext()) { UmlFactory.getFactory().delete(it.next()); } } /** * Returns the source of some relationship. * This is the element in binary relations from which a relation 'departs'. * @param relationShip the relationship to be tested * @return the source of the relationship */ public Object getSource(Object relationShip) { if (relationShip == null) { throw new IllegalArgumentException("Argument relationship is null"); } if (!(ModelFacade.isAModelElement(relationShip) || relationShip instanceof CommentEdge)) { throw new IllegalArgumentException("Argument relationship of class " + relationShip.getClass().toString() + " is not a valid relationship"); } if (relationShip instanceof CommentEdge) { return ((CommentEdge) relationShip).getSource(); } if (ModelFacade.isARelationship(relationShip)) { // handles all children of relationship including extend and // include which are not members of core return CoreHelper.getHelper().getSource(relationShip); } if (ModelFacade.isATransition(relationShip)) { return StateMachinesHelper.getHelper().getSource(relationShip); } return null; } /** * Returns the destination of some relationship. * This is the element in binary relations at which a relation 'arrives'. * @param relationShip the relationship to be tested * @return the destination of the relationship */ public Object getDestination(Object relationShip) { if (relationShip == null) { throw new IllegalArgumentException("Argument relationship is null"); } if (!(ModelFacade.isAModelElement(relationShip) || relationShip instanceof CommentEdge)) { throw new IllegalArgumentException("Argument relationship of class " + relationShip.getClass().toString() + " is not a valid relationship"); } if (relationShip instanceof CommentEdge) { return ((CommentEdge) relationShip).getDestination(); } if (ModelFacade.isARelationship(relationShip)) { // handles all children of relationship including extend and // include which are not members of core return CoreHelper.getHelper().getDestination(relationShip); } if (ModelFacade.isATransition(relationShip)) { return StateMachinesHelper.getHelper().getDestination(relationShip); } return null; } } |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.