Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositesformodel/PropertyComposite.java')
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositesformodel/PropertyComposite.java342
1 files changed, 342 insertions, 0 deletions
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositesformodel/PropertyComposite.java b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositesformodel/PropertyComposite.java
new file mode 100644
index 00000000000..37ca929d9b6
--- /dev/null
+++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositesformodel/PropertyComposite.java
@@ -0,0 +1,342 @@
+/*****************************************************************************
+ * Copyright (c) 2008 CEA LIST.
+ *
+ *
+ * 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:
+ * Chokri Mraidha (CEA LIST) Chokri.Mraidha@cea.fr - Initial API and implementation
+ * Patrick Tessier (CEA LIST) Patrick.Tessier@cea.fr - modification
+ * Ansgar Radermacher (CEA LIST) Ansgar.Radermacher@cea.fr - modification, clean-up
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.properties.profile.ui.compositesformodel;
+
+import java.util.ArrayList;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.uml.profile.Message;
+import org.eclipse.papyrus.uml.profile.tree.ProfileElementContentProvider;
+import org.eclipse.papyrus.uml.profile.tree.ProfileElementLabelProvider;
+import org.eclipse.papyrus.uml.profile.tree.objects.AppliedStereotypePropertyTreeObject;
+import org.eclipse.papyrus.uml.profile.tree.objects.AppliedStereotypeTreeObject;
+import org.eclipse.papyrus.uml.profile.tree.objects.StereotypedElementTreeObject;
+import org.eclipse.papyrus.uml.profile.tree.objects.ValueTreeObject;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * The goal of this composite is make properties of applied stereotype editable see class AppliedStereotypeEditor
+ */
+public class PropertyComposite extends DecoratedTreeComposite {
+
+ public TransactionalEditingDomain getDomain() {
+ // used by heir AppliedStereotypePropertyCompositeWithView
+ return EditorUtils.getTransactionalEditingDomain();
+ }
+
+ /**
+ * Creates a new PropertyComposite.
+ *
+ * @param parent
+ * the composite parent
+ */
+ public PropertyComposite(Composite parent) {
+ super(parent, SWT.NONE, "Property values", false);
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.cea.papyrus.ui.composites.DecoratedTableComposite#createContent(org.eclipse.swt.widgets.Composite,
+ * org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory)
+ */
+ @Override
+ public Composite createContent(Composite parent, TabbedPropertySheetWidgetFactory factory) {
+ super.createContent(parent, factory);
+ createPropTree();
+
+ return this;
+ }
+
+ /**
+ * Creates the prop tree.
+ */
+ protected void createPropTree() {
+
+ // List of applied profiles
+ treeViewer.setContentProvider(new ProfileElementContentProvider());
+ treeViewer.setLabelProvider(new ProfileElementLabelProvider());
+ }
+
+ /**
+ * Refresh.
+ */
+ @Override
+ public void refresh() {
+
+ if(treeViewer.getTree() != null && !(treeViewer.getTree().isDisposed())) {
+ treeViewer.refresh();
+
+ AppliedStereotypePropertyTreeObject pTO = (AppliedStereotypePropertyTreeObject)treeViewer.getInput();
+ if(pTO == null) {
+ this.setVisible(false);
+ } else if((pTO.getProperty() != null) && pTO.getProperty().isReadOnly()) {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ removeButton.setEnabled(false);
+ addButton.setEnabled(false);
+ } else {
+ upButton.setEnabled(true);
+ downButton.setEnabled(true);
+ removeButton.setEnabled(true);
+ addButton.setEnabled(true);
+
+ // If the property is Multivalued show Up - Down
+ if((pTO.getChildren() != null) && (pTO.getChildren().length > 1)) {
+ upButton.setEnabled(true);
+ downButton.setEnabled(true);
+ } else {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
+
+ if((pTO.getChildren() != null) && (pTO.getChildren().length == pTO.getProperty().getLower())) {
+ removeButton.setEnabled(false);
+ } else {
+ removeButton.setEnabled(true);
+ }
+
+ if((pTO.getChildren() != null) && (pTO.getChildren().length == pTO.getProperty().getUpper())) {
+ addButton.setEnabled(false);
+ } else {
+ addButton.setEnabled(true);
+ }
+
+ this.setVisible(true);
+ }
+ }
+
+ }
+
+ public void itemDClicked () {
+ AppliedStereotypePropertyTreeObject pTO = (AppliedStereotypePropertyTreeObject)treeViewer.getInput();
+ // re-initialize value tree objects (model is already updated, value in tree object is not)
+ pTO.reInitChilds();
+ }
+
+ /**
+ * Action triggered when the add button is pressed.
+ */
+ @Override
+ public void addButtonPressed() {
+
+ // Retrieve selections
+ AppliedStereotypePropertyTreeObject pTO = (AppliedStereotypePropertyTreeObject)treeViewer.getInput();
+ Property property = pTO.getProperty();
+ Stereotype selectedSt = ((AppliedStereotypeTreeObject)pTO.getParent()).getStereotype();
+ Element selectedElt = ((StereotypedElementTreeObject)pTO.getParent().getParent()).getElement();
+
+ if((property == null) || (selectedSt == null) || (selectedElt == null)) {
+ // Nothing selected
+ return;
+ }
+
+ // Retrieve property related info
+ int lower = property.getLower();
+ int upper = property.getUpper();
+
+ // if lower multiplicity is equal to upper multiplicity : cannot add
+ if(lower == upper && pTO.getValue() != null) {
+ if (pTO.getValue() instanceof EList) {
+ @SuppressWarnings("unchecked")
+ EList<Object> currentValues = (EList<Object>) pTO.getValue ();
+ if (currentValues.size() >= upper) {
+ Message.warning("Multiplicity of this property is " + property.getLower() + ".." + property.getUpper() + "\n" + "Impossible to add a new value.");
+ return;
+ }
+ } else {
+ Message.warning("Multiplicity of this property is " + property.getLower() + ".." + property.getUpper() + "\n" + "Impossible to add a new value.");
+ return;
+ }
+ }
+
+ // Retrieve current value
+ ArrayList<Object> currentPropertyValues = new ArrayList<Object>();
+ Object currentValue = pTO.getValue();
+ if (currentValue != null) {
+
+ if(upper == 1) {
+ currentPropertyValues.add(currentValue);
+
+ } else { // if (upper != 1) {
+
+ @SuppressWarnings("unchecked")
+ EList<Object> currentValues = (EList<Object>) currentValue;
+ for(int i = 0; i < currentValues.size(); i++) {
+ currentPropertyValues.add(currentValues.get(i));
+ }
+ }
+ }
+
+ if (property.isMultivalued() || (currentPropertyValues.size() < upper)) {
+ ValueTreeObject.createInstance(pTO, null).editMe ();
+ }
+ else {
+ Message.warning("Upper multiplicity of " + property.getName() + " is " + property.getUpper());
+ }
+ // Update value tree objects
+ pTO.reInitChilds ();
+ }
+
+ /**
+ * Action triggered when the remove button is pressed.
+ */
+ @Override
+ public void removeButtonPressed() {
+ int nbrOfSelection = getTree().getSelectionCount();
+ if(nbrOfSelection == 0) {
+ return;
+ }
+
+ TreeItem[] items = getTree().getSelection();
+ for(int i = 0; i < nbrOfSelection; i++) {
+ ValueTreeObject vTO = (ValueTreeObject) items[i].getData();
+ AppliedStereotypePropertyTreeObject pTO =
+ (AppliedStereotypePropertyTreeObject) treeViewer.getInput();
+ Property property = pTO.getProperty();
+
+ int lower = property.getLower();
+ int upper = property.getUpper();
+
+ // if lower multiplicity is equal to upper multiplicity
+ if(lower == upper) {
+ Message.warning("Multiplicity of this property is" + lower + ".." + upper + "\n" + "Impossible to remove a value.");
+ return;
+ }
+
+ Object currentVal = pTO.getValue();
+ ArrayList<Object> tempValues = new ArrayList<Object>();
+
+ if (upper != 1) {
+ @SuppressWarnings("unchecked")
+ EList<Object> currentValues = (EList<Object>) currentVal;
+ tempValues.addAll (currentValues);
+
+ if (tempValues.size() > lower) {
+ tempValues.remove(vTO.getValue());
+ }
+ }
+
+ if(property.isMultivalued()) {
+ // setPropertiesValue(selectedElt, stereotype, property, tempValues);
+ pTO.updateValue (tempValues);
+ } else {
+ pTO.updateValue (null);
+ }
+
+ // Update value tree objects
+ pTO.reInitChilds ();
+ }
+ }
+
+ /**
+ * Action triggered when the up button is pressed.
+ */
+ @Override
+ public void upButtonPressed() {
+ int nbrOfSelection = getTree().getSelectionCount();
+ if(nbrOfSelection < 1) {
+ return;
+ }
+
+ TreeItem[] items = getTree().getSelection();
+ int indexFirst = getTree().indexOf(items[0]);
+ if(indexFirst == 0) {
+ // do nothing
+ return;
+ }
+
+ for(int i = 0; i < nbrOfSelection; i++) {
+ ValueTreeObject vTO = (ValueTreeObject)items[i].getData();
+ int index = getTree().indexOf(items[i]);
+ vTO.moveMeUp(index);
+ }
+ }
+
+ /**
+ * Action triggered when the down button is pressed.
+ */
+ @Override
+ public void downButtonPressed() {
+ int nbrOfSelection = getTree().getSelectionCount();
+ if(nbrOfSelection < 1) {
+ return;
+ }
+
+ TreeItem[] items = getTree().getSelection();
+ // Get last value index
+ AppliedStereotypePropertyTreeObject pTO = (AppliedStereotypePropertyTreeObject)treeViewer.getInput();
+ int indexLastValue = -1;
+ if(pTO.getChildren() != null) {
+ indexLastValue = pTO.getChildren().length - 1;
+ }
+ // Get last selection index
+ int indexLastSelection = getTree().indexOf(items[nbrOfSelection - 1]);
+ if((indexLastValue == -1) || (indexLastSelection == indexLastValue)) {
+ // do nothing
+ return;
+ }
+
+ for(int i = 0; i < nbrOfSelection; i++) {
+ ValueTreeObject vTO = (ValueTreeObject)items[nbrOfSelection - 1 - i].getData();
+ int index = getTree().indexOf(items[nbrOfSelection - 1 - i]);
+ vTO.moveMeDown(index);
+ }
+ }
+
+ /**
+ * Sets the input.
+ *
+ * @param element
+ * the element
+ */
+ public void setInput(AppliedStereotypePropertyTreeObject element) {
+ treeViewer.setInput(element);
+ if (element != null) {
+ element.reInitChilds ();
+ }
+ refresh();
+ }
+
+ /**
+ * Gets the tree.
+ *
+ * @return the tree
+ */
+ public Tree getTree() {
+ return treeViewer.getTree();
+ }
+
+ /**
+ *
+ *
+ * @param item
+ */
+ @Override
+ public void editItem(TreeItem item) {
+ // do nothing
+ }
+} \ No newline at end of file

Back to the top