From 5989c9434e03ceaf4246d16a70706b2f8e078ed0 Mon Sep 17 00:00:00 2001
From: Nikolaus Huber <nikolaus.huber@uni-wuerzburg.de>
Date: Wed, 29 May 2013 12:17:48 +0000
Subject: [PATCH] improved operationalization of specification of objectives

git-svn-id: https://se1.informatik.uni-wuerzburg.de/usvn/svn/code/code/DMM/trunk@11800 9e42b895-fcda-4063-8a3b-11be15eb1bbd
---
 ...eObjective_specification_Specification.gif | Bin 0 -> 223 bytes
 .../icons/full/obj16/Specification.gif        | Bin 0 -> 129 bytes
 .../plugin.properties                         |  11 +
 .../AdaptationItemProviderAdapterFactory.java |  24 +++
 .../provider/ObjectiveItemProvider.java       |  48 +++--
 .../provider/SpecificationItemProvider.java   | 203 ++++++++++++++++++
 .../provider/WeightedTacticItemProvider.java  |   3 +-
 7 files changed, 270 insertions(+), 19 deletions(-)
 create mode 100644 edu.kit.ipd.descartes.mm.adaptation.edit/icons/full/ctool16/CreateObjective_specification_Specification.gif
 create mode 100644 edu.kit.ipd.descartes.mm.adaptation.edit/icons/full/obj16/Specification.gif
 create mode 100644 edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/SpecificationItemProvider.java

diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/icons/full/ctool16/CreateObjective_specification_Specification.gif b/edu.kit.ipd.descartes.mm.adaptation.edit/icons/full/ctool16/CreateObjective_specification_Specification.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d748696ff3a4d760ebf4dd9d0c6af30c9a96e944
GIT binary patch
literal 223
zcmZ?wbhEHb6krfwIKsg2|NsB{_xIb|$1^Z6T-x(uQ_szrX=fT74*dTgKR@37|9$(0
zhKAo?f4@2U=KlQqmntvqnyv;!TPG>6>ylsEBsH&6Y-Wk@zrXK+=<nzAK=kMN;@@|h
zfu=!#;!hSv5K9L{fb3*ojZskOONq2oW0-mN@RSQ%C-pb?O)Bv;{%q27Eqjutn0mid
za;9^j#_Z)M*hTuZ=A1g|X2qbRcHi5@LLjJN_KSoMi%zyPElhBeztK{2J6G%U%k+GP
PoSLT8#-?mlMFwjCB^G5^

literal 0
HcmV?d00001

diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/icons/full/obj16/Specification.gif b/edu.kit.ipd.descartes.mm.adaptation.edit/icons/full/obj16/Specification.gif
new file mode 100644
index 0000000000000000000000000000000000000000..2b6925602975de13459862ee32e1b0d97549bf67
GIT binary patch
literal 129
zcmZ?wbhEHb6krfw*vtS14M4Jip`qcxfddT<4GjN*-2XuK|Nmgt|Nocvyx7!pb7tC^
z28RQRKUo+V7&sYpKsrHYFtF$uob+71*W&e;Zz}u`3thLHvffHb@LI6&tBu~rX=+!^
W%6nF7^6M^V>~uRaQAn7P!5RPvM=;_5

literal 0
HcmV?d00001

diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/plugin.properties b/edu.kit.ipd.descartes.mm.adaptation.edit/plugin.properties
index 04eef1a2..17650d65 100644
--- a/edu.kit.ipd.descartes.mm.adaptation.edit/plugin.properties
+++ b/edu.kit.ipd.descartes.mm.adaptation.edit/plugin.properties
@@ -145,3 +145,14 @@ _UI_AdaptationActionOperation_adaptationOperationDirection_feature = Adaptation
 _UI_AdaptationScope_NOT_SET_literal = NOT_SET
 _UI_AdaptationScope_THIS_literal = THIS
 _UI_WeightedTactic_parentStrategy_feature = Parent Strategy
+_UI_Specification_type = Specification
+_UI_Specification_metricType_feature = Metric Type
+_UI_Specification_value_feature = Value
+_UI_Specification_operator_feature = Operator
+_UI_Specification_relationalOperator_feature = Relational Operator
+_UI_RelationalOperator_EQUAL_literal = EQUAL
+_UI_RelationalOperator_NOT_EQUAL_literal = NOT_EQUAL
+_UI_RelationalOperator_GREATER_literal = GREATER
+_UI_RelationalOperator_GREATER_EQUAL_literal = GREATER_EQUAL
+_UI_RelationalOperator_LESS_literal = LESS
+_UI_RelationalOperator_LESS_EQUAL_literal = LESS_EQUAL
diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/AdaptationItemProviderAdapterFactory.java b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/AdaptationItemProviderAdapterFactory.java
index 59ce5070..1d085648 100644
--- a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/AdaptationItemProviderAdapterFactory.java
+++ b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/AdaptationItemProviderAdapterFactory.java
@@ -187,6 +187,29 @@ public class AdaptationItemProviderAdapterFactory extends AdaptationAdapterFacto
         return objectiveItemProvider;
     }
 
+    /**
+     * This keeps track of the one adapter used for all {@link edu.kit.ipd.descartes.mm.adaptation.Specification} instances.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected SpecificationItemProvider specificationItemProvider;
+
+    /**
+     * This creates an adapter for a {@link edu.kit.ipd.descartes.mm.adaptation.Specification}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Adapter createSpecificationAdapter() {
+        if (specificationItemProvider == null) {
+            specificationItemProvider = new SpecificationItemProvider(this);
+        }
+
+        return specificationItemProvider;
+    }
+
     /**
      * This keeps track of the one adapter used for all {@link edu.kit.ipd.descartes.mm.adaptation.WeightingFunction} instances.
      * <!-- begin-user-doc -->
@@ -590,6 +613,7 @@ public class AdaptationItemProviderAdapterFactory extends AdaptationAdapterFacto
         if (strategyItemProvider != null) strategyItemProvider.dispose();
         if (eventItemProvider != null) eventItemProvider.dispose();
         if (objectiveItemProvider != null) objectiveItemProvider.dispose();
+        if (specificationItemProvider != null) specificationItemProvider.dispose();
         if (weightingFunctionItemProvider != null) weightingFunctionItemProvider.dispose();
         if (weightedMetricItemProvider != null) weightedMetricItemProvider.dispose();
         if (weightedTacticItemProvider != null) weightedTacticItemProvider.dispose();
diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/ObjectiveItemProvider.java b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/ObjectiveItemProvider.java
index 7c93de82..5329be8b 100644
--- a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/ObjectiveItemProvider.java
+++ b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/ObjectiveItemProvider.java
@@ -6,6 +6,7 @@ package edu.kit.ipd.descartes.mm.adaptation.provider;
 
 import edu.kit.ipd.descartes.core.provider.EntityItemProvider;
 
+import edu.kit.ipd.descartes.mm.adaptation.AdaptationFactory;
 import edu.kit.ipd.descartes.mm.adaptation.AdaptationPackage;
 import edu.kit.ipd.descartes.mm.adaptation.Objective;
 
@@ -17,6 +18,7 @@ import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.util.ResourceLocator;
 
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
@@ -62,31 +64,38 @@ public class ObjectiveItemProvider
         if (itemPropertyDescriptors == null) {
             super.getPropertyDescriptors(object);
 
-            addSpecificationPropertyDescriptor(object);
         }
         return itemPropertyDescriptors;
     }
 
     /**
-     * This adds a property descriptor for the Specification feature.
+     * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+     * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+     * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected void addSpecificationPropertyDescriptor(Object object) {
-        itemPropertyDescriptors.add
-            (createItemPropertyDescriptor
-                (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-                 getResourceLocator(),
-                 getString("_UI_Objective_specification_feature"),
-                 getString("_UI_PropertyDescriptor_description", "_UI_Objective_specification_feature", "_UI_Objective_type"),
-                 AdaptationPackage.Literals.OBJECTIVE__SPECIFICATION,
-                 true,
-                 false,
-                 false,
-                 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-                 null,
-                 null));
+    @Override
+    public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+        if (childrenFeatures == null) {
+            super.getChildrenFeatures(object);
+            childrenFeatures.add(AdaptationPackage.Literals.OBJECTIVE__SPECIFICATION);
+        }
+        return childrenFeatures;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected EStructuralFeature getChildFeature(Object object, Object child) {
+        // Check the type of the specified child object and return the proper feature to use for
+        // adding (see {@link AddCommand}) it as a child.
+
+        return super.getChildFeature(object, child);
     }
 
     /**
@@ -127,7 +136,7 @@ public class ObjectiveItemProvider
 
         switch (notification.getFeatureID(Objective.class)) {
             case AdaptationPackage.OBJECTIVE__SPECIFICATION:
-                fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+                fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
                 return;
         }
         super.notifyChanged(notification);
@@ -143,6 +152,11 @@ public class ObjectiveItemProvider
     @Override
     protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
         super.collectNewChildDescriptors(newChildDescriptors, object);
+
+        newChildDescriptors.add
+            (createChildParameter
+                (AdaptationPackage.Literals.OBJECTIVE__SPECIFICATION,
+                 AdaptationFactory.eINSTANCE.createSpecification()));
     }
 
     /**
diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/SpecificationItemProvider.java b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/SpecificationItemProvider.java
new file mode 100644
index 00000000..2e97bba3
--- /dev/null
+++ b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/SpecificationItemProvider.java
@@ -0,0 +1,203 @@
+/**
+ * Copyright 2009-2012, Descartes Research Group, SDQ, IPD, KIT
+ */
+package edu.kit.ipd.descartes.mm.adaptation.provider;
+
+
+import edu.kit.ipd.descartes.mm.adaptation.AdaptationPackage;
+import edu.kit.ipd.descartes.mm.adaptation.Specification;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link edu.kit.ipd.descartes.mm.adaptation.Specification} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SpecificationItemProvider
+    extends ItemProviderAdapter
+    implements
+        IEditingDomainItemProvider,
+        IStructuredItemContentProvider,
+        ITreeItemContentProvider,
+        IItemLabelProvider,
+        IItemPropertySource {
+    /**
+     * This constructs an instance from a factory and a notifier.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public SpecificationItemProvider(AdapterFactory adapterFactory) {
+        super(adapterFactory);
+    }
+
+    /**
+     * This returns the property descriptors for the adapted class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+        if (itemPropertyDescriptors == null) {
+            super.getPropertyDescriptors(object);
+
+            addMetricTypePropertyDescriptor(object);
+            addValuePropertyDescriptor(object);
+            addRelationalOperatorPropertyDescriptor(object);
+        }
+        return itemPropertyDescriptors;
+    }
+
+    /**
+     * This adds a property descriptor for the Metric Type feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addMetricTypePropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add
+            (createItemPropertyDescriptor
+                (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+                 getResourceLocator(),
+                 getString("_UI_Specification_metricType_feature"),
+                 getString("_UI_PropertyDescriptor_description", "_UI_Specification_metricType_feature", "_UI_Specification_type"),
+                 AdaptationPackage.Literals.SPECIFICATION__METRIC_TYPE,
+                 true,
+                 false,
+                 true,
+                 null,
+                 null,
+                 null));
+    }
+
+    /**
+     * This adds a property descriptor for the Value feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addValuePropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add
+            (createItemPropertyDescriptor
+                (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+                 getResourceLocator(),
+                 getString("_UI_Specification_value_feature"),
+                 getString("_UI_PropertyDescriptor_description", "_UI_Specification_value_feature", "_UI_Specification_type"),
+                 AdaptationPackage.Literals.SPECIFICATION__VALUE,
+                 true,
+                 false,
+                 false,
+                 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+                 null,
+                 null));
+    }
+
+    /**
+     * This adds a property descriptor for the Relational Operator feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRelationalOperatorPropertyDescriptor(Object object) {
+        itemPropertyDescriptors.add
+            (createItemPropertyDescriptor
+                (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+                 getResourceLocator(),
+                 getString("_UI_Specification_relationalOperator_feature"),
+                 getString("_UI_PropertyDescriptor_description", "_UI_Specification_relationalOperator_feature", "_UI_Specification_type"),
+                 AdaptationPackage.Literals.SPECIFICATION__RELATIONAL_OPERATOR,
+                 true,
+                 false,
+                 false,
+                 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+                 null,
+                 null));
+    }
+
+    /**
+     * This returns Specification.gif.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object getImage(Object object) {
+        return overlayImage(object, getResourceLocator().getImage("full/obj16/Specification"));
+    }
+
+    /**
+     * This returns the label text for the adapted class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public String getText(Object object) {
+        Specification specification = (Specification)object;
+        return getString("_UI_Specification_type") + " " + specification.getValue();
+    }
+
+    /**
+     * This handles model notifications by calling {@link #updateChildren} to update any cached
+     * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void notifyChanged(Notification notification) {
+        updateChildren(notification);
+
+        switch (notification.getFeatureID(Specification.class)) {
+            case AdaptationPackage.SPECIFICATION__VALUE:
+            case AdaptationPackage.SPECIFICATION__RELATIONAL_OPERATOR:
+                fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+                return;
+        }
+        super.notifyChanged(notification);
+    }
+
+    /**
+     * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+     * that can be created under this object.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+        super.collectNewChildDescriptors(newChildDescriptors, object);
+    }
+
+    /**
+     * Return the resource locator for this item provider's resources.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ResourceLocator getResourceLocator() {
+        return AdaptationEditPlugin.INSTANCE;
+    }
+
+}
diff --git a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/WeightedTacticItemProvider.java b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/WeightedTacticItemProvider.java
index 06c7e72f..23819238 100644
--- a/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/WeightedTacticItemProvider.java
+++ b/edu.kit.ipd.descartes.mm.adaptation.edit/src/edu/kit/ipd/descartes/mm/adaptation/provider/WeightedTacticItemProvider.java
@@ -152,7 +152,7 @@ public class WeightedTacticItemProvider
                  AdaptationPackage.Literals.WEIGHTED_TACTIC__LAST_IMPACT,
                  true,
                  false,
-                 false,
+                 true,
                  null,
                  null,
                  null));
@@ -197,7 +197,6 @@ public class WeightedTacticItemProvider
         switch (notification.getFeatureID(WeightedTactic.class)) {
             case AdaptationPackage.WEIGHTED_TACTIC__CURRENT_WEIGHT:
             case AdaptationPackage.WEIGHTED_TACTIC__DEFAULT_WEIGHT:
-            case AdaptationPackage.WEIGHTED_TACTIC__LAST_IMPACT:
                 fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
                 return;
         }
-- 
GitLab