/* $Id: ElementPropPanelFactory.java 18588 2010-07-28 21:30:25Z bobtarling $
*******************************************************************************
* Copyright (c) 2010 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:
* Michiel van der Wulp - initial implementation
* <see source control change log for other early contributors>
*
*******************************************************************************
*/
// Copyright (c) 2008, 2009 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.uml.ui;
import org.argouml.model.Model;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelActionState;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelActivityGraph;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelCallState;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelClassifierInState;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelObjectFlowState;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelPartition;
import org.argouml.uml.ui.behavior.activity_graphs.PropPanelSubactivityState;
import org.argouml.uml.ui.behavior.collaborations.PropPanelAssociationEndRole;
import org.argouml.uml.ui.behavior.collaborations.PropPanelAssociationRole;
import org.argouml.uml.ui.behavior.collaborations.PropPanelClassifierRole;
import org.argouml.uml.ui.behavior.collaborations.PropPanelCollaboration;
import org.argouml.uml.ui.behavior.collaborations.PropPanelInteraction;
import org.argouml.uml.ui.behavior.collaborations.PropPanelMessage;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelActionSequence;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelArgument;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelCallAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelComponentInstance;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelCreateAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelDestroyAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelException;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelLink;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelLinkEnd;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelNodeInstance;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelObject;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelReception;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelReturnAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelSendAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelSignal;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelStimulus;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelTerminateAction;
import org.argouml.uml.ui.behavior.common_behavior.PropPanelUninterpretedAction;
import org.argouml.uml.ui.behavior.state_machines.PropPanelCallEvent;
import org.argouml.uml.ui.behavior.state_machines.PropPanelChangeEvent;
import org.argouml.uml.ui.behavior.state_machines.PropPanelCompositeState;
import org.argouml.uml.ui.behavior.state_machines.PropPanelFinalState;
import org.argouml.uml.ui.behavior.state_machines.PropPanelGuard;
import org.argouml.uml.ui.behavior.state_machines.PropPanelPseudostate;
import org.argouml.uml.ui.behavior.state_machines.PropPanelSignalEvent;
import org.argouml.uml.ui.behavior.state_machines.PropPanelSimpleState;
import org.argouml.uml.ui.behavior.state_machines.PropPanelStateMachine;
import org.argouml.uml.ui.behavior.state_machines.PropPanelStateVertex;
import org.argouml.uml.ui.behavior.state_machines.PropPanelStubState;
import org.argouml.uml.ui.behavior.state_machines.PropPanelSubmachineState;
import org.argouml.uml.ui.behavior.state_machines.PropPanelSynchState;
import org.argouml.uml.ui.behavior.state_machines.PropPanelTimeEvent;
import org.argouml.uml.ui.behavior.state_machines.PropPanelTransition;
import org.argouml.uml.ui.behavior.use_cases.PropPanelActor;
import org.argouml.uml.ui.behavior.use_cases.PropPanelExtend;
import org.argouml.uml.ui.behavior.use_cases.PropPanelExtensionPoint;
import org.argouml.uml.ui.behavior.use_cases.PropPanelInclude;
import org.argouml.uml.ui.behavior.use_cases.PropPanelUseCase;
import org.argouml.uml.ui.foundation.core.PropPanelAbstraction;
import org.argouml.uml.ui.foundation.core.PropPanelAssociation;
import org.argouml.uml.ui.foundation.core.PropPanelAssociationClass;
import org.argouml.uml.ui.foundation.core.PropPanelAssociationEnd;
import org.argouml.uml.ui.foundation.core.PropPanelAttribute;
import org.argouml.uml.ui.foundation.core.PropPanelClass;
import org.argouml.uml.ui.foundation.core.PropPanelComment;
import org.argouml.uml.ui.foundation.core.PropPanelComponent;
import org.argouml.uml.ui.foundation.core.PropPanelConstraint;
import org.argouml.uml.ui.foundation.core.PropPanelDataType;
import org.argouml.uml.ui.foundation.core.PropPanelDependency;
import org.argouml.uml.ui.foundation.core.PropPanelEnumeration;
import org.argouml.uml.ui.foundation.core.PropPanelEnumerationLiteral;
import org.argouml.uml.ui.foundation.core.PropPanelFlow;
import org.argouml.uml.ui.foundation.core.PropPanelGeneralization;
import org.argouml.uml.ui.foundation.core.PropPanelInterface;
import org.argouml.uml.ui.foundation.core.PropPanelMethod;
import org.argouml.uml.ui.foundation.core.PropPanelNode;
import org.argouml.uml.ui.foundation.core.PropPanelOperation;
import org.argouml.uml.ui.foundation.core.PropPanelParameter;
import org.argouml.uml.ui.foundation.core.PropPanelPermission;
import org.argouml.uml.ui.foundation.core.PropPanelRelationship;
import org.argouml.uml.ui.foundation.core.PropPanelTemplateParameter;
import org.argouml.uml.ui.foundation.core.PropPanelUsage;
import org.argouml.uml.ui.foundation.extension_mechanisms.PropPanelStereotype;
import org.argouml.uml.ui.foundation.extension_mechanisms.PropPanelTagDefinition;
import org.argouml.uml.ui.foundation.extension_mechanisms.PropPanelTaggedValue;
import org.argouml.uml.ui.model_management.PropPanelModel;
import org.argouml.uml.ui.model_management.PropPanelPackage;
import org.argouml.uml.ui.model_management.PropPanelSubsystem;
/**
* This factory creates the right PropPanelModelElement
* for a given UML Element. <p>
*
* Constraint: Every UML element shall have a proppanel.
* We throw an exception if one is not found.
*
* @author Michiel
* @deprecated in 0.31.2 by Bob Tarling This is replaced by the XML property
* panels module
*/
@Deprecated
class ElementPropPanelFactory implements PropPanelFactory {
public PropPanel createPropPanel(Object element) {
// TODO: This all needs to be reviewed for changes in type hierarchy
// for UML 2.x
if (Model.getFacade().isAElement(element)) {
// A Subsytem is a Classifier also, so it needs to come before
// the classifier check
if (Model.getFacade().isASubsystem(element)) {
return new PropPanelSubsystem();
} else if (Model.getFacade().isARelationship(element)) {
return getRelationshipPropPanel(element);
} else if (Model.getFacade().isAStateVertex(element)) {
return getStateVertexPropPanel(element);
} else if (Model.getFacade().isAActionSequence(element)) {
// This is not a subtype of PropPanelAction,
// so it must come first
return new PropPanelActionSequence();
} else if (Model.getFacade().isAAction(element)) {
return getActionPropPanel(element);
/*
* TODO: This needs to be in type hierarchy order to work
* properly and create the most specific property panel
* properly. Everything which has been factored out of this
* method has been reviewed. Anything below this point still
* needs to be reviewed - tfm
*/
} else if (Model.getFacade().isAActivityGraph(element)) {
return new PropPanelActivityGraph();
} else if (Model.getFacade().isAArgument(element)) {
return new PropPanelArgument();
} else if (Model.getFacade().isAAssociationEndRole(element)) {
return new PropPanelAssociationEndRole();
} else if (Model.getFacade().isAAssociationEnd(element)) {
return new PropPanelAssociationEnd();
} else if (Model.getFacade().isAAttribute(element)) {
return new PropPanelAttribute();
} else if (Model.getFacade().isACollaboration(element)) {
return new PropPanelCollaboration();
} else if (Model.getFacade().isAComment(element)) {
return new PropPanelComment();
} else if (Model.getFacade().isAComponentInstance(element)) {
return new PropPanelComponentInstance();
} else if (Model.getFacade().isAConstraint(element)) {
return new PropPanelConstraint();
} else if (Model.getFacade().isAEnumerationLiteral(element)) {
return new PropPanelEnumerationLiteral();
} else if (Model.getFacade().isAExtensionPoint(element)) {
return new PropPanelExtensionPoint();
} else if (Model.getFacade().isAGuard(element)) {
return new PropPanelGuard();
} else if (Model.getFacade().isAInteraction(element)) {
return new PropPanelInteraction();
} else if (Model.getFacade().isALink(element)) {
return new PropPanelLink();
} else if (Model.getFacade().isALinkEnd(element)) {
return new PropPanelLinkEnd();
} else if (Model.getFacade().isAMessage(element)) {
return new PropPanelMessage();
} else if (Model.getFacade().isAMethod(element)) {
return new PropPanelMethod();
} else if (Model.getFacade().isAModel(element)) {
return new PropPanelModel();
} else if (Model.getFacade().isANodeInstance(element)) {
return new PropPanelNodeInstance();
} else if (Model.getFacade().isAObject(element)) {
return new PropPanelObject();
} else if (Model.getFacade().isAOperation(element)) {
return new PropPanelOperation();
} else if (Model.getFacade().isAPackage(element)) {
return new PropPanelPackage();
} else if (Model.getFacade().isAParameter(element)) {
return new PropPanelParameter();
} else if (Model.getFacade().isAPartition(element)) {
return new PropPanelPartition();
} else if (Model.getFacade().isAReception(element)) {
return new PropPanelReception();
} else if (Model.getFacade().isAStateMachine(element)) {
return new PropPanelStateMachine();
} else if (Model.getFacade().isAStereotype(element)) {
return new PropPanelStereotype();
} else if (Model.getFacade().isAStimulus(element)) {
return new PropPanelStimulus();
} else if (Model.getFacade().isATaggedValue(element)) {
return new PropPanelTaggedValue();
} else if (Model.getFacade().isATemplateParameter(element)) {
return new PropPanelTemplateParameter();
} else if (Model.getFacade().isATagDefinition(element)) {
return new PropPanelTagDefinition();
} else if (Model.getFacade().isATransition(element)) {
return new PropPanelTransition();
} else if (Model.getFacade().isACallEvent(element)) {
return new PropPanelCallEvent();
} else if (Model.getFacade().isAChangeEvent(element)) {
return new PropPanelChangeEvent();
} else if (Model.getFacade().isASignalEvent(element)) {
return new PropPanelSignalEvent();
} else if (Model.getFacade().isATimeEvent(element)) {
return new PropPanelTimeEvent();
} else if (Model.getFacade().isADependency(element)) {
return new PropPanelDependency();
} else if (Model.getFacade().isAClassifier(element)) {
// in UML2 many things are a classifier, so this is the last:
return getClassifierPropPanel(element);
}
throw new IllegalArgumentException("Unsupported Element type "
+ element.getClass().getName());
}
return null;
}
private PropPanel getClassifierPropPanel(Object element) {
if (Model.getFacade().isAActor(element)) {
return new PropPanelActor();
} else if (Model.getFacade().isAAssociationClass(element)) {
return new PropPanelAssociationClass();
} else if (Model.getFacade().isAClass(element)) {
return new PropPanelClass();
} else if (Model.getFacade().isAClassifierInState(element)) {
return new PropPanelClassifierInState();
} else if (Model.getFacade().isAClassifierRole(element)) {
return new PropPanelClassifierRole();
} else if (Model.getFacade().isAComponent(element)) {
return new PropPanelComponent();
} else if (Model.getFacade().isADataType(element)) {
if (Model.getFacade().isAEnumeration(element)) {
return new PropPanelEnumeration();
} else {
return new PropPanelDataType();
}
} else if (Model.getFacade().isAInterface(element)) {
return new PropPanelInterface();
} else if (Model.getFacade().isANode(element)) {
return new PropPanelNode();
} else if (Model.getFacade().isASignal(element)) {
if (Model.getFacade().isAException(element)) {
return new PropPanelException();
} else {
return new PropPanelSignal();
}
} else if (Model.getFacade().isAUseCase(element)) {
return new PropPanelUseCase();
} else if (Model.getFacade().isARelationship(element)) {
return getRelationshipPropPanel(element);
}
// TODO: A Subsystem is a Classifier, but its PropPanel is derived from
// PropPanelPackage
// else if (Model.getFacade().isASubsystem(element)) {
// return new PropPanelSubsystem();
// }
// TODO: In UML 2.x Associations will fall through here because they
// are Classifiers as well as Relationships, but we test for Classifier
// first.
throw new IllegalArgumentException("Unsupported Element type "
+ element.getClass().getName());
}
private PropPanelRelationship getRelationshipPropPanel(Object element) {
if (Model.getFacade().isAAssociation(element)) {
if (Model.getFacade().isAAssociationRole(element)) {
return new PropPanelAssociationRole();
} else {
return new PropPanelAssociation();
}
} else if (Model.getFacade().isADependency(element)) {
if (Model.getFacade().isAAbstraction(element)) {
return new PropPanelAbstraction();
} else if (Model.getFacade().isAPackageImport(element)) {
// Type hierarchy has changed for UML 2.x - no longer a Dependency
return new PropPanelPermission();
} else if (Model.getFacade().isAUsage(element)) {
return new PropPanelUsage();
// } else if (Model.getFacade().isABinding(element)) {
// return new PropPanelBinding();
} else {
return new PropPanelDependency();
}
} else if (Model.getFacade().isAExtend(element)) {
return new PropPanelExtend();
} else if (Model.getFacade().isAFlow(element)) {
return new PropPanelFlow();
} else if (Model.getFacade().isAGeneralization(element)) {
return new PropPanelGeneralization();
} else if (Model.getFacade().isAInclude(element)) {
return new PropPanelInclude();
} else if (Model.getFacade().isAPackageImport(element)) {
return new PropPanelPermission();
}
throw new IllegalArgumentException("Unsupported Relationship type");
}
private PropPanelAction getActionPropPanel(Object action) {
if (Model.getFacade().isACallAction(action)) {
return new PropPanelCallAction();
} else if (Model.getFacade().isACreateAction(action)) {
return new PropPanelCreateAction();
} else if (Model.getFacade().isADestroyAction(action)) {
return new PropPanelDestroyAction();
} else if (Model.getFacade().isAReturnAction(action)) {
return new PropPanelReturnAction();
} else if (Model.getFacade().isASendAction(action)) {
return new PropPanelSendAction();
} else if (Model.getFacade().isATerminateAction(action)) {
return new PropPanelTerminateAction();
} else if (Model.getFacade().isAUninterpretedAction(action)) {
return new PropPanelUninterpretedAction();
}
throw new IllegalArgumentException("Unsupported Action type");
}
private PropPanelStateVertex getStateVertexPropPanel(Object element) {
if (Model.getFacade().isAState(element)) {
if (Model.getFacade().isACallState(element)) {
return new PropPanelCallState();
} else if (Model.getFacade().isAActionState(element)) {
return new PropPanelActionState();
} else if (Model.getFacade().isACompositeState(element)) {
if (Model.getFacade().isASubmachineState(element)) {
if (Model.getFacade().isASubactivityState(element)) {
return new PropPanelSubactivityState();
} else {
return new PropPanelSubmachineState();
}
} else {
return new PropPanelCompositeState();
}
} else if (Model.getFacade().isAFinalState(element)) {
return new PropPanelFinalState();
} else if (Model.getFacade().isAObjectFlowState(element)) {
return new PropPanelObjectFlowState();
} else if (Model.getFacade().isASimpleState(element)) {
return new PropPanelSimpleState();
}
} else if (Model.getFacade().isAPseudostate(element)) {
return new PropPanelPseudostate();
} else if (Model.getFacade().isAStubState(element)) {
return new PropPanelStubState();
} else if (Model.getFacade().isASynchState(element)) {
return new PropPanelSynchState();
}
throw new IllegalArgumentException("Unsupported State type");
}
}