Refectoring
diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java
index 0b5b137..4252338 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java
@@ -258,7 +258,7 @@
IAdapterManager adapterManager = Platform.getAdapterManager();
// We seem to need to force loading of the data provider, at least in the
// exemplar case
- Object provider = adapterManager.loadAdapter(this.getModel(), "org.eclipse.amp.agf.chart.IDataProvider");
+ Object provider = adapterManager.loadAdapter(this.getModel(), IDataProvider.ID);
if (!(provider instanceof IDataProvider)) {
throw new RuntimeException("Couldn't find data provider for chart model. Please ensure that a data provider adapter has been defined for the class: " + this.getModel().getClass());
diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistogramStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistogramStrategy.java
index 42d5d0b..b149dd2 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistogramStrategy.java
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistogramStrategy.java
@@ -117,7 +117,8 @@
}
}
- public void createLegend() {
+ @Override
+ public void createLegend() {
super.createLegend();
getLegend().setItemType(LegendItemType.CATEGORIES_LITERAL);
}
diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IDataProvider.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IDataProvider.java
index 816f806..d306e6c 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IDataProvider.java
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IDataProvider.java
@@ -20,60 +20,59 @@
import org.eclipse.jface.viewers.ILabelProvider;
// TODO: Auto-generated Javadoc
-/**
- * The Interface IDataProvider.
- */
+
public interface IDataProvider extends ILabelProvider {
+
+ public static final String ID = "org.eclipse.amp.agf.chart.IDataProvider";
+ /**
+ * Gets the data source.
+ *
+ * @param model the model
+ *
+ * @return the data source
+ */
+ public Object getDataSource(Object model);
- /**
- * Gets the data source.
- *
- * @param model the model
- *
- * @return the data source
- */
- public Object getDataSource(Object model);
+ /**
+ * Adds the listener.
+ *
+ * @param dataSource the data source
+ * @param listener the listener
+ */
+ public void addListener(Object dataSource, IDataSelectionListener listener);
- /**
- * Adds the listener.
- *
- * @param dataSource the data source
- * @param listener the listener
- */
- public void addListener(Object dataSource, IDataSelectionListener listener);
+ /**
+ * Removes the listener.
+ *
+ * @param dataSource the data source
+ * @param listener the listener
+ */
+ public void removeListener(Object dataSource, IDataSelectionListener listener);
- /**
- * Removes the listener.
- *
- * @param dataSource the data source
- * @param listener the listener
- */
- public void removeListener(Object dataSource, IDataSelectionListener listener);
+ /**
+ * Gets the values.
+ *
+ * @param valueSet the value set
+ *
+ * @return the values
+ */
+ public Object getValues(Object valueSet);
- /**
- * Gets the values.
- *
- * @param valueSet the value set
- *
- * @return the values
- */
- public Object getValues(Object valueSet);
+ /**
+ * Gets the value sets.
+ *
+ * @param valueSelection the value selection
+ *
+ * @return the value sets
+ */
+ public List getValueSets(Object valueSelection);
- /**
- * Gets the value sets.
- *
- * @param valueSelection the value selection
- *
- * @return the value sets
- */
- public List getValueSets(Object valueSelection);
-
- /**
- * Gets the category labels.
- *
- * @param dataSource the data source
- *
- * @return the category labels
- */
- public List<String> getCategoryLabels(Object dataSource);
+ /**
+ * Gets the category labels.
+ *
+ * @param dataSource the data source
+ *
+ * @return the category labels
+ */
+ public List<String> getCategoryLabels(Object dataSource);
}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
index 38400d6..b217411 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/EclipseEMFOutputRunner.java
@@ -4,7 +4,7 @@
import org.eclipse.amp.amf.parameters.AParInterpreter;
import org.eclipse.amp.escape.ide.EclipseEscapeRunner;
-import org.eclipse.amp.escape.view.EMFDataOutputView;
+import org.eclipse.amp.escape.view.FileEMFSimDataCollector;
import org.eclipse.core.resources.IResource;
import org.metaabm.SContext;
@@ -39,13 +39,13 @@
boolean found = false;
ArrayList scapeListeners = new ArrayList(getScape().getScapeListeners());
for (Object l : scapeListeners) {
- if (l instanceof EMFDataOutputView) {
+ if (l instanceof FileEMFSimDataCollector) {
found = true;
break;
}
}
if (!found) {
- getScape().addView(new EMFDataOutputView(resource, model));
+ getScape().addView(new FileEMFSimDataCollector(resource, model));
}
super.run();
}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFEMFOutputHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFEMFOutputHandler.java
index 7b60dfb..8636ff7 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFEMFOutputHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/amf/ide/ExecuteAMFEMFOutputHandler.java
@@ -16,7 +16,7 @@
package org.eclipse.amp.escape.amf.ide;
import org.eclipse.amp.escape.ide.EclipseEscapeRunner;
-import org.eclipse.amp.escape.view.EMFDataOutputView;
+import org.eclipse.amp.escape.view.FileEMFSimDataCollector;
import org.ascape.runtime.Runner;
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/EMFDataOutputView.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/EMFDataOutputView.java
deleted file mode 100644
index 3264fe6..0000000
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/EMFDataOutputView.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/**
- * <copyright>
- *
- * Copyright (c) 2009 Metascape, LLC.
- * 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:
- * Metascape - Initial API and Implementation
- *
- * </copyright>
- *
- */
-
-package org.eclipse.amp.escape.view;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TooManyListenersException;
-
-import org.eclipse.amp.amf.adata.Catalog;
-import org.eclipse.amp.amf.adata.DataPackage;
-import org.eclipse.amp.amf.adata.DataPoint;
-import org.eclipse.amp.amf.adata.Measurement;
-import org.eclipse.amp.amf.adata.Parameter;
-import org.eclipse.amp.amf.adata.ParameterSet;
-import org.eclipse.amp.amf.adata.Run;
-import org.eclipse.amp.amf.adata.ScaleType;
-import org.eclipse.amp.amf.adata.impl.DataFactoryImpl;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.BinaryResourceImpl;
-import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.ui.statushandlers.StatusManager;
-
-import org.ascape.model.event.ScapeEvent;
-import org.ascape.util.PropertyAccessor;
-import org.ascape.util.data.DataSeries;
-import org.ascape.view.nonvis.DataView;
-import org.metaabm.IValue;
-import org.metaabm.SAgent;
-import org.metaabm.SAttribute;
-import org.metaabm.SContext;
-import org.metaabm.SState;
-import org.metaabm.SStateValue;
-
-/**
- *
- * @author mparker
- *
- */
-public class EMFDataOutputView extends DataView {
-
- private static final long serialVersionUID = 1L;
- private ResourceSet resourceSet;
-
- private Catalog catalog;
-
- private Run currentRun;
-
- Map<DataSeries, Measurement> measureForSeries = new HashMap<DataSeries, Measurement>();
- private URI dataFileURI;
- private Resource dataResource;
-
- public final static IPath RESULTS_FOLDER = new Path("output");
- private final SContext model;
-
- public EMFDataOutputView(IResource resource, SContext model) {
- super();
- assert (resource != null);
- assert (model != null);
- this.model = model;
-
- IProject project = resource.getProject();
- IPath projectPath = RESULTS_FOLDER.append(
- resource.getProjectRelativePath().removeFirstSegments(1)
- .removeLastSegments(1)).append(
- getFileName(resource) + ".adata");
-
- dataFileURI = URI.createPlatformResourceURI(project.getName() + "/"
- + projectPath, true);
- }
-
- private String getFileName(IResource resource) {
- String name = ((IFile) resource).getProjectRelativePath()
- .removeFileExtension().lastSegment();
- // name += DateFormatUtils.format(System.currentTimeMillis(),
- // "MM-dd-yy_HH-mm-S");
- return name;
- }
-
- /**
- * @param scapeEvent
- * @throws TooManyListenersException
- * @see org.ascape.view.nonvis.DataView#scapeAdded(org.ascape.model.event.ScapeEvent)
- */
- public void scapeAdded(ScapeEvent scapeEvent)
- throws TooManyListenersException {
- super.scapeAdded(scapeEvent);
- getDataSelection().selectAll();
-
- Resource.Factory binResourceFactory = new Resource.Factory() {
- public Resource createResource(URI uri) {
- return new BinaryResourceImpl(uri);
- }
-
- };
- resourceSet = new ResourceSetImpl();
- resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
- .put("adata", binResourceFactory);
- // resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT,
- // Boolean.TRUE);
- // resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION,
- // Boolean.TRUE);
- // resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_DEPRECATED_METHODS,
- // Boolean.FALSE);
- boolean exists = resourceSet.getURIConverter()
- .exists(dataFileURI, null);
- if (exists) {
- dataResource = resourceSet.getResource(dataFileURI, true);
- catalog = (Catalog) dataResource.getContents().get(0);
- } else {
- dataResource = resourceSet.createResource(dataFileURI);
- catalog = DataFactoryImpl.eINSTANCE.createCatalog();
- dataResource.getContents().add(catalog);
- }
-
- saveResults();
- }
-
- /**
- * @param scapeEvent
- * @see org.ascape.model.event.DefaultScapeListener#scapeStarted(org.ascape.model.event.ScapeEvent)
- */
- public void scapeStarted(ScapeEvent scapeEvent) {
- currentRun = DataFactoryImpl.eINSTANCE.createRun();
- currentRun.setStarted(new Date());
-
- catalog.getRuns().add(currentRun);
-
- currentRun.setModel(model);
- currentRun.setName(getScape().getName());
-
- ParameterSet createParameterSet = DataFactoryImpl.eINSTANCE
- .createParameterSet();
- currentRun.getParameterSets().add(createParameterSet);
-
- // addParameter(createParameterSet, "runCount", new Integer(1));
- // addParameter(createParameterSet, "startPeriod", new
- // Integer(scape.getStartPeriod()));
- // addParameter(createParameterSet, "stopPeriod", new
- // Integer(scape.getPeriod()));
- // addParameter(createParameterSet, "randomSeed", new
- // Long(scape.getRandomSeed()));
-
- List accessors = scape.retrieveAllAccessorsOrdered();
- for (Iterator propertyAccessorIt = accessors.iterator(); propertyAccessorIt
- .hasNext();) {
- PropertyAccessor accessor = (PropertyAccessor) propertyAccessorIt
- .next();
- addParameter(createParameterSet, accessor.getName(),
- accessor.getValue());
- }
-
- measureForSeries = new HashMap<DataSeries, Measurement>();
- for (int i = 0; i < dataSelection.getSelectionSize(); i++) {
- DataSeries selectedSeries = dataSelection.getSelectedSeries(i);
- Measurement measure = DataFactoryImpl.eINSTANCE.createMeasurement();
- String measureName = selectedSeries.getDataPoint().getName();
- IValue valueForName = getValueForName(measureName);
- measure.setValue(valueForName);
- measure.setName(measureName);
-
- if (selectedSeries.getMeasureName() == "Count") {
- measure.setType(ScaleType.COUNT);
- } else if (selectedSeries.getMeasureName() == "Sum") {
- measure.setType(ScaleType.SUM);
- } else if (selectedSeries.getMeasureName() == "Average") {
- measure.setType(ScaleType.AVERAGE);
- } else if (selectedSeries.getMeasureName() == "Minimum") {
- measure.setType(ScaleType.MINIMUM);
- } else if (selectedSeries.getMeasureName() == "Maximum") {
- measure.setType(ScaleType.MAXIMUM);
- } else if (selectedSeries.getMeasureName() == "Standard Deviation") {
- measure.setType(ScaleType.STANDARD_DEVIATION);
- } else if (selectedSeries.getMeasureName() == "Variance") {
- measure.setType(ScaleType.VARIANCE);
- }
- measureForSeries.put(selectedSeries, measure);
-
- currentRun.getMeasurements().add(measure);
- }
-
- super.scapeStarted(scapeEvent);
- }
-
- private IValue getValueForName(String attrName) {
- String searchName = attrName.toLowerCase().replace(" ", "");
- for (EObject object : model.getAllAgents()) {
- SAgent agent = (SAgent) object;
- for (SAttribute attribute : agent.getAttributes()) {
- // TODO there is actually some low possibility of name clash
- // here..
- String matchName = attribute.getLabel();
- if (attribute instanceof SState) {
- for (SStateValue value : ((SState) attribute).getOptions()) {
- String stateName = value.getLabel() + " " + matchName;
- if (agent.getOwner() != null) {
- stateName = agent.getLabel() + " " + stateName;
- }
- stateName = stateName.toLowerCase().replace(" ", "");
- if (stateName.equals(searchName)) {
- return value;
- }
- }
- } else {
- if (agent.getOwner() != null) {
- matchName = agent.getLabel() + " " + matchName;
- }
- matchName = matchName.toLowerCase().replace(" ", "");
- if (matchName.equals(searchName)) {
- return attribute;
- }
- }
- }
- }
- StatusManager.getManager().handle(
- new Status(Status.WARNING, "org.eclipse.amp.escape.amf.ide",
- "Couldn't find attribute for parameter name: "
- + attrName));
- return null;
- }
-
- /**
- * @param scapeEvent
- * @see org.ascape.model.event.DefaultScapeListener#scapeIterated(org.ascape.model.event.ScapeEvent)
- */
- public void scapeIterated(ScapeEvent scapeEvent) {
- super.scapeIterated(scapeEvent);
- for (Object selected : dataSelection.getSelectedSeries()) {
- DataSeries selectedSeries = (DataSeries) selected;
- DataPoint dataPoint = DataFactoryImpl.eINSTANCE.createDataPoint();
- Measurement measurement = measureForSeries.get(selectedSeries);
- // dataPoint.setMeasure(measurement);
- dataPoint.setPeriod(getScape().getPeriod());
- dataPoint.setMeasurement(measurement);
- dataPoint.setValue(selectedSeries.getValue());
- measurement.getEntries().add(dataPoint);
- }
- }
-
- /**
- * @param attrName
- * @param integer
- */
- private void addParameter(ParameterSet set, String attrName, Object object) {
- Parameter param = DataFactoryImpl.eINSTANCE.createParameter();
- IValue valueForName = getValueForName(attrName);
- if (valueForName instanceof SAttribute) {
- param.setAttribute((SAttribute) valueForName);
- }
- param.setName(attrName);
- // Object createFromString = null;
- // // EcoreUtil.create(EcorePackage.Literals.EINTEGER_OBJECT);
- // if (object instanceof Boolean) {
- // createFromString =
- // EcoreUtil.createFromString(EcorePackage.eINSTANCE.getEBoolean(),
- // object
- // .toString());
- // } else if (object instanceof String) {
- // createFromString =
- // EcoreUtil.createFromString(EcorePackage.eINSTANCE.getEString(),
- // object
- // .toString());
- // } else if (object instanceof Double) {
- // createFromString =
- // EcoreUtil.createFromString(EcorePackage.eINSTANCE.getEDouble(),
- // object
- // .toString());
- // } else if (object instanceof Integer) {
- // createFromString = EcoreUtil
- // .createFromString(EcorePackage.eINSTANCE.getEInt(),
- // object.toString());
- // }
- // if (createFromString != null) {
- param.eSet(DataPackage.Literals.PARAMETER__VALUE, object.toString());
- set.getMembers().add(param);
- // }
- }
-
- /**
- * @param scapeEvent
- * @see org.ascape.model.event.DefaultScapeListener#scapeStopped(org.ascape.model.event.ScapeEvent)
- */
- public void scapeStopped(ScapeEvent scapeEvent) {
- currentRun.setFinished(new Date());
- // let's save results in case we get interrupted
- saveResults();
- super.scapeStopped(scapeEvent);
- }
-
- @Override
- public void scapeRemoved(ScapeEvent scapeEvent) {
- // TODO Auto-generated method stub
- super.scapeRemoved(scapeEvent);
- if (dataResource != null) {
- dataResource.unload();
- resourceSet.getResources().remove(dataResource);
- }
- }
-
- private synchronized void saveResults() {
- Map<Object, Object> saveOptions = new HashMap<Object, Object>();
- try {
- saveOptions.put(BinaryResourceImpl.OPTION_SAVE_ONLY_IF_CHANGED,
- null);
- dataResource.save(saveOptions);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/EMFSimDataCollector.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/EMFSimDataCollector.java
new file mode 100644
index 0000000..3420167
--- /dev/null
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/EMFSimDataCollector.java
@@ -0,0 +1,188 @@
+package org.eclipse.amp.escape.view;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TooManyListenersException;
+
+import org.ascape.model.event.ScapeEvent;
+import org.ascape.util.PropertyAccessor;
+import org.ascape.util.data.DataSeries;
+import org.ascape.view.nonvis.DataView;
+import org.eclipse.amp.amf.adata.Catalog;
+import org.eclipse.amp.amf.adata.DataPackage;
+import org.eclipse.amp.amf.adata.DataPoint;
+import org.eclipse.amp.amf.adata.Measurement;
+import org.eclipse.amp.amf.adata.Parameter;
+import org.eclipse.amp.amf.adata.ParameterSet;
+import org.eclipse.amp.amf.adata.Run;
+import org.eclipse.amp.amf.adata.ScaleType;
+import org.eclipse.amp.amf.adata.impl.DataFactoryImpl;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ui.statushandlers.StatusManager;
+import org.metaabm.IValue;
+import org.metaabm.SAgent;
+import org.metaabm.SAttribute;
+import org.metaabm.SContext;
+import org.metaabm.SState;
+import org.metaabm.SStateValue;
+/**
+ * Collect the Simulationdata in a Catalog Data structure
+ */
+public class EMFSimDataCollector extends DataView {
+
+ private Run currentRun;
+
+ private Catalog catalog;
+
+ private Map<DataSeries, Measurement> measureForSeries;
+
+ private final SContext model;
+
+ public EMFSimDataCollector(SContext model) {
+ assert (model != null);
+ this.model = model;
+ measureForSeries = new HashMap<DataSeries, Measurement>();
+ catalog = DataFactoryImpl.eINSTANCE.createCatalog();
+ }
+
+ @Override
+ public void scapeStopped(ScapeEvent scapeEvent) {
+ super.scapeStopped(scapeEvent);
+ currentRun.setFinished(new Date());
+ }
+
+ @Override
+ public void scapeStarted(ScapeEvent scapeEvent) {
+ super.scapeStarted(scapeEvent);
+
+ currentRun = DataFactoryImpl.eINSTANCE.createRun();
+ currentRun.setStarted(new Date());
+
+ catalog.getRuns().add(currentRun);
+
+ currentRun.setModel(model);
+ currentRun.setName(getScape().getName());
+
+ ParameterSet createParameterSet = DataFactoryImpl.eINSTANCE.createParameterSet();
+ currentRun.getParameterSets().add(createParameterSet);
+
+ @SuppressWarnings("unchecked")
+ List<PropertyAccessor> accessors = scape.retrieveAllAccessorsOrdered();
+ for (Iterator<PropertyAccessor> propertyAccessorIt = accessors.iterator(); propertyAccessorIt.hasNext();) {
+ PropertyAccessor accessor = propertyAccessorIt.next();
+ addParameter(createParameterSet, accessor.getName(), accessor.getValue());
+ }
+
+ measureForSeries = new HashMap<DataSeries, Measurement>();
+ for (int i = 0; i < dataSelection.getSelectionSize(); i++) {
+ DataSeries selectedSeries = dataSelection.getSelectedSeries(i);
+ Measurement measure = DataFactoryImpl.eINSTANCE.createMeasurement();
+ String measureName = selectedSeries.getDataPoint().getName();
+ IValue valueForName = getValueForName(measureName);
+ measure.setValue(valueForName);
+ measure.setName(measureName);
+
+ if (selectedSeries.getMeasureName() == "Count") {
+ measure.setType(ScaleType.COUNT);
+ } else if (selectedSeries.getMeasureName() == "Sum") {
+ measure.setType(ScaleType.SUM);
+ } else if (selectedSeries.getMeasureName() == "Average") {
+ measure.setType(ScaleType.AVERAGE);
+ } else if (selectedSeries.getMeasureName() == "Minimum") {
+ measure.setType(ScaleType.MINIMUM);
+ } else if (selectedSeries.getMeasureName() == "Maximum") {
+ measure.setType(ScaleType.MAXIMUM);
+ } else if (selectedSeries.getMeasureName() == "Standard Deviation") {
+ measure.setType(ScaleType.STANDARD_DEVIATION);
+ } else if (selectedSeries.getMeasureName() == "Variance") {
+ measure.setType(ScaleType.VARIANCE);
+ }
+ measureForSeries.put(selectedSeries, measure);
+
+ currentRun.getMeasurements().add(measure);
+ }
+
+ super.scapeStarted(scapeEvent);
+ }
+
+ @Override
+ public void scapeIterated(ScapeEvent scapeEvent) {
+ super.scapeIterated(scapeEvent);
+ for (Object selected : dataSelection.getSelectedSeries()) {
+ DataSeries selectedSeries = (DataSeries) selected;
+ DataPoint dataPoint = DataFactoryImpl.eINSTANCE.createDataPoint();
+ Measurement measurement = measureForSeries.get(selectedSeries);
+ // dataPoint.setMeasure(measurement);
+ dataPoint.setPeriod(getScape().getPeriod());
+ dataPoint.setMeasurement(measurement);
+ dataPoint.setValue(selectedSeries.getValue());
+ measurement.getEntries().add(dataPoint);
+ }
+ }
+
+ @Override
+ public void scapeAdded(ScapeEvent scapeEvent) throws TooManyListenersException {
+ super.scapeAdded(scapeEvent);
+ getDataSelection().selectAll();
+ }
+
+ private void addParameter(ParameterSet set, String attrName, Object object) {
+ Parameter param = DataFactoryImpl.eINSTANCE.createParameter();
+ IValue valueForName = getValueForName(attrName);
+ if (valueForName instanceof SAttribute) {
+ param.setAttribute((SAttribute) valueForName);
+ }
+ param.setName(attrName);
+
+ param.eSet(DataPackage.Literals.PARAMETER__VALUE, object.toString());
+ set.getMembers().add(param);
+ }
+
+ private IValue getValueForName(String attrName) {
+ String searchName = attrName.toLowerCase().replace(" ", "");
+ for (EObject object : model.getAllAgents()) {
+ SAgent agent = (SAgent) object;
+ for (SAttribute attribute : agent.getAttributes()) {
+ // TODO there is actually some low possibility of name clash
+ // here..
+ String matchName = attribute.getLabel();
+ if (attribute instanceof SState) {
+ for (SStateValue value : ((SState) attribute).getOptions()) {
+ String stateName = value.getLabel() + " " + matchName;
+ if (agent.getOwner() != null) {
+ stateName = agent.getLabel() + " " + stateName;
+ }
+ stateName = stateName.toLowerCase().replace(" ", "");
+ if (stateName.equals(searchName)) {
+ return value;
+ }
+ }
+ } else {
+ if (agent.getOwner() != null) {
+ matchName = agent.getLabel() + " " + matchName;
+ }
+ matchName = matchName.toLowerCase().replace(" ", "");
+ if (matchName.equals(searchName)) {
+ return attribute;
+ }
+ }
+ }
+ }
+ StatusManager.getManager().handle(
+ new Status(Status.WARNING, "org.eclipse.amp.escape.amf.ide", "Couldn't find attribute for parameter name: "
+ + attrName));
+ return null;
+ }
+
+ public void setCatalog(Catalog catalog) {
+ this.catalog = catalog;
+ }
+
+ public Catalog getCatalog() {
+ return catalog;
+ }
+}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/FileEMFSimDataCollector.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/FileEMFSimDataCollector.java
new file mode 100644
index 0000000..afd889a
--- /dev/null
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.amf.ide/src/org/eclipse/amp/escape/view/FileEMFSimDataCollector.java
@@ -0,0 +1,141 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2009 Metascape, LLC.
+ * 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:
+ * Metascape - Initial API and Implementation
+ *
+ * </copyright>
+ *
+ */
+
+package org.eclipse.amp.escape.view;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TooManyListenersException;
+
+import org.ascape.model.event.ScapeEvent;
+import org.eclipse.amp.amf.adata.Catalog;
+import org.eclipse.amp.amf.adata.impl.DataFactoryImpl;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.BinaryResourceImpl;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.metaabm.SContext;
+
+/**
+ *
+ * @author mparker
+ *
+ */
+public class FileEMFSimDataCollector extends EMFSimDataCollector {
+
+ private static final long serialVersionUID = 1L;
+
+ private ResourceSet resourceSet;
+
+ private URI dataFileURI;
+
+ private Resource dataResource;
+
+ public final static IPath RESULTS_FOLDER = new Path("output");
+
+ public FileEMFSimDataCollector(IResource resource, SContext model) {
+ super(model);
+ assert (resource != null);
+
+ IProject project = resource.getProject();
+ IPath projectPath = RESULTS_FOLDER.append(
+ resource.getProjectRelativePath().removeFirstSegments(1).removeLastSegments(1)).append(
+ getFileName(resource) + ".adata");
+
+ dataFileURI = URI.createPlatformResourceURI(project.getName() + "/" + projectPath, true);
+ }
+
+ private String getFileName(IResource resource) {
+ String name = ((IFile) resource).getProjectRelativePath().removeFileExtension().lastSegment();
+ // name += DateFormatUtils.format(System.currentTimeMillis(),
+ // "MM-dd-yy_HH-mm-S");
+ return name;
+ }
+
+ /**
+ * @param scapeEvent
+ * @throws TooManyListenersException
+ * @see org.ascape.view.nonvis.DataView#scapeAdded(org.ascape.model.event.ScapeEvent)
+ */
+ @Override
+ public void scapeAdded(ScapeEvent scapeEvent) throws TooManyListenersException {
+ super.scapeAdded(scapeEvent);
+
+ Resource.Factory binResourceFactory = new Resource.Factory() {
+
+ public Resource createResource(URI uri) {
+ return new BinaryResourceImpl(uri);
+ }
+
+ };
+ resourceSet = new ResourceSetImpl();
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("adata", binResourceFactory);
+ // resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT,
+ // Boolean.TRUE);
+ // resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION,
+ // Boolean.TRUE);
+ // resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_DEPRECATED_METHODS,
+ // Boolean.FALSE);
+ boolean exists = resourceSet.getURIConverter().exists(dataFileURI, null);
+ if (exists) {
+ dataResource = resourceSet.getResource(dataFileURI, true);
+ setCatalog((Catalog) dataResource.getContents().get(0));
+ } else {
+ dataResource = resourceSet.createResource(dataFileURI);
+ setCatalog(DataFactoryImpl.eINSTANCE.createCatalog());
+ dataResource.getContents().add(getCatalog());
+ }
+
+ saveResults();
+ }
+
+ /**
+ * @param scapeEvent
+ * @see org.ascape.model.event.DefaultScapeListener#scapeStopped(org.ascape.model.event.ScapeEvent)
+ */
+ @Override
+ public void scapeStopped(ScapeEvent scapeEvent) {
+ super.scapeStopped(scapeEvent);
+ saveResults();
+ }
+
+ @Override
+ public void scapeRemoved(ScapeEvent scapeEvent) {
+ // TODO Auto-generated method stub
+ super.scapeRemoved(scapeEvent);
+ if (dataResource != null) {
+ dataResource.unload();
+ resourceSet.getResources().remove(dataResource);
+ }
+ }
+
+ private synchronized void saveResults() {
+ Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+ try {
+ saveOptions.put(BinaryResourceImpl.OPTION_SAVE_ONLY_IF_CHANGED, null);
+ dataResource.save(saveOptions);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/AscapeDataProvider.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/AscapeDataProvider.java
index 49beb12..4e4e640 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/AscapeDataProvider.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/AscapeDataProvider.java
@@ -32,14 +32,12 @@
import org.eclipse.swt.graphics.Image;
// TODO: Auto-generated Javadoc
-/**
- * The Class AscapeDataProvider.
- */
+
public class AscapeDataProvider implements IDataProvider, ILabelProvider {
- Map<Scape, DataSelection> dataSelectionForScape = new HashMap<Scape, DataSelection>();
+ private Map<Scape, DataSelection> dataSelectionForScape = new HashMap<Scape, DataSelection>();
- Map<IDataSelectionListener, Observer> observerForListener = new HashMap<IDataSelectionListener, Observer>();
+ private Map<IDataSelectionListener, Observer> observerForListener = new HashMap<IDataSelectionListener, Observer>();
/**
* @param model
@@ -136,6 +134,7 @@
* @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void addListener(ILabelProviderListener listener) {
+ //
}
/**
@@ -143,6 +142,7 @@
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
public void dispose() {
+ //
}
/**
@@ -160,5 +160,6 @@
* @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void removeListener(ILabelProviderListener listener) {
+ //
}
}
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/ClearSelectionAction.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/ClearSelectionAction.java
index a27a0f0..6f70fe8 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/ClearSelectionAction.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.ascape.chart/src/org/eclipse/amp/escape/ascape/chart/ClearSelectionAction.java
@@ -21,39 +21,37 @@
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
-// TODO: Auto-generated Javadoc
-/**
- * The Class DisplayLegendAction.
- */
+
public class ClearSelectionAction implements IViewActionDelegate {
- ChartCustomizer customizer;
+ private ChartCustomizer customizer;
- /**
- *
- * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
- */
- public void run(IAction action) {
- DataSelection selection = (DataSelection) ((AscapeDataProvider) customizer.getChartEditPart().getDataProvider())
- .getDataSource(customizer.getChartEditPart().getModel());
- selection.clearSelection();
- customizer.refresh();
- }
+ /**
+ *
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run(IAction action) {
+ DataSelection selection = (DataSelection) ((AscapeDataProvider) customizer.getChartEditPart().getDataProvider())
+ .getDataSource(customizer.getChartEditPart().getModel());
+ selection.clearSelection();
+ customizer.refresh();
+ }
- /**
- *
- * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
- */
- public void init(IViewPart view) {
- customizer = (ChartCustomizer) view;
- }
+ /**
+ *
+ * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+ */
+ public void init(IViewPart view) {
+ customizer = (ChartCustomizer) view;
+ }
- /**
- *
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
- * org.eclipse.jface.viewers.ISelection)
- */
- public void selectionChanged(IAction action, ISelection selection) {
- }
+ /**
+ *
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ //
+ }
}