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) {
+		//
+	}
 
 }