Author: bobtarling Date: 2010-07-21 05:02:15-0700 New Revision: 18540 Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComponentInstanceClassifierComboBoxModel.java Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/metamodel.xml trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCollaborationRepresentedClassifierComboBoxModel.java
Log: Enforce WFR 4.9.3.6[1] in this regard [1] A ComponentInstance originates from exactly one Component. self.classifier->size = 1 and self.classifier.oclIsKindOf (Component) Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/metamodel.xml Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/metamodel.xml?view=diff&pathrev=18540&r1=18539&r2=18540 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/metamodel.xml (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/metamodel.xml 2010-07-21 05:02:15-0700 @@ -2427,7 +2427,7 @@ <list name="clientDependency" type="Dependency" label="label.client-dependencies" /> <list name="supplierDependency" type="ModelElement" label="label.supplier-dependencies" /> <separator /> - <list name="classifier" type="Classifier" /> + <combo name="classifier" type="Classifier" /> <!-- <list name="targetFlow" type="Flow" label="label.target-flows" /> <list name="sourceFlow" type="Flow" label="label.source-flows" /> Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java?view=diff&pathrev=18540&r1=18539&r2=18540 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/SwingUIFactory.java 2010-07-21 05:02:15-0700 @@ -430,6 +430,13 @@ "label.operation.navigate.tooltip"), combo); } + } else if ("classifier".equals(prop.getName())) { + final UMLComboBoxModel model = + new UMLComponentInstanceClassifierComboBoxModel(propertyName, target); + UMLComboBox combo = new UMLComboBox(model); + comp = new UMLComboBoxNavigator(Translator.localize( + "label.component-instance.navigate.tooltip"), + combo); } else if ("representedClassifier".equals(prop.getName())) { final UMLComboBoxModel model = new UMLCollaborationRepresentedClassifierComboBoxModel(propertyName, target); Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCollaborationRepresentedClassifierComboBoxModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCollaborationRepresentedClassifierComboBoxModel.java?view=diff&pathrev=18540&r1=18539&r2=18540 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCollaborationRepresentedClassifierComboBoxModel.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLCollaborationRepresentedClassifierComboBoxModel.java 2010-07-21 05:02:15-0700 @@ -67,7 +67,7 @@ final String propertyName, final Object target) { super(propertyName, true); - setTarget(propertyName); + setTarget(target); } /* Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComponentInstanceClassifierComboBoxModel.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComponentInstanceClassifierComboBoxModel.java?view=markup&pathrev=18540 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLComponentInstanceClassifierComboBoxModel.java 2010-07-21 05:02:15-0700 @@ -0,0 +1,122 @@ +/* $Id: $ + ***************************************************************************** + * 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: + * Bob Tarling + ***************************************************************************** + */ + +package org.argouml.core.propertypanels.ui; + +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.swing.Action; + +import org.apache.log4j.Logger; +import org.argouml.application.helpers.ResourceLoaderWrapper; +import org.argouml.i18n.Translator; +import org.argouml.kernel.Project; +import org.argouml.kernel.ProjectManager; +import org.argouml.model.Model; +import org.argouml.profile.Profile; +import org.argouml.profile.ProfileException; +import org.argouml.ui.UndoableAction; + +class UMLComponentInstanceClassifierComboBoxModel + extends UMLComboBoxModel { + + private static final Logger LOG = + Logger.getLogger("UMLComponentInstanceClassifierComboBoxModel"); + + public UMLComponentInstanceClassifierComboBoxModel( + final String propertyName, + final Object target) { + super(propertyName, true); + setTarget(target); + } + + /* + * @see org.argouml.uml.ui.UMLModelElementListModel#buildModelList() + */ + protected void buildModelList() { + List list = new ArrayList(); + + // Get all classifiers in our model + // TODO: We need the property panels to have some reference to the + // project they belong to instead of using deprecated functionality + Project p = ProjectManager.getManager().getCurrentProject(); + Object model = p.getRoot(); + list.addAll(Model.getModelManagementHelper() + .getAllModelElementsOfKindWithModel(model, Model.getMetaTypes().getComponent())); + + // Get all classifiers in all top level packages of all profiles + for (Profile profile : p.getProfileConfiguration().getProfiles()) { + try { + for (Object topPackage : profile.getProfilePackages()) { + list.addAll(Model.getModelManagementHelper() + .getAllModelElementsOfKindWithModel(topPackage, + Model.getMetaTypes().getComponent())); + } + } catch (ProfileException e) { + // TODO: We need to rethrow this as some other exception + // type but that is too much change for the moment. + LOG.error("Exception", e); + } + } + setElements(list); + } + + /* + * @see org.argouml.uml.ui.UMLComboBoxModel#isValidElement(Object) + */ + protected boolean isValidElement(Object element) { + return Model.getFacade().isAClassifier(element) + && Model.getFacade().getRepresentedClassifier(getTarget()) + == element; + } + + /* + * @see org.argouml.uml.ui.UMLComboBoxModel#getSelectedModelElement() + */ + protected Object getSelectedModelElement() { + Collection list = Model.getFacade().getClassifiers(getTarget()); + if (list.size() == 0) { + return null; + } + return list.iterator().next(); + } + + public Action getAction() { + return new ActionSet(); + } + + private class ActionSet extends UndoableAction { + + ActionSet() { + super(Translator.localize("action.set"), + ResourceLoaderWrapper.lookupIcon("action.set")); + } + + public void actionPerformed(ActionEvent e) { + super.actionPerformed(e); + UMLComboBox source = (UMLComboBox) e.getSource(); + Object target = source.getTarget(); + Object newValue = source.getSelectedItem(); + List classifiers = new ArrayList(1); + if (Model.getFacade().isAClassifier(newValue)) { + classifiers.add(newValue); + } + Model.getCommonBehaviorHelper().setClassifiers(getTarget(), classifiers); + } + + } +} + ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2636339 To unsubscribe from this discussion, e-mail: [[email protected]].
