diff options
author | Ansgar Radermacher | 2015-12-15 15:50:16 +0000 |
---|---|---|
committer | Ansgar Radermacher | 2015-12-16 11:47:23 +0000 |
commit | f6e3b98a8a91afe5d29abf0f8dd037658b46edba (patch) | |
tree | e05e66450d433a07d2cde5974effae48eb8fca17 /extraplugins/qompass-designer | |
parent | 5b06570c620b3318d3aa7055afb1ce1c4997f80b (diff) | |
download | org.eclipse.papyrus-f6e3b98a8a91afe5d29abf0f8dd037658b46edba.tar.gz org.eclipse.papyrus-f6e3b98a8a91afe5d29abf0f8dd037658b46edba.tar.xz org.eclipse.papyrus-f6e3b98a8a91afe5d29abf0f8dd037658b46edba.zip |
Bug 484409 - [QDesigner] The instance configuration should support enumerations
Diffstat (limited to 'extraplugins/qompass-designer')
-rw-r--r-- | extraplugins/qompass-designer/org.eclipse.papyrus.qompass.designer.ui/src/org/eclipse/papyrus/qompass/designer/ui/dialogs/ConfigureInstanceDialog.java | 89 |
1 files changed, 87 insertions, 2 deletions
diff --git a/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.designer.ui/src/org/eclipse/papyrus/qompass/designer/ui/dialogs/ConfigureInstanceDialog.java b/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.designer.ui/src/org/eclipse/papyrus/qompass/designer/ui/dialogs/ConfigureInstanceDialog.java index af9dff45f9f..f5deb6de56c 100644 --- a/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.designer.ui/src/org/eclipse/papyrus/qompass/designer/ui/dialogs/ConfigureInstanceDialog.java +++ b/extraplugins/qompass-designer/org.eclipse.papyrus.qompass.designer.ui/src/org/eclipse/papyrus/qompass/designer/ui/dialogs/ConfigureInstanceDialog.java @@ -28,11 +28,11 @@ import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.papyrus.FCM.ContainerRule; +import org.eclipse.papyrus.FCM.util.FCMUtil; import org.eclipse.papyrus.infra.widgets.toolbox.utils.DialogUtils; import org.eclipse.papyrus.qompass.designer.core.ConfigUtils; import org.eclipse.papyrus.qompass.designer.core.Description; import org.eclipse.papyrus.qompass.designer.core.ElementFilter; -import org.eclipse.papyrus.qompass.designer.core.Utils; import org.eclipse.papyrus.qompass.designer.core.deployment.DepCreation; import org.eclipse.papyrus.qompass.designer.core.deployment.DepPlanUtils; import org.eclipse.papyrus.qompass.designer.core.deployment.DepUtils; @@ -42,9 +42,12 @@ import org.eclipse.papyrus.uml.tools.utils.PackageUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; @@ -58,8 +61,11 @@ import org.eclipse.uml2.uml.Class; import org.eclipse.uml2.uml.Classifier; import org.eclipse.uml2.uml.Connector; import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.Enumeration; +import org.eclipse.uml2.uml.EnumerationLiteral; import org.eclipse.uml2.uml.Feature; import org.eclipse.uml2.uml.InstanceSpecification; +import org.eclipse.uml2.uml.InstanceValue; import org.eclipse.uml2.uml.LiteralBoolean; import org.eclipse.uml2.uml.LiteralInteger; import org.eclipse.uml2.uml.LiteralString; @@ -97,6 +103,8 @@ public class ConfigureInstanceDialog extends SelectionStatusDialog { protected Text fValue; + protected Combo fComboValue; + protected Package m_model; protected Feature m_feature; @@ -406,6 +414,7 @@ public class ConfigureInstanceDialog extends SelectionStatusDialog { span2.horizontalAlignment = GridData.FILL; span2.grabExcessHorizontalSpace = true; fValue.setLayoutData(span2); + fValue.addFocusListener(new FocusListener() { @Override @@ -447,6 +456,58 @@ public class ConfigureInstanceDialog extends SelectionStatusDialog { } }); + fComboValue = new Combo(instanceConfigurationGroup, SWT.NONE); + span2 = new GridData(); + span2.horizontalAlignment = GridData.FILL; + span2.grabExcessHorizontalSpace = true; + fComboValue.setLayoutData(span2); + + fComboValue.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent event) { + // store value, once focus is lost (different element is + // selected) + int index = fComboValue.getSelectionIndex(); + if (m_instance == null) { + // no instance has been selected + // (field should be inactive, if not selected) + return; + } + Slot valueSlot = null; + for (Slot slot : m_instance.getSlots()) { + if (slot.getDefiningFeature() == m_currentAttribute) { + // slot for enumerations can only be configured with instanceValues. + // Destroy slots with do not contain at least one instanceValue + boolean destroySlot = true; + for (ValueSpecification value : slot.getValues()) { + if (value instanceof InstanceValue) { + destroySlot = false; + } + } + if (destroySlot) { + slot.destroy(); + } + else { + valueSlot = slot; + } + break; + } + } + if (valueSlot == null) { + // slot does not exist yet, create + valueSlot = DepCreation.createSlotForConfigProp(m_instance, + m_currentAttribute); + } + Enumeration enumeration = (Enumeration) m_currentAttribute.getType(); + for (ValueSpecification value : valueSlot.getValues()) { + if (value instanceof InstanceValue) { + ((InstanceValue) value).setInstance(enumeration.getOwnedLiterals().get(index)); + } + } + } + }); + fDescriptionLabel = new Label(instanceConfigurationGroup, SWT.NONE); fDescriptionLabel.setText("Description:"); fDescriptionLabel.setLayoutData(span2); @@ -480,6 +541,19 @@ public class ConfigureInstanceDialog extends SelectionStatusDialog { setEnabled(true); fDescription.setText(Description.getDescription(attribute, "not available")); fValueLabel.setText(getValueLabel(attribute)); + boolean isEnum = m_currentAttribute.getType() instanceof Enumeration; + fValue.setVisible(!isEnum); + fComboValue.setVisible(isEnum); + if (isEnum) { + Enumeration enumeration = (Enumeration) m_currentAttribute.getType(); + EList<EnumerationLiteral> literals = enumeration.getOwnedLiterals(); + String items[] = new String[literals.size()]; + for (int i = 0; i < literals.size(); i++) { + items[i] = literals.get(i).getName(); + } + fComboValue.setItems(items); + } + for (Slot slot : m_instance.getSlots()) { if (slot.getDefiningFeature() == m_currentAttribute) { for (ValueSpecification value : slot.getValues()) { @@ -488,6 +562,17 @@ public class ConfigureInstanceDialog extends SelectionStatusDialog { fValue.setText(intVal.toString()); return; } + if (value instanceof InstanceValue) { + InstanceSpecification enumIS = ((InstanceValue) value).getInstance(); + if (enumIS instanceof EnumerationLiteral) { + EnumerationLiteral literal = (EnumerationLiteral) enumIS; + int index = literal.getEnumeration().getOwnedLiterals().indexOf(literal); + if (index != -1) { + fComboValue.select(index); + } + } + return; + } else if (value instanceof LiteralBoolean) { Boolean boolVal = ((LiteralBoolean) value).booleanValue(); fValue.setText(boolVal.toString()); @@ -531,7 +616,7 @@ public class ConfigureInstanceDialog extends SelectionStatusDialog { // TODO: is it possible that multiple container extensions of the same // type exist, and if yes, how do we configure these? if (component instanceof Class) { - EList<ContainerRule> rules = Utils.getRules((Class) component); + EList<ContainerRule> rules = FCMUtil.getAllContainerRules((Class) component); if (rules != null) { for (ContainerRule aRule : rules) { // (many, in case of a composite rule) |