Bug 565455 - The STEM AI plugin called "Automatic Experiments" requires
a more flexible and configurable error function

This contribution from Vishrawas Gopalakrishnan implements the feature
request
diff --git a/org.eclipse.stem/analysis/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/provider/CompoundErrorFunctionItemProvider.java b/org.eclipse.stem/analysis/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/provider/CompoundErrorFunctionItemProvider.java
new file mode 100644
index 0000000..1ec9ce3
--- /dev/null
+++ b/org.eclipse.stem/analysis/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/provider/CompoundErrorFunctionItemProvider.java
@@ -0,0 +1,180 @@
+/**
+ */
+package org.eclipse.stem.analysis.provider;
+
+
+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.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.CompoundErrorFunction;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.analysis.CompoundErrorFunction} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CompoundErrorFunctionItemProvider extends ErrorFunctionItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CompoundErrorFunctionItemProvider(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);
+
+			addUseDeathsPropertyDescriptor(object);
+			addUseCumSumPropertyDescriptor(object);
+			addUseDailyPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Use Deaths feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUseDeathsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CompoundErrorFunction_useDeaths_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CompoundErrorFunction_useDeaths_feature", "_UI_CompoundErrorFunction_type"),
+				 AnalysisPackage.Literals.COMPOUND_ERROR_FUNCTION__USE_DEATHS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Use Cum Sum feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUseCumSumPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CompoundErrorFunction_useCumSum_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CompoundErrorFunction_useCumSum_feature", "_UI_CompoundErrorFunction_type"),
+				 AnalysisPackage.Literals.COMPOUND_ERROR_FUNCTION__USE_CUM_SUM,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Use Daily feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUseDailyPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CompoundErrorFunction_useDaily_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CompoundErrorFunction_useDaily_feature", "_UI_CompoundErrorFunction_type"),
+				 AnalysisPackage.Literals.COMPOUND_ERROR_FUNCTION__USE_DAILY,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns SimpleErrorFunction.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/SimpleErrorFunction"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((CompoundErrorFunction)object).getReferenceDataCompartment();
+		return label == null || label.length() == 0 ?
+			getString("_UI_CompoundErrorFunction_type") :
+			getString("_UI_CompoundErrorFunction_type") + " " + label;
+	}
+
+
+	/**
+	 * 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(CompoundErrorFunction.class)) {
+			case AnalysisPackage.COMPOUND_ERROR_FUNCTION__USE_DEATHS:
+			case AnalysisPackage.COMPOUND_ERROR_FUNCTION__USE_CUM_SUM:
+			case AnalysisPackage.COMPOUND_ERROR_FUNCTION__USE_DAILY:
+				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);
+	}
+
+}