moved projects into subfolders
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.classpath b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.classpath
new file mode 100644
index 0000000..87e7173
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry exported="true" kind="lib" path="bin/"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.project b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.project
new file mode 100644
index 0000000..9a55eb9
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.server.backchannel</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/build.properties b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/build.properties
new file mode 100644
index 0000000..79f4b47
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/build.properties
@@ -0,0 +1,7 @@
+output.. = bin/
+bin.includes = META-INF/,\
+ plugin.xml,\
+ bin/,\
+ .
+src.includes = bin/
+source.. = src/
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/plugin.xml b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/plugin.xml
new file mode 100644
index 0000000..15b0a16
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.emf.emfstore.server.poststartuplistener">
+ <listener
+ class="org.eclipse.emf.emfstore.server.backchannel.BachchannelInitiator">
+ </listener>
+ </extension>
+
+</plugin>
diff --git a/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/pom.xml b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/pom.xml
new file mode 100644
index 0000000..ec342a0
--- /dev/null
+++ b/Archive/EMFStoreStandalone/org.eclipse.emf.emfstore.server.backchannel/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.server.backchannel</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.checkstyle b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.classpath b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.project b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.project
new file mode 100644
index 0000000..796f4f5
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.client.ui.errorreporting</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.settings/org.eclipse.jdt.core.prefs b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ef029ba
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Thu Aug 23 11:06:00 CEST 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/META-INF/MANIFEST.MF b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e68ecef
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Error Reporting Plugin
+Bundle-SymbolicName: org.eclipse.emf.emfstore.client.ui.errorreporting;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.client.ui.errorreporting.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.emf.emfstore.client
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
+Export-Package: org.eclipse.emf.emfstore.client.ui.errorreporting
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/build.properties b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/build.properties
new file mode 100644
index 0000000..ecdb8a5
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ schema/
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/plugin.xml b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/plugin.xml
new file mode 100644
index 0000000..fa6da77
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/plugin.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+ <extension-point id="org.eclipse.emf.emfstore.client.ui.errorreporting" name="customLog" schema="schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd"/>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ id="org.eclipse.emf.emfstore.ui.createErrorLog"
+ name="Create Error Log">
+ </command>
+ </extension>
+ <extension
+ id="org.eclipse.emf.emfstore.ui.createErrorLog"
+ point="org.eclipse.ui.handlers">
+ <handler
+ class="org.eclipse.emf.emfstore.client.ui.errorreporting.MailBugHandler"
+ commandId="org.eclipse.emf.emfstore.ui.createErrorLog">
+ </handler>
+ </extension>
+ <extension
+ point="org.eclipse.emf.emfstore.client.exceptionObserver">
+ <observer
+ exceptionObserver="org.eclipse.emf.emfstore.client.ui.errorreporting.EmfStoreExceptionObserver">
+ </observer>
+ </extension>
+ <extension
+ point="org.eclipse.ui.statusHandlers">
+ <statusHandler
+ class="org.eclipse.emf.emfstore.client.ui.errorreporting.EmfStoreStatusHandler"
+ id="org.eclipse.emf.emfstore.ui.statusHandler">
+ </statusHandler>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ class="org.eclipse.emf.emfstore.client.ui.errorreporting.ErrorReportingPreferencePage"
+ id="org.eclipse.emf.emfstore.client.ui.errorreporting.preferencePage"
+ name="Error Reporting">
+ </page>
+ </extension>
+</plugin>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd
new file mode 100644
index 0000000..d03b919
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/schema/org.eclipse.emf.emfstore.ui.errorreporting.exsd
@@ -0,0 +1,131 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.emf.emfstore.client.ui.errorreporting" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.emf.emfstore.client.ui.errorreporting" id="org.eclipse.emf.emfstore.client.ui.errorreporting.customLog" name="org.eclipse.emf.emfstore.client.ui.errorreporting.customLog"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appInfo>
+ <meta.element />
+ </appInfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="loggable" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="options" minOccurs="0" maxOccurs="1"/>
+ <element ref="configurationProvider"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="loggable">
+ <complexType>
+ <attribute name="loggableClass" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.emf.emfstore.client.ui.errorreporting.ILoggable"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="options">
+ <complexType>
+ <attribute name="enabled" type="boolean">
+ <annotation>
+ <documentation>
+ Whether the error reporting feature is enabled.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="configurationProvider">
+ <complexType>
+ <attribute name="providerClass" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.emf.emfstore.client.ui.errorreporting.MailBugConfigurationProvider"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiinfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/Activator.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/Activator.java
new file mode 100644
index 0000000..6840187
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/Activator.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Activator class for the error reporting plugin.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * Error reporting plugin ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.emf.emfstore.client.ui.errorreporting"; //$NON-NLS-1$
+
+ private static Activator plugin;
+
+ /**
+ * Constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void start(BundleContext context) throws Exception {
+ // END SUPRESS CATCH EXCEPTION
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void stop(BundleContext context) throws Exception {
+ // END SUPRESS CATCH EXCEPTION
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/DefaultMailBugConfigurationProvider.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/DefaultMailBugConfigurationProvider.java
new file mode 100644
index 0000000..be42d19
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/DefaultMailBugConfigurationProvider.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import org.eclipse.emf.emfstore.common.CommonUtil;
+
+/**
+ * Error reporting configuration provider with default values.<br/>
+ * Only the E-Mail address must be configured.
+ *
+ * @author emueller
+ *
+ */
+public abstract class DefaultMailBugConfigurationProvider implements IMailBugConfigurationProvider {
+
+ private static final String EMAIL_BODY = "Thank you for reporting this bug. Please help us to fix the problem by following these steps:\n\n"
+ + "1. Give a summary\n"
+ + "<Description>\n\n"
+ + "2. Describe steps to reproduce the error\n"
+ + "\t1. <Step 1>\n" + "\t2. <Step 2>\n\n";
+
+ private static final String EMAIL_BODY_ADDITIONAL_TEXT = "3. Paste (Ctrl+v) the content of the clipboard below (parts of the log file have been copied to it)\n"
+ + "\t<Content from Log File>";
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getEmailSubject() {
+ return "EMFStore Error Report";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getEmailBody(boolean errorDiagnosisCaptured) {
+
+ StringBuffer body = new StringBuffer(EMAIL_BODY);
+
+ if (errorDiagnosisCaptured) {
+ try {
+ body.append(URLEncoder.encode(EMAIL_BODY_ADDITIONAL_TEXT, CommonUtil.getEncoding()));
+ } catch (UnsupportedEncodingException e) {
+ // ignore
+ }
+ }
+
+ return body.toString();
+ }
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreExceptionObserver.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreExceptionObserver.java
new file mode 100644
index 0000000..abef653
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreExceptionObserver.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.text.MessageFormat;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.exceptions.MissingCommandException;
+import org.eclipse.emf.emfstore.client.model.observers.ExceptionObserver;
+import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionPoint;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * An exception observer that collects logs.
+ *
+ * @author Maximilian Koegel
+ */
+public class EmfStoreExceptionObserver implements ExceptionObserver {
+
+ private static EmfStoreExceptionObserver instance;
+ private Set<ExceptionLog> exceptionLogs;
+ private Boolean enabled;
+
+ /**
+ * Constructor.
+ */
+ public EmfStoreExceptionObserver() {
+ instance = this;
+ exceptionLogs = new HashSet<ExceptionLog>();
+ ExtensionPoint extensionPoint = new ExtensionPoint(Activator.PLUGIN_ID);
+ enabled = extensionPoint.getBoolean("enabled", true);
+ }
+
+ /**
+ * Returns the instance.
+ *
+ * @return the instance
+ */
+ public static EmfStoreExceptionObserver getInstance() {
+ if (instance == null) {
+ instance = new EmfStoreExceptionObserver();
+ }
+ return instance;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean handleError(RuntimeException e) {
+
+ if (!enabled) {
+ return false;
+ }
+
+ if (Configuration.isDebugMode()) {
+
+ MailBugHandler bugHandler = new MailBugHandler();
+
+ try {
+ bugHandler.execute(new ExecutionEvent());
+ } catch (ExecutionException exception) {
+ WorkspaceUtil.handleException(exception);
+ }
+
+ ErrorDialog
+ .openError(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "DEBUG MODE ACTIVE: An Error Occured",
+ MessageFormat
+ .format(
+ "This error message only appears if debug mode is active. \n"
+ + "Although this error message might be an error itself, it might help to find bugs faster. \n"
+ + "The most recent log has been copied to the clipboard, please add it to the bug report. Thanks! \n"
+ + "To disable, launch without {0}={1} switch.", Configuration.DEBUG_SWITCH,
+ Configuration.DEBUG_SWITCH_ENABLED_VALUE), new Status(Status.ERROR,
+ "org.eclipse.emf.emfstore.client", "An error occured.", e));
+
+ throw e;
+ }
+
+ // MissingCommandException should only be logged if the debug switch is not set
+ if (e.getCause() instanceof MissingCommandException) {
+ return true;
+ }
+
+ for (ExceptionLog exceptionLog : exceptionLogs) {
+ exceptionLog.addException(e);
+ }
+
+ return true;
+ }
+
+ /**
+ * Adds a log.
+ *
+ * @param log
+ * the log being added
+ */
+ public void addLog(ExceptionLog log) {
+ exceptionLogs.add(log);
+ }
+
+ /**
+ * Removes a log.
+ *
+ * @param log
+ * the log to be removed
+ */
+ public void removeLog(ExceptionLog log) {
+ exceptionLogs.remove(log);
+ }
+
+ /**
+ * Returns the log.
+ *
+ * @return the log
+ */
+ public ExceptionLog getLog() {
+ return new ExceptionLog(this);
+ }
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreStatusHandler.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreStatusHandler.java
new file mode 100644
index 0000000..f39e5be
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/EmfStoreStatusHandler.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import org.eclipse.ui.statushandlers.WorkbenchErrorHandler;
+import org.eclipse.ui.statushandlers.WorkbenchStatusDialogManager;
+
+/**
+ * Status handler for enabling the submission of a bug via mail.
+ *
+ * @author Maximilian Koegel
+ */
+public class EmfStoreStatusHandler extends WorkbenchErrorHandler {
+
+ @Override
+ protected void configureStatusDialog(WorkbenchStatusDialogManager statusDialog) {
+ super.configureStatusDialog(statusDialog);
+ statusDialog.enableDefaultSupportArea(true);
+ statusDialog.setSupportAreaProvider(new MailBugStatusAreaProvider());
+ }
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferencePage.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferencePage.java
new file mode 100644
index 0000000..2567d08
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferencePage.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.io.File;
+
+import org.eclipse.jface.preference.DirectoryFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Preference page for error reporting feature.
+ *
+ * @author emueller
+ *
+ */
+public class ErrorReportingPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+ private DirectoryFieldEditor zipPathEditor;
+
+ /**
+ * Default constructor.
+ */
+ public ErrorReportingPreferencePage() {
+ super(GRID);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(Activator.getDefault().getPreferenceStore());
+ getPreferenceStore().setDefault(ErrorReportingPreferences.ZIP_PATH_KEY,
+ ErrorReportingPreferences.ZIP_PATH_DEFAULT);
+ }
+
+ private boolean validateZipPath(String zipPath) {
+ return new File(zipPath).exists();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void createFieldEditors() {
+ zipPathEditor = new DirectoryFieldEditor(ErrorReportingPreferences.ZIP_PATH_KEY, "&Zip path:",
+ getFieldEditorParent());
+ addField(zipPathEditor);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void checkState() {
+
+ super.checkState();
+ boolean validZipPath = validateZipPath(zipPathEditor.getStringValue());
+
+ if (validZipPath) {
+ setValid(true);
+ setErrorMessage(null);
+ } else {
+ setValid(false);
+ setErrorMessage("Invalid zip path. \n");
+ }
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void propertyChange(PropertyChangeEvent event) {
+
+ if (event.getProperty().equals("field_editor_value")) {
+ checkState();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferences.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferences.java
new file mode 100644
index 0000000..81c7d82
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingPreferences.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.io.File;
+import java.util.Arrays;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Preference keys and default values for error reporting feature.
+ *
+ * @author emueller
+ *
+ */
+public final class ErrorReportingPreferences {
+
+ private ErrorReportingPreferences() {
+
+ }
+
+ /**
+ * The qualifier of the preferences used by the error reporting feature.
+ */
+ public static final String QUALIFIER = "org.eclipse.emf.emfstore.client.ui.errorreporting";
+
+ /**
+ * Preference key for the zip path.
+ */
+ public static final String ZIP_PATH_KEY = "zipPath";
+
+ /**
+ * Default value for the zip path.
+ */
+ public static final String ZIP_PATH_DEFAULT = StringUtils.join(
+ Arrays.asList(System.getProperty("user.home"), "Desktop"), File.separatorChar);
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingUtil.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingUtil.java
new file mode 100644
index 0000000..e537923
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ErrorReportingUtil.java
@@ -0,0 +1,352 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.awt.AWTException;
+import java.awt.HeadlessException;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionElement;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionPoint;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+
+/**
+ * Utility class for capturing system specific information for debugging purposes.
+ *
+ * @author emueller
+ */
+public final class ErrorReportingUtil {
+
+ private static final String CUSTOMLOG_EXTENSION_POINT_ID = "org.eclipse.emf.emfstore.client.ui.errorreporting";
+ private static final String SCREENSHOT_FOLDER_NAME = "screenshots";
+ private static final String DEFAULT_SCREENSHOT_PREFIX = "emfstore-screenshot-";
+ private static final String DEFAULT_SYSINFO_PREFIX = "emfstore-sysinfo-";
+ private static final String SYSINFO_SUFFIX = "txt";
+
+ private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
+
+ /**
+ * Private constructor.
+ */
+ private ErrorReportingUtil() {
+
+ }
+
+ private static String getLogText() {
+
+ String filename = Platform.getLogFileLocation().toOSString();
+ File log = new File(filename);
+
+ try {
+ String version = Configuration.getClientVersion().getVersion();
+ String logFileContent = FileUtils.readFileToString(log);
+
+ StringBuffer result = new StringBuffer(16384);
+ result.append(MessageFormat.format("EMFStore client {0}. Log copied at {1}\n\n", version, SimpleDateFormat
+ .getDateTimeInstance().format(new Date())));
+ result.append(logFileContent);
+
+ return result.toString();
+ } catch (IOException ex) {
+ WorkspaceUtil.logException("Exception while copying log to clipboard", ex);
+ }
+
+ return null;
+ }
+
+ /**
+ * Copies the content of the current log file to the clipboard.
+ *
+ * @param window
+ * the window that is used to determine which Display to copy to
+ */
+ public static void copyLogToClipboard(IWorkbenchWindow window) {
+ String text = getLogText();
+ Clipboard clipboard = null;
+
+ if (text == null) {
+ return;
+ }
+
+ try {
+ clipboard = new Clipboard(window.getShell().getDisplay());
+ clipboard.setContents(new Object[] { text }, new Transfer[] { TextTransfer.getInstance() });
+ } finally {
+ if (clipboard != null) {
+ clipboard.dispose();
+ }
+ }
+ }
+
+ /**
+ * Creates the error diagnosis file.
+ *
+ * @param date
+ * the date that will be written to the error diagnosis file in order to indicate when the
+ * file was created
+ * @param path
+ * the parent path under which the error diagnosis file will be put
+ * @param statusAdapter
+ * a status adapter that may contain the most recent stack trace, that will be copied
+ * into the error diagnosis file
+ * @return the absolute path to the created error diagnosis file
+ */
+ public static String captureSysInfo(Date date, String path, StatusAdapter statusAdapter) {
+
+ File temp = new File(path);
+ FileWriter fileWriter = null;
+ BufferedWriter bufferedWriter = null;
+
+ temp.deleteOnExit();
+
+ try {
+ Runtime runtime = Runtime.getRuntime();
+ RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
+ fileWriter = new FileWriter(temp);
+
+ bufferedWriter = new BufferedWriter(fileWriter);
+ bufferedWriter.write(MessageFormat.format("Log file created on {0}\n", new Date()));
+ bufferedWriter.write(MessageFormat.format("Client version: {0} {1}\n", Configuration.getClientVersion()
+ .getName(), Configuration.getClientVersion().getVersion()));
+ bufferedWriter.write("List of open editors:\n");
+
+ if (getOpenEditorIDs().size() == 0) {
+ bufferedWriter.write("\t<None>\n");
+ } else {
+ for (String viewId : getOpenEditorIDs()) {
+ bufferedWriter.write(MessageFormat.format("\t{0}\n", viewId));
+ }
+ }
+
+ bufferedWriter.write(MessageFormat.format("Working directory: {0}", System.getProperty("user.dir")));
+ bufferedWriter.write(MessageFormat.format("System user: {0}", System.getProperty("user.name")));
+ bufferedWriter.write(MessageFormat.format("Memory usage: {0}/{1} MB",
+ toMb(runtime.totalMemory() - runtime.freeMemory()), toMb(runtime.maxMemory())));
+ bufferedWriter.write(MessageFormat.format("Available processors (cores): {0}\n",
+ runtime.availableProcessors()));
+ bufferedWriter.write(MessageFormat.format("Java version: {0}", System.getProperty("java.version")));
+ bufferedWriter.write(MessageFormat.format("OS version: {0}", System.getProperty("os.version")));
+ bufferedWriter.write("VM Startup parameters:\n");
+
+ for (String vmArg : runtimeMXBean.getInputArguments()) {
+ bufferedWriter.write(MessageFormat.format("\t{0}\n", vmArg));
+ }
+
+ ExtensionPoint extPoint = new ExtensionPoint(CUSTOMLOG_EXTENSION_POINT_ID);
+ for (ExtensionElement el : extPoint.getExtensionElements()) {
+ ILoggable loggable = el.getClass("loggableClass", ILoggable.class);
+
+ if (loggable == null) {
+ continue;
+ }
+
+ bufferedWriter.write(loggable.getLoggable());
+ }
+
+ if (statusAdapter != null) {
+ bufferedWriter.write(MessageFormat.format("Stacktrace: {0}\n", getStatus(statusAdapter)));
+ }
+
+ return temp.getAbsolutePath();
+ } catch (IOException e) {
+ WorkspaceUtil.logException("Error while writing error diagnosis file: ", e);
+ } finally {
+ try {
+ if (bufferedWriter != null) {
+ bufferedWriter.close();
+ }
+
+ if (fileWriter != null) {
+ fileWriter.close();
+ }
+ } catch (IOException e) {
+ WorkspaceUtil.logException("Error while closing error diagnosis stream.", e);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Creates the error diagnosis file.
+ *
+ * @param date
+ * the date that will be written to the error diagnosis file in order to indicate when the
+ * file was created
+ * @param path
+ * the parent path under which the error diagnosis file will be put
+ * @return the absolute path to the created error diagnosis file
+ */
+ public static String captureSysInfo(Date date, String path) {
+ return captureSysInfo(date, path, null);
+ }
+
+ /**
+ * Returns a list of strings containing the IDs of all opened editors.
+ *
+ * @return a list of strings containing the IDs of all opened editors
+ */
+ private static List<String> getOpenEditorIDs() {
+
+ List<String> openedEditors = new ArrayList<String>();
+ IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+
+ for (IEditorReference editorRef : activePage.getEditorReferences()) {
+ openedEditors.add(editorRef.getId());
+ }
+
+ return openedEditors;
+ }
+
+ private static String getStatus(StatusAdapter statusAdapter) {
+ StringBuilder sb = new StringBuilder();
+ addException(sb, statusAdapter.getStatus());
+ String logText = sb.toString();
+ if (logText == null || logText.length() == 0) {
+ logText = "Could not find exception";
+ }
+ return logText;
+ }
+
+ private static void addException(StringBuilder collector, IStatus iStatus) {
+ if (iStatus instanceof MultiStatus) {
+ MultiStatus ms = (MultiStatus) iStatus;
+ IStatus[] children = ms.getChildren();
+ for (IStatus childStatus : children) {
+ addException(collector, childStatus);
+ }
+ } else {
+ Throwable ex = iStatus.getException();
+ if (ex != null) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintWriter pw = new PrintWriter(baos);
+ ex.printStackTrace(pw);
+ pw.flush();
+ collector.append(new String(baos.toByteArray()));
+ }
+ }
+ }
+
+ private static int toMb(long value) {
+ return (int) (value / 1024 / 1024);
+ }
+
+ /**
+ * Returns the path to the file that contains error diagnosis and system specific information.
+ *
+ * @param date
+ * the date to be used as a part of the constructed path
+ * @return the constructed path
+ */
+ public static String getSysInfoPath(Date date) {
+ String errorDiagnosisFilename = DEFAULT_SYSINFO_PREFIX + formatDate(date) + "." + SYSINFO_SUFFIX;
+ return StringUtils.join(Arrays.asList(Configuration.getErrorLogDirectory(), errorDiagnosisFilename),
+ File.separatorChar);
+ }
+
+ /**
+ * Formats the given date.
+ *
+ * @param date
+ * the date to be formatted
+ * @return the formatted date
+ */
+ public static String formatDate(Date date) {
+ return format.format(date);
+ }
+
+ /**
+ * Takes a screenshot.
+ *
+ * @param screenshotPath
+ * the path under which the screenshot will be put
+ * @param format
+ * the format of the screenshot being created
+ * @return the path to the taken screenshot
+ */
+ public static String makeScreenshot(String screenshotPath, ScreenshotFormat format) {
+
+ try {
+ BufferedImage bufferedImage = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit()
+ .getScreenSize()));
+ File temp = new File(screenshotPath);
+ temp.deleteOnExit();
+ ImageIO.write(bufferedImage, format.getType(), temp);
+ return temp.getAbsolutePath();
+ } catch (HeadlessException e) {
+ WorkspaceUtil.logException("Could not create screenshot.", e);
+ } catch (AWTException e) {
+ WorkspaceUtil.logException("Could not create screenshot.", e);
+ } catch (IOException e) {
+ WorkspaceUtil.logException("Could not create screenshot.", e);
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns the screenshot path.
+ *
+ * @param date
+ * the date that will be part of the screenshot name
+ * @param format
+ * the format of the screenshot
+ * @return the constructed path to the screenshot
+ */
+ public static String getScreenshotPath(Date date, ScreenshotFormat format) {
+ String screenShotFilename = DEFAULT_SCREENSHOT_PREFIX + formatDate(date) + "." + format.getType();
+ return StringUtils.join(Arrays.asList(getScreenshotFolder(), screenShotFilename), File.separatorChar);
+ }
+
+ private static String getScreenshotFolder() {
+ File screenshotDir = new File(StringUtils.join(
+ Arrays.asList(Configuration.getErrorLogDirectory(), SCREENSHOT_FOLDER_NAME), File.separatorChar));
+
+ if (!screenshotDir.exists()) {
+ screenshotDir.mkdir();
+ }
+
+ return screenshotDir.getAbsolutePath();
+ }
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ExceptionLog.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ExceptionLog.java
new file mode 100644
index 0000000..fb9d8bf
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ExceptionLog.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class for logging exceptions.
+ *
+ * @author Maximilian Koegel
+ */
+public class ExceptionLog {
+
+ private List<Exception> exceptions;
+ private EmfStoreExceptionObserver exceptionObserver;
+
+ /**
+ * Constructor.
+ *
+ * @param exceptionObserver
+ * the exception that is used to notify this class when to add exceptions
+ */
+ public ExceptionLog(EmfStoreExceptionObserver exceptionObserver) {
+ this.exceptions = new ArrayList<Exception>();
+ this.exceptionObserver = exceptionObserver;
+ exceptionObserver.addLog(this);
+ }
+
+ /**
+ * Adds and exception to the log.
+ *
+ * @param exception
+ * the exception to be added
+ */
+ public void addException(Exception exception) {
+ exceptions.add(exception);
+ }
+
+ /**
+ * Destroys the exception log.
+ *
+ * @return the list of collected exceptions
+ */
+ public List<Exception> destroy() {
+ exceptionObserver.removeLog(this);
+ return exceptions;
+ }
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ILoggable.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ILoggable.java
new file mode 100644
index 0000000..5b82705
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ILoggable.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+/**
+ * Interface for adding information to the error diagnosis and system information file that
+ * is created via {@link ErrorReportingUtil#captureSysInfo(java.util.Date, String)}.
+ *
+ * @author emueller
+ */
+public interface ILoggable {
+
+ /**
+ * Returns the string to be logged.
+ *
+ * @return the string to be logged
+ */
+ String getLoggable();
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/IMailBugConfigurationProvider.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/IMailBugConfigurationProvider.java
new file mode 100644
index 0000000..5b9cced
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/IMailBugConfigurationProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+/**
+ * Interface used for error reporting feature.
+ *
+ * @author emueller
+ *
+ */
+public interface IMailBugConfigurationProvider {
+
+ /**
+ * Returns the E-Mail address used for error reporting.
+ *
+ * @return the E-Mail address
+ */
+ String getEmailAddress();
+
+ /**
+ * Returns the E-Mail subject used within the error reporting feature.
+ *
+ * @return the E-Mail subject
+ */
+ String getEmailSubject();
+
+ /**
+ * Returns the E-Mail body text used within the error reporting feature.
+ *
+ * @param errorDiagnosisCaptured
+ * whether error diagnosis information has been captured
+ *
+ * @return the E-Mail message body
+ */
+ String getEmailBody(boolean errorDiagnosisCaptured);
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/LogFilenameFilter.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/LogFilenameFilter.java
new file mode 100644
index 0000000..6da9229
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/LogFilenameFilter.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+/**
+ * Filter for log files.
+ */
+public class LogFilenameFilter implements FilenameFilter {
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean accept(File file, String name) {
+ return name.toLowerCase().endsWith(".log");
+ }
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugHandler.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugHandler.java
new file mode 100644
index 0000000..01c63ac
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugHandler.java
@@ -0,0 +1,276 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Date;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
+import org.eclipse.emf.emfstore.common.CommonUtil;
+import org.eclipse.emf.emfstore.common.extensionpoint.ExtensionPoint;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.browser.IWebBrowser;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.eclipse.ui.progress.IProgressService;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+
+/**
+ * Handler for submitting a bug via mail.
+ *
+ * @author emueller
+ */
+public class MailBugHandler extends AbstractHandler implements IWorkbenchWindowActionDelegate {
+
+ private IWorkbenchWindow window;
+ private StatusAdapter statusAdapter;
+ private IMailBugConfigurationProvider configurationProvider;
+
+ /**
+ * Constructor.
+ */
+ public MailBugHandler() {
+ this.window = null;
+ this.statusAdapter = null;
+ initConfigurationProvider();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param window
+ * a window that is used to determine the shell
+ * @param statusAdapter
+ * a status adapter that may contain the most recent stack trace
+ */
+ public MailBugHandler(IWorkbenchWindow window, StatusAdapter statusAdapter) {
+ this.window = window;
+ this.statusAdapter = statusAdapter;
+ initConfigurationProvider();
+ }
+
+ private void initConfigurationProvider() {
+ ExtensionPoint extensionPoint = new ExtensionPoint(Activator.PLUGIN_ID);
+ configurationProvider = extensionPoint.getClass("providerClass", IMailBugConfigurationProvider.class);
+ if (configurationProvider == null) {
+ throw new IllegalStateException("Error reporting configuration provider extension point not configured");
+ }
+ }
+
+ private void archive(final Date currentDate, IProgressMonitor monitor, String[] paths) throws FileNotFoundException {
+ monitor.beginTask("Creating error report...", paths.length);
+ try {
+ ZipHandle zipHandle = ZipHandle.openZipHandle(getZipPathname(currentDate));
+
+ for (String path : paths) {
+ File file = new File(path);
+
+ if (!file.exists()) {
+ continue;
+ }
+
+ if (file.isDirectory()) {
+ zipHandle.addFile(StringUtils.EMPTY, path + "/");
+ } else {
+ zipHandle.addFile(StringUtils.EMPTY, path);
+ }
+
+ monitor.worked(1);
+ }
+
+ zipHandle.close();
+ } catch (IOException e) {
+ MessageDialog.openError(window.getShell(), "Error while creating zip", MessageFormat.format(
+ "An error occurred while trying to archive the workspace folder {0}: {1}",
+ Configuration.getErrorLogDirectory(), e.getMessage()));
+ }
+
+ monitor.done();
+ }
+
+ private String getZipPathname(Date currentDate) {
+ String zipPath = Platform.getPreferencesService().getString(ErrorReportingPreferences.QUALIFIER,
+ ErrorReportingPreferences.ZIP_PATH_KEY, ErrorReportingPreferences.ZIP_PATH_DEFAULT, null);
+
+ if (zipPath.endsWith(File.separator)) {
+ zipPath = zipPath.substring(0, zipPath.length() - 2);
+ }
+
+ return StringUtils.join(
+ Arrays.asList(zipPath, ZipHandle.ZIP_PREFIX + ErrorReportingUtil.formatDate(currentDate) + ".zip"),
+ File.separatorChar);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void dispose() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void init(IWorkbenchWindow window) {
+ this.window = window;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+
+ }
+
+ /**
+ * Display an error message.
+ */
+ private void openWebBrowserError(final String href, final Throwable t) {
+ String title = "Send Bug Report";
+ String msg = "Unable to open URL " + href + " exception: " + t.getLocalizedMessage();
+ MessageDialog.openError(window.getShell(), title, msg);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ final Date date = new Date();
+ boolean shouldCaptureErrorDiagnosis = openShouldCreateErrorReportDialog(date);
+
+ if (shouldCaptureErrorDiagnosis) {
+ IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
+ try {
+ progressService.run(false, false, new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ try {
+ String screenshotPath = ErrorReportingUtil.makeScreenshot(
+ ErrorReportingUtil.getScreenshotPath(date, ScreenshotFormat.JPG), ScreenshotFormat.JPG);
+ String sysInfoPath = ErrorReportingUtil.captureSysInfo(date,
+ ErrorReportingUtil.getSysInfoPath(date), statusAdapter);
+ IPath logFolder = Platform.getLogFileLocation().removeLastSegments(1);
+ String[] logFiles = getLogFilePaths(logFolder);
+
+ archive(date, monitor, (String[]) ArrayUtils.addAll(new String[] { screenshotPath,
+ sysInfoPath, Configuration.getWorkspaceDirectory() }, logFiles));
+ } catch (FileNotFoundException exception) {
+ WorkspaceUtil.logException("Could not capture error diagnosis information.", exception);
+ }
+ }
+
+ });
+ } catch (InvocationTargetException exception) {
+ WorkspaceUtil.logException("Could not capture error diagnosis information.", exception);
+ } catch (InterruptedException exception) {
+ WorkspaceUtil.logException("Could not capture error diagnosis information.", exception);
+ }
+ }
+
+ ErrorReportingUtil.copyLogToClipboard(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
+
+ String url;
+
+ try {
+ url = buildUrl(shouldCaptureErrorDiagnosis);
+ } catch (UnsupportedEncodingException e) {
+ MessageDialog.openError(window.getShell(), "Could not create E-Mail", e.getMessage());
+ return null;
+ }
+
+ IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
+
+ try {
+ IWebBrowser browser = support.getExternalBrowser();
+ browser.openURL(new URL(url));
+ } catch (MalformedURLException exception) {
+ openWebBrowserError(url, exception);
+ } catch (PartInitException exception) {
+ openWebBrowserError(url, exception);
+ }
+
+ return null;
+ }
+
+ private String buildUrl(boolean shouldCaptureErrorDiagnosis) throws UnsupportedEncodingException {
+
+ StringBuffer url = new StringBuffer("mailto:");
+ String email = configurationProvider.getEmailAddress();
+ String subject = configurationProvider.getEmailSubject();
+ String body = configurationProvider.getEmailBody(shouldCaptureErrorDiagnosis);
+
+ url.append(email + "?");
+ url.append("subject=" + URLEncoder.encode(subject, CommonUtil.getEncoding()) + "&");
+ url.append("body=" + URLEncoder.encode(body.toString(), CommonUtil.getEncoding()));
+
+ return url.toString();
+ }
+
+ private String[] getLogFilePaths(IPath logFolder) {
+ String[] logFiles = new File(logFolder.toOSString()).list(new LogFilenameFilter());
+
+ for (int i = 0; i < logFiles.length; i++) {
+ logFiles[i] = logFolder.toOSString() + File.separatorChar + logFiles[i];
+ }
+
+ return logFiles;
+ }
+
+ private boolean openShouldCreateErrorReportDialog(final Date date) {
+ return MessageDialog.openQuestion(window == null ? Display.getDefault().getActiveShell() : window.getShell(),
+ "Error diagnosis information capture", MessageFormat.format(
+ "Would you like to capture error diagnosis information?\n"
+ + "The data will be stored in a zip file under \"{0}\".", getZipPathname(date)));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void run(IAction action) {
+ execute();
+ }
+
+ /**
+ * Executes the handler.
+ */
+ public void execute() {
+ try {
+ execute(new ExecutionEvent());
+ } catch (ExecutionException e) {
+ WorkspaceUtil.logException(e.getMessage(), e);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugStatusAreaProvider.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugStatusAreaProvider.java
new file mode 100644
index 0000000..22b3410
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/MailBugStatusAreaProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.statushandlers.AbstractStatusAreaProvider;
+import org.eclipse.ui.statushandlers.StatusAdapter;
+
+/**
+ * Status area provider for sending a bug report via mail.
+ *
+ * @author Maximilian Koegel
+ *
+ */
+public class MailBugStatusAreaProvider extends AbstractStatusAreaProvider {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Control createSupportArea(final Composite parent, final StatusAdapter statusAdapter) {
+ Link link = new Link(parent, SWT.NONE);
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ final MailBugHandler bugHandler = new MailBugHandler(window, statusAdapter);
+ link.setText("Please <a>send us a bug report</a>. Clicking\nthe link will create a new mail with\nyour default mail program. Before\nsending the mail please follow the\ninstructions in the mail body.");
+ link.setToolTipText("Mail a bug report");
+ link.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ bugHandler.execute();
+ }
+ });
+ Dialog.applyDialogFont(link);
+ return parent;
+ }
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ScreenshotFormat.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ScreenshotFormat.java
new file mode 100644
index 0000000..99457fa
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ScreenshotFormat.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+/**
+ * Represents the format of a screenshot.
+ *
+ * @author emueller
+ *
+ */
+public enum ScreenshotFormat {
+
+ /**
+ * JPG format.
+ */
+ JPG("jpg");
+
+ private final String type;
+
+ /**
+ * Constructor.
+ *
+ * @param type
+ * the format type
+ */
+ ScreenshotFormat(String type) {
+ this.type = type;
+ }
+
+ /**
+ * Returns the format type as a string.
+ *
+ * @return the format type as a string
+ */
+ public String getType() {
+ return type;
+ }
+
+}
\ No newline at end of file
diff --git a/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ZipHandle.java b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ZipHandle.java
new file mode 100644
index 0000000..2023337
--- /dev/null
+++ b/ErrorReporting/org.eclipse.emf.emfstore.client.ui.errorreporting/src/org/eclipse/emf/emfstore/client/ui/errorreporting/ZipHandle.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.client.ui.errorreporting;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.apache.commons.io.IOUtils;
+
+/**
+ * A zip handle for creating zip files.
+ *
+ * @author emueller
+ */
+public final class ZipHandle {
+
+ /**
+ * The prefix that will be used as part of the zip file.
+ */
+ public static final String ZIP_PREFIX = "EMFStoreErrorLog_";
+
+ private final ZipOutputStream zipOutputStream;
+ private final FileOutputStream fileOutputStream;
+ private final BufferedOutputStream bufferedOutputStream;
+
+ private ZipHandle(FileOutputStream fileOutputStream, BufferedOutputStream bufferedOutputStream,
+ ZipOutputStream zipOutputStream) {
+ this.fileOutputStream = fileOutputStream;
+ this.bufferedOutputStream = bufferedOutputStream;
+ this.zipOutputStream = zipOutputStream;
+ }
+
+ /**
+ * Adds a file to the zip.
+ *
+ * @param base
+ * the base name of the file being added
+ * @param path
+ * the actual path of file to be added to the zip
+ * @throws IOException in case the file could not be added
+ */
+ public void addFile(String base, String path) throws IOException {
+
+ if (path == null) {
+ return;
+ }
+
+ addFileToZip(zipOutputStream, path, base);
+ }
+
+ /**
+ * Closes the handle.
+ *
+ * @throws IOException in case anything goes wrong during the closing of the handle
+ */
+ public void close() throws IOException {
+ if (zipOutputStream != null) {
+ zipOutputStream.finish();
+ zipOutputStream.close();
+ }
+
+ if (bufferedOutputStream != null) {
+ bufferedOutputStream.close();
+ }
+
+ if (fileOutputStream != null) {
+ fileOutputStream.close();
+ }
+ }
+
+ /**
+ * Creates a zip entry for the path specified with a name built from the base passed in and the file/directory
+ * name. If the path is a directory, a recursive call is made such that the full directory is added to the zip.
+ *
+ * @param zipOutputStream
+ * the zip file's output stream
+ * @param path
+ * the filesystem path of the file/directory being added
+ * @param base
+ * the base prefix to for the name of the zip file entry
+ *
+ * @throws IOException in case of an error during addition of the file to the zip
+ */
+ private void addFileToZip(ZipOutputStream zipOutputStream, String path, String base) throws IOException {
+ File file = new File(path);
+ String entryName = base + file.getName();
+ ZipEntry zipEntry = new ZipEntry(entryName);
+
+ if (file.isFile()) {
+ zipOutputStream.putNextEntry(zipEntry);
+ FileInputStream fileInputStream = null;
+ try {
+ fileInputStream = new FileInputStream(file);
+ IOUtils.copy(fileInputStream, zipOutputStream);
+ } finally {
+ }
+ } else {
+ File[] children = file.listFiles();
+
+ if (children != null) {
+ for (File child : children) {
+ addFileToZip(zipOutputStream, child.getAbsolutePath(), entryName + "/");
+ }
+ }
+ }
+ }
+
+ /**
+ * Opens up a zip handle.
+ *
+ * @param zipPath
+ * the path of the zip file being created
+ * @return the created zip handle
+ * @throws FileNotFoundException in case intial zip file creation fails
+ */
+ public static ZipHandle openZipHandle(String zipPath) throws FileNotFoundException {
+ FileOutputStream fileOutputStream = null;
+ BufferedOutputStream bufferedOutputStream = null;
+ ZipOutputStream zipOutputStream = null;
+
+ fileOutputStream = new FileOutputStream(new File(zipPath));
+ bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
+ zipOutputStream = new ZipOutputStream(bufferedOutputStream);
+ ZipHandle zipHandle = new ZipHandle(fileOutputStream, bufferedOutputStream, zipOutputStream);
+ return zipHandle;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.project b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.project
new file mode 100644
index 0000000..f3aa095
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.example.helloworld</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b299b1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Mon Mar 05 15:28:54 CET 2012
+M=org.eclipse.emf.emfstore.exampleclient/.settings/org.eclipse.jdt.core.prefs
+Unstaged=changes after reset\:
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..65ae177
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example Hello World
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.helloworld;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel,
+ org.eclipse.emf.emfstore.client.ui,
+ org.eclipse.ui;bundle-version="3.5.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ src/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Client helloworld.launch b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Client helloworld.launch
new file mode 100644
index 0000000..54ea0ff
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Client helloworld.launch
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.emfstore.example.helloworld.example"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore ExampleClient - merging"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-helloworld"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<setAttribute key="selected_features">
+<setEntry value="org.eclipse.amalgam.discovery:default"/>
+<setEntry value="org.eclipse.cvs.source:default"/>
+<setEntry value="org.eclipse.cvs:default"/>
+<setEntry value="org.eclipse.draw2d.sdk:default"/>
+<setEntry value="org.eclipse.draw2d.source:default"/>
+<setEntry value="org.eclipse.draw2d:default"/>
+<setEntry value="org.eclipse.egit.psf:default"/>
+<setEntry value="org.eclipse.egit:default"/>
+<setEntry value="org.eclipse.emf.cdo.epp:default"/>
+<setEntry value="org.eclipse.emf.cdo.server:default"/>
+<setEntry value="org.eclipse.emf.cdo:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.ui.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.ui:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore:default"/>
+<setEntry value="org.eclipse.emf.codegen.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ui.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ui:default"/>
+<setEntry value="org.eclipse.emf.codegen:default"/>
+<setEntry value="org.eclipse.emf.common.ui.source:default"/>
+<setEntry value="org.eclipse.emf.common.ui:default"/>
+<setEntry value="org.eclipse.emf.common:default"/>
+<setEntry value="org.eclipse.emf.compare.doc:default"/>
+<setEntry value="org.eclipse.emf.compare.sdk:default"/>
+<setEntry value="org.eclipse.emf.compare.source:default"/>
+<setEntry value="org.eclipse.emf.compare.ui.capabilities:default"/>
+<setEntry value="org.eclipse.emf.compare:default"/>
+<setEntry value="org.eclipse.emf.converter.source:default"/>
+<setEntry value="org.eclipse.emf.converter:default"/>
+<setEntry value="org.eclipse.emf.databinding.edit.source:default"/>
+<setEntry value="org.eclipse.emf.databinding.edit:default"/>
+<setEntry value="org.eclipse.emf.databinding.source:default"/>
+<setEntry value="org.eclipse.emf.databinding:default"/>
+<setEntry value="org.eclipse.emf.doc.source:default"/>
+<setEntry value="org.eclipse.emf.doc:default"/>
+<setEntry value="org.eclipse.emf.ecore.edit.source:default"/>
+<setEntry value="org.eclipse.emf.ecore.edit:default"/>
+<setEntry value="org.eclipse.emf.ecore.editor.source:default"/>
+<setEntry value="org.eclipse.emf.ecore.editor:default"/>
+<setEntry value="org.eclipse.emf.ecore:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.doc:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.sdk:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.source:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.utils.source:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.utils:default"/>
+<setEntry value="org.eclipse.emf.ecoretools:default"/>
+<setEntry value="org.eclipse.emf.edit.source:default"/>
+<setEntry value="org.eclipse.emf.edit.ui.source:default"/>
+<setEntry value="org.eclipse.emf.edit.ui:default"/>
+<setEntry value="org.eclipse.emf.edit:default"/>
+<setEntry value="org.eclipse.emf.eef.codegen.ecore:default"/>
+<setEntry value="org.eclipse.emf.emfstore.site:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.editor.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.editor:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore:default"/>
+<setEntry value="org.eclipse.emf.mapping.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ui.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ui:default"/>
+<setEntry value="org.eclipse.emf.mapping:default"/>
+<setEntry value="org.eclipse.emf.query.doc:default"/>
+<setEntry value="org.eclipse.emf.query.ocl.source:default"/>
+<setEntry value="org.eclipse.emf.query.ocl:default"/>
+<setEntry value="org.eclipse.emf.query.sdk:default"/>
+<setEntry value="org.eclipse.emf.query.source:default"/>
+<setEntry value="org.eclipse.emf.query:default"/>
+<setEntry value="org.eclipse.emf.sdk:default"/>
+<setEntry value="org.eclipse.emf.source:default"/>
+<setEntry value="org.eclipse.emf.transaction.doc:default"/>
+<setEntry value="org.eclipse.emf.transaction.sdk:default"/>
+<setEntry value="org.eclipse.emf.transaction.source:default"/>
+<setEntry value="org.eclipse.emf.transaction:default"/>
+<setEntry value="org.eclipse.emf.validation.doc:default"/>
+<setEntry value="org.eclipse.emf.validation.ocl.source:default"/>
+<setEntry value="org.eclipse.emf.validation.ocl:default"/>
+<setEntry value="org.eclipse.emf.validation.sdk:default"/>
+<setEntry value="org.eclipse.emf.validation.source:default"/>
+<setEntry value="org.eclipse.emf.validation:default"/>
+<setEntry value="org.eclipse.emf.workspace.doc:default"/>
+<setEntry value="org.eclipse.emf.workspace.source:default"/>
+<setEntry value="org.eclipse.emf.workspace:default"/>
+<setEntry value="org.eclipse.emf:default"/>
+<setEntry value="org.eclipse.epp.mpc:default"/>
+<setEntry value="org.eclipse.epp.package.common.feature:default"/>
+<setEntry value="org.eclipse.epp.package.modeling.feature:default"/>
+<setEntry value="org.eclipse.epp.usagedata.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.core.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.discovery.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.user.ui:default"/>
+<setEntry value="org.eclipse.gef.sdk:default"/>
+<setEntry value="org.eclipse.gef.source:default"/>
+<setEntry value="org.eclipse.gef:default"/>
+<setEntry value="org.eclipse.gmf.examples.runtime.ui.pde:default"/>
+<setEntry value="org.eclipse.gmf.runtime.notation:default"/>
+<setEntry value="org.eclipse.gmf.runtime.sdk:default"/>
+<setEntry value="org.eclipse.gmf.runtime.thirdparty.source:default"/>
+<setEntry value="org.eclipse.gmf.runtime.thirdparty:default"/>
+<setEntry value="org.eclipse.gmf.source:default"/>
+<setEntry value="org.eclipse.gmf:default"/>
+<setEntry value="org.eclipse.help.source:default"/>
+<setEntry value="org.eclipse.help:default"/>
+<setEntry value="org.eclipse.jdt.source:default"/>
+<setEntry value="org.eclipse.jdt:default"/>
+<setEntry value="org.eclipse.jgit:default"/>
+<setEntry value="org.eclipse.mylyn.bugzilla_feature:default"/>
+<setEntry value="org.eclipse.mylyn.context_feature:default"/>
+<setEntry value="org.eclipse.mylyn.ide_feature:default"/>
+<setEntry value="org.eclipse.mylyn.java_feature:default"/>
+<setEntry value="org.eclipse.mylyn.pde_feature:default"/>
+<setEntry value="org.eclipse.mylyn.team_feature:default"/>
+<setEntry value="org.eclipse.mylyn.wikitext_feature:default"/>
+<setEntry value="org.eclipse.mylyn_feature:default"/>
+<setEntry value="org.eclipse.net4j.db.derby:default"/>
+<setEntry value="org.eclipse.net4j.db.h2:default"/>
+<setEntry value="org.eclipse.net4j.db:default"/>
+<setEntry value="org.eclipse.net4j:default"/>
+<setEntry value="org.eclipse.ocl.all.sdk:default"/>
+<setEntry value="org.eclipse.ocl.all:default"/>
+<setEntry value="org.eclipse.ocl.core.sdk:default"/>
+<setEntry value="org.eclipse.ocl.doc:default"/>
+<setEntry value="org.eclipse.ocl.edit.source:default"/>
+<setEntry value="org.eclipse.ocl.edit:default"/>
+<setEntry value="org.eclipse.ocl.source:default"/>
+<setEntry value="org.eclipse.ocl.uml.source:default"/>
+<setEntry value="org.eclipse.ocl.uml:default"/>
+<setEntry value="org.eclipse.ocl:default"/>
+<setEntry value="org.eclipse.pde.source:default"/>
+<setEntry value="org.eclipse.pde:default"/>
+<setEntry value="org.eclipse.platform.source:default"/>
+<setEntry value="org.eclipse.platform:default"/>
+<setEntry value="org.eclipse.rcp.source:default"/>
+<setEntry value="org.eclipse.rcp:default"/>
+<setEntry value="org.eclipse.sdk:default"/>
+<setEntry value="org.eclipse.uml2.doc:default"/>
+<setEntry value="org.eclipse.uml2.examples.source:default"/>
+<setEntry value="org.eclipse.uml2.examples:default"/>
+<setEntry value="org.eclipse.uml2.sdk:default"/>
+<setEntry value="org.eclipse.uml2.source:default"/>
+<setEntry value="org.eclipse.uml2:default"/>
+<setEntry value="org.eclipse.xsd.doc.source:default"/>
+<setEntry value="org.eclipse.xsd.doc:default"/>
+<setEntry value="org.eclipse.xsd.ecore.converter.source:default"/>
+<setEntry value="org.eclipse.xsd.ecore.converter:default"/>
+<setEntry value="org.eclipse.xsd.edit.source:default"/>
+<setEntry value="org.eclipse.xsd.edit:default"/>
+<setEntry value="org.eclipse.xsd.editor.source:default"/>
+<setEntry value="org.eclipse.xsd.editor:default"/>
+<setEntry value="org.eclipse.xsd.mapping.editor.source:default"/>
+<setEntry value="org.eclipse.xsd.mapping.editor:default"/>
+<setEntry value="org.eclipse.xsd.mapping.source:default"/>
+<setEntry value="org.eclipse.xsd.mapping:default"/>
+<setEntry value="org.eclipse.xsd.sdk:default"/>
+<setEntry value="org.eclipse.xsd.source:default"/>
+<setEntry value="org.eclipse.xsd:default"/>
+</setAttribute>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86_64@default:default,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation@default:default,org.eclipse.emf.workspace@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.win32.x86_64@default:default,org.eclipse.equinox.security@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:default,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.win32@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.example.helloworld@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Server helloworld.launch b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Server helloworld.launch
new file mode 100644
index 0000000..4411123
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/launch/EMFStore Example Server helloworld.launch
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins">
+<setEntry value="org.eclipse.emf.emfstore.examplemodel:0.8.9.M909:default:true"/>
+</setAttribute>
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bad_container_name" value="/emfstore.launch"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore Server with ExampleModel"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-org.eclipse.emf.emfstore.server.server"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx1024m"/>
+<booleanAttribute key="pde.generated.config" value="false"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.emf.emfstore.server.server"/>
+<setAttribute key="selected_features"/>
+<stringAttribute key="selected_target_plugins" value="javax.servlet@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.team.core@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
new file mode 100644
index 0000000..2bd78a4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="example"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.emf.emfstore.exampleclient.Application">
+ </run>
+ </application>
+ </extension>
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/pom.xml
new file mode 100644
index 0000000..b3de793
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <artifactId>org.eclipse.emf.emfstore.example.helloworld</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
new file mode 100644
index 0000000..2577f88
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "exampleClient";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ // END SUPRESS CATCH EXCEPTION
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
new file mode 100644
index 0000000..07a0d62
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommandWithResult;
+import org.eclipse.emf.emfstore.common.ConsoleProgressMonitor;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * An application that runs the demo.<br>
+ * Run a client that shows the basic features of the EMFstore
+ * If there is a problem with the connection to the server
+ * e.g. a network, a specific EMFStoreException will be thrown
+ */
+public class Application implements IApplication {
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public Object start(IApplicationContext context) throws Exception {
+
+ // Run a client that shows the basic features of the EMFstore
+ // If there is a problem with the connection to the server
+ // e.g. a network, a specific EMFStoreException will be thrown
+ try {
+ runClient();
+
+ } catch (EmfStoreException e) {
+ System.out.println("No connection to server.");
+ System.out.println("Did you start the server? :-)");
+ }
+
+ return IApplication.EXIT_OK;
+ }
+
+ // END SUPRESS CATCH EXCEPTION
+
+ private void runClient() throws EmfStoreException {
+ System.out.println("Client starting...");
+
+ // The workspace is the core controler to access
+ // local and remote projects
+ final Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+
+ // A user session stores credentials for login
+ // Creates a user session with the default credentials
+ final Usersession usersession = new EMFStoreCommandWithResult<Usersession>() {
+ @Override
+ protected Usersession doRun() {
+ Usersession session = EMFStoreClientUtil.createUsersession();
+ try {
+ session.logIn();
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ return session;
+ }
+ }.run(false);
+
+ // Retrieves a list of existing (and accessible) projects
+ // on the sever and deletes them permanently (to have a
+ // clean set-up)
+ List<ProjectInfo> projectList;
+ projectList = workspace.getRemoteProjectList(usersession);
+ for (ProjectInfo projectInfo : projectList) {
+ workspace.deleteRemoteProject(usersession, projectInfo.getProjectId(), true);
+ }
+
+ // Create a project, share it with the server
+ final ProjectSpace project1 = new EMFStoreCommandWithResult<ProjectSpace>() {
+ @Override
+ protected ProjectSpace doRun() {
+ ProjectSpace project1 = workspace.createLocalProject("projectNo1", "My project");
+ try {
+ project1.shareProject(usersession, new ConsoleProgressMonitor());
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ return project1;
+ }
+ }.run(false);
+
+ // Create some EObjects and add them to the project
+ // (To the projects containment tree)
+ final League league1 = BowlingFactory.eINSTANCE.createLeague();
+ league1.setName("league");
+ league1.getPlayers().add(createPlayer("no. 1"));
+ league1.getPlayers().add(createPlayer("no. 2"));
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ project1.getProject().addModelElement(league1);
+ }
+ }.run(false);
+
+ // commit the changes of the project to the EMFStore
+ // including a commit message
+ final LogMessage logMessage = VersioningFactory.eINSTANCE.createLogMessage();
+ logMessage.setMessage("My Message");
+
+ final ProjectSpace project2 = new EMFStoreCommandWithResult<ProjectSpace>() {
+ @Override
+ protected ProjectSpace doRun() {
+ try {
+ project1.commit(logMessage, null, new ConsoleProgressMonitor());
+ System.out.println("Project 1 committed!");
+
+ // Check-out a second, independent copy of the project
+ // (simulating a second client)
+ return workspace.checkout(usersession, project1.getProjectInfo(), new NullProgressMonitor());
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ final League league2 = (League) project2.getProject().getModelElements().get(0);
+ System.out.println("Project 2: League name is " + league2.getName());
+
+ // Apply changes in the second copy of the project
+ // and commit
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ league2.setName("league_changed");
+ project2.commit(logMessage, null, new ConsoleProgressMonitor());
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ System.out.println("Project 2 committed!");
+
+ // Update the first copy of the project
+ project1.update();
+ System.out.println("Project 1 updated!");
+ System.out.println("Project 1: League name is " + league1.getName());
+
+ System.out.println("Client run completed.");
+
+ }
+
+ /**
+ * Creates a new instance of a player.
+ *
+ * @param name
+ * @return
+ */
+ private Player createPlayer(String name) {
+ Player player = BowlingFactory.eINSTANCE.createPlayer();
+ player.setName(String.format("Player %s", name));
+ player.setEMail(String.format("%s@emfstore.org", name));
+ return player;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop() {
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.classpath
new file mode 100644
index 0000000..c835067
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.project b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.project
new file mode 100644
index 0000000..6ec5e8c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.example.installer</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.core.resources.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..25e3157
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/pom.xml=UTF8
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..fe79566
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Mon Apr 16 16:04:29 CEST 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ea48b0c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMFStore example installer
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.installer;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Vendor: Eclipse Modeling Project
+Require-Bundle: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.common.ui;bundle-version="[2.5.0,3.0.0)"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.installer/build.properties
new file mode 100644
index 0000000..9b9cdc3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/build.properties
@@ -0,0 +1,5 @@
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ icons/,\
+ examples/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.project b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.project
new file mode 100644
index 0000000..365e44a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.example.helloworld</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b299b1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Mon Mar 05 15:28:54 CET 2012
+M=org.eclipse.emf.emfstore.exampleclient/.settings/org.eclipse.jdt.core.prefs
+Unstaged=changes after reset\:
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e19bdc2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: ExampleClient
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.helloworld;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.emfstore.client;bundle-version="0.9.3",
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="0.9.3"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ src/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
new file mode 100644
index 0000000..2bd78a4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="example"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.emf.emfstore.exampleclient.Application">
+ </run>
+ </application>
+ </extension>
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
new file mode 100644
index 0000000..7ddf909
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ ******************************************************************************/
+
+package org.eclipse.emf.emfstore.exampleclient;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "exampleClient";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+ // END SUPRESS CATCH EXCEPTION
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
new file mode 100644
index 0000000..9f2b9dc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/src/org/eclipse/emf/emfstore/exampleclient/Application.java
@@ -0,0 +1,139 @@
+/**
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ ******************************************************************************/
+
+package org.eclipse.emf.emfstore.exampleclient;
+
+import java.util.List;
+
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.emf.emfstore.server.startup.ConsoleProgressMonitor;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * Example client.
+ */
+public class Application implements IApplication {
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public Object start(IApplicationContext context) throws Exception {
+
+ // Run a client that shows the basic features of the EMFstore
+ // If there is a problem with the connection to the server
+ // e.g. a network, a specific EMFStoreException will be thrown
+ try {
+ runClient();
+
+ } catch (EmfStoreException e) {
+ System.out.println("No connection to server.");
+ System.out.println("Did you start the server? :-)");
+ }
+
+ return IApplication.EXIT_OK;
+ }
+ // END SUPRESS CATCH EXCEPTION
+
+ private void runClient() throws EmfStoreException {
+ System.out.println("Client starting...");
+
+ // The workspace is the core controler to access
+ // local and remote projects
+ Workspace workspace = WorkspaceManager.getInstance()
+ .getCurrentWorkspace();
+
+ // A user session stores credentials for login
+ // Creates a user session with the default credentials
+ Usersession usersession = EMFStoreClientUtil.createUsersession();
+ usersession.logIn();
+
+ // Retrieves a list of existing (and accessible) projects
+ // on the sever and deletes them permanently (to have a
+ // clean set-up)
+ List<ProjectInfo> projectList;
+ projectList = workspace.getRemoteProjectList(usersession);
+ for (ProjectInfo projectInfo : projectList) {
+ workspace.deleteRemoteProject(usersession,
+ projectInfo.getProjectId(), true);
+ }
+
+ // Create a project, share it with the server
+ ProjectSpace project1 = workspace.createLocalProject("projectNo1",
+ "My project");
+ project1.shareProject(usersession, new ConsoleProgressMonitor());
+
+ // Create some EObjects and add them to the project
+ // (To the projects containment tree)
+ League league1 = BowlingFactory.eINSTANCE.createLeague();
+ league1.setName("league");
+ league1.getPlayers().add(createPlayer("no. 1"));
+ league1.getPlayers().add(createPlayer("no. 2"));
+ project1.getProject().addModelElement(league1);
+
+ // commit the changes of the project to the EMFStore
+ // including a commit message
+ LogMessage logMessage = VersioningFactory.eINSTANCE.createLogMessage();
+ logMessage.setMessage("My Message");
+ project1.commit(logMessage, null, new ConsoleProgressMonitor());
+ System.out.println("Project 1 committed!");
+
+ // Check-out a second, independent copy of the project
+ // (simulating a second client)
+ ProjectSpace project2 = workspace.checkout(usersession,
+ project1.getProjectInfo());
+ League league2 = (League) project2.getProject().getModelElements()
+ .get(0);
+ System.out.println("Project 2: League name is "+league2.getName());
+
+ // Apply changes in the second copy of the project
+ // and commit
+ league2.setName("league_changed");
+ project2.commit(logMessage, null, new ConsoleProgressMonitor());
+ System.out.println("Project 2 committed!");
+
+
+ // Update the first copy of the project
+ project1.update();
+ System.out.println("Project 1 updated!");
+ System.out.println("Project 1: League name is "+league1.getName());
+
+
+ System.out.println("Client run completed.");
+
+ }
+
+ /**
+ * Creates a new instance of a player.
+ *
+ * @param name
+ * @return
+ */
+ private Player createPlayer(String name) {
+ Player player = BowlingFactory.eINSTANCE.createPlayer();
+ player.setName(String.format("Player %s", name));
+ player.setEMail(String.format("%s@emfstore.org", name));
+ return player;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.project b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.project
new file mode 100644
index 0000000..1890b3b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.example.merging</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..701928f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Jan 26 20:34:00 CET 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e89882c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Merging client
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.merging;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.example.merging.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.emfstore.client;bundle-version="0.9.3",
+ org.eclipse.emf.emfstore.examplemodel;bundle-version="0.9.3",
+ org.eclipse.emf.emfstore.client.ui;bundle-version="0.9.3"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ src/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/plugin.xml
new file mode 100644
index 0000000..91c04c8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="merging"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.emf.emfstore.example.merging.Application">
+ </run>
+ </application>
+ </extension>
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
new file mode 100644
index 0000000..f15fce4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.example.merging;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "exampleClient";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+ // END SUPRESS CATCH EXCEPTION
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
new file mode 100644
index 0000000..ab9e34b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
@@ -0,0 +1,379 @@
+/**
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ ******************************************************************************/
+
+package org.eclipse.emf.emfstore.example.merging;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.BowlingPackage;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.controller.callbacks.UpdateCallback;
+import org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException;
+import org.eclipse.emf.emfstore.client.model.observers.ConflictResolver;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.server.exceptions.BaseVersionOutdatedException;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
+import org.eclipse.emf.emfstore.server.model.versioning.VersionSpec;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation;
+import org.eclipse.emf.emfstore.server.startup.ConsoleProgressMonitor;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * Merging example application.
+ */
+public class Application implements IApplication {
+
+ private ProjectSpace project1;
+ private League league1;
+ private ProjectSpace project2;
+ private League league2;
+ private LogMessage logMessage;
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public Object start(IApplicationContext context) throws Exception {
+ WorkspaceManager.init();
+
+ // Run a client that shows the merging feature of the EMFstore
+ // Please note: this is the programmatic way of merging
+ // EMFStore also provides a default UI for merging
+ // If there is a problem with the connection to the server
+ // e.g. a network, a specific EMFStoreException will be thrown
+ try {
+ runClient();
+ } catch (EmfStoreException e) {
+ System.out.println("No connection to server.");
+ System.out.println("Did you start the server? :-)");
+ e.printStackTrace();
+
+ }
+
+ return IApplication.EXIT_OK;
+ }
+ // END SUPRESS CATCH EXCEPTION
+
+ /**
+ * Runs the application.
+ *
+ * @throws EmfStoreException
+ * in case any error occurs
+ */
+ private void runClient() throws EmfStoreException {
+ System.out.println("Client starting...");
+
+ // Sets up the workspace by cleaning all contents
+ // Create a project with some EObjects and two
+ // identical copies. See hello world code example
+ // for more details
+ setupWorkspace();
+
+ // Change the value of the league in project 1 and commit
+ // the change
+ league1.setName("New Name 1");
+ league1.getPlayers().add(createPlayer("Player no. 4"));
+ project1.commit(logMessage, null, new ConsoleProgressMonitor());
+
+ // Changing the same value without calling
+ // project2.update() will cause a conflict
+ // also add one change which is non-conflicting
+ league2.setName("New Name 2");
+ league2.getPlayers().remove(0);
+
+ try {
+ project2.commit(logMessage, null, new ConsoleProgressMonitor());
+ } catch (BaseVersionOutdatedException e) {
+
+ System.out.println("\nCommit of project 2 failed.");
+
+ // define a conflict resolver to handle the conflicting changes on
+ // update
+ // the resolver will accept the name change of the league of project
+ // 2 to "New Name 2"
+ // reject the name change of project 1 and accept all other changes
+ final ConflictResolver conflictResolver = new ConflictResolver() {
+
+ private ChangePackage myChangePackage;
+ private List<ChangePackage> theirChangePackages;
+
+ public boolean resolveConflicts(Project project, List<ChangePackage> theirChangePackages,
+ ChangePackage myChangePackage, PrimaryVersionSpec baseVersion, PrimaryVersionSpec targetVersion) {
+
+ this.theirChangePackages = theirChangePackages;
+ this.myChangePackage = myChangePackage;
+ // declare that resolver will be able to resolve all
+ // conflicts
+ return true;
+ }
+
+ public List<AbstractOperation> getRejectedTheirs() {
+ // reject the first change in the change package of project
+ // 1 from the server, since it is the name change of the
+ // league to "New Name 1"
+ return Arrays.asList(theirChangePackages.get(0)
+ .getOperations().get(0));
+ }
+
+ public List<AbstractOperation> getAcceptedMine() {
+ // accept all my operations in project 2, including the name
+ // change to "New Name 2"
+ return myChangePackage.getOperations();
+ }
+ };
+
+ // create a callback object to drive the update and use our conflict
+ // resolver
+ UpdateCallback updateCallback = new UpdateCallback() {
+
+ public void noChangesOnServer() {
+ // do nothing if there are no changes on the server (we know
+ // there are changes anyway)
+ }
+
+ public boolean inspectChanges(ProjectSpace projectSpace, List<ChangePackage> changes) {
+ // accept incoming changes (we could cancel the update by
+ // returning false here)
+ return true;
+ }
+
+ public boolean conflictOccurred(
+ ChangeConflictException changeConflictException) {
+
+ // resolve conflicts by merging with our conflict resolver
+ try {
+ project2.merge(project2
+ .resolveVersionSpec(VersionSpec.HEAD_VERSION),
+ conflictResolver);
+ } catch (EmfStoreException e) {
+ // on any exceptions, declare conflicts as non-resolved
+ return false;
+ }
+
+ // conflicts have been resolved
+ return true;
+ }
+ };
+
+ // run update in project 2 with our callback
+ System.out.println("\nUpdate of project 2 with conflict resolver...");
+ project2.update(VersionSpec.HEAD_VERSION, updateCallback,
+ new ConsoleProgressMonitor());
+
+ // commit merge result in project 2
+ System.out.println("\nCommit of project 2 with merge result.");
+ project2.commit(logMessage, null, new ConsoleProgressMonitor());
+ }
+
+ // update project 1
+ System.out.println("\nUpdate of project 1 with merge result.");
+ project1.update();
+
+ System.out.println("\nLeague name in project 1 is now:"
+ + league1.getName());
+
+ System.out.println("Client run completed.");
+
+ }
+
+ /**
+ * Creates a default workspace and deletes all remote projects.
+ *
+ * @throws EmfStoreException
+ * in case any error occurs
+ */
+ private void setupWorkspace() throws EmfStoreException {
+ // The workspace is the core controler to access
+ // local and remote projects
+ Workspace workspace = WorkspaceManager.getInstance()
+ .getCurrentWorkspace();
+
+ // A user session stores credentials for login
+ // Creates a user session with the default credentials
+ Usersession usersession = EMFStoreClientUtil.createUsersession();
+ usersession.logIn();
+
+ // Retrieves a list of existing (and accessible) projects
+ // on the sever and deletes them permanently (to have a
+ // clean set-up)
+ List<ProjectInfo> projectList;
+ projectList = workspace.getRemoteProjectList(usersession);
+ for (ProjectInfo projectInfo : projectList) {
+ workspace.deleteRemoteProject(usersession,
+ projectInfo.getProjectId(), true);
+ }
+
+ // Create a project, share it with the server
+ project1 = workspace.createLocalProject("projectNo1", "My project");
+ project1.shareProject(usersession, new ConsoleProgressMonitor());
+
+ // Create some EObjects and add them to the project
+ // (To the projects containment tree)
+ league1 = BowlingFactory.eINSTANCE.createLeague();
+ league1.setName("league");
+ league1.getPlayers().add(createPlayer("no. 1"));
+ league1.getPlayers().add(createPlayer("no. 2"));
+ project1.getProject().addModelElement(league1);
+
+ logMessage = VersioningFactory.eINSTANCE.createLogMessage();
+ logMessage.setMessage("My Message");
+ project1.commit(logMessage, null, new ConsoleProgressMonitor());
+ System.out.println("Project 1 committed!");
+
+ // Check-out a second, independent copy of the project
+ // (simulating a second client)
+ project2 = workspace.checkout(usersession, project1.getProjectInfo());
+ league2 = (League) project2.getProject().getModelElements().get(0);
+ }
+
+ /**
+ * Handles the conflicting project2.
+ *
+ * @param conflictingProject2
+ * the conflicting project
+ */
+ protected void handleConflict(ProjectSpace conflictingProject2) {
+ try {
+ // inspect all changes
+ inspectChanges(conflictingProject2);
+
+ // merge the project2 with the current version
+ // and reject all changes from the server!
+ // Only changes from project2 are accepted!
+ conflictingProject2.merge(
+ ModelUtil.clone(project1.getBaseVersion()),
+ new ConflictResolver() {
+
+ private ArrayList<AbstractOperation> acceptedMine;
+ private ArrayList<AbstractOperation> rejectedTheirs;
+
+ public boolean resolveConflicts(Project project,
+ List<ChangePackage> theirChangePackages, ChangePackage myChangePackage,
+ PrimaryVersionSpec baseVersion, PrimaryVersionSpec targetVersion) {
+
+ // all local projects for project2 are accepted
+ acceptedMine = new ArrayList<AbstractOperation>();
+ acceptedMine.addAll(myChangePackage.getOperations());
+
+ // reject all operations executed on project1
+ rejectedTheirs = new ArrayList<AbstractOperation>();
+ for (ChangePackage change : theirChangePackages) {
+ rejectedTheirs.addAll(change.getOperations());
+ }
+ return true;
+ }
+
+ public List<AbstractOperation> getRejectedTheirs() {
+ return rejectedTheirs;
+ }
+
+ public List<AbstractOperation> getAcceptedMine() {
+ return acceptedMine;
+ }
+ });
+
+ } catch (EmfStoreException e) {
+ ModelUtil.logException(e);
+ }
+ }
+
+ /**
+ * Inspects the changes occured.
+ *
+ * @param conflictingProject
+ * @throws EmfStoreException
+ */
+ private void inspectChanges(ProjectSpace conflictingProject)
+ throws EmfStoreException {
+ // access and list all changes occured
+ List<ChangePackage> changes = conflictingProject.getChanges(
+ conflictingProject.getBaseVersion(), project1.getBaseVersion());
+
+ for (ChangePackage change : changes) {
+ System.out.println(change.getLogMessage().toString());
+
+ // use the elementId of the change to access the leagues of each
+ // local project
+ for (ModelElementId elementId : change
+ .getAllInvolvedModelElements()) {
+ EObject element = project1.getProject().getModelElement(
+ elementId);
+ if (element == null) {
+ element = project2.getProject().getModelElement(elementId);
+ }
+ switch (element.eClass().getClassifierID()) {
+ case BowlingPackage.PLAYER:
+ Player playerOfProject1 = (Player) project1.getProject()
+ .getModelElement(elementId);
+ Player playerOfProject2 = (Player) project2.getProject()
+ .getModelElement(elementId);
+ if (playerOfProject1 != null) {
+ System.out.println(String.format(
+ "Player of project1. Name is %s",
+ playerOfProject1.getName()));
+ }
+ if (playerOfProject2 != null) {
+ System.out.println(String.format(
+ "Player of project2. Name is %s",
+ playerOfProject2.getName()));
+ }
+ break;
+ case BowlingPackage.LEAGUE:
+ League leagueOfProject1 = (League) project1.getProject()
+ .getModelElement(elementId);
+ League leagueOfProject2 = (League) project2.getProject()
+ .getModelElement(elementId);
+ System.out.println(String.format(
+ "League of project1. Name is %s",
+ leagueOfProject1.getName()));
+ System.out.println(String.format(
+ "League of project2. Name is %s",
+ leagueOfProject2.getName()));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+ /**
+ * Creates a new instance of a player.
+ *
+ * @param name
+ * @return
+ */
+ private Player createPlayer(String name) {
+ Player player = BowlingFactory.eINSTANCE.createPlayer();
+ player.setName(String.format("Player %s", name));
+ player.setEMail(String.format("%s@emfstore.org", name));
+ return player;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/icons/emfstore.png b/Fuzzy/org.eclipse.emf.emfstore.example.installer/icons/emfstore.png
new file mode 100644
index 0000000..5020e4c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/icons/emfstore.png
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/plugin.xml
new file mode 100644
index 0000000..ab3b58d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/plugin.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.newWizards">
+ <category
+ id="org.eclipse.emf.emfstore.examples.EMFStore"
+ name="EMFStore examples"
+ parentCategory="org.eclipse.ui.Examples">
+ </category>
+ <wizard
+ category="org.eclipse.ui.Examples/org.eclipse.emf.emfstore.examples.EMFStore"
+ class="org.eclipse.emf.common.ui.wizard.ExampleInstallerWizard"
+ icon="icons/emfstore.png"
+ id="org.eclipse.emf.emfstore.example.BasicEMFStoreExampleWizard"
+ name="Basic EMFStore example"
+ project="true">
+ </wizard>
+ <wizard
+ category="org.eclipse.ui.Examples/org.eclipse.emf.emfstore.examples.EMFStore"
+ class="org.eclipse.emf.common.ui.wizard.ExampleInstallerWizard"
+ icon="icons/emfstore.png"
+ id="org.eclipse.emf.emfstore.example.MergingEMFStoreExampleWizard"
+ name="Merging EMFStore example"
+ project="true">
+ </wizard>
+ </extension>
+ <extension
+ point="org.eclipse.emf.common.ui.examples">
+ <example
+ id="org.eclipse.emf.emfstore.example.BasicEMFStore"
+ wizardID="org.eclipse.emf.emfstore.example.BasicEMFStoreExampleWizard">
+ <projectDescriptor
+ contentURI="examples/org.eclipse.emf.emfstore.example.helloworld/"
+ description="A helloworld implementation of an EMFStore use case"
+ name="org.eclipse.emf.emfstore.example.helloworld">
+ </projectDescriptor>
+ </example>
+ <example
+ id="org.eclipse.emf.emfstore.example.MergingEMFStore"
+ wizardID="org.eclipse.emf.emfstore.example.MergingEMFStoreExampleWizard">
+ <projectDescriptor
+ contentURI="examples/org.eclipse.emf.emfstore.example.merging/"
+ description="A merging example of EMFStore"
+ name="org.eclipse.emf.emfstore.example.merging">
+ </projectDescriptor>
+ </example>
+ </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.installer/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.installer/pom.xml
new file mode 100644
index 0000000..72be946
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.installer/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <artifactId>org.eclipse.emf.emfstore.example.installer</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.project b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.project
new file mode 100644
index 0000000..e49d5f3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.example.merging</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..701928f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Jan 26 20:34:00 CET 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..570d125
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example Merging client
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.merging;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.example.merging.Activator
+Require-Bundle: org.eclipse.emf.emfstore.examplemodel,
+ org.eclipse.emf.emfstore.client.ui,
+ org.eclipse.ui;bundle-version="3.5.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.merging/build.properties
new file mode 100644
index 0000000..7a13ae8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ src/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Client merging.launch b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Client merging.launch
new file mode 100644
index 0000000..d5b6e41
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Client merging.launch
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.emfstore.example.merging.merging"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore ExampleClient - merging"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-New_configuration"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<setAttribute key="selected_features">
+<setEntry value="org.eclipse.amalgam.discovery:default"/>
+<setEntry value="org.eclipse.cvs.source:default"/>
+<setEntry value="org.eclipse.cvs:default"/>
+<setEntry value="org.eclipse.draw2d.sdk:default"/>
+<setEntry value="org.eclipse.draw2d.source:default"/>
+<setEntry value="org.eclipse.draw2d:default"/>
+<setEntry value="org.eclipse.egit.psf:default"/>
+<setEntry value="org.eclipse.egit:default"/>
+<setEntry value="org.eclipse.emf.cdo.epp:default"/>
+<setEntry value="org.eclipse.emf.cdo.server:default"/>
+<setEntry value="org.eclipse.emf.cdo:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.ui.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.ui:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore:default"/>
+<setEntry value="org.eclipse.emf.codegen.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ui.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ui:default"/>
+<setEntry value="org.eclipse.emf.codegen:default"/>
+<setEntry value="org.eclipse.emf.common.ui.source:default"/>
+<setEntry value="org.eclipse.emf.common.ui:default"/>
+<setEntry value="org.eclipse.emf.common:default"/>
+<setEntry value="org.eclipse.emf.compare.doc:default"/>
+<setEntry value="org.eclipse.emf.compare.sdk:default"/>
+<setEntry value="org.eclipse.emf.compare.source:default"/>
+<setEntry value="org.eclipse.emf.compare.ui.capabilities:default"/>
+<setEntry value="org.eclipse.emf.compare:default"/>
+<setEntry value="org.eclipse.emf.converter.source:default"/>
+<setEntry value="org.eclipse.emf.converter:default"/>
+<setEntry value="org.eclipse.emf.databinding.edit.source:default"/>
+<setEntry value="org.eclipse.emf.databinding.edit:default"/>
+<setEntry value="org.eclipse.emf.databinding.source:default"/>
+<setEntry value="org.eclipse.emf.databinding:default"/>
+<setEntry value="org.eclipse.emf.doc.source:default"/>
+<setEntry value="org.eclipse.emf.doc:default"/>
+<setEntry value="org.eclipse.emf.ecore.edit.source:default"/>
+<setEntry value="org.eclipse.emf.ecore.edit:default"/>
+<setEntry value="org.eclipse.emf.ecore.editor.source:default"/>
+<setEntry value="org.eclipse.emf.ecore.editor:default"/>
+<setEntry value="org.eclipse.emf.ecore:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.doc:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.sdk:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.source:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.utils.source:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.utils:default"/>
+<setEntry value="org.eclipse.emf.ecoretools:default"/>
+<setEntry value="org.eclipse.emf.edit.source:default"/>
+<setEntry value="org.eclipse.emf.edit.ui.source:default"/>
+<setEntry value="org.eclipse.emf.edit.ui:default"/>
+<setEntry value="org.eclipse.emf.edit:default"/>
+<setEntry value="org.eclipse.emf.eef.codegen.ecore:default"/>
+<setEntry value="org.eclipse.emf.emfstore.site:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.editor.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.editor:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore:default"/>
+<setEntry value="org.eclipse.emf.mapping.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ui.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ui:default"/>
+<setEntry value="org.eclipse.emf.mapping:default"/>
+<setEntry value="org.eclipse.emf.query.doc:default"/>
+<setEntry value="org.eclipse.emf.query.ocl.source:default"/>
+<setEntry value="org.eclipse.emf.query.ocl:default"/>
+<setEntry value="org.eclipse.emf.query.sdk:default"/>
+<setEntry value="org.eclipse.emf.query.source:default"/>
+<setEntry value="org.eclipse.emf.query:default"/>
+<setEntry value="org.eclipse.emf.sdk:default"/>
+<setEntry value="org.eclipse.emf.source:default"/>
+<setEntry value="org.eclipse.emf.transaction.doc:default"/>
+<setEntry value="org.eclipse.emf.transaction.sdk:default"/>
+<setEntry value="org.eclipse.emf.transaction.source:default"/>
+<setEntry value="org.eclipse.emf.transaction:default"/>
+<setEntry value="org.eclipse.emf.validation.doc:default"/>
+<setEntry value="org.eclipse.emf.validation.ocl.source:default"/>
+<setEntry value="org.eclipse.emf.validation.ocl:default"/>
+<setEntry value="org.eclipse.emf.validation.sdk:default"/>
+<setEntry value="org.eclipse.emf.validation.source:default"/>
+<setEntry value="org.eclipse.emf.validation:default"/>
+<setEntry value="org.eclipse.emf.workspace.doc:default"/>
+<setEntry value="org.eclipse.emf.workspace.source:default"/>
+<setEntry value="org.eclipse.emf.workspace:default"/>
+<setEntry value="org.eclipse.emf:default"/>
+<setEntry value="org.eclipse.epp.mpc:default"/>
+<setEntry value="org.eclipse.epp.package.common.feature:default"/>
+<setEntry value="org.eclipse.epp.package.modeling.feature:default"/>
+<setEntry value="org.eclipse.epp.usagedata.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.core.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.discovery.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.user.ui:default"/>
+<setEntry value="org.eclipse.gef.sdk:default"/>
+<setEntry value="org.eclipse.gef.source:default"/>
+<setEntry value="org.eclipse.gef:default"/>
+<setEntry value="org.eclipse.gmf.examples.runtime.ui.pde:default"/>
+<setEntry value="org.eclipse.gmf.runtime.notation:default"/>
+<setEntry value="org.eclipse.gmf.runtime.sdk:default"/>
+<setEntry value="org.eclipse.gmf.runtime.thirdparty.source:default"/>
+<setEntry value="org.eclipse.gmf.runtime.thirdparty:default"/>
+<setEntry value="org.eclipse.gmf.source:default"/>
+<setEntry value="org.eclipse.gmf:default"/>
+<setEntry value="org.eclipse.help.source:default"/>
+<setEntry value="org.eclipse.help:default"/>
+<setEntry value="org.eclipse.jdt.source:default"/>
+<setEntry value="org.eclipse.jdt:default"/>
+<setEntry value="org.eclipse.jgit:default"/>
+<setEntry value="org.eclipse.mylyn.bugzilla_feature:default"/>
+<setEntry value="org.eclipse.mylyn.context_feature:default"/>
+<setEntry value="org.eclipse.mylyn.ide_feature:default"/>
+<setEntry value="org.eclipse.mylyn.java_feature:default"/>
+<setEntry value="org.eclipse.mylyn.pde_feature:default"/>
+<setEntry value="org.eclipse.mylyn.team_feature:default"/>
+<setEntry value="org.eclipse.mylyn.wikitext_feature:default"/>
+<setEntry value="org.eclipse.mylyn_feature:default"/>
+<setEntry value="org.eclipse.net4j.db.derby:default"/>
+<setEntry value="org.eclipse.net4j.db.h2:default"/>
+<setEntry value="org.eclipse.net4j.db:default"/>
+<setEntry value="org.eclipse.net4j:default"/>
+<setEntry value="org.eclipse.ocl.all.sdk:default"/>
+<setEntry value="org.eclipse.ocl.all:default"/>
+<setEntry value="org.eclipse.ocl.core.sdk:default"/>
+<setEntry value="org.eclipse.ocl.doc:default"/>
+<setEntry value="org.eclipse.ocl.edit.source:default"/>
+<setEntry value="org.eclipse.ocl.edit:default"/>
+<setEntry value="org.eclipse.ocl.source:default"/>
+<setEntry value="org.eclipse.ocl.uml.source:default"/>
+<setEntry value="org.eclipse.ocl.uml:default"/>
+<setEntry value="org.eclipse.ocl:default"/>
+<setEntry value="org.eclipse.pde.source:default"/>
+<setEntry value="org.eclipse.pde:default"/>
+<setEntry value="org.eclipse.platform.source:default"/>
+<setEntry value="org.eclipse.platform:default"/>
+<setEntry value="org.eclipse.rcp.source:default"/>
+<setEntry value="org.eclipse.rcp:default"/>
+<setEntry value="org.eclipse.sdk:default"/>
+<setEntry value="org.eclipse.uml2.doc:default"/>
+<setEntry value="org.eclipse.uml2.examples.source:default"/>
+<setEntry value="org.eclipse.uml2.examples:default"/>
+<setEntry value="org.eclipse.uml2.sdk:default"/>
+<setEntry value="org.eclipse.uml2.source:default"/>
+<setEntry value="org.eclipse.uml2:default"/>
+<setEntry value="org.eclipse.xsd.doc.source:default"/>
+<setEntry value="org.eclipse.xsd.doc:default"/>
+<setEntry value="org.eclipse.xsd.ecore.converter.source:default"/>
+<setEntry value="org.eclipse.xsd.ecore.converter:default"/>
+<setEntry value="org.eclipse.xsd.edit.source:default"/>
+<setEntry value="org.eclipse.xsd.edit:default"/>
+<setEntry value="org.eclipse.xsd.editor.source:default"/>
+<setEntry value="org.eclipse.xsd.editor:default"/>
+<setEntry value="org.eclipse.xsd.mapping.editor.source:default"/>
+<setEntry value="org.eclipse.xsd.mapping.editor:default"/>
+<setEntry value="org.eclipse.xsd.mapping.source:default"/>
+<setEntry value="org.eclipse.xsd.mapping:default"/>
+<setEntry value="org.eclipse.xsd.sdk:default"/>
+<setEntry value="org.eclipse.xsd.source:default"/>
+<setEntry value="org.eclipse.xsd:default"/>
+</setAttribute>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:default,org.eclipse.swt@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.ui@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.example.merging@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Server merging.launch b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Server merging.launch
new file mode 100644
index 0000000..db9c5e8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/launch/EMFStore Example Server merging.launch
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<setAttribute key="additional_plugins"/>
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.emfstore.server.application"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/EMFStore ExampleClient - merging"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="featureDefaultLocation" value="workspace"/>
+<stringAttribute key="featurePluginResolution" value="workspace"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-merging"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<setAttribute key="selected_features">
+<setEntry value="org.eclipse.amalgam.discovery:default"/>
+<setEntry value="org.eclipse.cvs.source:default"/>
+<setEntry value="org.eclipse.cvs:default"/>
+<setEntry value="org.eclipse.draw2d.sdk:default"/>
+<setEntry value="org.eclipse.draw2d.source:default"/>
+<setEntry value="org.eclipse.draw2d:default"/>
+<setEntry value="org.eclipse.egit.psf:default"/>
+<setEntry value="org.eclipse.egit:default"/>
+<setEntry value="org.eclipse.emf.cdo.epp:default"/>
+<setEntry value="org.eclipse.emf.cdo.server:default"/>
+<setEntry value="org.eclipse.emf.cdo:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.ui.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore.ui:default"/>
+<setEntry value="org.eclipse.emf.codegen.ecore:default"/>
+<setEntry value="org.eclipse.emf.codegen.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ui.source:default"/>
+<setEntry value="org.eclipse.emf.codegen.ui:default"/>
+<setEntry value="org.eclipse.emf.codegen:default"/>
+<setEntry value="org.eclipse.emf.common.ui.source:default"/>
+<setEntry value="org.eclipse.emf.common.ui:default"/>
+<setEntry value="org.eclipse.emf.common:default"/>
+<setEntry value="org.eclipse.emf.compare.doc:default"/>
+<setEntry value="org.eclipse.emf.compare.sdk:default"/>
+<setEntry value="org.eclipse.emf.compare.source:default"/>
+<setEntry value="org.eclipse.emf.compare.ui.capabilities:default"/>
+<setEntry value="org.eclipse.emf.compare:default"/>
+<setEntry value="org.eclipse.emf.converter.source:default"/>
+<setEntry value="org.eclipse.emf.converter:default"/>
+<setEntry value="org.eclipse.emf.databinding.edit.source:default"/>
+<setEntry value="org.eclipse.emf.databinding.edit:default"/>
+<setEntry value="org.eclipse.emf.databinding.source:default"/>
+<setEntry value="org.eclipse.emf.databinding:default"/>
+<setEntry value="org.eclipse.emf.doc.source:default"/>
+<setEntry value="org.eclipse.emf.doc:default"/>
+<setEntry value="org.eclipse.emf.ecore.edit.source:default"/>
+<setEntry value="org.eclipse.emf.ecore.edit:default"/>
+<setEntry value="org.eclipse.emf.ecore.editor.source:default"/>
+<setEntry value="org.eclipse.emf.ecore.editor:default"/>
+<setEntry value="org.eclipse.emf.ecore:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.doc:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.sdk:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.source:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.utils.source:default"/>
+<setEntry value="org.eclipse.emf.ecoretools.utils:default"/>
+<setEntry value="org.eclipse.emf.ecoretools:default"/>
+<setEntry value="org.eclipse.emf.edit.source:default"/>
+<setEntry value="org.eclipse.emf.edit.ui.source:default"/>
+<setEntry value="org.eclipse.emf.edit.ui:default"/>
+<setEntry value="org.eclipse.emf.edit:default"/>
+<setEntry value="org.eclipse.emf.eef.codegen.ecore:default"/>
+<setEntry value="org.eclipse.emf.emfstore.site:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.editor.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.editor:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ecore:default"/>
+<setEntry value="org.eclipse.emf.mapping.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ui.source:default"/>
+<setEntry value="org.eclipse.emf.mapping.ui:default"/>
+<setEntry value="org.eclipse.emf.mapping:default"/>
+<setEntry value="org.eclipse.emf.query.doc:default"/>
+<setEntry value="org.eclipse.emf.query.ocl.source:default"/>
+<setEntry value="org.eclipse.emf.query.ocl:default"/>
+<setEntry value="org.eclipse.emf.query.sdk:default"/>
+<setEntry value="org.eclipse.emf.query.source:default"/>
+<setEntry value="org.eclipse.emf.query:default"/>
+<setEntry value="org.eclipse.emf.sdk:default"/>
+<setEntry value="org.eclipse.emf.source:default"/>
+<setEntry value="org.eclipse.emf.transaction.doc:default"/>
+<setEntry value="org.eclipse.emf.transaction.sdk:default"/>
+<setEntry value="org.eclipse.emf.transaction.source:default"/>
+<setEntry value="org.eclipse.emf.transaction:default"/>
+<setEntry value="org.eclipse.emf.validation.doc:default"/>
+<setEntry value="org.eclipse.emf.validation.ocl.source:default"/>
+<setEntry value="org.eclipse.emf.validation.ocl:default"/>
+<setEntry value="org.eclipse.emf.validation.sdk:default"/>
+<setEntry value="org.eclipse.emf.validation.source:default"/>
+<setEntry value="org.eclipse.emf.validation:default"/>
+<setEntry value="org.eclipse.emf.workspace.doc:default"/>
+<setEntry value="org.eclipse.emf.workspace.source:default"/>
+<setEntry value="org.eclipse.emf.workspace:default"/>
+<setEntry value="org.eclipse.emf:default"/>
+<setEntry value="org.eclipse.epp.mpc:default"/>
+<setEntry value="org.eclipse.epp.package.common.feature:default"/>
+<setEntry value="org.eclipse.epp.package.modeling.feature:default"/>
+<setEntry value="org.eclipse.epp.usagedata.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.core.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.discovery.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.extras.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/>
+<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/>
+<setEntry value="org.eclipse.equinox.p2.user.ui:default"/>
+<setEntry value="org.eclipse.gef.sdk:default"/>
+<setEntry value="org.eclipse.gef.source:default"/>
+<setEntry value="org.eclipse.gef:default"/>
+<setEntry value="org.eclipse.gmf.examples.runtime.ui.pde:default"/>
+<setEntry value="org.eclipse.gmf.runtime.notation:default"/>
+<setEntry value="org.eclipse.gmf.runtime.sdk:default"/>
+<setEntry value="org.eclipse.gmf.runtime.thirdparty.source:default"/>
+<setEntry value="org.eclipse.gmf.runtime.thirdparty:default"/>
+<setEntry value="org.eclipse.gmf.source:default"/>
+<setEntry value="org.eclipse.gmf:default"/>
+<setEntry value="org.eclipse.help.source:default"/>
+<setEntry value="org.eclipse.help:default"/>
+<setEntry value="org.eclipse.jdt.source:default"/>
+<setEntry value="org.eclipse.jdt:default"/>
+<setEntry value="org.eclipse.jgit:default"/>
+<setEntry value="org.eclipse.mylyn.bugzilla_feature:default"/>
+<setEntry value="org.eclipse.mylyn.context_feature:default"/>
+<setEntry value="org.eclipse.mylyn.ide_feature:default"/>
+<setEntry value="org.eclipse.mylyn.java_feature:default"/>
+<setEntry value="org.eclipse.mylyn.pde_feature:default"/>
+<setEntry value="org.eclipse.mylyn.team_feature:default"/>
+<setEntry value="org.eclipse.mylyn.wikitext_feature:default"/>
+<setEntry value="org.eclipse.mylyn_feature:default"/>
+<setEntry value="org.eclipse.net4j.db.derby:default"/>
+<setEntry value="org.eclipse.net4j.db.h2:default"/>
+<setEntry value="org.eclipse.net4j.db:default"/>
+<setEntry value="org.eclipse.net4j:default"/>
+<setEntry value="org.eclipse.ocl.all.sdk:default"/>
+<setEntry value="org.eclipse.ocl.all:default"/>
+<setEntry value="org.eclipse.ocl.core.sdk:default"/>
+<setEntry value="org.eclipse.ocl.doc:default"/>
+<setEntry value="org.eclipse.ocl.edit.source:default"/>
+<setEntry value="org.eclipse.ocl.edit:default"/>
+<setEntry value="org.eclipse.ocl.source:default"/>
+<setEntry value="org.eclipse.ocl.uml.source:default"/>
+<setEntry value="org.eclipse.ocl.uml:default"/>
+<setEntry value="org.eclipse.ocl:default"/>
+<setEntry value="org.eclipse.pde.source:default"/>
+<setEntry value="org.eclipse.pde:default"/>
+<setEntry value="org.eclipse.platform.source:default"/>
+<setEntry value="org.eclipse.platform:default"/>
+<setEntry value="org.eclipse.rcp.source:default"/>
+<setEntry value="org.eclipse.rcp:default"/>
+<setEntry value="org.eclipse.sdk:default"/>
+<setEntry value="org.eclipse.uml2.doc:default"/>
+<setEntry value="org.eclipse.uml2.examples.source:default"/>
+<setEntry value="org.eclipse.uml2.examples:default"/>
+<setEntry value="org.eclipse.uml2.sdk:default"/>
+<setEntry value="org.eclipse.uml2.source:default"/>
+<setEntry value="org.eclipse.uml2:default"/>
+<setEntry value="org.eclipse.xsd.doc.source:default"/>
+<setEntry value="org.eclipse.xsd.doc:default"/>
+<setEntry value="org.eclipse.xsd.ecore.converter.source:default"/>
+<setEntry value="org.eclipse.xsd.ecore.converter:default"/>
+<setEntry value="org.eclipse.xsd.edit.source:default"/>
+<setEntry value="org.eclipse.xsd.edit:default"/>
+<setEntry value="org.eclipse.xsd.editor.source:default"/>
+<setEntry value="org.eclipse.xsd.editor:default"/>
+<setEntry value="org.eclipse.xsd.mapping.editor.source:default"/>
+<setEntry value="org.eclipse.xsd.mapping.editor:default"/>
+<setEntry value="org.eclipse.xsd.mapping.source:default"/>
+<setEntry value="org.eclipse.xsd.mapping:default"/>
+<setEntry value="org.eclipse.xsd.sdk:default"/>
+<setEntry value="org.eclipse.xsd.source:default"/>
+<setEntry value="org.eclipse.xsd:default"/>
+</setAttribute>
+<stringAttribute key="selected_target_plugins" value="org.apache.commons.codec@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.osgi@-1:true"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.merging/plugin.xml
new file mode 100644
index 0000000..91c04c8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="merging"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.emf.emfstore.example.merging.Application">
+ </run>
+ </application>
+ </extension>
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.merging/pom.xml
new file mode 100644
index 0000000..3453f96
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <artifactId>org.eclipse.emf.emfstore.example.merging</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
new file mode 100644
index 0000000..75666d5
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.example.merging;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.emf.emfstore.example.merging";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ // END SUPRESS CATCH EXCEPTION
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
new file mode 100644
index 0000000..07dc258
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.merging/src/org/eclipse/emf/emfstore/example/merging/Application.java
@@ -0,0 +1,381 @@
+/*******************************************************************************
+ * Copyright 2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.example.merging;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver;
+import org.eclipse.emf.emfstore.client.model.changeTracking.merging.DecisionManager;
+import org.eclipse.emf.emfstore.client.model.controller.callbacks.UpdateCallback;
+import org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommandWithResult;
+import org.eclipse.emf.emfstore.common.ConsoleProgressMonitor;
+import org.eclipse.emf.emfstore.common.model.IModelElementIdToEObjectMapping;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.server.exceptions.AccessControlException;
+import org.eclipse.emf.emfstore.server.exceptions.BaseVersionOutdatedException;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
+import org.eclipse.emf.emfstore.server.model.versioning.LogMessage;
+import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
+import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
+import org.eclipse.emf.emfstore.server.model.versioning.Versions;
+import org.eclipse.emf.emfstore.server.model.versioning.operations.AbstractOperation;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * An application that runs the demo.<br>
+ * Run a client that shows the merging feature of the EMFstore
+ * Please note: this is the programmatic way of merging
+ * EMFStore also provides a default UI for merging
+ * If there is a problem with the connection to the server
+ * e.g. a network, a specific EMFStoreException will be thrown
+ */
+public class Application implements IApplication {
+
+ private ProjectSpace project1;
+ private League league1;
+ private ProjectSpace project2;
+ private League league2;
+ private LogMessage logMessage;
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public Object start(IApplicationContext context) throws Exception {
+ // END SUPRESS CATCH EXCEPTION
+
+ WorkspaceManager.init();
+
+ // Run a client that shows the merging feature of the EMFstore
+ // Please note: this is the programmatic way of merging
+ // EMFStore also provides a default UI for merging
+ // If there is a problem with the connection to the server
+ // e.g. a network, a specific EMFStoreException will be thrown
+ try {
+ runClient();
+ } catch (EmfStoreException e) {
+ System.out.println("No connection to server.");
+ System.out.println("Did you start the server? :-)");
+ e.printStackTrace();
+
+ }
+
+ return IApplication.EXIT_OK;
+ }
+
+ private void runClient() throws AccessControlException, EmfStoreException {
+ System.out.println("Client starting...");
+ // Sets up the workspace by cleaning all contents
+ // Create a project with some EObjects and two
+ // identical copies. See hello world code example
+ // for more details
+ setupWorkspace();
+
+ // Change the name of the league in project 1,add a new player and commit the change
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ league1.setName("New Name 1");
+ league1.getPlayers().add(createPlayer("Player no. 4"));
+ }
+ }.run(false);
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ project1.commit(logMessage, null, new ConsoleProgressMonitor());
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ // Changing the name again value without calling
+ // project2.update() will cause a conflict on commit.
+ // also add one change which is non-conflicting
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ league2.setName("New Name 2");
+ league2.getPlayers().remove(0);
+ }
+ }.run(false);
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ project2.commit(logMessage, null, new ConsoleProgressMonitor());
+ } catch (BaseVersionOutdatedException e) {
+ System.out.println("\nCommit of project 2 failed.");
+
+ // run update in project 2 with our own updateCallback.
+ System.out.println("\nUpdate of project 2 with conflict resolver...");
+ try {
+ project2.update(Versions.createHEAD(), new MyUpdateCallback(), new ConsoleProgressMonitor());
+ // commit merge result in project 2
+ System.out.println("\nCommit of project 2 with merge result.");
+ project2.commit(logMessage, null, new ConsoleProgressMonitor());
+ } catch (EmfStoreException e1) {
+ throw new RuntimeException(e);
+ }
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ // After having merged the two projects update local project 1
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ System.out.println("\nUpdate of project 1 with merge result.");
+ project1.update();
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ System.out.println("\nLeague name in project 1 is now:" + league1.getName());
+ System.out.println("Client run completed.");
+ }
+
+ /**
+ * Creates a default workspace and deletes all remote projects.
+ *
+ * @throws AccessControlException
+ * @throws EmfStoreException
+ */
+ private void setupWorkspace() throws AccessControlException, EmfStoreException {
+ // The workspace is the core controler to access
+ // local and remote projects
+ final Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+
+ // A user session stores credentials for login
+ // Creates a user session with the default credentials
+ final Usersession usersession = new EMFStoreCommandWithResult<Usersession>() {
+ @Override
+ protected Usersession doRun() {
+ Usersession session = EMFStoreClientUtil.createUsersession();
+ try {
+ session.logIn();
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ return session;
+ }
+ }.run(false);
+
+ // Retrieves a list of existing (and accessible) projects
+ // on the sever and deletes them permanently (to have a
+ // clean set-up)
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ List<ProjectInfo> projectList = workspace.getRemoteProjectList(usersession);
+ for (ProjectInfo projectInfo : projectList) {
+ workspace.deleteRemoteProject(usersession, projectInfo.getProjectId(), true);
+ }
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ // Create a project, share it with the server
+ project1 = new EMFStoreCommandWithResult<ProjectSpace>() {
+ @Override
+ protected ProjectSpace doRun() {
+ ProjectSpace project1 = workspace.createLocalProject("projectNo1", "My project");
+ try {
+ project1.shareProject(usersession, new ConsoleProgressMonitor());
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ return project1;
+ }
+ }.run(false);
+
+ // Create some EObjects and add them to the project
+ // (To the projects containment tree)
+ league1 = BowlingFactory.eINSTANCE.createLeague();
+ league1.setName("league");
+ league1.getPlayers().add(createPlayer("no. 1"));
+ league1.getPlayers().add(createPlayer("no. 2"));
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ project1.getProject().addModelElement(league1);
+ }
+ }.run(false);
+
+ logMessage = new EMFStoreCommandWithResult<LogMessage>() {
+ @Override
+ protected LogMessage doRun() {
+ try {
+ LogMessage result = VersioningFactory.eINSTANCE.createLogMessage();
+ result.setMessage("My Message");
+ project1.commit(result, null, new ConsoleProgressMonitor());
+ System.out.println("Project 1 committed!");
+ return result;
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ // Check-out a second, independent copy of the project
+ // (simulating a second client)
+ project2 = new EMFStoreCommandWithResult<ProjectSpace>() {
+ @Override
+ protected ProjectSpace doRun() {
+ try {
+ return workspace.checkout(usersession, project1.getProjectInfo(), new NullProgressMonitor());
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ league2 = (League) project2.getProject().getModelElements().get(0);
+ }
+
+ /**
+ * Creates a new instance of a player.
+ *
+ * @param name
+ * @return
+ */
+ private Player createPlayer(String name) {
+ Player player = BowlingFactory.eINSTANCE.createPlayer();
+ player.setName(String.format("Player %s", name));
+ player.setEMail(String.format("%s@emfstore.org", name));
+ return player;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop() {
+ }
+
+ /**
+ * An UpdateCallback to drive the update and use our own conflict resolver (MyConflictResolver).
+ */
+ private class MyUpdateCallback implements UpdateCallback {
+ public void noChangesOnServer() {
+ // do nothing if there are no changes on the server (in this example we know
+ // there are changes anyway)
+ }
+
+ public boolean inspectChanges(ProjectSpace projectSpace, List<ChangePackage> changes,
+ IModelElementIdToEObjectMapping idToEObjectMapping) {
+ return true;
+ }
+
+ public boolean conflictOccurred(ChangeConflictException changeConflictException,
+ IProgressMonitor monitor) {
+ // resolve conflicts by merging with our conflict resolver
+ try {
+ project2.merge(project2.resolveVersionSpec(Versions.createHEAD()),
+ changeConflictException, new MyConflictResolver(false), this, monitor);
+ } catch (EmfStoreException e) {
+ // on any exceptions, declare conflicts as non-resolved
+ return false;
+ }
+ // conflicts have been resolved
+ return true;
+ }
+
+ public boolean checksumCheckFailed(ProjectSpace projectSpace, PrimaryVersionSpec versionSpec,
+ IProgressMonitor progressMonitor) throws EmfStoreException {
+ return true;
+ }
+ };
+
+ /**
+ * The MyConflictResolver will accept the name change of the league of project 2 to "New Name 2"
+ * reject the name change of project 1 and accept all other changes.
+ */
+ private class MyConflictResolver extends AbstractConflictResolver {
+ /**
+ * Instantiates a new MyConflictResolver.
+ *
+ * @param isBranchMerge the is branch merge
+ */
+ public MyConflictResolver(boolean isBranchMerge) {
+ super(isBranchMerge);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#controlDecisionManager(org.eclipse.emf.emfstore.client.model.changeTracking.merging.DecisionManager)
+ */
+ @Override
+ protected boolean controlDecisionManager(DecisionManager decisionManager) {
+ return true;
+ }
+
+ private ChangePackage myChangePackage;
+ private List<ChangePackage> theirChangePackages;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#resolveConflicts(org.eclipse.emf.emfstore.common.model.Project, org.eclipse.emf.emfstore.client.model.exceptions.ChangeConflictException, org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec, org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec)
+ */
+ @Override
+ public boolean resolveConflicts(Project project, ChangeConflictException conflictException,
+ PrimaryVersionSpec base, PrimaryVersionSpec target) {
+ this.theirChangePackages = conflictException.getNewPackages();
+ this.myChangePackage = conflictException.getMyChangePackages().get(0);
+ // declare that resolver will be able to resolve all conflicts
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#getRejectedTheirs()
+ */
+ @Override
+ public List<AbstractOperation> getRejectedTheirs() {
+ // reject the first change in the change package of project
+ // 1 from the server, since it is the name change of the
+ // league to "New Name 1"
+ return Arrays.asList(theirChangePackages.get(0).getOperations().get(0));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.emfstore.client.model.changeTracking.merging.AbstractConflictResolver#getAcceptedMine()
+ */
+ @Override
+ public List<AbstractOperation> getAcceptedMine() {
+ // accept all my operations in project 2, including the name change to "New Name 2"
+ return myChangePackage.getOperations();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.classpath b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.project b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.project
new file mode 100644
index 0000000..13e3fed
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.example.sessionprovider</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b299b1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Mon Mar 05 15:28:54 CET 2012
+M=org.eclipse.emf.emfstore.exampleclient/.settings/org.eclipse.jdt.core.prefs
+Unstaged=changes after reset\:
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ac18dfd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example SessionProvider
+Bundle-SymbolicName: org.eclipse.emf.emfstore.example.sessionprovider;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-Activator: org.eclipse.emf.emfstore.exampleclient.Activator
+Require-Bundle: org.eclipse.emf.emfstore.client;bundle-version="0.9.0",
+ org.eclipse.emf.workspace;bundle-version="1.4.0",
+ org.eclipse.emf.emfstore.examplemodel
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/build.properties b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/build.properties
new file mode 100644
index 0000000..6f20375
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/plugin.xml
new file mode 100644
index 0000000..f340426
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/plugin.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="sessionprovider"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.emf.emfstore.exampleclient.Application">
+ </run>
+ </application>
+ </extension>
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
new file mode 100644
index 0000000..4ed991b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <artifactId>org.eclipse.emf.emfstore.example.sessionprovider</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Activator.java b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
new file mode 100644
index 0000000..8539a0c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends Plugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "exampleClient";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ // END SUPRESS CATCH EXCEPTION
+
+ /**
+ * Returns the shared instance.
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Application.java b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Application.java
new file mode 100644
index 0000000..284d08c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.example.sessionprovider/src/org/eclipse/emf/emfstore/exampleclient/Application.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * 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:
+ * Florian Pirchner
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.exampleclient;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.emfstore.bowling.BowlingFactory;
+import org.eclipse.emf.emfstore.bowling.League;
+import org.eclipse.emf.emfstore.bowling.Player;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreClientUtil;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.server.exceptions.AccessControlException;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.ProjectInfo;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+/**
+ * An application that runs the demo.<br>
+ * Run a client that shows the merging feature of the EMFstore
+ * Please note: this is the programmatic way of merging
+ * EMFStore also provides a default UI for merging
+ * If there is a problem with the connection to the server
+ * e.g. a network, a specific EMFStoreException will be thrown
+ */
+public class Application implements IApplication {
+
+ /**
+ * {@inheritDoc}
+ */
+ // BEGIN SUPRESS CATCH EXCEPTION
+ public Object start(IApplicationContext context) throws Exception {
+ WorkspaceManager.init();
+
+ // run a client that shows the basic features of the emf store
+ runClient();
+
+ return IApplication.EXIT_OK;
+ }
+
+ // END SUPRESS CATCH EXCEPTION
+
+ private void runClient() throws AccessControlException, EmfStoreException {
+ System.out.println("Client starting...");
+
+ try {
+
+ Workspace workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+ // create a default Usersession for the purpose of this
+ // tutorial.
+ // TODO - create server info
+ Usersession usersession = EMFStoreClientUtil.createUsersession();
+ usersession.logIn();
+ List<ProjectInfo> projectList;
+ // TODO server info parameter
+ projectList = workspace.getRemoteProjectList(usersession);
+
+ // TODO
+ // org.eclipse.emf.emfstore.client.test.TestSessionProvider
+ // schreiben
+ // Pwd per System.in prompten
+
+ for (ProjectInfo projectInfo : projectList) {
+ workspace.deleteRemoteProject(usersession, projectInfo.getProjectId(), true);
+ }
+
+ /*
+ * Create a project, share it with the server, add a model element
+ * to it and commit the changes.
+ */
+
+ // create a new local project
+ // and share it with the server
+ ProjectSpace project1 = workspace.createLocalProject("projectNo1", "My project");
+ project1.shareProject(usersession, null);
+
+ // create a league
+ // and add 2 players to it
+ League league1 = BowlingFactory.eINSTANCE.createLeague();
+ league1.setName("league no. 1");
+ league1.getPlayers().add(createPlayer("no. 1"));
+ league1.getPlayers().add(createPlayer("no. 2"));
+ project1.getProject().addModelElement(league1);
+
+ // commit the changes of the project to the EMF
+ // Store
+ project1.commit(null, null, null);
+ System.out.println("Project 1: The \"league no. 1\" was sent to the server!");
+
+ /*
+ * Now lets checkout the same project twice, modify the element and
+ * commit the changes to the server.
+ */
+ ProjectSpace project2 = workspace.checkout(usersession, project1.getProjectInfo(),
+ new NullProgressMonitor());
+ League league2 = (League) project2.getProject().getModelElements().get(0);
+ System.out.println(String.format("Project 2: League \"%s\" was checked out twice!", league1.getName()));
+ league2.setName("league no. 1 - changed");
+ // now lets try to commit
+ project2.commit(null, null, null);
+
+ /*
+ * Lets check the value of the league contained in project 1. Then
+ * we update the values from the server and check the contents
+ * again.
+ */
+ System.out.println(String.format("Project 1: Name of league is \"%s\"", league1.getName()));
+
+ // update from server
+ project1.update();
+
+ System.out.println(String.format("Project 1: Name of league is \"%s\" after update from server",
+ league1.getName()));
+
+ /*
+ * Now lets create a conflict!
+ */
+ System.out.println("Creating a conflict");
+ league1.setName("Not conflicting change");
+ project1.commit(null, null, null);
+
+ try {
+ league2.setName("Uuups - conflicting change");
+ project2.commit(null, null, null);
+ } catch (EmfStoreException e) {
+ System.out.println("That was a conflict since league1#name was changed and commited earlier!");
+
+ /*
+ * Now lets revert the changes, update the project and change it
+ * afterwards
+ */
+ project2.revert();
+ project2.update();
+ league2.setName("Not conflicting anymore");
+ project2.commit(null, null, null);
+ }
+
+ System.out.println("Client run completed.");
+ } catch (AccessControlException e) {
+ ModelUtil.logException(e);
+ } catch (EmfStoreException e) {
+ ModelUtil.logException(e);
+ }
+ }
+
+ /**
+ * Creates a new instance of a player.
+ *
+ * @param name
+ * @return
+ */
+ private Player createPlayer(String name) {
+ Player player = BowlingFactory.eINSTANCE.createPlayer();
+ player.setName(String.format("Player %s", name));
+ player.setEMail(String.format("%s@emfstore.org", name));
+ return player;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop() {
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.classpath
new file mode 100644
index 0000000..472ee29
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.project
new file mode 100644
index 0000000..fd3a91e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.fuzzy.emf.edit</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8bf97e2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Fuzzy EMF Edit plugin
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.edit;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigEditPlugin$Implementation
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.config.provider
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;visibility:=reexport,
+ org.eclipse.emf.edit;bundle-version="[2.5.0,3.0.0)";visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/build.properties
new file mode 100644
index 0000000..baa3b2a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateDiffReport_diffs_TestDiff.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateDiffReport_diffs_TestDiff.gif
new file mode 100644
index 0000000..ebeaeeb
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateDiffReport_diffs_TestDiff.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_DiffReport.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_DiffReport.gif
new file mode 100644
index 0000000..338a9a6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_DiffReport.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_MutatorConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_MutatorConfig.gif
new file mode 100644
index 0000000..dc3ca18
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_MutatorConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_Root.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_Root.gif
new file mode 100644
index 0000000..9ea845b
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_Root.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestConfig.gif
new file mode 100644
index 0000000..21b4d39
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestDiff.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestDiff.gif
new file mode 100644
index 0000000..6203d5c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestDiff.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestResult.gif
new file mode 100644
index 0000000..17db365
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestRun.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestRun.gif
new file mode 100644
index 0000000..1875b13
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateRoot_elements_TestRun.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestConfig_mutatorConfig_MutatorConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestConfig_mutatorConfig_MutatorConfig.gif
new file mode 100644
index 0000000..c28f2e6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestConfig_mutatorConfig_MutatorConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_newResult_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_newResult_TestResult.gif
new file mode 100644
index 0000000..5fb0c4c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_newResult_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_oldResult_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_oldResult_TestResult.gif
new file mode 100644
index 0000000..5fb0c4c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestDiff_oldResult_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_config_TestConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_config_TestConfig.gif
new file mode 100644
index 0000000..9073955
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_config_TestConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_results_TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_results_TestResult.gif
new file mode 100644
index 0000000..e178517
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/ctool16/CreateTestRun_results_TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/DiffReport.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/DiffReport.gif
new file mode 100644
index 0000000..14af8aa
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/DiffReport.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/MutatorConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/MutatorConfig.gif
new file mode 100644
index 0000000..7bac4fd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/MutatorConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/Root.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/Root.gif
new file mode 100644
index 0000000..cb1755a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/Root.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestConfig.gif
new file mode 100644
index 0000000..c3370c7
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestDiff.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestDiff.gif
new file mode 100644
index 0000000..e4b530e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestDiff.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestResult.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestResult.gif
new file mode 100644
index 0000000..136e3b2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestResult.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestRun.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestRun.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/icons/full/obj16/TestRun.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.properties
new file mode 100644
index 0000000..26d8b12
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.properties
@@ -0,0 +1,64 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = Config Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_TestConfig_type = Test Config
+_UI_TestRun_type = Test Run
+_UI_TestResult_type = Test Result
+_UI_TestDiff_type = Test Diff
+_UI_DiffReport_type = Diff Report
+_UI_Root_type = Root
+_UI_MutatorConfig_type = Mutator Config
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_TestConfig_seed_feature = Seed
+_UI_TestConfig_count_feature = Count
+_UI_TestConfig_testClass_feature = Test Class
+_UI_TestConfig_id_feature = Id
+_UI_TestConfig_mutatorConfig_feature = Mutator Config
+_UI_TestRun_config_feature = Config
+_UI_TestRun_time_feature = Time
+_UI_TestRun_results_feature = Results
+_UI_TestResult_seedCount_feature = Seed Count
+_UI_TestResult_testName_feature = Test Name
+_UI_TestResult_error_feature = Error
+_UI_TestResult_failure_feature = Failure
+_UI_TestResult_executionTime_feature = Execution Time
+_UI_TestDiff_lastUpdate_feature = Last Update
+_UI_TestDiff_config_feature = Config
+_UI_TestDiff_oldResult_feature = Old Result
+_UI_TestDiff_newResult_feature = New Result
+_UI_DiffReport_diffs_feature = Diffs
+_UI_Root_elements_feature = Elements
+_UI_MutatorConfig_nsURI_feature = Ns URI
+_UI_MutatorConfig_rootEClass_feature = Root EClass
+_UI_MutatorConfig_depth_feature = Depth
+_UI_MutatorConfig_width_feature = Width
+_UI_MutatorConfig_ignoreAndLog_feature = Ignore And Log
+_UI_MutatorConfig_doNotGenerateRoot_feature = Do Not Generate Root
+_UI_MutatorConfig_useEcoreUtilDelete_feature = Use Ecore Util Delete
+_UI_Unknown_feature = Unspecified
+
+_UI_MutatorConfig_eClassesToIgnore_feature = EClasses To Ignore
+_UI_MutatorConfig_eStructuralFeaturesToIgnore_feature = EStructural Features To Ignore
+_UI_MutatorConfig_ePackage_feature = EPackage
+_UI_MutatorConfig_minObjectsCount_feature = Min Objects Count
+_UI_MutatorConfig_useRemoveCommand_feature = Use Remove Command
+_UI_MutatorConfig_maxDeleteCount_feature = Max Delete Count
+_UI_MutatorConfig_ePackages_feature = EPackages
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.xml
new file mode 100644
index 0000000..bdbbe1d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+ <factory
+ uri="http://org/eclipse/emf/emfstore/fuzzy/emf/config"
+ class="org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigItemProviderAdapterFactory"
+ supportedTypes=
+ "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+ org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+ org.eclipse.emf.edit.provider.ITreeItemContentProvider
+ org.eclipse.emf.edit.provider.IItemLabelProvider
+ org.eclipse.emf.edit.provider.IItemPropertySource"/>
+ </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
new file mode 100644
index 0000000..f2e3d90
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.edit</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigEditPlugin.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigEditPlugin.java
new file mode 100644
index 0000000..81485bc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigEditPlugin.java
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Config edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public final class ConfigEditPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final ConfigEditPlugin INSTANCE = new ConfigEditPlugin();
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigEditPlugin() {
+ super(new ResourceLocator[] {});
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigItemProviderAdapterFactory.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigItemProviderAdapterFactory.java
new file mode 100644
index 0000000..9c0229a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/ConfigItemProviderAdapterFactory.java
@@ -0,0 +1,395 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.util.ConfigAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged
+ * fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConfigItemProviderAdapterFactory extends ConfigAdapterFactory implements ComposeableAdapterFactory,
+ IChangeNotifier, IDisposable {
+ /**
+ * This keeps track of the root adapter factory that delegates to this adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ComposedAdapterFactory parentAdapterFactory;
+
+ /**
+ * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+ /**
+ * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+ /**
+ * This constructs an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigItemProviderAdapterFactory() {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestConfigItemProvider testConfigItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createTestConfigAdapter() {
+ if (testConfigItemProvider == null) {
+ testConfigItemProvider = new TestConfigItemProvider(this);
+ }
+
+ return testConfigItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestRunItemProvider testRunItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createTestRunAdapter() {
+ if (testRunItemProvider == null) {
+ testRunItemProvider = new TestRunItemProvider(this);
+ }
+
+ return testRunItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestResultItemProvider testResultItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createTestResultAdapter() {
+ if (testResultItemProvider == null) {
+ testResultItemProvider = new TestResultItemProvider(this);
+ }
+
+ return testResultItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestDiffItemProvider testDiffItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createTestDiffAdapter() {
+ if (testDiffItemProvider == null) {
+ testDiffItemProvider = new TestDiffItemProvider(this);
+ }
+
+ return testDiffItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected DiffReportItemProvider diffReportItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createDiffReportAdapter() {
+ if (diffReportItemProvider == null) {
+ diffReportItemProvider = new DiffReportItemProvider(this);
+ }
+
+ return diffReportItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected RootItemProvider rootItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createRootAdapter() {
+ if (rootItemProvider == null) {
+ rootItemProvider = new RootItemProvider(this);
+ }
+
+ return rootItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig}
+ * instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected MutatorConfigItemProvider mutatorConfigItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createMutatorConfigAdapter() {
+ if (mutatorConfigItemProvider == null) {
+ mutatorConfigItemProvider = new MutatorConfigItemProvider(this);
+ }
+
+ return mutatorConfigItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ComposeableAdapterFactory getRootAdapterFactory() {
+ return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+ }
+
+ /**
+ * This sets the composed adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+ this.parentAdapterFactory = parentAdapterFactory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object type) {
+ return supportedTypes.contains(type) || super.isFactoryForType(type);
+ }
+
+ /**
+ * This implementation substitutes the factory itself as the key for the adapter.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter adapt(Notifier notifier, Object type) {
+ return super.adapt(notifier, this);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object adapt(Object object, Object type) {
+ if (isFactoryForType(type)) {
+ Object adapter = super.adapt(object, type);
+ if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) {
+ return adapter;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This adds a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void addListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void removeListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void fireNotifyChanged(Notification notification) {
+ changeNotifier.fireNotifyChanged(notification);
+
+ if (parentAdapterFactory != null) {
+ parentAdapterFactory.fireNotifyChanged(notification);
+ }
+ }
+
+ /**
+ * This disposes all of the item providers created by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void dispose() {
+ if (testConfigItemProvider != null)
+ testConfigItemProvider.dispose();
+ if (testRunItemProvider != null)
+ testRunItemProvider.dispose();
+ if (testResultItemProvider != null)
+ testResultItemProvider.dispose();
+ if (testDiffItemProvider != null)
+ testDiffItemProvider.dispose();
+ if (diffReportItemProvider != null)
+ diffReportItemProvider.dispose();
+ if (rootItemProvider != null)
+ rootItemProvider.dispose();
+ if (mutatorConfigItemProvider != null)
+ mutatorConfigItemProvider.dispose();
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/DiffReportItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/DiffReportItemProvider.java
new file mode 100644
index 0000000..c580c57
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/DiffReportItemProvider.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.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.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+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.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class DiffReportItemProvider 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 DiffReportItemProvider(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);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ConfigPackage.Literals.DIFF_REPORT__DIFFS);
+ }
+ 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);
+ }
+
+ /**
+ * This returns DiffReport.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/DiffReport"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_DiffReport_type");
+ }
+
+ /**
+ * 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(DiffReport.class)) {
+ case ConfigPackage.DIFF_REPORT__DIFFS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.DIFF_REPORT__DIFFS,
+ ConfigFactory.eINSTANCE.createTestDiff()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/MutatorConfigItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/MutatorConfigItemProvider.java
new file mode 100644
index 0000000..36d0c16
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/MutatorConfigItemProvider.java
@@ -0,0 +1,307 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.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.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;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class MutatorConfigItemProvider 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 MutatorConfigItemProvider(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);
+
+ addRootEClassPropertyDescriptor(object);
+ addMinObjectsCountPropertyDescriptor(object);
+ addIgnoreAndLogPropertyDescriptor(object);
+ addDoNotGenerateRootPropertyDescriptor(object);
+ addUseEcoreUtilDeletePropertyDescriptor(object);
+ addEClassesToIgnorePropertyDescriptor(object);
+ addEStructuralFeaturesToIgnorePropertyDescriptor(object);
+ addEPackagesPropertyDescriptor(object);
+ addMaxDeleteCountPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Root EClass feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addRootEClassPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_rootEClass_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_rootEClass_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__ROOT_ECLASS, true, false, true, null,
+ null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Min Objects Count feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addMinObjectsCountPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_minObjectsCount_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_minObjectsCount_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__MIN_OBJECTS_COUNT, true, false,
+ false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Ignore And Log feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addIgnoreAndLogPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_ignoreAndLog_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_ignoreAndLog_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__IGNORE_AND_LOG, true, false, false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Do Not Generate Root feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addDoNotGenerateRootPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_doNotGenerateRoot_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_doNotGenerateRoot_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT, true, false,
+ false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Use Ecore Util Delete feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addUseEcoreUtilDeletePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_useEcoreUtilDelete_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_useEcoreUtilDelete_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE, true, false,
+ false, ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the EClasses To Ignore feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addEClassesToIgnorePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_eClassesToIgnore_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_eClassesToIgnore_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__ECLASSES_TO_IGNORE, true, false,
+ true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the EStructural Features To Ignore feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addEStructuralFeaturesToIgnorePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_eStructuralFeaturesToIgnore_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_eStructuralFeaturesToIgnore_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE, true,
+ false, true, null, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the EPackages feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addEPackagesPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_ePackages_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_ePackages_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__EPACKAGES, true, false, true, null,
+ null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Max Delete Count feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addMaxDeleteCountPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MutatorConfig_maxDeleteCount_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MutatorConfig_maxDeleteCount_feature",
+ "_UI_MutatorConfig_type"), ConfigPackage.Literals.MUTATOR_CONFIG__MAX_DELETE_COUNT, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This returns MutatorConfig.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/MutatorConfig"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ MutatorConfig mutatorConfig = (MutatorConfig) object;
+ return getString("_UI_MutatorConfig_type") + " " + mutatorConfig.getMinObjectsCount();
+ }
+
+ /**
+ * 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(MutatorConfig.class)) {
+ case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+ case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+ case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+ case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+ case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+ 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 ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/RootItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/RootItemProvider.java
new file mode 100644
index 0000000..2ab5e2d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/RootItemProvider.java
@@ -0,0 +1,194 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.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.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+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.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class RootItemProvider 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 RootItemProvider(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);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ConfigPackage.Literals.ROOT__ELEMENTS);
+ }
+ 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);
+ }
+
+ /**
+ * This returns Root.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Root"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_Root_type");
+ }
+
+ /**
+ * 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(Root.class)) {
+ case ConfigPackage.ROOT__ELEMENTS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createTestConfig()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createTestRun()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createTestResult()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createTestDiff()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createDiffReport()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createRoot()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.ROOT__ELEMENTS,
+ ConfigFactory.eINSTANCE.createMutatorConfig()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestConfigItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestConfigItemProvider.java
new file mode 100644
index 0000000..ccf4d74
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestConfigItemProvider.java
@@ -0,0 +1,254 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.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.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;
+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;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TestConfigItemProvider 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 TestConfigItemProvider(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);
+
+ addSeedPropertyDescriptor(object);
+ addCountPropertyDescriptor(object);
+ addTestClassPropertyDescriptor(object);
+ addIdPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Seed feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addSeedPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestConfig_seed_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_seed_feature", "_UI_TestConfig_type"),
+ ConfigPackage.Literals.TEST_CONFIG__SEED, true, false, false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Count feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addCountPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestConfig_count_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_count_feature", "_UI_TestConfig_type"),
+ ConfigPackage.Literals.TEST_CONFIG__COUNT, true, false, false, ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Test Class feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addTestClassPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestConfig_testClass_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_testClass_feature", "_UI_TestConfig_type"),
+ ConfigPackage.Literals.TEST_CONFIG__TEST_CLASS, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Id feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addIdPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestConfig_id_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestConfig_id_feature", "_UI_TestConfig_type"),
+ ConfigPackage.Literals.TEST_CONFIG__ID, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null, null));
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ConfigPackage.Literals.TEST_CONFIG__MUTATOR_CONFIG);
+ }
+ 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);
+ }
+
+ /**
+ * This returns TestConfig.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/TestConfig"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((TestConfig) object).getId();
+ return label == null || label.length() == 0 ? getString("_UI_TestConfig_type")
+ : getString("_UI_TestConfig_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(TestConfig.class)) {
+ case ConfigPackage.TEST_CONFIG__SEED:
+ case ConfigPackage.TEST_CONFIG__COUNT:
+ case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+ case ConfigPackage.TEST_CONFIG__ID:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_CONFIG__MUTATOR_CONFIG,
+ ConfigFactory.eINSTANCE.createMutatorConfig()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestDiffItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestDiffItemProvider.java
new file mode 100644
index 0000000..a3c4b91
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestDiffItemProvider.java
@@ -0,0 +1,245 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.Date;
+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.ecore.EStructuralFeature;
+
+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;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TestDiffItemProvider 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 TestDiffItemProvider(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);
+
+ addLastUpdatePropertyDescriptor(object);
+ addConfigPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Last Update feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addLastUpdatePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestDiff_lastUpdate_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestDiff_lastUpdate_feature", "_UI_TestDiff_type"),
+ ConfigPackage.Literals.TEST_DIFF__LAST_UPDATE, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Config feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addConfigPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestDiff_config_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestDiff_config_feature", "_UI_TestDiff_type"),
+ ConfigPackage.Literals.TEST_DIFF__CONFIG, true, false, true, null, null, null));
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ConfigPackage.Literals.TEST_DIFF__OLD_RESULT);
+ childrenFeatures.add(ConfigPackage.Literals.TEST_DIFF__NEW_RESULT);
+ }
+ 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);
+ }
+
+ /**
+ * This returns TestDiff.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/TestDiff"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ Date labelValue = ((TestDiff) object).getLastUpdate();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ? getString("_UI_TestDiff_type") : getString("_UI_TestDiff_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(TestDiff.class)) {
+ case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ConfigPackage.TEST_DIFF__OLD_RESULT:
+ case ConfigPackage.TEST_DIFF__NEW_RESULT:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_DIFF__OLD_RESULT,
+ ConfigFactory.eINSTANCE.createTestResult()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_DIFF__NEW_RESULT,
+ ConfigFactory.eINSTANCE.createTestResult()));
+ }
+
+ /**
+ * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+ Object childFeature = feature;
+ Object childObject = child;
+
+ boolean qualify = childFeature == ConfigPackage.Literals.TEST_DIFF__OLD_RESULT
+ || childFeature == ConfigPackage.Literals.TEST_DIFF__NEW_RESULT;
+
+ if (qualify) {
+ return getString("_UI_CreateChild_text2", new Object[] { getTypeText(childObject),
+ getFeatureText(childFeature), getTypeText(owner) });
+ }
+ return super.getCreateChildText(owner, feature, child, selection);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestResultItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestResultItemProvider.java
new file mode 100644
index 0000000..cff23f3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestResultItemProvider.java
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.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.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;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TestResultItemProvider 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 TestResultItemProvider(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);
+
+ addSeedCountPropertyDescriptor(object);
+ addTestNamePropertyDescriptor(object);
+ addErrorPropertyDescriptor(object);
+ addFailurePropertyDescriptor(object);
+ addExecutionTimePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Seed Count feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addSeedCountPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestResult_seedCount_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestResult_seedCount_feature", "_UI_TestResult_type"),
+ ConfigPackage.Literals.TEST_RESULT__SEED_COUNT, true, false, false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Test Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addTestNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestResult_testName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestResult_testName_feature", "_UI_TestResult_type"),
+ ConfigPackage.Literals.TEST_RESULT__TEST_NAME, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Error feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addErrorPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestResult_error_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestResult_error_feature", "_UI_TestResult_type"),
+ ConfigPackage.Literals.TEST_RESULT__ERROR, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Failure feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addFailurePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestResult_failure_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestResult_failure_feature", "_UI_TestResult_type"),
+ ConfigPackage.Literals.TEST_RESULT__FAILURE, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Execution Time feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addExecutionTimePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_TestResult_executionTime_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestResult_executionTime_feature",
+ "_UI_TestResult_type"), ConfigPackage.Literals.TEST_RESULT__EXECUTION_TIME, true, false, false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This returns TestResult.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/TestResult"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((TestResult) object).getTestName();
+ return label == null || label.length() == 0 ? getString("_UI_TestResult_type")
+ : getString("_UI_TestResult_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(TestResult.class)) {
+ case ConfigPackage.TEST_RESULT__SEED_COUNT:
+ case ConfigPackage.TEST_RESULT__TEST_NAME:
+ case ConfigPackage.TEST_RESULT__ERROR:
+ case ConfigPackage.TEST_RESULT__FAILURE:
+ case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+ 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 ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestRunItemProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestRunItemProvider.java
new file mode 100644
index 0000000..328eeba
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.edit/src/org/eclipse/emf/emfstore/fuzzy/emf/config/provider/TestRunItemProvider.java
@@ -0,0 +1,207 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.provider;
+
+import java.util.Collection;
+import java.util.Date;
+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.ecore.EStructuralFeature;
+
+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;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TestRunItemProvider 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 TestRunItemProvider(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);
+
+ addTimePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Time feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addTimePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_TestRun_time_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_TestRun_time_feature", "_UI_TestRun_type"),
+ ConfigPackage.Literals.TEST_RUN__TIME, true, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null, null));
+ }
+
+ /**
+ * 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
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ConfigPackage.Literals.TEST_RUN__CONFIG);
+ childrenFeatures.add(ConfigPackage.Literals.TEST_RUN__RESULTS);
+ }
+ 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);
+ }
+
+ /**
+ * This returns TestRun.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/TestRun"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ Date labelValue = ((TestRun) object).getTime();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ? getString("_UI_TestRun_type") : getString("_UI_TestRun_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(TestRun.class)) {
+ case ConfigPackage.TEST_RUN__TIME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ConfigPackage.TEST_RUN__CONFIG:
+ case ConfigPackage.TEST_RUN__RESULTS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_RUN__CONFIG,
+ ConfigFactory.eINSTANCE.createTestConfig()));
+
+ newChildDescriptors.add(createChildParameter(ConfigPackage.Literals.TEST_RUN__RESULTS,
+ ConfigFactory.eINSTANCE.createTestResult()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ConfigEditPlugin.INSTANCE;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.classpath
new file mode 100644
index 0000000..472ee29
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.project
new file mode 100644
index 0000000..261eae6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.fuzzy.emf.editor</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ae55196
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMFDataProvider Editor
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.editor;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigEditorPlugin$Implementation
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf.config.presentation
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
+ org.eclipse.emf.emfstore.fuzzy.emf.edit;visibility:=reexport,
+ org.eclipse.emf.edit.ui;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.ui.ide;bundle-version="[3.7.0,4.0.0)";visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/build.properties
new file mode 100644
index 0000000..10c87a0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/obj16/ConfigModelFile.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/obj16/ConfigModelFile.gif
new file mode 100644
index 0000000..8b3ad80
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/obj16/ConfigModelFile.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/wizban/NewConfig.gif b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/wizban/NewConfig.gif
new file mode 100644
index 0000000..33f212f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/icons/full/wizban/NewConfig.gif
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.properties
new file mode 100644
index 0000000..6c5340c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.properties
@@ -0,0 +1,57 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = Config Editor
+providerName = www.example.org
+
+_UI_ConfigEditor_menu = &Config Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+_UI_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ConfigModelWizard_label = Config Model
+_UI_ConfigModelWizard_description = Create a new Config model
+
+_UI_ConfigEditor_label = Config Model Editor
+
+_UI_ConfigEditorFilenameDefaultBase = My
+_UI_ConfigEditorFilenameExtensions = fuzzy
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor. Do you wish to discard this editor's changes?
+
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.xml
new file mode 100644
index 0000000..96bb383
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/plugin.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.ui.newWizards">
+ <category
+ id="org.eclipse.emf.ecore.Wizard.category.ID"
+ name="%_UI_Wizard_category"/>
+ <wizard
+ id="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigModelWizardID"
+ name="%_UI_ConfigModelWizard_label"
+ class="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigModelWizard"
+ category="org.eclipse.emf.ecore.Wizard.category.ID"
+ icon="icons/full/obj16/ConfigModelFile.gif">
+ <description>%_UI_ConfigModelWizard_description</description>
+ <selection class="org.eclipse.core.resources.IResource"/>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.editors">
+ <editor
+ id="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigEditorID"
+ name="%_UI_ConfigEditor_label"
+ icon="icons/full/obj16/ConfigModelFile.gif"
+ extensions="fuzzy"
+ class="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigEditor"
+ contributorClass="org.eclipse.emf.emfstore.fuzzy.emf.config.presentation.ConfigActionBarContributor">
+ </editor>
+ </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
new file mode 100644
index 0000000..1978223
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.editor</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigActionBarContributor.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigActionBarContributor.java
new file mode 100644
index 0000000..9905102
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigActionBarContributor.java
@@ -0,0 +1,450 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.presentation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Config model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConfigActionBarContributor extends EditingDomainActionBarContributor implements ISelectionChangedListener {
+ /**
+ * This keeps track of the active editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IEditorPart activeEditorPart;
+
+ /**
+ * This keeps track of the current selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ISelectionProvider selectionProvider;
+
+ /**
+ * This action opens the Properties view.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IAction showPropertiesViewAction = new Action(
+ ConfigEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+ @Override
+ public void run() {
+ try {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ } catch (PartInitException exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * This action refreshes the viewer of the current editor if the editor
+ * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IAction refreshViewerAction = new Action(
+ ConfigEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+ @Override
+ public boolean isEnabled() {
+ return activeEditorPart instanceof IViewerProvider;
+ }
+
+ @Override
+ public void run() {
+ if (activeEditorPart instanceof IViewerProvider) {
+ Viewer viewer = ((IViewerProvider) activeEditorPart).getViewer();
+ if (viewer != null) {
+ viewer.refresh();
+ }
+ }
+ }
+ };
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> createChildActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IMenuManager createChildMenuManager;
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> createSiblingActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IMenuManager createSiblingMenuManager;
+
+ /**
+ * This creates an instance of the contributor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigActionBarContributor() {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ validateAction = new ValidateAction();
+ controlAction = new ControlAction();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager) {
+ toolBarManager.add(new Separator("config-settings"));
+ toolBarManager.add(new Separator("config-additions"));
+ }
+
+ /**
+ * This adds to the menu bar a menu and some separators for editor additions,
+ * as well as the sub-menus for object creation items.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void contributeToMenu(IMenuManager menuManager) {
+ super.contributeToMenu(menuManager);
+
+ IMenuManager submenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigEditor_menu"),
+ "org.eclipse.emf.emfstore.fuzzy.emf.configMenuID");
+ menuManager.insertAfter("additions", submenuManager);
+ submenuManager.add(new Separator("settings"));
+ submenuManager.add(new Separator("actions"));
+ submenuManager.add(new Separator("additions"));
+ submenuManager.add(new Separator("additions-end"));
+
+ // Prepare for CreateChild item addition or removal.
+ //
+ createChildMenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager menuManager) {
+ menuManager.updateAll(true);
+ }
+ });
+
+ addGlobalActions(submenuManager);
+ }
+
+ /**
+ * When the active editor changes, this remembers the change and registers with it as a selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setActiveEditor(IEditorPart part) {
+ super.setActiveEditor(part);
+ activeEditorPart = part;
+
+ // Switch to the new selection provider.
+ //
+ if (selectionProvider != null) {
+ selectionProvider.removeSelectionChangedListener(this);
+ }
+ if (part == null) {
+ selectionProvider = null;
+ } else {
+ selectionProvider = part.getSite().getSelectionProvider();
+ selectionProvider.addSelectionChangedListener(this);
+
+ // Fake a selection changed event to update the menus.
+ //
+ if (selectionProvider.getSelection() != null) {
+ selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+ }
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+ * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+ * that can be added to the selected object and updating the menus accordingly.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ // Remove any menu items for old selection.
+ //
+ if (createChildMenuManager != null) {
+ depopulateManager(createChildMenuManager, createChildActions);
+ }
+ if (createSiblingMenuManager != null) {
+ depopulateManager(createSiblingMenuManager, createSiblingActions);
+ }
+
+ // Query the new selection for appropriate new child/sibling descriptors
+ //
+ Collection<?> newChildDescriptors = null;
+ Collection<?> newSiblingDescriptors = null;
+
+ ISelection selection = event.getSelection();
+ if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1) {
+ Object object = ((IStructuredSelection) selection).getFirstElement();
+
+ EditingDomain domain = ((IEditingDomainProvider) activeEditorPart).getEditingDomain();
+
+ newChildDescriptors = domain.getNewChildDescriptors(object, null);
+ newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+ }
+
+ // Generate actions for selection; populate and redraw the menus.
+ //
+ createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+ createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+ if (createChildMenuManager != null) {
+ populateManager(createChildMenuManager, createChildActions, null);
+ createChildMenuManager.update(true);
+ }
+ if (createSiblingMenuManager != null) {
+ populateManager(createSiblingMenuManager, createSiblingActions, null);
+ createSiblingMenuManager.update(true);
+ }
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in
+ * <code>descriptors</code>,
+ * and returns the collection of these actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if (descriptors != null) {
+ for (Object descriptor : descriptors) {
+ actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in
+ * <code>descriptors</code>,
+ * and returns the collection of these actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if (descriptors != null) {
+ for (Object descriptor : descriptors) {
+ actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+ * by inserting them before the specified contribution item <code>contributionID</code>.
+ * If <code>contributionID</code> is <code>null</code>, they are simply added.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions,
+ String contributionID) {
+ if (actions != null) {
+ for (IAction action : actions) {
+ if (contributionID != null) {
+ manager.insertBefore(contributionID, action);
+ } else {
+ manager.add(action);
+ }
+ }
+ }
+ }
+
+ /**
+ * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+ if (actions != null) {
+ IContributionItem[] items = manager.getItems();
+ for (int i = 0; i < items.length; i++) {
+ // Look into SubContributionItems
+ //
+ IContributionItem contributionItem = items[i];
+ while (contributionItem instanceof SubContributionItem) {
+ contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
+ }
+
+ // Delete the ActionContributionItems with matching action.
+ //
+ if (contributionItem instanceof ActionContributionItem) {
+ IAction action = ((ActionContributionItem) contributionItem).getAction();
+ if (actions.contains(action)) {
+ manager.remove(contributionItem);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This populates the pop-up menu before it appears.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager) {
+ super.menuAboutToShow(menuManager);
+ MenuManager submenuManager = null;
+
+ submenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(ConfigEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ populateManager(submenuManager, createSiblingActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+ }
+
+ /**
+ * This inserts global actions before the "additions-end" separator.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected void addGlobalActions(IMenuManager menuManager) {
+ menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+ menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+ refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+ menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+ super.addGlobalActions(menuManager);
+ }
+
+ /**
+ * This ensures that a delete action will clean up all references to deleted objects.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean removeAllReferencesOnDelete() {
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditor.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditor.java
new file mode 100644
index 0000000..a7b4919
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditor.java
@@ -0,0 +1,1851 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.presentation;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+/**
+ * This is an example of a Config model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConfigEditor extends MultiPageEditorPart implements IEditingDomainProvider, ISelectionProvider,
+ IMenuListener, IViewerProvider, IGotoMarker {
+ /**
+ * This keeps track of the editing domain that is used to track all changes to the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected AdapterFactoryEditingDomain editingDomain;
+
+ /**
+ * This is the one adapter factory used for providing views of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ComposedAdapterFactory adapterFactory;
+
+ /**
+ * This is the content outline page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IContentOutlinePage contentOutlinePage;
+
+ /**
+ * This is a kludge...
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IStatusLineManager contentOutlineStatusLineManager;
+
+ /**
+ * This is the content outline page's viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer contentOutlineViewer;
+
+ /**
+ * This is the property sheet page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected PropertySheetPage propertySheetPage;
+
+ /**
+ * This is the viewer that shadows the selection in the content outline.
+ * The parent relation must be correctly defined for this to work.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer selectionViewer;
+
+ /**
+ * This inverts the roll of parent and child in the content provider and show parents as a tree.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer parentViewer;
+
+ /**
+ * This shows how a tree view works.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer treeViewer;
+
+ /**
+ * This shows how a list view works.
+ * A list viewer doesn't support icons.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ListViewer listViewer;
+
+ /**
+ * This shows how a table view works.
+ * A table can be used as a list with icons.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TableViewer tableViewer;
+
+ /**
+ * This shows how a tree view with columns works.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer treeViewerWithColumns;
+
+ /**
+ * This keeps track of the active viewer pane, in the book.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ViewerPane currentViewerPane;
+
+ /**
+ * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content
+ * outline viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Viewer currentViewer;
+
+ /**
+ * This listens to which ever viewer is active.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ISelectionChangedListener selectionChangedListener;
+
+ /**
+ * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to
+ * this editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+ /**
+ * This keeps track of the selection of the editor as a whole.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+ /**
+ * The MarkerHelper is responsible for creating workspace resource markers presented
+ * in Eclipse's Problems View.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+ /**
+ * This listens for when the outline becomes active
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IPartListener partListener = new IPartListener() {
+ public void partActivated(IWorkbenchPart p) {
+ if (p instanceof ContentOutline) {
+ if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
+ getActionBarContributor().setActiveEditor(ConfigEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ } else if (p instanceof PropertySheet) {
+ if (((PropertySheet) p).getCurrentPage() == propertySheetPage) {
+ getActionBarContributor().setActiveEditor(ConfigEditor.this);
+ handleActivate();
+ }
+ } else if (p == ConfigEditor.this) {
+ handleActivate();
+ }
+ }
+
+ public void partBroughtToTop(IWorkbenchPart p) {
+ // Ignore.
+ }
+
+ public void partClosed(IWorkbenchPart p) {
+ // Ignore.
+ }
+
+ public void partDeactivated(IWorkbenchPart p) {
+ // Ignore.
+ }
+
+ public void partOpened(IWorkbenchPart p) {
+ // Ignore.
+ }
+ };
+
+ /**
+ * Resources that have been removed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+ /**
+ * Resources that have been changed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+ /**
+ * Resources that have been saved.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+ /**
+ * Map to store the diagnostic associated with a resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+ /**
+ * Controls whether the problem indication should be updated.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean updateProblemIndication = true;
+
+ /**
+ * Adapter used to update the problem indication when resources are demanded loaded.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+ @Override
+ public void notifyChanged(Notification notification) {
+ if (notification.getNotifier() instanceof Resource) {
+ switch (notification.getFeatureID(Resource.class)) {
+ case Resource.RESOURCE__IS_LOADED:
+ case Resource.RESOURCE__ERRORS:
+ case Resource.RESOURCE__WARNINGS: {
+ Resource resource = (Resource) notification.getNotifier();
+ Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ resourceToDiagnosticMap.put(resource, diagnostic);
+ } else {
+ resourceToDiagnosticMap.remove(resource);
+ }
+
+ if (updateProblemIndication) {
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+ break;
+ }
+ }
+ } else {
+ super.notifyChanged(notification);
+ }
+ }
+
+ @Override
+ protected void setTarget(Resource target) {
+ basicSetTarget(target);
+ }
+
+ @Override
+ protected void unsetTarget(Resource target) {
+ basicUnsetTarget(target);
+ }
+ };
+
+ /**
+ * This listens for workspace changes.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+ public void resourceChanged(IResourceChangeEvent event) {
+ IResourceDelta delta = event.getDelta();
+ try {
+ class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+ protected ResourceSet resourceSet = editingDomain.getResourceSet();
+ protected Collection<Resource> changedResources = new ArrayList<Resource>();
+ protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+ public boolean visit(IResourceDelta delta) {
+ if (delta.getResource().getType() == IResource.FILE) {
+ if (delta.getKind() == IResourceDelta.REMOVED || delta.getKind() == IResourceDelta.CHANGED
+ && delta.getFlags() != IResourceDelta.MARKERS) {
+ Resource resource = resourceSet.getResource(
+ URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+ if (resource != null) {
+ if (delta.getKind() == IResourceDelta.REMOVED) {
+ removedResources.add(resource);
+ } else if (!savedResources.remove(resource)) {
+ changedResources.add(resource);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ public Collection<Resource> getChangedResources() {
+ return changedResources;
+ }
+
+ public Collection<Resource> getRemovedResources() {
+ return removedResources;
+ }
+ }
+
+ final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+ delta.accept(visitor);
+
+ if (!visitor.getRemovedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty()) {
+ getSite().getPage().closeEditor(ConfigEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == ConfigEditor.this) {
+ handleActivate();
+ }
+ }
+ });
+ }
+ } catch (CoreException exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * Handles activation of the editor or it's associated views.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void handleActivate() {
+ // Recompute the read only state.
+ //
+ if (editingDomain.getResourceToReadOnlyMap() != null) {
+ editingDomain.getResourceToReadOnlyMap().clear();
+
+ // Refresh any actions that may become enabled or disabled.
+ //
+ setSelection(getSelection());
+ }
+
+ if (!removedResources.isEmpty()) {
+ if (handleDirtyConflict()) {
+ getSite().getPage().closeEditor(ConfigEditor.this, false);
+ } else {
+ removedResources.clear();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ } else if (!changedResources.isEmpty()) {
+ changedResources.removeAll(savedResources);
+ handleChangedResources();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ }
+
+ /**
+ * Handles what to do with changed resources on activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void handleChangedResources() {
+ if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+ if (isDirty()) {
+ changedResources.addAll(editingDomain.getResourceSet().getResources());
+ }
+ editingDomain.getCommandStack().flush();
+
+ updateProblemIndication = false;
+ for (Resource resource : changedResources) {
+ if (resource.isLoaded()) {
+ resource.unload();
+ try {
+ resource.load(Collections.EMPTY_MAP);
+ } catch (IOException exception) {
+ if (!resourceToDiagnosticMap.containsKey(resource)) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ }
+ }
+ }
+
+ if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+ setSelection(StructuredSelection.EMPTY);
+ }
+
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+ }
+
+ /**
+ * Updates the problems indication with the information described in the specified diagnostic.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void updateProblemIndication() {
+ if (updateProblemIndication) {
+ BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
+ "org.eclipse.emf.emfstore.fuzzy.emf.editor", 0, null, new Object[] { editingDomain.getResourceSet() });
+ for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+ if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+ diagnostic.add(childDiagnostic);
+ }
+ }
+
+ int lastEditorPage = getPageCount() - 1;
+ if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+ ((ProblemEditorPart) getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ setActivePage(lastEditorPage);
+ }
+ } else if (diagnostic.getSeverity() != Diagnostic.OK) {
+ ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+ problemEditorPart.setDiagnostic(diagnostic);
+ problemEditorPart.setMarkerHelper(markerHelper);
+ try {
+ addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+ setPageText(lastEditorPage, problemEditorPart.getPartName());
+ setActivePage(lastEditorPage);
+ showTabs();
+ } catch (PartInitException exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+ markerHelper.deleteMarkers(editingDomain.getResourceSet());
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ try {
+ markerHelper.createMarkers(diagnostic);
+ } catch (CoreException exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Shows a dialog that asks if conflicting changes should be discarded.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean handleDirtyConflict() {
+ return MessageDialog.openQuestion(getSite().getShell(), getString("_UI_FileConflict_label"),
+ getString("_WARN_FileConflict"));
+ }
+
+ /**
+ * This creates a model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigEditor() {
+ super();
+ initializeEditingDomain();
+ }
+
+ /**
+ * This sets up the editing domain for the model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void initializeEditingDomain() {
+ // Create an adapter factory that yields item providers.
+ //
+ adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ConfigItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ // Create the command stack that will notify this editor as commands are executed.
+ //
+ BasicCommandStack commandStack = new BasicCommandStack();
+
+ // Add a listener to set the most recent command's affected objects to be the selection of the viewer with
+ // focus.
+ //
+ commandStack.addCommandStackListener(new CommandStackListener() {
+ public void commandStackChanged(final EventObject event) {
+ getContainer().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+
+ // Try to select the affected objects.
+ //
+ Command mostRecentCommand = ((CommandStack) event.getSource()).getMostRecentCommand();
+ if (mostRecentCommand != null) {
+ setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+ }
+ if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+ propertySheetPage.refresh();
+ }
+ }
+ });
+ }
+ });
+
+ // Create the editing domain with a special command stack.
+ //
+ editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+ }
+
+ /**
+ * This is here for the listener to be able to call it.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected void firePropertyChange(int action) {
+ super.firePropertyChange(action);
+ }
+
+ /**
+ * This sets the selection into whichever viewer is active.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setSelectionToViewer(Collection<?> collection) {
+ final Collection<?> theSelection = collection;
+ // Make sure it's okay.
+ //
+ if (theSelection != null && !theSelection.isEmpty()) {
+ Runnable runnable = new Runnable() {
+ public void run() {
+ // Try to select the items in the current content viewer of the editor.
+ //
+ if (currentViewer != null) {
+ currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+ }
+ }
+ };
+ getSite().getShell().getDisplay().asyncExec(runnable);
+ }
+ }
+
+ /**
+ * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+ * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain} and for supporting
+ * {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object[] getElements(Object object) {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object[] getChildren(Object object) {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object) {
+ Object parent = super.getParent(object);
+ return parent != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getParent(Object object) {
+ return null;
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setCurrentViewerPane(ViewerPane viewerPane) {
+ if (currentViewerPane != viewerPane) {
+ if (currentViewerPane != null) {
+ currentViewerPane.showFocus(false);
+ }
+ currentViewerPane = viewerPane;
+ }
+ setCurrentViewer(currentViewerPane.getViewer());
+ }
+
+ /**
+ * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+ * is the current one.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setCurrentViewer(Viewer viewer) {
+ // If it is changing...
+ //
+ if (currentViewer != viewer) {
+ if (selectionChangedListener == null) {
+ // Create the listener on demand.
+ //
+ selectionChangedListener = new ISelectionChangedListener() {
+ // This just notifies those things that are affected by the section.
+ //
+ public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+ setSelection(selectionChangedEvent.getSelection());
+ }
+ };
+ }
+
+ // Stop listening to the old one.
+ //
+ if (currentViewer != null) {
+ currentViewer.removeSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Start listening to the new one.
+ //
+ if (viewer != null) {
+ viewer.addSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Remember it.
+ //
+ currentViewer = viewer;
+
+ // Set the editors selection based on the current viewer's selection.
+ //
+ setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+ }
+ }
+
+ /**
+ * This returns the viewer as required by the {@link IViewerProvider} interface.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Viewer getViewer() {
+ return currentViewer;
+ }
+
+ /**
+ * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void createContextMenuFor(StructuredViewer viewer) {
+ MenuManager contextMenu = new MenuManager("#PopUp");
+ contextMenu.add(new Separator("additions"));
+ contextMenu.setRemoveAllWhenShown(true);
+ contextMenu.addMenuListener(this);
+ Menu menu = contextMenu.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+ int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+ Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+ viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+ viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+ }
+
+ /**
+ * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void createModel() {
+ URI resourceURI = EditUIUtil.getURI(getEditorInput());
+ Exception exception = null;
+ Resource resource = null;
+ try {
+ // Load the resource through the editing domain.
+ //
+ resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+ } catch (Exception e) {
+ exception = e;
+ resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+ }
+
+ Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+ }
+
+ /**
+ * Returns a diagnostic describing the errors and warnings listed in the resource
+ * and the specified exception (if any).
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+ if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+ BasicDiagnostic basicDiagnostic = new BasicDiagnostic(Diagnostic.ERROR,
+ "org.eclipse.emf.emfstore.fuzzy.emf.editor", 0, getString("_UI_CreateModelError_message",
+ resource.getURI()), new Object[] { exception == null ? (Object) resource : exception });
+ basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+ return basicDiagnostic;
+ } else if (exception != null) {
+ return new BasicDiagnostic(Diagnostic.ERROR, "org.eclipse.emf.emfstore.fuzzy.emf.editor", 0, getString(
+ "_UI_CreateModelError_message", resource.getURI()), new Object[] { exception });
+ } else {
+ return Diagnostic.OK_INSTANCE;
+ }
+ }
+
+ /**
+ * This is the method used by the framework to install your own controls.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void createPages() {
+ // Creates the model from the editor input
+ //
+ createModel();
+
+ // Only creates the other pages if there is something that can be edited
+ //
+ if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+ // Create a page for the selection tree view.
+ //
+ {
+ ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ selectionViewer = (TreeViewer) viewerPane.getViewer();
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+ selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ selectionViewer.setInput(editingDomain.getResourceSet());
+ selectionViewer.setSelection(
+ new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ viewerPane.setTitle(editingDomain.getResourceSet());
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(selectionViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+ }
+
+ // Create a page for the parent tree view.
+ //
+ {
+ ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ parentViewer = (TreeViewer) viewerPane.getViewer();
+ parentViewer.setAutoExpandLevel(30);
+ parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+ parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(parentViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ParentPage_label"));
+ }
+
+ // This is the page for the list viewer
+ //
+ {
+ ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new ListViewer(composite);
+ }
+
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ listViewer = (ListViewer) viewerPane.getViewer();
+ listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(listViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ListPage_label"));
+ }
+
+ // This is the page for the tree viewer
+ //
+ {
+ ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ treeViewer = (TreeViewer) viewerPane.getViewer();
+ treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(treeViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreePage_label"));
+ }
+
+ // This is the page for the table viewer.
+ //
+ {
+ ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TableViewer(composite);
+ }
+
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ tableViewer = (TableViewer) viewerPane.getViewer();
+
+ Table table = tableViewer.getTable();
+ TableLayout layout = new TableLayout();
+ table.setLayout(layout);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(3, 100, true));
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+
+ TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(2, 100, true));
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+
+ tableViewer.setColumnProperties(new String[] { "a", "b" });
+ tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(tableViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TablePage_label"));
+ }
+
+ // This is the page for the table tree viewer.
+ //
+ {
+ ViewerPane viewerPane = new ViewerPane(getSite().getPage(), ConfigEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ treeViewerWithColumns = (TreeViewer) viewerPane.getViewer();
+
+ Tree tree = treeViewerWithColumns.getTree();
+ tree.setLayoutData(new FillLayout());
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+ objectColumn.setWidth(250);
+
+ TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+ selfColumn.setWidth(200);
+
+ treeViewerWithColumns.setColumnProperties(new String[] { "a", "b" });
+ treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(treeViewerWithColumns);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+ }
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ setActivePage(0);
+ }
+ });
+ }
+
+ // Ensures that this editor will only display the page's tab
+ // area if there are more than one page
+ //
+ getContainer().addControlListener(new ControlAdapter() {
+ boolean guard = false;
+
+ @Override
+ public void controlResized(ControlEvent event) {
+ if (!guard) {
+ guard = true;
+ hideTabs();
+ guard = false;
+ }
+ }
+ });
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+
+ /**
+ * If there is just one page in the multi-page editor part,
+ * this hides the single tab at the bottom.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void hideTabs() {
+ if (getPageCount() <= 1) {
+ setPageText(0, "");
+ if (getContainer() instanceof CTabFolder) {
+ ((CTabFolder) getContainer()).setTabHeight(1);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y + 6);
+ }
+ }
+ }
+
+ /**
+ * If there is more than one page in the multi-page editor part,
+ * this shows the tabs at the bottom.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void showTabs() {
+ if (getPageCount() > 1) {
+ setPageText(0, getString("_UI_SelectionPage_label"));
+ if (getContainer() instanceof CTabFolder) {
+ ((CTabFolder) getContainer()).setTabHeight(SWT.DEFAULT);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y - 6);
+ }
+ }
+ }
+
+ /**
+ * This is used to track the active viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected void pageChange(int pageIndex) {
+ super.pageChange(pageIndex);
+
+ if (contentOutlinePage != null) {
+ handleContentOutlineSelection(contentOutlinePage.getSelection());
+ }
+ }
+
+ /**
+ * This is how the framework determines which interfaces we implement.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Object getAdapter(Class key) {
+ if (key.equals(IContentOutlinePage.class)) {
+ return showOutlineView() ? getContentOutlinePage() : null;
+ } else if (key.equals(IPropertySheetPage.class)) {
+ return getPropertySheetPage();
+ } else if (key.equals(IGotoMarker.class)) {
+ return this;
+ } else {
+ return super.getAdapter(key);
+ }
+ }
+
+ /**
+ * This accesses a cached version of the content outliner.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IContentOutlinePage getContentOutlinePage() {
+ if (contentOutlinePage == null) {
+ // The content outline is just a tree.
+ //
+ class MyContentOutlinePage extends ContentOutlinePage {
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ contentOutlineViewer = getTreeViewer();
+ contentOutlineViewer.addSelectionChangedListener(this);
+
+ // Set up the tree viewer.
+ //
+ contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ // Make sure our popups work.
+ //
+ createContextMenuFor(contentOutlineViewer);
+
+ if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+ // Select the root object in the view.
+ //
+ contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet()
+ .getResources().get(0)), true);
+ }
+ }
+
+ @Override
+ public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager,
+ IStatusLineManager statusLineManager) {
+ super.makeContributions(menuManager, toolBarManager, statusLineManager);
+ contentOutlineStatusLineManager = statusLineManager;
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ }
+
+ contentOutlinePage = new MyContentOutlinePage();
+
+ // Listen to selection so that we can handle it is a special way.
+ //
+ contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
+ // This ensures that we handle selections correctly.
+ //
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleContentOutlineSelection(event.getSelection());
+ }
+ });
+ }
+
+ return contentOutlinePage;
+ }
+
+ /**
+ * This accesses a cached version of the property sheet.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IPropertySheetPage getPropertySheetPage() {
+ if (propertySheetPage == null) {
+ propertySheetPage = new ExtendedPropertySheetPage(editingDomain) {
+ @Override
+ public void setSelectionToViewer(List<?> selection) {
+ ConfigEditor.this.setSelectionToViewer(selection);
+ ConfigEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+ }
+
+ return propertySheetPage;
+ }
+
+ /**
+ * This deals with how we want selection in the outliner to affect the other views.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void handleContentOutlineSelection(ISelection selection) {
+ if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+ Iterator<?> selectedElements = ((IStructuredSelection) selection).iterator();
+ if (selectedElements.hasNext()) {
+ // Get the first selected element.
+ //
+ Object selectedElement = selectedElements.next();
+
+ // If it's the selection viewer, then we want it to select the same selection as this selection.
+ //
+ if (currentViewerPane.getViewer() == selectionViewer) {
+ ArrayList<Object> selectionList = new ArrayList<Object>();
+ selectionList.add(selectedElement);
+ while (selectedElements.hasNext()) {
+ selectionList.add(selectedElements.next());
+ }
+
+ // Set the selection to the widget.
+ //
+ selectionViewer.setSelection(new StructuredSelection(selectionList));
+ } else {
+ // Set the input to the widget.
+ //
+ if (currentViewerPane.getViewer().getInput() != selectedElement) {
+ currentViewerPane.getViewer().setInput(selectedElement);
+ currentViewerPane.setTitle(selectedElement);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply tests the command stack.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isDirty() {
+ return ((BasicCommandStack) editingDomain.getCommandStack()).isSaveNeeded();
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply saves the model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void doSave(IProgressMonitor progressMonitor) {
+ // Save only resources that have actually changed.
+ //
+ final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+ // Do the work within an operation because this is a long running activity that modifies the workbench.
+ //
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+ // This is the method that gets invoked when the operation runs.
+ //
+ @Override
+ public void execute(IProgressMonitor monitor) {
+ // Save the resources to the file system.
+ //
+ boolean first = true;
+ for (Resource resource : editingDomain.getResourceSet().getResources()) {
+ if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
+ && !editingDomain.isReadOnly(resource)) {
+ try {
+ long timeStamp = resource.getTimeStamp();
+ resource.save(saveOptions);
+ if (resource.getTimeStamp() != timeStamp) {
+ savedResources.add(resource);
+ }
+ } catch (Exception exception) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ first = false;
+ }
+ }
+ }
+ };
+
+ updateProblemIndication = false;
+ try {
+ // This runs the options, and shows progress.
+ //
+ new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+ // Refresh the necessary state.
+ //
+ ((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+ } catch (Exception exception) {
+ // Something went wrong that shouldn't.
+ //
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ }
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+
+ /**
+ * This returns whether something has been persisted to the URI of the specified resource.
+ * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean isPersisted(Resource resource) {
+ boolean result = false;
+ try {
+ InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+ if (stream != null) {
+ result = true;
+ stream.close();
+ }
+ } catch (IOException e) {
+ // Ignore
+ }
+ return result;
+ }
+
+ /**
+ * This always returns true because it is not currently supported.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isSaveAsAllowed() {
+ return true;
+ }
+
+ /**
+ * This also changes the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void doSaveAs() {
+ SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+ saveAsDialog.open();
+ IPath path = saveAsDialog.getResult();
+ if (path != null) {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ if (file != null) {
+ doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void doSaveAs(URI uri, IEditorInput editorInput) {
+ (editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null ? getActionBars()
+ .getStatusLineManager().getProgressMonitor() : new NullProgressMonitor();
+ doSave(progressMonitor);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void gotoMarker(IMarker marker) {
+ try {
+ if (marker.getType().equals(EValidator.MARKER)) {
+ String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+ if (uriAttribute != null) {
+ URI uri = URI.createURI(uriAttribute);
+ EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+ if (eObject != null) {
+ setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+ }
+ }
+ }
+ } catch (CoreException exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ /**
+ * This is called during startup.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void init(IEditorSite site, IEditorInput editorInput) {
+ setSite(site);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ site.setSelectionProvider(this);
+ site.getPage().addPartListener(partListener);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener,
+ IResourceChangeEvent.POST_CHANGE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setFocus() {
+ if (currentViewerPane != null) {
+ currentViewerPane.setFocus();
+ } else {
+ getControl(getActivePage()).setFocus();
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.remove(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ISelection getSelection() {
+ return editorSelection;
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+ * Calling this result will notify the listeners.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setSelection(ISelection selection) {
+ editorSelection = selection;
+
+ for (ISelectionChangedListener listener : selectionChangedListeners) {
+ listener.selectionChanged(new SelectionChangedEvent(this, selection));
+ }
+ setStatusLineManager(selection);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setStatusLineManager(ISelection selection) {
+ IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ? contentOutlineStatusLineManager
+ : getActionBars().getStatusLineManager();
+
+ if (statusLineManager != null) {
+ if (selection instanceof IStructuredSelection) {
+ Collection<?> collection = ((IStructuredSelection) selection).toList();
+ switch (collection.size()) {
+ case 0: {
+ statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+ break;
+ }
+ case 1: {
+ String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+ statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+ break;
+ }
+ default: {
+ statusLineManager.setMessage(getString("_UI_MultiObjectSelected",
+ Integer.toString(collection.size())));
+ break;
+ }
+ }
+ } else {
+ statusLineManager.setMessage("");
+ }
+ }
+ }
+
+ /**
+ * This looks up a string in the plugin's plugin.properties file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static String getString(String key) {
+ return ConfigEditorPlugin.INSTANCE.getString(key);
+ }
+
+ /**
+ * This looks up a string in plugin.properties, making a substitution.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static String getString(String key, Object s1) {
+ return ConfigEditorPlugin.INSTANCE.getString(key, new Object[] { s1 });
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions
+ * from the Edit menu.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void menuAboutToShow(IMenuManager menuManager) {
+ ((IMenuListener) getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EditingDomainActionBarContributor getActionBarContributor() {
+ return (EditingDomainActionBarContributor) getEditorSite().getActionBarContributor();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IActionBars getActionBars() {
+ return getActionBarContributor().getActionBars();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public AdapterFactory getAdapterFactory() {
+ return adapterFactory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void dispose() {
+ updateProblemIndication = false;
+
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+ getSite().getPage().removePartListener(partListener);
+
+ adapterFactory.dispose();
+
+ if (getActionBarContributor().getActiveEditor() == this) {
+ getActionBarContributor().setActiveEditor(null);
+ }
+
+ if (propertySheetPage != null) {
+ propertySheetPage.dispose();
+ }
+
+ if (contentOutlinePage != null) {
+ contentOutlinePage.dispose();
+ }
+
+ super.dispose();
+ }
+
+ /**
+ * Returns whether the outline view should be presented to the user.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean showOutlineView() {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditorPlugin.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditorPlugin.java
new file mode 100644
index 0000000..9651194
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigEditorPlugin.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Config editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public final class ConfigEditorPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final ConfigEditorPlugin INSTANCE = new ConfigEditorPlugin();
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigEditorPlugin() {
+ super(new ResourceLocator[] {});
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static class Implementation extends EclipseUIPlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigModelWizard.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigModelWizard.java
new file mode 100644
index 0000000..1793d4e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.editor/src/org/eclipse/emf/emfstore/fuzzy/emf/config/presentation/ConfigModelWizard.java
@@ -0,0 +1,662 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.presentation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.provider.ConfigEditPlugin;
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConfigModelWizard extends Wizard implements INewWizard {
+ /**
+ * The supported extensions for created files.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final List<String> FILE_EXTENSIONS = Collections.unmodifiableList(Arrays
+ .asList(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigEditorFilenameExtensions").split("\\s*,\\s*")));
+
+ /**
+ * A formatted list of supported file extensions, suitable for display.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final String FORMATTED_FILE_EXTENSIONS = ConfigEditorPlugin.INSTANCE.getString(
+ "_UI_ConfigEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ConfigPackage configPackage = ConfigPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ConfigFactory configFactory = configPackage.getConfigFactory();
+
+ /**
+ * This is the file creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ConfigModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ConfigModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+ /**
+ * Remember the selection during initialization for populating the default container.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IStructuredSelection selection;
+
+ /**
+ * Remember the workbench during initialization.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IWorkbench workbench;
+
+ /**
+ * Caches the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected List<String> initialObjectNames;
+
+ /**
+ * This just records the information.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(ConfigEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ConfigEditorPlugin.INSTANCE
+ .getImage("full/wizban/NewConfig")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<String> getInitialObjectNames() {
+ if (initialObjectNames == null) {
+ initialObjectNames = new ArrayList<String>();
+ for (EClassifier eClassifier : configPackage.getEClassifiers()) {
+ if (eClassifier instanceof EClass) {
+ EClass eClass = (EClass) eClassifier;
+ if (!eClass.isAbstract()) {
+ initialObjectNames.add(eClass.getName());
+ }
+ }
+ }
+ Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+ }
+ return initialObjectNames;
+ }
+
+ /**
+ * Create a new model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected EObject createInitialModel() {
+ EClass eClass = (EClass) configPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = configFactory.create(eClass);
+ return rootObject;
+ }
+
+ /**
+ * Do the work after everything is specified.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean performFinish() {
+ try {
+ // Remember the file.
+ //
+ final IFile modelFile = getModelFile();
+
+ // Do the work within an operation.
+ //
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+ @Override
+ protected void execute(IProgressMonitor progressMonitor) {
+ try {
+ // Create a resource set
+ //
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ // Get the URI of the model file.
+ //
+ URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+ // Create a resource for this file.
+ //
+ Resource resource = resourceSet.createResource(fileURI);
+
+ // Add the initial model object to the contents.
+ //
+ EObject rootObject = createInitialModel();
+ if (rootObject != null) {
+ resource.getContents().add(rootObject);
+ }
+
+ // Save the contents of the resource to the file system.
+ //
+ Map<Object, Object> options = new HashMap<Object, Object>();
+ options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+ resource.save(options);
+ } catch (Exception exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ } finally {
+ progressMonitor.done();
+ }
+ }
+ };
+
+ getContainer().run(false, false, operation);
+
+ // Select the new file resource in the current view.
+ //
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ IWorkbenchPage page = workbenchWindow.getActivePage();
+ final IWorkbenchPart activePart = page.getActivePart();
+ if (activePart instanceof ISetSelectionTarget) {
+ final ISelection targetSelection = new StructuredSelection(modelFile);
+ getShell().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ ((ISetSelectionTarget) activePart).selectReveal(targetSelection);
+ }
+ });
+ }
+
+ // Open an editor on the new file.
+ //
+ try {
+ page.openEditor(new FileEditorInput(modelFile),
+ workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+ } catch (PartInitException exception) {
+ MessageDialog.openError(workbenchWindow.getShell(),
+ ConfigEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ } catch (Exception exception) {
+ ConfigEditorPlugin.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public class ConfigModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+ super(pageId, selection);
+ }
+
+ /**
+ * The framework calls this to see if the file is correct.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean validatePage() {
+ if (super.validatePage()) {
+ String extension = new Path(getFileName()).getFileExtension();
+ if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+ String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+ setErrorMessage(ConfigEditorPlugin.INSTANCE.getString(key,
+ new Object[] { FORMATTED_FILE_EXTENSIONS }));
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IFile getModelFile() {
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+ }
+ }
+
+ /**
+ * This is the page where the type of object to create is selected.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public class ConfigModelWizardInitialObjectCreationPage extends WizardPage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Combo initialObjectField;
+
+ /**
+ * @generated
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ */
+ protected List<String> encodings;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Combo encodingField;
+
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigModelWizardInitialObjectCreationPage(String pageId) {
+ super(pageId);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ {
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 12;
+ composite.setLayout(layout);
+
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.grabExcessVerticalSpace = true;
+ data.horizontalAlignment = GridData.FILL;
+ composite.setLayoutData(data);
+ }
+
+ Label containerLabel = new Label(composite, SWT.LEFT);
+ {
+ containerLabel.setText(ConfigEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ containerLabel.setLayoutData(data);
+ }
+
+ initialObjectField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ initialObjectField.setLayoutData(data);
+ }
+
+ for (String objectName : getInitialObjectNames()) {
+ initialObjectField.add(getLabel(objectName));
+ }
+
+ if (initialObjectField.getItemCount() == 1) {
+ initialObjectField.select(0);
+ }
+ initialObjectField.addModifyListener(validator);
+
+ Label encodingLabel = new Label(composite, SWT.LEFT);
+ {
+ encodingLabel.setText(ConfigEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ encodingLabel.setLayoutData(data);
+ }
+ encodingField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ encodingField.setLayoutData(data);
+ }
+
+ for (String encoding : getEncodings()) {
+ encodingField.add(encoding);
+ }
+
+ encodingField.select(0);
+ encodingField.addModifyListener(validator);
+
+ setPageComplete(validatePage());
+ setControl(composite);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ModifyListener validator = new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ setPageComplete(validatePage());
+ }
+ };
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean validatePage() {
+ return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ if (visible) {
+ if (initialObjectField.getItemCount() == 1) {
+ initialObjectField.clearSelection();
+ encodingField.setFocus();
+ } else {
+ encodingField.clearSelection();
+ initialObjectField.setFocus();
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getInitialObjectName() {
+ String label = initialObjectField.getText();
+
+ for (String name : getInitialObjectNames()) {
+ if (getLabel(name).equals(label)) {
+ return name;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getEncoding() {
+ return encodingField.getText();
+ }
+
+ /**
+ * Returns the label for the specified type name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected String getLabel(String typeName) {
+ try {
+ return ConfigEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+ } catch (MissingResourceException mre) {
+ ConfigEditorPlugin.INSTANCE.log(mre);
+ }
+ return typeName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<String> getEncodings() {
+ if (encodings == null) {
+ encodings = new ArrayList<String>();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(
+ ConfigEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens();) {
+ encodings.add(stringTokenizer.nextToken());
+ }
+ }
+ return encodings;
+ }
+ }
+
+ /**
+ * The framework calls this to create the contents of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void addPages() {
+ // Create a page, set the title, and the initial model file name.
+ //
+ newFileCreationPage = new ConfigModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigModelWizard_label"));
+ newFileCreationPage.setDescription(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigModelWizard_description"));
+ newFileCreationPage.setFileName(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigEditorFilenameDefaultBase")
+ + "." + FILE_EXTENSIONS.get(0));
+ addPage(newFileCreationPage);
+
+ // Try and get the resource selection to determine a current directory for the file dialog.
+ //
+ if (selection != null && !selection.isEmpty()) {
+ // Get the resource...
+ //
+ Object selectedElement = selection.iterator().next();
+ if (selectedElement instanceof IResource) {
+ // Get the resource parent, if its a file.
+ //
+ IResource selectedResource = (IResource) selectedElement;
+ if (selectedResource.getType() == IResource.FILE) {
+ selectedResource = selectedResource.getParent();
+ }
+
+ // This gives us a directory...
+ //
+ if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+ // Set this for the container.
+ //
+ newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+ // Make up a unique new name here.
+ //
+ String defaultModelBaseFilename = ConfigEditorPlugin.INSTANCE
+ .getString("_UI_ConfigEditorFilenameDefaultBase");
+ String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+ String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+ for (int i = 1; ((IContainer) selectedResource).findMember(modelFilename) != null; ++i) {
+ modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+ }
+ newFileCreationPage.setFileName(modelFilename);
+ }
+ }
+ }
+ initialObjectCreationPage = new ConfigModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(ConfigEditorPlugin.INSTANCE.getString("_UI_ConfigModelWizard_label"));
+ initialObjectCreationPage.setDescription(ConfigEditorPlugin.INSTANCE
+ .getString("_UI_Wizard_initial_object_description"));
+ addPage(initialObjectCreationPage);
+ }
+
+ /**
+ * Get the file from the page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IFile getModelFile() {
+ return newFileCreationPage.getModelFile();
+ }
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.project
new file mode 100644
index 0000000..5e3bbd6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.fuzzy.emf.example</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..82702a4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Example Plugin for the Fuzzy EMF Testing (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.example
+Bundle-Version: 0.9.3.qualifier
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;visibility:=reexport
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/build.properties
new file mode 100644
index 0000000..66e05e6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ fuzzy/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzy.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzy.properties
new file mode 100644
index 0000000..6d9398c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzy.properties
@@ -0,0 +1,4 @@
+fuzzy.emfdataprovider.configsFile=fuzzy/fuzzyConfig.fuzzy
+fuzzy.hudson.url=http://localhost
+fuzzy.hudson.port=8080
+fuzzy.hudson.job=Explorer
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzyConfig.fuzzy b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzyConfig.fuzzy
new file mode 100644
index 0000000..665d9e3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/fuzzy/fuzzyConfig.fuzzy
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:org.eclipse.emf.emfstore.fuzzy.emf.config="http://org/eclipse/emf/emfstore/fuzzy/emf/config">
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="500" testClass="org.eclipse.emf.emfstore.fuzzy.emf.example.FuzzyTest" id="_r78GhIvSEeGC3oFJZ-5HoM">
+ <mutatorConfig>
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+</xmi:XMI>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
new file mode 100644
index 0000000..d20c59d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.example</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/src/org/eclipse/emf/emfstore/fuzzy/emf/example/FuzzyTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/src/org/eclipse/emf/emfstore/fuzzy/emf/example/FuzzyTest.java
new file mode 100644
index 0000000..02c58f0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.example/src/org/eclipse/emf/emfstore/fuzzy/emf/example/FuzzyTest.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.example;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Example test for the {@link FuzzyRunner}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class FuzzyTest {
+
+ @Data
+ private EObject root;
+
+ /**
+ * Test to check if the {@link FuzzyRunner} is working.
+ */
+ @Test
+ public void test() {
+ Assert.assertNotNull(root);
+ }
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.project
new file mode 100644
index 0000000..4380e7e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.fuzzy.emf.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTests.launch b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTests.launch
new file mode 100644
index 0000000..18d8def
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTests.launch
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.apache.commons.io,org.eclipse.emf.emfstore.branding,org.eclipse.emf.emfstore.client.test.edit,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.ecore,org.eclipse.emf.emfstore.example.helloworld,org.eclipse.emf.emfstore.examplemodel,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.fuzzy.emf.edit,org.eclipse.emf.emfstore.fuzzy.emf.editor,org.eclipse.emf.emfstore.fuzzy.emf.example,org.eclipse.emf.emfstore.perspective"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.emfstore.fuzzy.emf.test.AllFuzzyTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.emfstore.fuzzy.emf.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.text@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.junit4@default:default,org.junit@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.test@default:default,org.eclipse.emf.emfstore.client.transaction@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.fuzzy.emf.test@default:default,org.eclipse.emf.emfstore.fuzzy.emf@default:default,org.eclipse.emf.emfstore.fuzzy@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTestsFiltered.launch b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTestsFiltered.launch
new file mode 100644
index 0000000..8ce58c3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/AllFuzzyTestsFiltered.launch
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.apache.commons.io,org.eclipse.emf.emfstore.branding,org.eclipse.emf.emfstore.client.test.edit,org.eclipse.emf.emfstore.client.ui,org.eclipse.emf.emfstore.ecore,org.eclipse.emf.emfstore.example.helloworld,org.eclipse.emf.emfstore.examplemodel,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.fuzzy.emf.edit,org.eclipse.emf.emfstore.fuzzy.emf.editor,org.eclipse.emf.emfstore.fuzzy.emf.example,org.eclipse.emf.emfstore.perspective"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.emfstore.fuzzy.emf.test.AllFuzzyTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.emfstore.fuzzy.emf.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -DfilterTests=true"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.transaction@default:default,org.eclipse.emf.validation@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.text@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.junit4@default:default,org.junit@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.emfstore.client.model.edit@default:default,org.eclipse.emf.emfstore.client.test@default:default,org.eclipse.emf.emfstore.client.transaction@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model.edit@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.fuzzy.emf.test@default:default,org.eclipse.emf.emfstore.fuzzy.emf@default:default,org.eclipse.emf.emfstore.fuzzy@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.modelmutator@default:default,org.eclipse.emf.emfstore.server.model.edit@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..402bbcd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tests for EMFDataprovider (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf.test;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Require-Bundle: org.eclipse.emf.emfstore.fuzzy.emf;visibility:=reexport,
+ org.eclipse.emf.emfstore.client.test;visibility:=reexport
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/build.properties
new file mode 100644
index 0000000..86473f1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ fuzzy/
+jars.compile.order = .
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzy.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzy.properties
new file mode 100644
index 0000000..c8e74a8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzy.properties
@@ -0,0 +1,6 @@
+#fuzzy.emfdataprovider.configsFile=fuzzy/fuzzyConfig.xml
+fuzzy.hudson.url=https://hudson.eclipse.org/hudson
+#fuzzy.hudson.port=8080
+fuzzy.hudson.job=emf-emfstore-fuzzytests-explorer
+fuzzy.hudson.diffjob=emf-emfstore-fuzzytests-differ
+fuzzy.hudson.artifact.folder=/artifact/git/org.eclipse.emf.emfstore.other/
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzyConfig.fuzzy b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzyConfig.fuzzy
new file mode 100644
index 0000000..0d9218f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/fuzzy/fuzzyConfig.fuzzy
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:org.eclipse.emf.emfstore.fuzzy.emf.config="http://org/eclipse/emf/emfstore/fuzzy/emf/config">
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.OperationApplyTest" id="_sLQasYvPEeG1B5HDFm-I-w">
+ <mutatorConfig minObjectsCount="10">
+ <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+ <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.OperationReverseTest" id="_sLQasYvPEeG1B5HDFm-I-w">
+ <mutatorConfig minObjectsCount="100">
+ <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+ <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.SerializationTest" id="_c24GhIvSEeGC3oFJZ-5j24">
+ <mutatorConfig minObjectsCount="100">
+ <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+ <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="10" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.ServerTest" id="_SCHGhIvSEeGC3oFJZ-5KUS">
+ <mutatorConfig minObjectsCount="100">
+ <rootEClass href="http://eclipse.org/emf/emfstore/common/model#//Project"/>
+ <eStructuralFeaturesToIgnore xsi:type="ecore:EReference" href="http://eclipse.org/emf/emfstore/common/model#//Project/cutElements"/>
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="1" count="5000" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.MutatorTest" id="_C11qUIvSEeGC3oFJZ-5VgQ">
+ <mutatorConfig>
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+ <org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig seed="2" count="1" testClass="org.eclipse.emf.emfstore.fuzzy.emf.test.BigMutationTest" id="_X34zhIvSEeGC3oFJZ-5VzL">
+ <mutatorConfig minObjectsCount="100000">
+ <ePackages href="http://org/eclipse/example/bowling#/"/>
+ </mutatorConfig>
+ </org.eclipse.emf.emfstore.fuzzy.emf.config:TestConfig>
+</xmi:XMI>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/plugin.xml
new file mode 100644
index 0000000..ea0197f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.emf.emfstore.client.recording.options">
+ <RecordingOptions
+ cutOffIncomingCrossReferences="true">
+ </RecordingOptions>
+ </extension>
+ <extension
+ point="org.eclipse.emf.emfstore.client.inverseCrossReferenceCache">
+ <useInverseCrossReferenceCache
+ activated="true">
+ </useInverseCrossReferenceCache>
+ </extension>
+ <extension
+ point="org.eclipse.emf.emfstore.common.model.modelelementidgenerator">
+ <idgenerator
+ class="org.eclipse.emf.emfstore.fuzzy.emf.test.FuzzyModelElementIdGenerator">
+ </idgenerator>
+ </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
new file mode 100644
index 0000000..9c74ad4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf.test</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+
+ <configuration>
+
+ <testSuite>org.eclipse.emf.emfstore.fuzzy.emf.test</testSuite>
+ <testClass>org.eclipse.emf.emfstore.fuzzy.emf.test.AllFuzzyTests</testClass>
+ <useUIHarness>true</useUIHarness>
+ <useUIThread>false</useUIThread>
+
+ <argLine>-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -DrunFuzzyTests=${runFuzzyTests} -DfilterTests=${filterTests}</argLine>
+ <failIfNoTests>false</failIfNoTests>
+ <testFailureIgnore>true</testFailureIgnore>
+
+ <dependencies>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.client.model.edit</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.client.test</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.client</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.modelmutator</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.examplemodel.edit</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ </dependencies>
+
+ <bundleStartLevel>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.fuzzy.emf</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.fuzzy</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.client.model.edit</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.client.test</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.client</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.modelmutator</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.examplemodel.edit</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.examplemodel</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ </bundleStartLevel>
+ </configuration>
+
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java
new file mode 100644
index 0000000..33dc5cf
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/AllFuzzyTests.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.FilteredSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Suite for all fuzzy tests.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FilteredSuite.class)
+@Suite.SuiteClasses({ OperationApplyTest.class })
+public class AllFuzzyTests {
+
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/BigMutationTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/BigMutationTest.java
new file mode 100644
index 0000000..aab969e
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/BigMutationTest.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test to run bigger {@link org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration}s.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class BigMutationTest {
+
+ @Data
+ private EObject root;
+
+ @Util
+ private MutateUtil util;
+
+ /***/
+ @Test
+ public void createModel() {
+ System.out.println(ModelMutatorUtil.getAllObjectsCount(root));
+
+ System.out.println("CHANGE");
+
+ ModelMutatorConfiguration config = new ModelMutatorConfiguration(util.getEPackages(), root, 1L);
+ config.setMinObjectsCount(util.getMinObjectsCount());
+ ModelMutator.changeModel(config);
+
+ System.out.println(ModelMutatorUtil.getAllObjectsCount(root));
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyModelElementIdGenerator.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyModelElementIdGenerator.java
new file mode 100644
index 0000000..7a72eb7
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyModelElementIdGenerator.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.ModelFactory;
+
+/**
+ * Implementation of {@link ModelElementIdGenerator} which increments the ModelElementId for each
+ * new modelelement for each IdEObjectCollection starting with 0.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class FuzzyModelElementIdGenerator {
+
+ private Map<Object, Integer> collectionsToIds = new HashMap<Object, Integer>();
+
+ /**
+ * Generates a new {@link ModelElementId}.
+ *
+ * @param collection The {@link IdEObjectCollection} for which to create a new {@link ModelElementId}.
+ * @return A new {@link ModelElementId}.
+ */
+ public ModelElementId generateModelElementId(Object collection) {
+ Integer id = collectionsToIds.get(collection);
+ if (id == null) {
+ id = new Integer(0);
+ }
+ ModelElementId modelElementId = ModelFactory.eINSTANCE.createModelElementId();
+ modelElementId.setId(String.valueOf(id));
+ collectionsToIds.put(collection, id + 1);
+ return modelElementId;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyProjectTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyProjectTest.java
new file mode 100644
index 0000000..3c3b95d
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/FuzzyProjectTest.java
@@ -0,0 +1,298 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.Workspace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.common.CommonUtil;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Options;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+
+/**
+ * Abstract super class for tests handling EMFStore projects.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public abstract class FuzzyProjectTest {
+
+ @Data
+ private Project project;
+
+ @Util
+ private MutateUtil util;
+
+ @SuppressWarnings({ "serial", "unused" })
+ @Options
+ private Map<String, Object> options = new HashMap<String, Object>() {
+ {
+ put(EMFDataProvider.MUTATOR_EDITINGDOMAIN, WorkspaceManager.getInstance().getCurrentWorkspace()
+ .getEditingDomain());
+ }
+ };
+
+ private ProjectSpace projectSpace;
+
+ private ProjectSpace copyProjectSpace;
+
+ /**
+ * Init the testclasses.
+ */
+ @BeforeClass
+ public static void init() {
+ // call once to avoid wrong time in first run
+ CommonUtil.setTesting(true);
+ WorkspaceManager.init();
+ }
+
+ /***/
+ @Before
+ public void setup() {
+ // set testing to true so it uses test profile
+ CommonUtil.setTesting(true);
+
+ // necessary to avoid saving of each projectspace
+ // which leads to a very slow performance
+ Configuration.setAutoSave(false);
+
+ // import projects
+ WorkspaceManager.init();
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ projectSpace = WorkspaceManager.getInstance().getCurrentWorkspace().importProject(project, "", "");
+ if (projectSpaceCopyNeeded()) {
+ copyProjectSpace = WorkspaceManager.getInstance().getCurrentWorkspace()
+ .importProject(ModelUtil.clone(project), "", "");
+ }
+ }
+ }.run(false);
+ }
+
+ /***/
+ @After
+ public void tearDown() {
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ Workspace currentWorkspace = WorkspaceManager.getInstance().getCurrentWorkspace();
+ EList<ProjectSpace> projectSpaces = currentWorkspace.getProjectSpaces();
+ if (projectSpace != null && projectSpaces.contains(projectSpace)) {
+ currentWorkspace.deleteProjectSpace(projectSpace);
+ }
+ if (copyProjectSpace != null && projectSpaces.contains(copyProjectSpace)) {
+ currentWorkspace.deleteProjectSpace(copyProjectSpace);
+ }
+ } catch (FileNotFoundException e) {
+ // do nothing
+ } catch (IOException e) {
+ // do nothing
+ } finally {
+ WorkspaceManager.getInstance().dispose();
+ }
+ }
+ }.run(false);
+ }
+
+ /**
+ * Constructs a new {@link ModelMutatorConfiguration} based on the existing one and the given project.
+ *
+ * @param project The root object of the {@link ModelMutatorConfiguration}.
+ * @return The new {@link ModelMutatorConfiguration}.
+ */
+ public ModelMutatorConfiguration getModelMutatorConfiguration(Project project) {
+ return getModelMutatorConfiguration(project, util);
+ }
+
+ /**
+ * Constructs a new {@link ModelMutatorConfiguration} based on the given {@link MutateUtil} and the given project.
+ *
+ * @param project The root object of the {@link ModelMutatorConfiguration}.
+ * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+ * @return The new {@link ModelMutatorConfiguration}.
+ */
+ public static ModelMutatorConfiguration getModelMutatorConfiguration(Project project, MutateUtil util) {
+ final ModelMutatorConfiguration mmc = new ModelMutatorConfiguration(util.getEPackages(), project, 1L);
+ mmc.seteStructuralFeaturesToIgnore(util.getEStructuralFeaturesToIgnore());
+ mmc.seteClassesToIgnore(util.getEClassesToIgnore());
+ mmc.setEditingDomain(WorkspaceManager.getInstance().getCurrentWorkspace().getEditingDomain());
+ mmc.setMinObjectsCount(util.getMinObjectsCount());
+ return mmc;
+ }
+
+ /**
+ * Can be overridden by subclasses to modify behavior. Default is <code>true</code>.
+ *
+ * @return Should this class handle/provide also a copy of the projectSpace?
+ */
+ public boolean projectSpaceCopyNeeded() {
+ return true;
+ }
+
+ /**
+ * Notify that a test has failed. Saves the projects for later comparison.
+ *
+ * @param project1 The first {@link Project}.
+ * @param project2 The second {@link Project}.
+ */
+ public void fail(Project project1, Project project2) {
+ fail(project1, project2, util);
+ }
+
+ /**
+ * Notify that a test has failed. Saves the projects for later comparison.
+ *
+ * @param project1 The first {@link Project}.
+ * @param project2 The second {@link Project}.
+ * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+ */
+ public static void fail(Project project1, Project project2, MutateUtil util) {
+ save(project1, project2, util);
+ Assert.fail();
+ }
+
+ /**
+ * Saves the projects for e.g. later comparison.
+ *
+ * @param project1 The first {@link Project}.
+ * @param project2 The second {@link Project}.
+ * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+ */
+ public static void save(final Project project1, final Project project2, final MutateUtil util) {
+ final Map<Object, Object> options = new HashMap<Object, Object>();
+ options.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ ModelUtil.saveEObjectToResource(Arrays.asList(project1), util.getRunResourceURI("original"),
+ options);
+ ModelUtil.saveEObjectToResource(Arrays.asList(project2), util.getRunResourceURI("copy"), options);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+ }
+
+ /**
+ * Compare two projects but ignore the order of the elements.
+ *
+ * @param project1 The first {@link Project}.
+ * @param project2 The second {@link Project}.
+ */
+ public void compareIgnoreOrder(Project project1, Project project2) {
+ compareIgnoreOrder(project1, project2, util);
+ }
+
+ /**
+ * Compare two projects but ignore the order of the elements.
+ *
+ * @param project1 The first {@link Project}.
+ * @param project2 The second {@link Project}.
+ * @param util The {@link MutateUtil} connected to the {@link EMFDataProvider}.
+ */
+ public static void compareIgnoreOrder(Project project1, Project project2, MutateUtil util) {
+ if (project1.getModelElements().size() != project2.getModelElements().size()) {
+ fail(project1, project2, util);
+ }
+
+ int index = 0;
+ // sort elements in modelElement reference of projects to avoid differences only in indices.
+ for (EObject eObject1 : project1.getModelElements()) {
+ ModelElementId modelElementId1 = project1.getModelElementId(eObject1);
+ EObject eObject2 = project2.getModelElement(modelElementId1);
+ if (eObject2 == null || !project2.getModelElements().contains(eObject2)) {
+ fail(project1, project2, util);
+ }
+ project2.getModelElements().move(index, eObject2);
+ index++;
+ }
+
+ if (!ModelUtil.areEqual(project1, project2)) {
+ fail(project1, project2, util);
+ }
+ }
+
+ /**
+ * @return The {@link MutateUtil} connected with the {@link EMFDataProvider}.
+ */
+ public MutateUtil getUtil() {
+ return util;
+ }
+
+ /**
+ * @return The {@link ProjectSpace} imported into the WorkSpace.
+ */
+ public ProjectSpace getProjectSpace() {
+ return projectSpace;
+ }
+
+ /**
+ * @param projectSpace The {@link ProjectSpace} of the test.
+ */
+ public void setProjectSpace(ProjectSpace projectSpace) {
+ this.projectSpace = projectSpace;
+ }
+
+ /**
+ * @return The {@link ProjectSpace} copied from the original one.
+ * @throws IllegalStateException When {@link #projectSpaceCopyNeeded()} returns false.
+ */
+ public ProjectSpace getCopyProjectSpace() throws IllegalStateException {
+ if (!projectSpaceCopyNeeded()) {
+ throw new IllegalStateException("This test does not have a copied projectSpace!");
+ }
+ return copyProjectSpace;
+ }
+
+ /**
+ * @param copyProjectSpace The {@link ProjectSpace} copied from the original one.
+ * @throws IllegalStateException When {@link #projectSpaceCopyNeeded()} returns false.
+ */
+ public void setCopyProjectSpace(ProjectSpace copyProjectSpace) throws IllegalStateException {
+ if (!projectSpaceCopyNeeded()) {
+ throw new IllegalStateException("This test does not have a copied projectSpace!");
+ }
+ this.copyProjectSpace = copyProjectSpace;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/MutatorTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/MutatorTest.java
new file mode 100644
index 0000000..8387348
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/MutatorTest.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.ModelFactory;
+import org.eclipse.emf.emfstore.common.model.ModelPackage;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test to test the {@link ModelMutator}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class MutatorTest {
+
+ @SuppressWarnings("unused")
+ @Data
+ private EObject obj;
+
+ @Util
+ private MutateUtil util;
+
+ /**
+ * Tests if two generated models are equal.
+ */
+ @Test
+ public void compareTwoGeneratedProjects() {
+
+ Project project1 = ModelFactory.eINSTANCE.createProject();
+ Project project2 = ModelFactory.eINSTANCE.createProject();
+ ModelMutator.generateModel(getConfig(project1));
+ ModelMutator.generateModel(getConfig(project2));
+
+ ModelMutator.changeModel(getConfig(project1));
+ ModelMutator.changeModel(getConfig(project2));
+
+ Iterator<EObject> project1Iterator = project1.getAllModelElements().iterator();
+ Iterator<EObject> project2Iterator = project2.getAllModelElements().iterator();
+
+ while (project1Iterator.hasNext()) {
+ EObject modelElement = project1Iterator.next();
+ ModelElementId modelElementId = project1.getModelElementId(modelElement);
+ if (!project2.contains(modelElementId)) {
+ failed(project1, project2);
+ }
+ }
+
+ TreeIterator<EObject> allContentsProject1 = project1.eAllContents();
+ TreeIterator<EObject> allContentsProject2 = project2.eAllContents();
+
+ while (allContentsProject1.hasNext()) {
+ if (!allContentsProject2.hasNext()) {
+ failed(project1, project2);
+ }
+ EObject modelElement = allContentsProject1.next();
+ ModelElementId modelElementId = project1.getModelElementId(modelElement);
+ EObject modelElement2 = allContentsProject2.next();
+ ModelElementId modelElementId2 = project2.getModelElementId(modelElement2);
+ if (!modelElementId.equals(modelElementId2)) {
+ failed(project1, project2);
+ }
+ }
+
+ project1Iterator = project1.getAllModelElements().iterator();
+ project2Iterator = project2.getAllModelElements().iterator();
+
+ while (project1Iterator.hasNext()) {
+ EObject modelElement = project1Iterator.next();
+ ModelElementId modelElementId = project1.getModelElementId(modelElement);
+ ModelElementId modelElementId2 = project2.getModelElementId(project2Iterator.next());
+ if (!modelElementId.equals(modelElementId2)) {
+ failed(project1, project2);
+ }
+ }
+ }
+
+ private void failed(Project project1, Project project2) {
+ util.saveEObject(project1, "original_project", true);
+ util.saveEObject(project2, "own_project", true);
+ Assert.assertTrue(false);
+ }
+
+ private ModelMutatorConfiguration getConfig(Project root) {
+ ModelMutatorConfiguration mmc = new ModelMutatorConfiguration(util.getEPackages(), root, util.getSeed());
+ Collection<EStructuralFeature> eStructuralFeaturesToIgnore = new HashSet<EStructuralFeature>();
+ eStructuralFeaturesToIgnore.add(ModelPackage.Literals.PROJECT__CUT_ELEMENTS);
+ mmc.seteStructuralFeaturesToIgnore(eStructuralFeaturesToIgnore);
+ mmc.setMinObjectsCount(util.getMinObjectsCount());
+ return mmc;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationApplyTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationApplyTest.java
new file mode 100644
index 0000000..6a07e92
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationApplyTest.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.impl.ProjectSpaceBase;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Test which mutates a project and then applies its changes to another (copied) project.
+ * Then compares the two mutated projects.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class OperationApplyTest extends FuzzyProjectTest {
+
+ /***/
+ @Test
+ public void applyTest() {
+
+ final ProjectSpace projectSpace = getProjectSpace();
+ final ModelMutatorConfiguration mmc = getModelMutatorConfiguration(projectSpace.getProject());
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ getUtil().mutate(mmc);
+ }
+ }.run(false);
+
+ final ProjectSpace copyProjectSpace = getCopyProjectSpace();
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ ((ProjectSpaceBase) copyProjectSpace).applyOperations(projectSpace.getOperations(), false);
+ }
+ }.run(false);
+
+ compareIgnoreOrder(projectSpace.getProject(), copyProjectSpace.getProject());
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationReverseTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationReverseTest.java
new file mode 100644
index 0000000..fb4a342
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/OperationReverseTest.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.client.model.impl.ProjectSpaceBase;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Fuzzy Test for the reverse functionality of operations.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class OperationReverseTest extends FuzzyProjectTest {
+
+ /***/
+ @Test
+ public void reverseTest() {
+ final ProjectSpaceBase projectSpace = (ProjectSpaceBase) getProjectSpace();
+ final ModelMutatorConfiguration mmc = getModelMutatorConfiguration(projectSpace.getProject());
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ getUtil().mutate(mmc);
+ }
+ }.run(false);
+
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ projectSpace.getLocalChangePackage().reverse().apply(projectSpace.getProject());
+ }
+ }.run(false);
+
+ compareIgnoreOrder(getCopyProjectSpace().getProject(), projectSpace.getProject());
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ProjectLoggingAdapter.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ProjectLoggingAdapter.java
new file mode 100644
index 0000000..dbca2f3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ProjectLoggingAdapter.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.emfstore.common.model.ModelElementId;
+import org.eclipse.emf.emfstore.common.model.impl.ProjectImpl;
+import org.eclipse.emf.emfstore.modelmutator.api.LoggingAdapter;
+
+/**
+ * Extends the {@link LoggingAdapter} to print out {@link ModelElementId}s.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class ProjectLoggingAdapter extends LoggingAdapter {
+
+ private ProjectImpl projectImpl;
+
+ /**
+ * @param project The project containing the elements notifying.
+ * @param toLogClasses The {@link EClass}es to log. If <code>null</code> every {@link EClass} is logged.
+ * @param toLogReferences The {@link EReference}es of the toLogClasses to log. If <code>null</code> every
+ * {@link EReference} is logged.
+ * @param references Log reference changes?
+ * @param attributes Log attribute changes?
+ */
+ public ProjectLoggingAdapter(ProjectImpl project, List<EClass> toLogClasses, List<EReference> toLogReferences,
+ boolean references, boolean attributes) {
+ super(toLogClasses, toLogReferences, references, attributes);
+ this.projectImpl = project;
+ }
+
+ @Override
+ protected String format(Notification notification) {
+ StringBuffer result = new StringBuffer();
+ result.append("Notifier: " + getModelElementId(projectImpl, notification.getNotifier()) + " "
+ + notification.getNotifier());
+ result.append("\n");
+ result.append("Feature: " + notification.getFeature());
+ result.append("\n");
+ result.append("Position: " + notification.getPosition());
+ result.append("\n");
+ result.append("EventType: " + getEventType(notification.getEventType()));
+ result.append("\n");
+ result.append("OldValue: " + getModelElementId(projectImpl, notification.getOldValue()) + " "
+ + notification.getOldValue());
+ result.append("\n");
+ result.append("NewValue: " + getModelElementId(projectImpl, notification.getNewValue()) + " "
+ + notification.getNewValue());
+ result.append("\n");
+ return result.toString();
+ }
+
+ private String getModelElementId(ProjectImpl project, Object o) {
+ if (o == null) {
+ return null;
+ }
+
+ if (!(o instanceof EObject)) {
+ return null;
+ }
+
+ EObject eObject = (EObject) o;
+ ModelElementId modelElementId = project.getModelElementId(eObject);
+ if (modelElementId != null) {
+ return modelElementId.getId();
+ }
+ ModelElementId deletedModelElementId = project.getDeletedModelElementId(eObject);
+ return deletedModelElementId != null ? deletedModelElementId.getId() : null;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/SerializationTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/SerializationTest.java
new file mode 100644
index 0000000..1721cfa
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/SerializationTest.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Class to test serialization functionality of the {@link WorkspaceManager}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class SerializationTest extends FuzzyProjectTest {
+
+ /**
+ * Load and save a {@link ProjectSpace} via {@link WorkspaceManager} and compare them.
+ */
+ @Test
+ public void loadAndSaveToResource() {
+
+ // mutate already saved (through importing) projectSpace and save it again
+ ProjectSpace projectSpace = getProjectSpace();
+ final ModelMutatorConfiguration mmc = getModelMutatorConfiguration(projectSpace.getProject());
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ getUtil().mutate(mmc);
+ }
+ }.run(false);
+
+ projectSpace.save();
+
+ // dispose and reinit WorkspaceManager
+ WorkspaceManager.getInstance().dispose();
+ WorkspaceManager.getInstance().reinit();
+
+ // reload projectSpaces and check for valid state
+ EList<ProjectSpace> projectSpaces = WorkspaceManager.getInstance().getCurrentWorkspace().getProjectSpaces();
+ if (projectSpaces.size() != 1) {
+ throw new IllegalStateException("There must be exactly one projectSpace in the workspace! Current value: "
+ + projectSpaces.size());
+ }
+
+ // compare
+ ProjectSpace reloadedProjectSpace = projectSpaces.get(0);
+ try {
+ if (!ModelUtil.areEqual(reloadedProjectSpace.getProject(), projectSpace.getProject())) {
+ fail(reloadedProjectSpace.getProject(), projectSpace.getProject());
+ }
+ } finally {
+ // set projectSpace to the reloaded one to ensure correct cleanup
+ setProjectSpace(reloadedProjectSpace);
+ }
+ }
+
+ @Override
+ public boolean projectSpaceCopyNeeded() {
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ServerTest.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ServerTest.java
new file mode 100644
index 0000000..8526393
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf.test/src/org/eclipse/emf/emfstore/fuzzy/emf/test/ServerTest.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.test;
+
+import org.eclipse.emf.emfstore.client.model.Configuration;
+import org.eclipse.emf.emfstore.client.model.ProjectSpace;
+import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
+import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
+import org.eclipse.emf.emfstore.client.test.server.api.CoreServerTest;
+import org.eclipse.emf.emfstore.common.CommonUtil;
+import org.eclipse.emf.emfstore.common.model.Project;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.EMFDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.emf.MutateUtil;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
+import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Fuzzy Server test to test share, checkout, commit and update.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+@RunWith(FuzzyRunner.class)
+@DataProvider(EMFDataProvider.class)
+public class ServerTest extends CoreServerTest {
+
+ @Data
+ private Project project;
+
+ @Util
+ private MutateUtil util;
+
+ /**
+ * Setup the needed projectspace.
+ */
+ @Before
+ public void setupProjectSpace() {
+ CommonUtil.setTesting(true);
+ Configuration.setAutoSave(false);
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ setProjectSpace(WorkspaceManager.getInstance().getCurrentWorkspace().importProject(project, "", ""));
+ }
+ }.run(false);
+ setProject(project);
+ }
+
+ /**
+ * @throws EmfStoreException Problems with share, checkout, commit or update.
+ */
+ @Test
+ public void shareCheckoutCommitUpdate() throws EmfStoreException {
+
+ ProjectSpace projectSpace = getProjectSpace();
+
+ // share original project
+ PrimaryVersionSpec versionSpec = share(projectSpace);
+
+ // checkout project
+ final ProjectSpace psCheckedout = checkout(projectSpace.getProjectInfo(), versionSpec);
+
+ // compare original and checkedout project
+ FuzzyProjectTest.compareIgnoreOrder(projectSpace.getProject(), psCheckedout.getProject(), util);
+
+ // change & commit original project
+ final ModelMutatorConfiguration mmc = FuzzyProjectTest.getModelMutatorConfiguration(projectSpace.getProject(),
+ util);
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ util.mutate(mmc);
+ }
+ }.run(false);
+
+ commit(projectSpace);
+
+ // update checkedout project
+ new EMFStoreCommand() {
+ @Override
+ protected void doRun() {
+ try {
+ psCheckedout.update();
+ } catch (EmfStoreException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }.run(false);
+
+ // compare original and updated project
+ FuzzyProjectTest.compareIgnoreOrder(projectSpace.getProject(), psCheckedout.getProject(), util);
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.checkstyle b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.checkstyle
new file mode 100644
index 0000000..2f2667a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.checkstyle
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+ <fileset name="all" enabled="true" check-config-name="emfstoreStyle" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+</fileset-config>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.classpath
new file mode 100644
index 0000000..57c9877
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry exported="true" kind="lib" path="lib/dom4j-1.6.1.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.project
new file mode 100644
index 0000000..4a1c331
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.fuzzy.emf</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/CreateAllDiffs.launch b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/CreateAllDiffs.launch
new file mode 100644
index 0000000..40c63a0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/CreateAllDiffs.launch
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.emfstore.fuzzy.emf.diff.CreateAllDiffs"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.emfstore.fuzzy.emf"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.emf.cdo.server.product"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..76fb7dc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EMFDataProvider for FuzzyTestRunner (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy.emf;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .,
+ lib/dom4j-1.6.1.jar
+Bundle-Localization: plugin
+Export-Package: org.eclipse.emf.emfstore.fuzzy.emf,
+ org.eclipse.emf.emfstore.fuzzy.emf.config,
+ org.eclipse.emf.emfstore.fuzzy.emf.config.util,
+ org.eclipse.emf.emfstore.fuzzy.emf.diff
+Require-Bundle: org.eclipse.emf.emfstore.modelmutator;visibility:=reexport,
+ org.eclipse.emf.emfstore.fuzzy;visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)";visibility:=reexport
+Bundle-Vendor: Eclipse Modeling Project
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/build.properties
new file mode 100644
index 0000000..4a470b0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/build.properties
@@ -0,0 +1,15 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ lib/dom4j-1.6.1.jar
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/fuzzy/fuzzy.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/fuzzy/fuzzy.properties
new file mode 100644
index 0000000..c8e74a8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/fuzzy/fuzzy.properties
@@ -0,0 +1,6 @@
+#fuzzy.emfdataprovider.configsFile=fuzzy/fuzzyConfig.xml
+fuzzy.hudson.url=https://hudson.eclipse.org/hudson
+#fuzzy.hudson.port=8080
+fuzzy.hudson.job=emf-emfstore-fuzzytests-explorer
+fuzzy.hudson.diffjob=emf-emfstore-fuzzytests-differ
+fuzzy.hudson.artifact.folder=/artifact/git/org.eclipse.emf.emfstore.other/
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/lib/dom4j-1.6.1.jar b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/lib/dom4j-1.6.1.jar
new file mode 100644
index 0000000..c8c4dbb
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/lib/dom4j-1.6.1.jar
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.ecore b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.ecore
new file mode 100644
index 0000000..2385900
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.ecore
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="config"
+ nsURI="http://org/eclipse/emf/emfstore/fuzzy/emf/config" nsPrefix="org.eclipse.emf.emfstore.fuzzy.emf.config">
+ <eClassifiers xsi:type="ecore:EClass" name="TestConfig">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="seed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="count" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="testClass">
+ <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
+ <eTypeArguments/>
+ </eGenericType>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="mutatorConfig" eType="#//MutatorConfig"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TestRun">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="config" eType="#//TestConfig"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="time" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="results" upperBound="-1"
+ eType="#//TestResult" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TestResult">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="seedCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="testName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="error" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="failure" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="executionTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TestDiff">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lastUpdate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="config" eType="#//TestConfig"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="oldResult" eType="#//TestResult"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="newResult" eType="#//TestResult"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DiffReport">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="diffs" upperBound="-1"
+ eType="#//TestDiff" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Root">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MutatorConfig">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rootEClass" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="minObjectsCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+ defaultValueLiteral="100"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="ignoreAndLog" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="doNotGenerateRoot" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="useEcoreUtilDelete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="false"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="eClassesToIgnore" upperBound="-1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClass"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeaturesToIgnore"
+ upperBound="-1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStructuralFeature"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="ePackages" upperBound="-1"
+ eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EPackage"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxDeleteCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.genmodel b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.genmodel
new file mode 100644
index 0000000..8ba59ad
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/model/config.genmodel
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2008-2012 EclipseSource Muenchen GmbH.

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:"
+ modelDirectory="/org.eclipse.emf.emfstore.fuzzy.emf/src" modelPluginID="org.eclipse.emf.emfstore.fuzzy.emf"
+ modelName="Config" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+ copyrightFields="false" runtimeVersion="2.5">
+ <foreignModel>config.ecore</foreignModel>
+ <genPackages prefix="Config" basePackage="org.eclipse.emf.emfstore.fuzzy.emf" disposableProviderFactory="true"
+ fileExtensions="fuzzy" ecorePackage="config.ecore#/">
+ <genClasses ecoreClass="config.ecore#//TestConfig">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/seed"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/count"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/testClass"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestConfig/id"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestConfig/mutatorConfig"/>
+ </genClasses>
+ <genClasses ecoreClass="config.ecore#//TestRun">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestRun/config"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestRun/time"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestRun/results"/>
+ </genClasses>
+ <genClasses ecoreClass="config.ecore#//TestResult">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/seedCount"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/testName"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/error"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/failure"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestResult/executionTime"/>
+ </genClasses>
+ <genClasses ecoreClass="config.ecore#//TestDiff">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//TestDiff/lastUpdate"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//TestDiff/config"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestDiff/oldResult"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//TestDiff/newResult"/>
+ </genClasses>
+ <genClasses ecoreClass="config.ecore#//DiffReport">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//DiffReport/diffs"/>
+ </genClasses>
+ <genClasses ecoreClass="config.ecore#//Root">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference config.ecore#//Root/elements"/>
+ </genClasses>
+ <genClasses ecoreClass="config.ecore#//MutatorConfig">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/rootEClass"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/minObjectsCount"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/ignoreAndLog"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/doNotGenerateRoot"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/useEcoreUtilDelete"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/eClassesToIgnore"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/eStructuralFeaturesToIgnore"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference config.ecore#//MutatorConfig/ePackage"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute config.ecore#//MutatorConfig/maxDeleteCount"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.properties
new file mode 100644
index 0000000..77ee4a1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.properties
Binary files differ
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.xml
new file mode 100644
index 0000000..cea7823
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <package
+ uri="http://org/eclipse/emf/emfstore/fuzzy/emf/config"
+ class="org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage"
+ genModel="model/config.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
new file mode 100644
index 0000000..a63dba8
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+
+ <configuration>
+
+ <testSuite>org.eclipse.emf.emfstore.fuzzy.emf</testSuite>
+ <testClass>org.eclipse.emf.emfstore.fuzzy.emf.diff.CreateAllDiffs</testClass>
+ <useUIHarness>true</useUIHarness>
+ <useUIThread>false</useUIThread>
+
+ <argLine>-Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -DcreateDiffs=${createDiffs}</argLine>
+ <failIfNoTests>false</failIfNoTests>
+
+ <dependencies>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy.emf</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.client.model.edit</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.client.test</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.client</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.modelmutator</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ <dependency>
+ <type>eclipse-plugin</type>
+ <artifactId>org.eclipse.emf.emfstore.examplemodel.edit</artifactId>
+ <version>0.0.0</version>
+ </dependency>
+ </dependencies>
+
+ <bundleStartLevel>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.fuzzy.emf</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.fuzzy</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.client.model.edit</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.client.test</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.client</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.modelmutator</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.examplemodel.edit</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ <bundle>
+ <id>org.eclipse.emf.emfstore.examplemodel</id>
+ <level>4</level>
+ <autoStart>false</autoStart>
+ </bundle>
+ </bundleStartLevel>
+ </configuration>
+
+ </plugin>
+ </plugins>
+ </build>
+
+
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFDataProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFDataProvider.java
new file mode 100644
index 0000000..6d40e32
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFDataProvider.java
@@ -0,0 +1,358 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+
+import org.dom4j.DocumentException;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.emfstore.fuzzy.FuzzyDataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Test;
+import org.eclipse.emf.emfstore.fuzzy.Util;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+import org.eclipse.emf.emfstore.fuzzy.emf.diff.HudsonTestRunProvider;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+import org.junit.runner.notification.RunListener;
+import org.junit.runners.model.TestClass;
+
+/**
+ * This implementation of a {@link FuzzyDataProvider} provides generated models using the functionality of
+ * {@link ModelMutator}. <br>
+ * <br>
+ * The run of a test is based on a {@link TestConfig}, defining model etc. <br>
+ * <br>
+ * During the run it records {@link TestResult}s to create a {@link TestRun} for reporting purpose.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class EMFDataProvider implements FuzzyDataProvider<EObject> {
+
+ private Random random;
+
+ private int count;
+
+ private int seedCount;
+
+ private TestClass testClass;
+
+ private TestRun testRun;
+
+ private TestConfig config;
+
+ private boolean filterTests;
+
+ private String configFile;
+
+ private long nextSeed;
+
+ private EClass rootEClass;
+
+ private ModelMutatorConfiguration modelMutatorConfig;
+
+ private Resource diffResource;
+
+ /**
+ * Prefix of the properties concerning the {@link EMFDataProvider}.
+ */
+ public static final String PROP_EMFDATAPROVIDER = ".emfdataprovider";
+
+ /**
+ * Property specifying the path to the config file for the {@link EMFDataProvider}.
+ */
+ public static final String PROP_CONFIGS_FILE = ".configsFile";
+
+ /**
+ * Options constant for the exception log set for the mutator.
+ * Has to be filled with a <code>Set</code> of <code>RuntimeException</code>.
+ */
+ public static final String MUTATOR_EXC_LOG = "mutatorExcLog";
+
+ /**
+ * Options constant for the {@link EditingDomain} for the {@link ModelMutator}.
+ */
+ public static final String MUTATOR_EDITINGDOMAIN = "mutatorEditingDomain";
+
+ /**
+ * Init the {@link EMFDataProvider}.
+ */
+ public void init() {
+ // fill properties like the config file
+ fillProperties();
+
+ // load testconfig from file
+ Resource loadResource = FuzzyUtil.createResource(configFile);
+ try {
+ loadResource.load(null);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not load " + configFile, e);
+ }
+
+ // get the testconfig fitting to the current testclass
+ config = FuzzyUtil.getTestConfig(loadResource, testClass);
+
+ // add the config to the configs file
+ addToConfigFile();
+
+ // init variables
+ random = new Random(config.getSeed());
+ count = config.getCount();
+ seedCount = 0;
+
+ // read variables out of mutatorConfig and write into modelmutatorConfig
+ MutatorConfig mutatorConfig = config.getMutatorConfig();
+ rootEClass = mutatorConfig.getRootEClass();
+ if (rootEClass == null) {
+ rootEClass = ConfigPackage.Literals.ROOT;
+ }
+ modelMutatorConfig = new ModelMutatorConfiguration();
+ modelMutatorConfig.setMinObjectsCount(mutatorConfig.getMinObjectsCount());
+ modelMutatorConfig.setDoNotGenerateRoot(mutatorConfig.isDoNotGenerateRoot());
+ modelMutatorConfig.seteClassesToIgnore(mutatorConfig.getEClassesToIgnore());
+ modelMutatorConfig.seteStructuralFeaturesToIgnore(mutatorConfig.getEStructuralFeaturesToIgnore());
+ modelMutatorConfig.setIgnoreAndLog(mutatorConfig.isIgnoreAndLog());
+ modelMutatorConfig.setUseEcoreUtilDelete(mutatorConfig.isUseEcoreUtilDelete());
+ modelMutatorConfig.setMaxDeleteCount(mutatorConfig.getMaxDeleteCount());
+ modelMutatorConfig.setModelPackages(mutatorConfig.getEPackages());
+
+ // create new TestRun with config
+ testRun = ConfigFactory.eINSTANCE.createTestRun();
+ testRun.setConfig(config);
+ testRun.setTime(new Date());
+ }
+
+ /**
+ * Add the config to the file containing all configs.
+ */
+ private void addToConfigFile() {
+ Resource resource = FuzzyUtil.createResource(FuzzyUtil.ROOT_FOLDER + FuzzyUtil.TEST_CONFIG_FILE);
+ try {
+ if (FuzzyUtil.resourceExists(resource)) {
+ resource.load(null);
+ }
+ if (!FuzzyUtil.containsConfig(resource, config)) {
+ resource.getContents().add(config);
+ resource.save(null);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Could not save config!", e);
+ }
+ }
+
+ /**
+ * See {@link FuzzyDataProvider}.
+ *
+ * @param count Which run is it?
+ * @return The new {@link EObject}.
+ */
+ public EObject get(int count) {
+ seedCount++;
+
+ // adjust the seed
+ fitSeed(count);
+
+ // generate the model
+ nextSeed = random.nextLong();
+
+ // get the root eclass for the generation
+ EObject root = EcoreUtil.create(rootEClass);
+
+ // generate the model
+ modelMutatorConfig.reset();
+ modelMutatorConfig.setRootEObject(root);
+ modelMutatorConfig.setSeed(nextSeed);
+ ModelMutator.generateModel(modelMutatorConfig);
+
+ return root;
+ }
+
+ private void fitSeed(int count) {
+ if (count == seedCount) {
+ return;
+ } else if (count < seedCount) {
+ random = new Random(config.getSeed());
+ seedCount = 0;
+ }
+
+ while (seedCount < count) {
+ random.nextLong();
+ seedCount++;
+ }
+ }
+
+ /**
+ * Call finish as last action of the {@link EMFDataProvider}. Used for saving the results.
+ */
+ public void finish() {
+ // create run resource
+ Resource runResource = FuzzyUtil.createResource(FuzzyUtil.ROOT_FOLDER + FuzzyUtil.RUN_FOLDER + config.getId()
+ + FuzzyUtil.FILE_SUFFIX);
+ runResource.getContents().add(testRun);
+
+ try {
+ runResource.save(null);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not save the run result after running!", e);
+ }
+ }
+
+ /**
+ * @return How much objects will be created?
+ */
+ public int size() {
+ return count;
+ }
+
+ /**
+ * @param testClass The {@link TestClass} of this run.
+ */
+ public void setTestClass(TestClass testClass) {
+ this.testClass = testClass;
+ }
+
+ /**
+ * @return The {@link RunListener} of this {@link EMFDataProvider}.
+ */
+ public List<RunListener> getListener() {
+ return Arrays.asList(new RunListener[] { new EMFRunListener(this, testRun) });
+ }
+
+ /**
+ * @return all {@link Test}s to run or null if all tests should run.
+ */
+ public List<Test> getTestsToRun() {
+ if (!filterTests) {
+ return null;
+ }
+
+ // first time load diffResource
+ if (diffResource == null) {
+ try {
+ diffResource = HudsonTestRunProvider.getDiffResource();
+ diffResource.load(null);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not load diff file!", e);
+ } catch (DocumentException e) {
+ throw new RuntimeException("Could not load diff file!", e);
+ }
+ }
+
+ // filter for correct config
+ EList<EObject> contents = diffResource.getContents();
+ List<Test> tests = new ArrayList<Test>();
+ for (EObject obj : contents) {
+ if (obj instanceof DiffReport) {
+ for (TestDiff diff : ((DiffReport) obj).getDiffs()) {
+ if (diff.getConfig().getId().equals(config.getId())) {
+ TestResult result = FuzzyUtil.getValidTestResult(diff);
+ tests.add(new Test(result.getTestName(), result.getSeedCount()));
+ }
+ }
+ }
+ }
+
+ return tests;
+ }
+
+ /**
+ * @return The current seed used to create the model
+ */
+ public int getCurrentSeedCount() {
+ return seedCount;
+ }
+
+ /**
+ * @return The current seed for the {@link ModelMutator}.
+ */
+ public long getSeed() {
+ return nextSeed;
+ }
+
+ /**
+ * @return The {@link EPackage} of the model to generate/mutate.
+ */
+ public Collection<EPackage> getEPackages() {
+ return modelMutatorConfig.getModelPackages();
+ }
+
+ private void fillProperties() {
+ String filterTests = System.getProperty("filterTests");
+ if (filterTests == null) {
+ this.filterTests = false;
+ } else {
+ this.filterTests = Boolean.parseBoolean(filterTests);
+ }
+ configFile = FuzzyUtil.getProperty(PROP_EMFDATAPROVIDER + PROP_CONFIGS_FILE, FuzzyUtil.TEST_CONFIG_PATH);
+ }
+
+ /**
+ * @return The {@link MutateUtil} for this {@link EMFDataProvider}.
+ */
+ public Util getUtil() {
+ return new MutateUtil(this);
+ }
+
+ /**
+ * @return The config specifying this run of the {@link EMFDataProvider}.
+ */
+ public TestConfig getConfig() {
+ return config;
+ }
+
+ /**
+ * Set the options for the {@link EMFDataProvider}.
+ *
+ * @param options the options.
+ */
+ @SuppressWarnings("unchecked")
+ public void setOptions(Map<String, Object> options) {
+ // exc log
+ Object o = options.get(MUTATOR_EXC_LOG);
+ if (o != null && o instanceof Set<?>) {
+ this.modelMutatorConfig.setExceptionLog((Set<RuntimeException>) o);
+ }
+
+ // model mutator editing domain
+ o = options.get(MUTATOR_EDITINGDOMAIN);
+ if (o != null && o instanceof EditingDomain) {
+ this.modelMutatorConfig.setEditingDomain((EditingDomain) o);
+ }
+ }
+
+ /**
+ * @return The currently active {@link ModelMutatorConfiguration}.
+ */
+ public ModelMutatorConfiguration getModelMutatorConfiguration() {
+ return modelMutatorConfig;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFRunListener.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFRunListener.java
new file mode 100644
index 0000000..a9c2c79
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/EMFRunListener.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import junit.framework.AssertionFailedError;
+
+import org.eclipse.emf.emfstore.fuzzy.FuzzyRunner;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunListener;
+
+/**
+ * {@link RunListener} used to create the report of a run of the {@link EMFDataProvider}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class EMFRunListener extends RunListener {
+
+ private TestRun testRun;
+
+ private EMFDataProvider dataProvider;
+
+ private TestResult testResult;
+
+ private long testStartTime;
+
+ private String className;
+
+ /**
+ * @param dataProvider The {@link EMFDataProvider} containing the infos.
+ * @param testRun The {@link TestRun} where to save the results.
+ */
+ public EMFRunListener(EMFDataProvider dataProvider, TestRun testRun) {
+ this.dataProvider = dataProvider;
+ this.testRun = testRun;
+ className = dataProvider.getConfig().getTestClass().getName();
+ }
+
+ @Override
+ public void testRunFinished(Result result) {
+ dataProvider.finish();
+ }
+
+ @Override
+ public void testStarted(Description description) {
+ if (filter(description)) {
+ return;
+ }
+ testResult = ConfigFactory.eINSTANCE.createTestResult();
+ testResult.setTestName(description.getMethodName().split(FuzzyRunner.NAME_SEPARATOR)[0]);
+ testStartTime = System.currentTimeMillis();
+ }
+
+ @Override
+ public void testFinished(Description description) {
+ if (filter(description)) {
+ return;
+ }
+ testResult.setExecutionTime(System.currentTimeMillis() - testStartTime);
+ testResult.setSeedCount(dataProvider.getCurrentSeedCount());
+ testRun.getResults().add(testResult);
+ }
+
+ @Override
+ public void testFailure(Failure failure) {
+ if (filter(failure.getDescription())) {
+ return;
+ }
+
+ Throwable throwable = failure.getException();
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ try{
+ throwable.printStackTrace(new PrintWriter(sw));
+
+ if (throwable instanceof AssertionFailedError) {
+ testResult.setFailure(sw.toString());
+ } else {
+ testResult.setError(sw.toString());
+ }
+ } finally {
+ try {
+ sw.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ pw.close();
+ }
+ }
+
+ private boolean filter(Description description) {
+ return !description.getClassName().equals(className);
+ }
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FilteredSuite.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FilteredSuite.java
new file mode 100644
index 0000000..dc8e820
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FilteredSuite.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.runner.Runner;
+import org.junit.runners.Suite;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.RunnerBuilder;
+
+/**
+ * {@link Suite} to filter tests and run only when runFuzzyTests system property is true.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class FilteredSuite extends Suite {
+
+ private static final String RUN_FUZZY_TESTS = "runFuzzyTests";
+
+ /**
+ * Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>.
+ *
+ * @param klass the root class
+ * @param builder builds runners for classes in the suite
+ * @throws InitializationError if a class could not be initialized.
+ */
+ public FilteredSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
+ super(klass, builder);
+ }
+
+ @Override
+ protected List<Runner> getChildren() {
+ if(Boolean.parseBoolean(System.getProperty(RUN_FUZZY_TESTS))){
+ return super.getChildren();
+ }
+ return new ArrayList<Runner>();
+ }
+}
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FuzzyUtil.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FuzzyUtil.java
new file mode 100644
index 0000000..4874a49
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/FuzzyUtil.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.junit.runners.model.TestClass;
+
+/**
+ * Utility class for different methods used in {@link EMFDataProvider} context.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public final class FuzzyUtil {
+
+ // TODO make folders etc configurable
+ /**
+ * The main folder containing all files.
+ */
+ public static final String FUZZY_FOLDER = "fuzzy/";
+
+ /**
+ * The folder where to put the artifacts.
+ */
+ public static final String ROOT_FOLDER = "../" + FUZZY_FOLDER;
+
+ /**
+ * The folder where to store the {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun}s.
+ */
+ public static final String RUN_FOLDER = "testruns/";
+
+ /**
+ * The file suffix for the files.
+ */
+ public static final String FILE_SUFFIX = ".xml";
+
+ /**
+ * The file containing the {@link TestConfig}s.
+ */
+ public static final String TEST_CONFIG_FILE = "fuzzyConfig.fuzzy";
+
+ /**
+ * The path to the TEST_CONFIG_FILE.
+ */
+ public static final String TEST_CONFIG_PATH = FUZZY_FOLDER + TEST_CONFIG_FILE;
+
+ /**
+ * The path to the file containing the {@link TestDiff}.
+ */
+ public static final String DIFF_FILE = ROOT_FOLDER + "diff" + FILE_SUFFIX;
+
+ /**
+ * The path to the properties file.
+ */
+ public static final String PROPERTIES_FILE = FUZZY_FOLDER + "fuzzy.properties";
+
+ /**
+ * The prefix for all fuzzy properties in the properties file.
+ */
+ public static final String PROP_PRE = "fuzzy";
+
+ private static final AdapterFactoryEditingDomain EDITING_DOMAIN = new AdapterFactoryEditingDomain(
+ new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE), new BasicCommandStack());
+
+ private static Properties properties;
+
+ private FuzzyUtil() {
+ }
+
+ /**
+ * Searches in the resource for a {@link TestConfig} fitting to the given {@link TestClass}.
+ *
+ * @param resource The resource where to search in.
+ * @param testClass The TestClass to which the {@link TestConfig} should fit.
+ * @return The {@link TestConfig} fitting to the {@link TestClass}.
+ */
+ public static TestConfig getTestConfig(Resource resource, TestClass testClass) {
+ // TODO add a standard TestConfig? e.g. where clazz = null / or testconfig for complete packages
+ for (EObject object : resource.getContents()) {
+ if (object instanceof TestConfig) {
+ TestConfig config = (TestConfig) object;
+ Class<?> clazz = config.getTestClass();
+ if (clazz.getName().equals(testClass.getJavaClass().getName())) {
+ return config;
+ }
+ }
+ }
+
+ throw new IllegalArgumentException("No fitting testconfig for " + testClass.getName() + " in "
+ + resource.getURI() + " found.");
+ }
+
+ /**
+ * Checks if a resource contains a {@link TestConfig}.
+ *
+ * @param resource The resource where to search in.
+ * @param config The {@link TestConfig} to check.
+ * @return <code>true</code> if the resource contains the {@link TestConfig}, else <code>false</code>.
+ */
+ public static boolean containsConfig(Resource resource, TestConfig config) {
+ for (EObject obj : resource.getContents()) {
+ if (obj instanceof TestConfig) {
+ TestConfig c = (TestConfig) obj;
+ if (c.getId().equals(config.getId())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the resource exists.
+ *
+ * @param resource The {@link Resource} to check.
+ * @return <code>true</code> if the resource exists, <code>false</code> otherwise.
+ */
+ public static boolean resourceExists(Resource resource) {
+ return resource.getResourceSet().getURIConverter().exists(resource.getURI(), null);
+ }
+
+ /**
+ * Create a new {@link Resource}.
+ *
+ * @param fileNameURI The uri of the resource.
+ * @return The newly created {@link Resource}.
+ */
+ public static Resource createResource(String fileNameURI) {
+ return EDITING_DOMAIN.createResource(fileNameURI);
+ }
+
+ /**
+ * Get a valid {@link TestResult} out of a {@link TestDiff}. Valid means non null.
+ *
+ * @param diff The {@link TestDiff} containing the {@link TestResult}.
+ * @return The valid {@link TestResult} of the {@link TestDiff}.
+ */
+ public static TestResult getValidTestResult(TestDiff diff) {
+ TestResult result = diff.getOldResult();
+ if (result != null) {
+ return result;
+ }
+ result = diff.getNewResult();
+ if (result != null) {
+ return result;
+ }
+ throw new RuntimeException("Configuration of TestDiff is wrong! (Does not contain any TestResult)");
+ }
+
+ /**
+ * Get a property out of the properties file.
+ *
+ * @param key The key of the property.
+ * @param defaultValue The value if the properties do not contain the key.
+ * @return The value if the properties contain the key or the defaultValue if not.
+ */
+ public static String getProperty(String key, String defaultValue) {
+ initProperties();
+ return properties.getProperty(PROP_PRE + key, defaultValue);
+ }
+
+ private static void initProperties() {
+ if (properties != null) {
+ return;
+ }
+
+ File file = new File(PROPERTIES_FILE);
+ properties = new Properties();
+
+ if (file.exists()) {
+ try {
+ FileInputStream fs = new FileInputStream(file);
+ properties.load(fs);
+ fs.close();
+ } catch (IOException e) {
+ throw new RuntimeException("Could not load properties from " + file.getAbsolutePath(), e);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/MutateUtil.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/MutateUtil.java
new file mode 100644
index 0000000..0e2bf33
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/MutateUtil.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.emfstore.fuzzy.Util;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutator;
+import org.eclipse.emf.emfstore.modelmutator.api.ModelMutatorConfiguration;
+
+/**
+ * A {@link Util} class for tests using the {@link EMFDataProvider}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class MutateUtil implements Util {
+
+ private EMFDataProvider dataProvider;
+
+ /**
+ * For internal use.
+ *
+ * @param dataProvider The {@link EMFDataProvider} of the test.
+ */
+ public MutateUtil(EMFDataProvider dataProvider) {
+ this.dataProvider = dataProvider;
+ }
+
+ /**
+ * @return The {@link EPackage} of the {@link EMFDataProvider}.
+ */
+ public Collection<EPackage> getEPackages() {
+ return dataProvider.getEPackages();
+ }
+
+ /**
+ * @return The minimum objects count of the current {@link ModelMutatorConfiguration} of the {@link EMFDataProvider}
+ * .
+ */
+ public int getMinObjectsCount() {
+ return dataProvider.getModelMutatorConfiguration().getMinObjectsCount();
+ }
+
+ /**
+ * @return The seed of the {@link EMFDataProvider}.
+ */
+ public long getSeed() {
+ return dataProvider.getSeed();
+ }
+
+ /**
+ * @return The current seed (run) of the {@link EMFDataProvider}.
+ */
+ public int getSeedCount() {
+ return dataProvider.getCurrentSeedCount();
+ }
+
+ /**
+ * @return The EClasses to ignore in the current {@link ModelMutatorConfiguration}.
+ */
+ public Collection<EClass> getEClassesToIgnore() {
+ return dataProvider.getModelMutatorConfiguration().geteClassesToIgnore();
+ }
+
+ /**
+ * @return The {@link EStructuralFeature}s to ignore in the current {@link ModelMutatorConfiguration}.
+ */
+ public Collection<EStructuralFeature> getEStructuralFeaturesToIgnore() {
+ return dataProvider.getModelMutatorConfiguration().geteStructuralFeaturesToIgnore();
+ }
+
+ /**
+ * Mutate with a {@link ModelMutatorConfiguration}.
+ *
+ * @param mmc The {@link ModelMutatorConfiguration} to use for mutation.
+ */
+ public void mutate(final ModelMutatorConfiguration mmc) {
+ ModelMutator.changeModel(mmc);
+ }
+
+ /**
+ * @see #saveEObject(EObject, String)
+ *
+ * @param obj The {@link EObject} to save.
+ */
+ public void saveEObject(EObject obj) {
+ saveEObject(obj, null, true);
+ }
+
+ /**
+ * Save an {@link EObject} in the folder: artifacts/runs/configID.
+ *
+ * Use it for instance to save objects, when an error occurs.
+ *
+ * The file name is always: COUNT_SUFFIX.xml so e.g. 3_testFile.xml
+ *
+ * @param obj The EObject to save.
+ * @param suffix The suffix of the file: e.g. testFile. <code>null</code> permitted.
+ * @param discardDanglingHREF Should the save ignore dangling hrefs?
+ */
+ public void saveEObject(EObject obj, String suffix, boolean discardDanglingHREF) {
+ Resource resource = FuzzyUtil.createResource(getRunResourcePath(suffix));
+ resource.getContents().add(obj);
+
+ try {
+ Map<Object, Object> options = new HashMap<Object, Object>();
+ if (discardDanglingHREF) {
+ options.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
+ }
+ resource.save(options);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not save the eobject: " + obj, e);
+ }
+ }
+
+ /**
+ * @param suffix The suffix for the file: e.g. testFile. <code>null</code> permitted.
+ * @return A file path to the current run folder.
+ */
+ public String getRunResourcePath(String suffix) {
+ String toAdd = (suffix == null || "".equals(suffix)) ? "" : "_" + suffix;
+ return FuzzyUtil.ROOT_FOLDER + FuzzyUtil.RUN_FOLDER + dataProvider.getConfig().getId() + "/"
+ + dataProvider.getCurrentSeedCount() + toAdd + FuzzyUtil.FILE_SUFFIX;
+ }
+
+ /**
+ *
+ * @param suffix The suffix for the file: e.g. testFile. <code>null</code> permitted.
+ * @return A file {@link URI} to the current run folder.
+ */
+ public URI getRunResourceURI(String suffix) {
+ return URI.createFileURI(getRunResourcePath(suffix));
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigFactory.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigFactory.java
new file mode 100644
index 0000000..563c495
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigFactory.java
@@ -0,0 +1,114 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage
+ * @generated
+ */
+public interface ConfigFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ ConfigFactory eINSTANCE = org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Test Config</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Test Config</em>'.
+ * @generated
+ */
+ TestConfig createTestConfig();
+
+ /**
+ * Returns a new object of class '<em>Test Run</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Test Run</em>'.
+ * @generated
+ */
+ TestRun createTestRun();
+
+ /**
+ * Returns a new object of class '<em>Test Result</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Test Result</em>'.
+ * @generated
+ */
+ TestResult createTestResult();
+
+ /**
+ * Returns a new object of class '<em>Test Diff</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Test Diff</em>'.
+ * @generated
+ */
+ TestDiff createTestDiff();
+
+ /**
+ * Returns a new object of class '<em>Diff Report</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Diff Report</em>'.
+ * @generated
+ */
+ DiffReport createDiffReport();
+
+ /**
+ * Returns a new object of class '<em>Root</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Root</em>'.
+ * @generated
+ */
+ Root createRoot();
+
+ /**
+ * Returns a new object of class '<em>Mutator Config</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Mutator Config</em>'.
+ * @generated
+ */
+ MutatorConfig createMutatorConfig();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ConfigPackage getConfigPackage();
+
+} // ConfigFactory
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigPackage.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigPackage.java
new file mode 100644
index 0000000..06fa0ce
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/ConfigPackage.java
@@ -0,0 +1,1316 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ConfigPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eNAME = "config";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eNS_URI = "http://org/eclipse/emf/emfstore/fuzzy/emf/config";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "org.eclipse.emf.emfstore.fuzzy.emf.config";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ ConfigPackage eINSTANCE = org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+ * <em>Test Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestConfig()
+ * @generated
+ */
+ int TEST_CONFIG = 0;
+
+ /**
+ * The feature id for the '<em><b>Seed</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_CONFIG__SEED = 0;
+
+ /**
+ * The feature id for the '<em><b>Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_CONFIG__COUNT = 1;
+
+ /**
+ * The feature id for the '<em><b>Test Class</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_CONFIG__TEST_CLASS = 2;
+
+ /**
+ * The feature id for the '<em><b>Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_CONFIG__ID = 3;
+
+ /**
+ * The feature id for the '<em><b>Mutator Config</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_CONFIG__MUTATOR_CONFIG = 4;
+
+ /**
+ * The number of structural features of the '<em>Test Config</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_CONFIG_FEATURE_COUNT = 5;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl <em>Test Run</em>}'
+ * class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestRun()
+ * @generated
+ */
+ int TEST_RUN = 1;
+
+ /**
+ * The feature id for the '<em><b>Config</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RUN__CONFIG = 0;
+
+ /**
+ * The feature id for the '<em><b>Time</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RUN__TIME = 1;
+
+ /**
+ * The feature id for the '<em><b>Results</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RUN__RESULTS = 2;
+
+ /**
+ * The number of structural features of the '<em>Test Run</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RUN_FEATURE_COUNT = 3;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+ * <em>Test Result</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestResult()
+ * @generated
+ */
+ int TEST_RESULT = 2;
+
+ /**
+ * The feature id for the '<em><b>Seed Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RESULT__SEED_COUNT = 0;
+
+ /**
+ * The feature id for the '<em><b>Test Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RESULT__TEST_NAME = 1;
+
+ /**
+ * The feature id for the '<em><b>Error</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RESULT__ERROR = 2;
+
+ /**
+ * The feature id for the '<em><b>Failure</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RESULT__FAILURE = 3;
+
+ /**
+ * The feature id for the '<em><b>Execution Time</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RESULT__EXECUTION_TIME = 4;
+
+ /**
+ * The number of structural features of the '<em>Test Result</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_RESULT_FEATURE_COUNT = 5;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+ * <em>Test Diff</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestDiff()
+ * @generated
+ */
+ int TEST_DIFF = 3;
+
+ /**
+ * The feature id for the '<em><b>Last Update</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_DIFF__LAST_UPDATE = 0;
+
+ /**
+ * The feature id for the '<em><b>Config</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_DIFF__CONFIG = 1;
+
+ /**
+ * The feature id for the '<em><b>Old Result</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_DIFF__OLD_RESULT = 2;
+
+ /**
+ * The feature id for the '<em><b>New Result</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_DIFF__NEW_RESULT = 3;
+
+ /**
+ * The number of structural features of the '<em>Test Diff</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int TEST_DIFF_FEATURE_COUNT = 4;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+ * <em>Diff Report</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getDiffReport()
+ * @generated
+ */
+ int DIFF_REPORT = 4;
+
+ /**
+ * The feature id for the '<em><b>Diffs</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DIFF_REPORT__DIFFS = 0;
+
+ /**
+ * The number of structural features of the '<em>Diff Report</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DIFF_REPORT_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl <em>Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getRoot()
+ * @generated
+ */
+ int ROOT = 5;
+
+ /**
+ * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT__ELEMENTS = 0;
+
+ /**
+ * The number of structural features of the '<em>Root</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+ * <em>Mutator Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getMutatorConfig()
+ * @generated
+ */
+ int MUTATOR_CONFIG = 6;
+
+ /**
+ * The feature id for the '<em><b>Root EClass</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__ROOT_ECLASS = 0;
+
+ /**
+ * The feature id for the '<em><b>Min Objects Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__MIN_OBJECTS_COUNT = 1;
+
+ /**
+ * The feature id for the '<em><b>Ignore And Log</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__IGNORE_AND_LOG = 2;
+
+ /**
+ * The feature id for the '<em><b>Do Not Generate Root</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT = 3;
+
+ /**
+ * The feature id for the '<em><b>Use Ecore Util Delete</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE = 4;
+
+ /**
+ * The feature id for the '<em><b>EClasses To Ignore</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__ECLASSES_TO_IGNORE = 5;
+
+ /**
+ * The feature id for the '<em><b>EStructural Features To Ignore</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE = 6;
+
+ /**
+ * The feature id for the '<em><b>EPackages</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__EPACKAGES = 7;
+
+ /**
+ * The feature id for the '<em><b>Max Delete Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG__MAX_DELETE_COUNT = 8;
+
+ /**
+ * The number of structural features of the '<em>Mutator Config</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int MUTATOR_CONFIG_FEATURE_COUNT = 9;
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+ * <em>Test Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Test Config</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+ * @generated
+ */
+ EClass getTestConfig();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed
+ * <em>Seed</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Seed</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed()
+ * @see #getTestConfig()
+ * @generated
+ */
+ EAttribute getTestConfig_Seed();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount
+ * <em>Count</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Count</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount()
+ * @see #getTestConfig()
+ * @generated
+ */
+ EAttribute getTestConfig_Count();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass <em>Test Class</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Test Class</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass()
+ * @see #getTestConfig()
+ * @generated
+ */
+ EAttribute getTestConfig_TestClass();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId
+ * <em>Id</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Id</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId()
+ * @see #getTestConfig()
+ * @generated
+ */
+ EAttribute getTestConfig_Id();
+
+ /**
+ * Returns the meta object for the containment reference '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig <em>Mutator Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference '<em>Mutator Config</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig()
+ * @see #getTestConfig()
+ * @generated
+ */
+ EReference getTestConfig_MutatorConfig();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun <em>Test Run</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Test Run</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun
+ * @generated
+ */
+ EClass getTestRun();
+
+ /**
+ * Returns the meta object for the containment reference '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig <em>Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference '<em>Config</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig()
+ * @see #getTestRun()
+ * @generated
+ */
+ EReference getTestRun_Config();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime
+ * <em>Time</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Time</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime()
+ * @see #getTestRun()
+ * @generated
+ */
+ EAttribute getTestRun_Time();
+
+ /**
+ * Returns the meta object for the containment reference list '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getResults <em>Results</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Results</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getResults()
+ * @see #getTestRun()
+ * @generated
+ */
+ EReference getTestRun_Results();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+ * <em>Test Result</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Test Result</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+ * @generated
+ */
+ EClass getTestResult();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount <em>Seed Count</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Seed Count</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount()
+ * @see #getTestResult()
+ * @generated
+ */
+ EAttribute getTestResult_SeedCount();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName <em>Test Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Test Name</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName()
+ * @see #getTestResult()
+ * @generated
+ */
+ EAttribute getTestResult_TestName();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError
+ * <em>Error</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Error</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError()
+ * @see #getTestResult()
+ * @generated
+ */
+ EAttribute getTestResult_Error();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure <em>Failure</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Failure</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure()
+ * @see #getTestResult()
+ * @generated
+ */
+ EAttribute getTestResult_Failure();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime <em>Execution Time</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Execution Time</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime()
+ * @see #getTestResult()
+ * @generated
+ */
+ EAttribute getTestResult_ExecutionTime();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff <em>Test Diff</em>}
+ * '.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Test Diff</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff
+ * @generated
+ */
+ EClass getTestDiff();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate <em>Last Update</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Last Update</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate()
+ * @see #getTestDiff()
+ * @generated
+ */
+ EAttribute getTestDiff_LastUpdate();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig
+ * <em>Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference '<em>Config</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig()
+ * @see #getTestDiff()
+ * @generated
+ */
+ EReference getTestDiff_Config();
+
+ /**
+ * Returns the meta object for the containment reference '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult <em>Old Result</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference '<em>Old Result</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult()
+ * @see #getTestDiff()
+ * @generated
+ */
+ EReference getTestDiff_OldResult();
+
+ /**
+ * Returns the meta object for the containment reference '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult <em>New Result</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference '<em>New Result</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult()
+ * @see #getTestDiff()
+ * @generated
+ */
+ EReference getTestDiff_NewResult();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+ * <em>Diff Report</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Diff Report</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+ * @generated
+ */
+ EClass getDiffReport();
+
+ /**
+ * Returns the meta object for the containment reference list '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport#getDiffs <em>Diffs</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Diffs</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport#getDiffs()
+ * @see #getDiffReport()
+ * @generated
+ */
+ EReference getDiffReport_Diffs();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root <em>Root</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Root</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.Root
+ * @generated
+ */
+ EClass getRoot();
+
+ /**
+ * Returns the meta object for the containment reference list '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root#getElements <em>Elements</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Elements</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.Root#getElements()
+ * @see #getRoot()
+ * @generated
+ */
+ EReference getRoot_Elements();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+ * <em>Mutator Config</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Mutator Config</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+ * @generated
+ */
+ EClass getMutatorConfig();
+
+ /**
+ * Returns the meta object for the reference '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass <em>Root EClass</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference '<em>Root EClass</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EReference getMutatorConfig_RootEClass();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount <em>Min Objects Count</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Min Objects Count</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EAttribute getMutatorConfig_MinObjectsCount();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog <em>Ignore And Log</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Ignore And Log</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EAttribute getMutatorConfig_IgnoreAndLog();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot <em>Do Not Generate Root</em>}
+ * '.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Do Not Generate Root</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EAttribute getMutatorConfig_DoNotGenerateRoot();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete
+ * <em>Use Ecore Util Delete</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Use Ecore Util Delete</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EAttribute getMutatorConfig_UseEcoreUtilDelete();
+
+ /**
+ * Returns the meta object for the reference list '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEClassesToIgnore <em>EClasses To Ignore</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference list '<em>EClasses To Ignore</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEClassesToIgnore()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EReference getMutatorConfig_EClassesToIgnore();
+
+ /**
+ * Returns the meta object for the reference list '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEStructuralFeaturesToIgnore
+ * <em>EStructural Features To Ignore</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference list '<em>EStructural Features To Ignore</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEStructuralFeaturesToIgnore()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EReference getMutatorConfig_EStructuralFeaturesToIgnore();
+
+ /**
+ * Returns the meta object for the reference list '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEPackages <em>EPackages</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference list '<em>EPackages</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEPackages()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EReference getMutatorConfig_EPackages();
+
+ /**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount <em>Max Delete Count</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Max Delete Count</em>'.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount()
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ EAttribute getMutatorConfig_MaxDeleteCount();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ ConfigFactory getConfigFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+ * <em>Test Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestConfig()
+ * @generated
+ */
+ EClass TEST_CONFIG = eINSTANCE.getTestConfig();
+
+ /**
+ * The meta object literal for the '<em><b>Seed</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_CONFIG__SEED = eINSTANCE.getTestConfig_Seed();
+
+ /**
+ * The meta object literal for the '<em><b>Count</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_CONFIG__COUNT = eINSTANCE.getTestConfig_Count();
+
+ /**
+ * The meta object literal for the '<em><b>Test Class</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_CONFIG__TEST_CLASS = eINSTANCE.getTestConfig_TestClass();
+
+ /**
+ * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_CONFIG__ID = eINSTANCE.getTestConfig_Id();
+
+ /**
+ * The meta object literal for the '<em><b>Mutator Config</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference TEST_CONFIG__MUTATOR_CONFIG = eINSTANCE.getTestConfig_MutatorConfig();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl
+ * <em>Test Run</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestRun()
+ * @generated
+ */
+ EClass TEST_RUN = eINSTANCE.getTestRun();
+
+ /**
+ * The meta object literal for the '<em><b>Config</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference TEST_RUN__CONFIG = eINSTANCE.getTestRun_Config();
+
+ /**
+ * The meta object literal for the '<em><b>Time</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_RUN__TIME = eINSTANCE.getTestRun_Time();
+
+ /**
+ * The meta object literal for the '<em><b>Results</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference TEST_RUN__RESULTS = eINSTANCE.getTestRun_Results();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+ * <em>Test Result</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestResult()
+ * @generated
+ */
+ EClass TEST_RESULT = eINSTANCE.getTestResult();
+
+ /**
+ * The meta object literal for the '<em><b>Seed Count</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_RESULT__SEED_COUNT = eINSTANCE.getTestResult_SeedCount();
+
+ /**
+ * The meta object literal for the '<em><b>Test Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_RESULT__TEST_NAME = eINSTANCE.getTestResult_TestName();
+
+ /**
+ * The meta object literal for the '<em><b>Error</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_RESULT__ERROR = eINSTANCE.getTestResult_Error();
+
+ /**
+ * The meta object literal for the '<em><b>Failure</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_RESULT__FAILURE = eINSTANCE.getTestResult_Failure();
+
+ /**
+ * The meta object literal for the '<em><b>Execution Time</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_RESULT__EXECUTION_TIME = eINSTANCE.getTestResult_ExecutionTime();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+ * <em>Test Diff</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getTestDiff()
+ * @generated
+ */
+ EClass TEST_DIFF = eINSTANCE.getTestDiff();
+
+ /**
+ * The meta object literal for the '<em><b>Last Update</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute TEST_DIFF__LAST_UPDATE = eINSTANCE.getTestDiff_LastUpdate();
+
+ /**
+ * The meta object literal for the '<em><b>Config</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference TEST_DIFF__CONFIG = eINSTANCE.getTestDiff_Config();
+
+ /**
+ * The meta object literal for the '<em><b>Old Result</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference TEST_DIFF__OLD_RESULT = eINSTANCE.getTestDiff_OldResult();
+
+ /**
+ * The meta object literal for the '<em><b>New Result</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference TEST_DIFF__NEW_RESULT = eINSTANCE.getTestDiff_NewResult();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+ * <em>Diff Report</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getDiffReport()
+ * @generated
+ */
+ EClass DIFF_REPORT = eINSTANCE.getDiffReport();
+
+ /**
+ * The meta object literal for the '<em><b>Diffs</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference DIFF_REPORT__DIFFS = eINSTANCE.getDiffReport_Diffs();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl
+ * <em>Root</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getRoot()
+ * @generated
+ */
+ EClass ROOT = eINSTANCE.getRoot();
+
+ /**
+ * The meta object literal for the '<em><b>Elements</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference ROOT__ELEMENTS = eINSTANCE.getRoot_Elements();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+ * <em>Mutator Config</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.impl.ConfigPackageImpl#getMutatorConfig()
+ * @generated
+ */
+ EClass MUTATOR_CONFIG = eINSTANCE.getMutatorConfig();
+
+ /**
+ * The meta object literal for the '<em><b>Root EClass</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference MUTATOR_CONFIG__ROOT_ECLASS = eINSTANCE.getMutatorConfig_RootEClass();
+
+ /**
+ * The meta object literal for the '<em><b>Min Objects Count</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute MUTATOR_CONFIG__MIN_OBJECTS_COUNT = eINSTANCE.getMutatorConfig_MinObjectsCount();
+
+ /**
+ * The meta object literal for the '<em><b>Ignore And Log</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute MUTATOR_CONFIG__IGNORE_AND_LOG = eINSTANCE.getMutatorConfig_IgnoreAndLog();
+
+ /**
+ * The meta object literal for the '<em><b>Do Not Generate Root</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT = eINSTANCE.getMutatorConfig_DoNotGenerateRoot();
+
+ /**
+ * The meta object literal for the '<em><b>Use Ecore Util Delete</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE = eINSTANCE.getMutatorConfig_UseEcoreUtilDelete();
+
+ /**
+ * The meta object literal for the '<em><b>EClasses To Ignore</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference MUTATOR_CONFIG__ECLASSES_TO_IGNORE = eINSTANCE.getMutatorConfig_EClassesToIgnore();
+
+ /**
+ * The meta object literal for the '<em><b>EStructural Features To Ignore</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE = eINSTANCE
+ .getMutatorConfig_EStructuralFeaturesToIgnore();
+
+ /**
+ * The meta object literal for the '<em><b>EPackages</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference MUTATOR_CONFIG__EPACKAGES = eINSTANCE.getMutatorConfig_EPackages();
+
+ /**
+ * The meta object literal for the '<em><b>Max Delete Count</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute MUTATOR_CONFIG__MAX_DELETE_COUNT = eINSTANCE.getMutatorConfig_MaxDeleteCount();
+
+ }
+
+} // ConfigPackage
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/DiffReport.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/DiffReport.java
new file mode 100644
index 0000000..0a61d81
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/DiffReport.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Diff Report</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport#getDiffs <em>Diffs</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getDiffReport()
+ * @model
+ * @generated
+ */
+public interface DiffReport extends EObject {
+ /**
+ * Returns the value of the '<em><b>Diffs</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Diffs</em>' containment reference list isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Diffs</em>' containment reference list.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getDiffReport_Diffs()
+ * @model containment="true"
+ * @generated
+ */
+ EList<TestDiff> getDiffs();
+
+} // DiffReport
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/MutatorConfig.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/MutatorConfig.java
new file mode 100644
index 0000000..914be59
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/MutatorConfig.java
@@ -0,0 +1,277 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Mutator Config</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass <em>Root EClass</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount <em>Min Objects Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog <em>Ignore And Log</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot <em>Do Not Generate Root</em>}
+ * </li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete <em>Use Ecore Util Delete
+ * </em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEClassesToIgnore <em>EClasses To Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEStructuralFeaturesToIgnore <em>EStructural
+ * Features To Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getEPackages <em>EPackages</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount <em>Max Delete Count</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig()
+ * @model
+ * @generated
+ */
+public interface MutatorConfig extends EObject {
+ /**
+ * Returns the value of the '<em><b>Root EClass</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Root EClass</em>' reference isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Root EClass</em>' reference.
+ * @see #setRootEClass(EClass)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_RootEClass()
+ * @model
+ * @generated
+ */
+ EClass getRootEClass();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getRootEClass
+ * <em>Root EClass</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Root EClass</em>' reference.
+ * @see #getRootEClass()
+ * @generated
+ */
+ void setRootEClass(EClass value);
+
+ /**
+ * Returns the value of the '<em><b>Min Objects Count</b></em>' attribute.
+ * The default value is <code>"100"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Min Objects Count</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Min Objects Count</em>' attribute.
+ * @see #setMinObjectsCount(int)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_MinObjectsCount()
+ * @model default="100"
+ * @generated
+ */
+ int getMinObjectsCount();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMinObjectsCount
+ * <em>Min Objects Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Min Objects Count</em>' attribute.
+ * @see #getMinObjectsCount()
+ * @generated
+ */
+ void setMinObjectsCount(int value);
+
+ /**
+ * Returns the value of the '<em><b>Ignore And Log</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Ignore And Log</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Ignore And Log</em>' attribute.
+ * @see #setIgnoreAndLog(boolean)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_IgnoreAndLog()
+ * @model default="false"
+ * @generated
+ */
+ boolean isIgnoreAndLog();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isIgnoreAndLog
+ * <em>Ignore And Log</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Ignore And Log</em>' attribute.
+ * @see #isIgnoreAndLog()
+ * @generated
+ */
+ void setIgnoreAndLog(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Do Not Generate Root</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Do Not Generate Root</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Do Not Generate Root</em>' attribute.
+ * @see #setDoNotGenerateRoot(boolean)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_DoNotGenerateRoot()
+ * @model default="false"
+ * @generated
+ */
+ boolean isDoNotGenerateRoot();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isDoNotGenerateRoot
+ * <em>Do Not Generate Root</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Do Not Generate Root</em>' attribute.
+ * @see #isDoNotGenerateRoot()
+ * @generated
+ */
+ void setDoNotGenerateRoot(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Use Ecore Util Delete</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Use Ecore Util Delete</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Use Ecore Util Delete</em>' attribute.
+ * @see #setUseEcoreUtilDelete(boolean)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_UseEcoreUtilDelete()
+ * @model default="false"
+ * @generated
+ */
+ boolean isUseEcoreUtilDelete();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#isUseEcoreUtilDelete
+ * <em>Use Ecore Util Delete</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Use Ecore Util Delete</em>' attribute.
+ * @see #isUseEcoreUtilDelete()
+ * @generated
+ */
+ void setUseEcoreUtilDelete(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>EClasses To Ignore</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EClass}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>EClasses To Ignore</em>' reference list isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>EClasses To Ignore</em>' reference list.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_EClassesToIgnore()
+ * @model
+ * @generated
+ */
+ EList<EClass> getEClassesToIgnore();
+
+ /**
+ * Returns the value of the '<em><b>EStructural Features To Ignore</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EStructuralFeature}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>EStructural Features To Ignore</em>' reference list isn't clear, there really should
+ * be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>EStructural Features To Ignore</em>' reference list.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_EStructuralFeaturesToIgnore()
+ * @model
+ * @generated
+ */
+ EList<EStructuralFeature> getEStructuralFeaturesToIgnore();
+
+ /**
+ * Returns the value of the '<em><b>EPackages</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EPackage}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>EPackages</em>' reference list isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>EPackages</em>' reference list.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_EPackages()
+ * @model
+ * @generated
+ */
+ EList<EPackage> getEPackages();
+
+ /**
+ * Returns the value of the '<em><b>Max Delete Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Max Delete Count</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Max Delete Count</em>' attribute.
+ * @see #setMaxDeleteCount(Integer)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getMutatorConfig_MaxDeleteCount()
+ * @model
+ * @generated
+ */
+ Integer getMaxDeleteCount();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig#getMaxDeleteCount
+ * <em>Max Delete Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Max Delete Count</em>' attribute.
+ * @see #getMaxDeleteCount()
+ * @generated
+ */
+ void setMaxDeleteCount(Integer value);
+
+} // MutatorConfig
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/Root.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/Root.java
new file mode 100644
index 0000000..b01afbc
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/Root.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Root</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getRoot()
+ * @model
+ * @generated
+ */
+public interface Root extends EObject {
+ /**
+ * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.ecore.EObject}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Elements</em>' containment reference list isn't clear, there really should be more of
+ * a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Elements</em>' containment reference list.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getRoot_Elements()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EObject> getElements();
+
+} // Root
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestConfig.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestConfig.java
new file mode 100644
index 0000000..6abc4bd
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestConfig.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Config</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed <em>Seed</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount <em>Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass <em>Test Class</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig <em>Mutator Config</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig()
+ * @model
+ * @generated
+ */
+public interface TestConfig extends EObject {
+ /**
+ * Returns the value of the '<em><b>Seed</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Seed</em>' attribute isn't clear, there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Seed</em>' attribute.
+ * @see #setSeed(long)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_Seed()
+ * @model
+ * @generated
+ */
+ long getSeed();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getSeed <em>Seed</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Seed</em>' attribute.
+ * @see #getSeed()
+ * @generated
+ */
+ void setSeed(long value);
+
+ /**
+ * Returns the value of the '<em><b>Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Count</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Count</em>' attribute.
+ * @see #setCount(int)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_Count()
+ * @model
+ * @generated
+ */
+ int getCount();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getCount <em>Count</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Count</em>' attribute.
+ * @see #getCount()
+ * @generated
+ */
+ void setCount(int value);
+
+ /**
+ * Returns the value of the '<em><b>Test Class</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Test Class</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Test Class</em>' attribute.
+ * @see #setTestClass(Class)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_TestClass()
+ * @model
+ * @generated
+ */
+ Class<?> getTestClass();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getTestClass
+ * <em>Test Class</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Test Class</em>' attribute.
+ * @see #getTestClass()
+ * @generated
+ */
+ void setTestClass(Class<?> value);
+
+ /**
+ * Returns the value of the '<em><b>Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Id</em>' attribute isn't clear, there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Id</em>' attribute.
+ * @see #setId(String)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_Id()
+ * @model
+ * @generated
+ */
+ String getId();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getId <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Id</em>' attribute.
+ * @see #getId()
+ * @generated
+ */
+ void setId(String value);
+
+ /**
+ * Returns the value of the '<em><b>Mutator Config</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Mutator Config</em>' containment reference isn't clear, there really should be more of
+ * a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Mutator Config</em>' containment reference.
+ * @see #setMutatorConfig(MutatorConfig)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestConfig_MutatorConfig()
+ * @model containment="true"
+ * @generated
+ */
+ MutatorConfig getMutatorConfig();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig#getMutatorConfig
+ * <em>Mutator Config</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Mutator Config</em>' containment reference.
+ * @see #getMutatorConfig()
+ * @generated
+ */
+ void setMutatorConfig(MutatorConfig value);
+
+} // TestConfig
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestDiff.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestDiff.java
new file mode 100644
index 0000000..04546de
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestDiff.java
@@ -0,0 +1,153 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import java.util.Date;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Diff</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate <em>Last Update</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult <em>Old Result</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult <em>New Result</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff()
+ * @model
+ * @generated
+ */
+public interface TestDiff extends EObject {
+ /**
+ * Returns the value of the '<em><b>Last Update</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Last Update</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Last Update</em>' attribute.
+ * @see #setLastUpdate(Date)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_LastUpdate()
+ * @model
+ * @generated
+ */
+ Date getLastUpdate();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getLastUpdate
+ * <em>Last Update</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Last Update</em>' attribute.
+ * @see #getLastUpdate()
+ * @generated
+ */
+ void setLastUpdate(Date value);
+
+ /**
+ * Returns the value of the '<em><b>Config</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Config</em>' reference isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Config</em>' reference.
+ * @see #setConfig(TestConfig)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_Config()
+ * @model
+ * @generated
+ */
+ TestConfig getConfig();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getConfig <em>Config</em>}'
+ * reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Config</em>' reference.
+ * @see #getConfig()
+ * @generated
+ */
+ void setConfig(TestConfig value);
+
+ /**
+ * Returns the value of the '<em><b>Old Result</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Old Result</em>' containment reference isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Old Result</em>' containment reference.
+ * @see #setOldResult(TestResult)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_OldResult()
+ * @model containment="true"
+ * @generated
+ */
+ TestResult getOldResult();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getOldResult
+ * <em>Old Result</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Old Result</em>' containment reference.
+ * @see #getOldResult()
+ * @generated
+ */
+ void setOldResult(TestResult value);
+
+ /**
+ * Returns the value of the '<em><b>New Result</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>New Result</em>' containment reference isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>New Result</em>' containment reference.
+ * @see #setNewResult(TestResult)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestDiff_NewResult()
+ * @model containment="true"
+ * @generated
+ */
+ TestResult getNewResult();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff#getNewResult
+ * <em>New Result</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>New Result</em>' containment reference.
+ * @see #getNewResult()
+ * @generated
+ */
+ void setNewResult(TestResult value);
+
+} // TestDiff
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestResult.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestResult.java
new file mode 100644
index 0000000..b6e02c9
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestResult.java
@@ -0,0 +1,181 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Result</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount <em>Seed Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName <em>Test Name</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError <em>Error</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure <em>Failure</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime <em>Execution Time</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult()
+ * @model
+ * @generated
+ */
+public interface TestResult extends EObject {
+ /**
+ * Returns the value of the '<em><b>Seed Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Seed Count</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Seed Count</em>' attribute.
+ * @see #setSeedCount(int)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_SeedCount()
+ * @model
+ * @generated
+ */
+ int getSeedCount();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getSeedCount
+ * <em>Seed Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Seed Count</em>' attribute.
+ * @see #getSeedCount()
+ * @generated
+ */
+ void setSeedCount(int value);
+
+ /**
+ * Returns the value of the '<em><b>Test Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Test Name</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Test Name</em>' attribute.
+ * @see #setTestName(String)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_TestName()
+ * @model
+ * @generated
+ */
+ String getTestName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getTestName
+ * <em>Test Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Test Name</em>' attribute.
+ * @see #getTestName()
+ * @generated
+ */
+ void setTestName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Error</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Error</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Error</em>' attribute.
+ * @see #setError(String)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_Error()
+ * @model
+ * @generated
+ */
+ String getError();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getError <em>Error</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Error</em>' attribute.
+ * @see #getError()
+ * @generated
+ */
+ void setError(String value);
+
+ /**
+ * Returns the value of the '<em><b>Failure</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Failure</em>' attribute isn't clear, there really should be more of a description
+ * here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Failure</em>' attribute.
+ * @see #setFailure(String)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_Failure()
+ * @model
+ * @generated
+ */
+ String getFailure();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getFailure <em>Failure</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Failure</em>' attribute.
+ * @see #getFailure()
+ * @generated
+ */
+ void setFailure(String value);
+
+ /**
+ * Returns the value of the '<em><b>Execution Time</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Execution Time</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Execution Time</em>' attribute.
+ * @see #setExecutionTime(long)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestResult_ExecutionTime()
+ * @model
+ * @generated
+ */
+ long getExecutionTime();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult#getExecutionTime
+ * <em>Execution Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Execution Time</em>' attribute.
+ * @see #getExecutionTime()
+ * @generated
+ */
+ void setExecutionTime(long value);
+
+} // TestResult
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestRun.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestRun.java
new file mode 100644
index 0000000..6aa388a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/TestRun.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config;
+
+import java.util.Date;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Test Run</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime <em>Time</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getResults <em>Results</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun()
+ * @model
+ * @generated
+ */
+public interface TestRun extends EObject {
+ /**
+ * Returns the value of the '<em><b>Config</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Config</em>' containment reference isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Config</em>' containment reference.
+ * @see #setConfig(TestConfig)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun_Config()
+ * @model containment="true"
+ * @generated
+ */
+ TestConfig getConfig();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getConfig <em>Config</em>}'
+ * containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Config</em>' containment reference.
+ * @see #getConfig()
+ * @generated
+ */
+ void setConfig(TestConfig value);
+
+ /**
+ * Returns the value of the '<em><b>Time</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Time</em>' attribute isn't clear, there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Time</em>' attribute.
+ * @see #setTime(Date)
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun_Time()
+ * @model
+ * @generated
+ */
+ Date getTime();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun#getTime <em>Time</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value the new value of the '<em>Time</em>' attribute.
+ * @see #getTime()
+ * @generated
+ */
+ void setTime(Date value);
+
+ /**
+ * Returns the value of the '<em><b>Results</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Results</em>' containment reference list isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Results</em>' containment reference list.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#getTestRun_Results()
+ * @model containment="true"
+ * @generated
+ */
+ EList<TestResult> getResults();
+
+} // TestRun
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigFactoryImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigFactoryImpl.java
new file mode 100644
index 0000000..ffa0f67
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigFactoryImpl.java
@@ -0,0 +1,194 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConfigFactoryImpl extends EFactoryImpl implements ConfigFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static ConfigFactory init() {
+ try {
+ ConfigFactory theConfigFactory = (ConfigFactory) EPackage.Registry.INSTANCE
+ .getEFactory("http://org/eclipse/emf/emfstore/fuzzy/emf/config");
+ if (theConfigFactory != null) {
+ return theConfigFactory;
+ }
+ } catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ConfigFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ConfigPackage.TEST_CONFIG:
+ return createTestConfig();
+ case ConfigPackage.TEST_RUN:
+ return createTestRun();
+ case ConfigPackage.TEST_RESULT:
+ return createTestResult();
+ case ConfigPackage.TEST_DIFF:
+ return createTestDiff();
+ case ConfigPackage.DIFF_REPORT:
+ return createDiffReport();
+ case ConfigPackage.ROOT:
+ return createRoot();
+ case ConfigPackage.MUTATOR_CONFIG:
+ return createMutatorConfig();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestConfig createTestConfig() {
+ TestConfigImpl testConfig = new TestConfigImpl();
+ return testConfig;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestRun createTestRun() {
+ TestRunImpl testRun = new TestRunImpl();
+ return testRun;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestResult createTestResult() {
+ TestResultImpl testResult = new TestResultImpl();
+ return testResult;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestDiff createTestDiff() {
+ TestDiffImpl testDiff = new TestDiffImpl();
+ return testDiff;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public DiffReport createDiffReport() {
+ DiffReportImpl diffReport = new DiffReportImpl();
+ return diffReport;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Root createRoot() {
+ RootImpl root = new RootImpl();
+ return root;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public MutatorConfig createMutatorConfig() {
+ MutatorConfigImpl mutatorConfig = new MutatorConfigImpl();
+ return mutatorConfig;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigPackage getConfigPackage() {
+ return (ConfigPackage) getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ConfigPackage getPackage() {
+ return ConfigPackage.eINSTANCE;
+ }
+
+} // ConfigFactoryImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigPackageImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigPackageImpl.java
new file mode 100644
index 0000000..0e07b74
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/ConfigPackageImpl.java
@@ -0,0 +1,715 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConfigPackageImpl extends EPackageImpl implements ConfigPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass testConfigEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass testRunEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass testResultEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass testDiffEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass diffReportEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass rootEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private EClass mutatorConfigEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with {@link org.eclipse.emf.ecore.EPackage.Registry
+ * EPackage.Registry} by the package
+ * package URI value.
+ * <p>
+ * Note: the correct way to create the package is via the static factory method {@link #init init()}, which also
+ * performs initialization of the package, or returns the registered package, if one already exists. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ConfigPackageImpl() {
+ super(eNS_URI, ConfigFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>
+ * This method is used to initialize {@link ConfigPackage#eINSTANCE} when that field is accessed. Clients should not
+ * invoke it directly. Instead, they should simply access that field to obtain the package. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ConfigPackage init() {
+ if (isInited)
+ return (ConfigPackage) EPackage.Registry.INSTANCE.getEPackage(ConfigPackage.eNS_URI);
+
+ // Obtain or create and register package
+ ConfigPackageImpl theConfigPackage = (ConfigPackageImpl) (EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ConfigPackageImpl ? EPackage.Registry.INSTANCE
+ .get(eNS_URI) : new ConfigPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theConfigPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theConfigPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theConfigPackage.freeze();
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ConfigPackage.eNS_URI, theConfigPackage);
+ return theConfigPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getTestConfig() {
+ return testConfigEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestConfig_Seed() {
+ return (EAttribute) testConfigEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestConfig_Count() {
+ return (EAttribute) testConfigEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestConfig_TestClass() {
+ return (EAttribute) testConfigEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestConfig_Id() {
+ return (EAttribute) testConfigEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getTestConfig_MutatorConfig() {
+ return (EReference) testConfigEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getTestRun() {
+ return testRunEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getTestRun_Config() {
+ return (EReference) testRunEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestRun_Time() {
+ return (EAttribute) testRunEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getTestRun_Results() {
+ return (EReference) testRunEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getTestResult() {
+ return testResultEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestResult_SeedCount() {
+ return (EAttribute) testResultEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestResult_TestName() {
+ return (EAttribute) testResultEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestResult_Error() {
+ return (EAttribute) testResultEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestResult_Failure() {
+ return (EAttribute) testResultEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestResult_ExecutionTime() {
+ return (EAttribute) testResultEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getTestDiff() {
+ return testDiffEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getTestDiff_LastUpdate() {
+ return (EAttribute) testDiffEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getTestDiff_Config() {
+ return (EReference) testDiffEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getTestDiff_OldResult() {
+ return (EReference) testDiffEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getTestDiff_NewResult() {
+ return (EReference) testDiffEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getDiffReport() {
+ return diffReportEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getDiffReport_Diffs() {
+ return (EReference) diffReportEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getRoot() {
+ return rootEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getRoot_Elements() {
+ return (EReference) rootEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getMutatorConfig() {
+ return mutatorConfigEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getMutatorConfig_RootEClass() {
+ return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getMutatorConfig_MinObjectsCount() {
+ return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getMutatorConfig_IgnoreAndLog() {
+ return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getMutatorConfig_DoNotGenerateRoot() {
+ return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getMutatorConfig_UseEcoreUtilDelete() {
+ return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getMutatorConfig_EClassesToIgnore() {
+ return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getMutatorConfig_EStructuralFeaturesToIgnore() {
+ return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EReference getMutatorConfig_EPackages() {
+ return (EReference) mutatorConfigEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EAttribute getMutatorConfig_MaxDeleteCount() {
+ return (EAttribute) mutatorConfigEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigFactory getConfigFactory() {
+ return (ConfigFactory) getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated)
+ return;
+ isCreated = true;
+
+ // Create classes and their features
+ testConfigEClass = createEClass(TEST_CONFIG);
+ createEAttribute(testConfigEClass, TEST_CONFIG__SEED);
+ createEAttribute(testConfigEClass, TEST_CONFIG__COUNT);
+ createEAttribute(testConfigEClass, TEST_CONFIG__TEST_CLASS);
+ createEAttribute(testConfigEClass, TEST_CONFIG__ID);
+ createEReference(testConfigEClass, TEST_CONFIG__MUTATOR_CONFIG);
+
+ testRunEClass = createEClass(TEST_RUN);
+ createEReference(testRunEClass, TEST_RUN__CONFIG);
+ createEAttribute(testRunEClass, TEST_RUN__TIME);
+ createEReference(testRunEClass, TEST_RUN__RESULTS);
+
+ testResultEClass = createEClass(TEST_RESULT);
+ createEAttribute(testResultEClass, TEST_RESULT__SEED_COUNT);
+ createEAttribute(testResultEClass, TEST_RESULT__TEST_NAME);
+ createEAttribute(testResultEClass, TEST_RESULT__ERROR);
+ createEAttribute(testResultEClass, TEST_RESULT__FAILURE);
+ createEAttribute(testResultEClass, TEST_RESULT__EXECUTION_TIME);
+
+ testDiffEClass = createEClass(TEST_DIFF);
+ createEAttribute(testDiffEClass, TEST_DIFF__LAST_UPDATE);
+ createEReference(testDiffEClass, TEST_DIFF__CONFIG);
+ createEReference(testDiffEClass, TEST_DIFF__OLD_RESULT);
+ createEReference(testDiffEClass, TEST_DIFF__NEW_RESULT);
+
+ diffReportEClass = createEClass(DIFF_REPORT);
+ createEReference(diffReportEClass, DIFF_REPORT__DIFFS);
+
+ rootEClass = createEClass(ROOT);
+ createEReference(rootEClass, ROOT__ELEMENTS);
+
+ mutatorConfigEClass = createEClass(MUTATOR_CONFIG);
+ createEReference(mutatorConfigEClass, MUTATOR_CONFIG__ROOT_ECLASS);
+ createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__MIN_OBJECTS_COUNT);
+ createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__IGNORE_AND_LOG);
+ createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT);
+ createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE);
+ createEReference(mutatorConfigEClass, MUTATOR_CONFIG__ECLASSES_TO_IGNORE);
+ createEReference(mutatorConfigEClass, MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE);
+ createEReference(mutatorConfigEClass, MUTATOR_CONFIG__EPACKAGES);
+ createEAttribute(mutatorConfigEClass, MUTATOR_CONFIG__MAX_DELETE_COUNT);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized)
+ return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(testConfigEClass, TestConfig.class, "TestConfig", !IS_ABSTRACT, !IS_INTERFACE,
+ IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getTestConfig_Seed(), ecorePackage.getELong(), "seed", null, 0, 1, TestConfig.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestConfig_Count(), ecorePackage.getEInt(), "count", null, 0, 1, TestConfig.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ EGenericType g1 = createEGenericType(ecorePackage.getEJavaClass());
+ EGenericType g2 = createEGenericType();
+ g1.getETypeArguments().add(g2);
+ initEAttribute(getTestConfig_TestClass(), g1, "testClass", null, 0, 1, TestConfig.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestConfig_Id(), ecorePackage.getEString(), "id", null, 0, 1, TestConfig.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTestConfig_MutatorConfig(), this.getMutatorConfig(), null, "mutatorConfig", null, 0, 1,
+ TestConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(testRunEClass, TestRun.class, "TestRun", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTestRun_Config(), this.getTestConfig(), null, "config", null, 0, 1, TestRun.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestRun_Time(), ecorePackage.getEDate(), "time", null, 0, 1, TestRun.class, !IS_TRANSIENT,
+ !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTestRun_Results(), this.getTestResult(), null, "results", null, 0, -1, TestRun.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ initEClass(testResultEClass, TestResult.class, "TestResult", !IS_ABSTRACT, !IS_INTERFACE,
+ IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getTestResult_SeedCount(), ecorePackage.getEInt(), "seedCount", null, 0, 1, TestResult.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestResult_TestName(), ecorePackage.getEString(), "testName", null, 0, 1, TestResult.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestResult_Error(), ecorePackage.getEString(), "error", null, 0, 1, TestResult.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestResult_Failure(), ecorePackage.getEString(), "failure", null, 0, 1, TestResult.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getTestResult_ExecutionTime(), ecorePackage.getELong(), "executionTime", null, 0, 1,
+ TestResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ initEClass(testDiffEClass, TestDiff.class, "TestDiff", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getTestDiff_LastUpdate(), ecorePackage.getEDate(), "lastUpdate", null, 0, 1, TestDiff.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTestDiff_Config(), this.getTestConfig(), null, "config", null, 0, 1, TestDiff.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEReference(getTestDiff_OldResult(), this.getTestResult(), null, "oldResult", null, 0, 1, TestDiff.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEReference(getTestDiff_NewResult(), this.getTestResult(), null, "newResult", null, 0, 1, TestDiff.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ initEClass(diffReportEClass, DiffReport.class, "DiffReport", !IS_ABSTRACT, !IS_INTERFACE,
+ IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDiffReport_Diffs(), this.getTestDiff(), null, "diffs", null, 0, -1, DiffReport.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ initEClass(rootEClass, Root.class, "Root", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getRoot_Elements(), ecorePackage.getEObject(), null, "elements", null, 0, -1, Root.class,
+ !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ initEClass(mutatorConfigEClass, MutatorConfig.class, "MutatorConfig", !IS_ABSTRACT, !IS_INTERFACE,
+ IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getMutatorConfig_RootEClass(), ecorePackage.getEClass(), null, "rootEClass", null, 0, 1,
+ MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMutatorConfig_MinObjectsCount(), ecorePackage.getEInt(), "minObjectsCount", "100", 0, 1,
+ MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMutatorConfig_IgnoreAndLog(), ecorePackage.getEBoolean(), "ignoreAndLog", "false", 0, 1,
+ MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMutatorConfig_DoNotGenerateRoot(), ecorePackage.getEBoolean(), "doNotGenerateRoot", "false",
+ 0, 1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMutatorConfig_UseEcoreUtilDelete(), ecorePackage.getEBoolean(), "useEcoreUtilDelete",
+ "false", 0, 1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getMutatorConfig_EClassesToIgnore(), ecorePackage.getEClass(), null, "eClassesToIgnore", null,
+ 0, -1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getMutatorConfig_EStructuralFeaturesToIgnore(), ecorePackage.getEStructuralFeature(), null,
+ "eStructuralFeaturesToIgnore", null, 0, -1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE,
+ IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getMutatorConfig_EPackages(), ecorePackage.getEPackage(), null, "ePackages", null, 0, -1,
+ MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES,
+ !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getMutatorConfig_MaxDeleteCount(), ecorePackage.getEIntegerObject(), "maxDeleteCount", null, 0,
+ 1, MutatorConfig.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+ !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} // ConfigPackageImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/DiffReportImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/DiffReportImpl.java
new file mode 100644
index 0000000..bda9548
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/DiffReportImpl.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Diff Report</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.DiffReportImpl#getDiffs <em>Diffs</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DiffReportImpl extends EObjectImpl implements DiffReport {
+ /**
+ * The cached value of the '{@link #getDiffs() <em>Diffs</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getDiffs()
+ * @generated
+ * @ordered
+ */
+ protected EList<TestDiff> diffs;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected DiffReportImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.DIFF_REPORT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EList<TestDiff> getDiffs() {
+ if (diffs == null) {
+ diffs = new EObjectContainmentEList<TestDiff>(TestDiff.class, this, ConfigPackage.DIFF_REPORT__DIFFS);
+ }
+ return diffs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ConfigPackage.DIFF_REPORT__DIFFS:
+ return ((InternalEList<?>) getDiffs()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.DIFF_REPORT__DIFFS:
+ return getDiffs();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.DIFF_REPORT__DIFFS:
+ getDiffs().clear();
+ getDiffs().addAll((Collection<? extends TestDiff>) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.DIFF_REPORT__DIFFS:
+ getDiffs().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.DIFF_REPORT__DIFFS:
+ return diffs != null && !diffs.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} // DiffReportImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/MutatorConfigImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/MutatorConfigImpl.java
new file mode 100644
index 0000000..01324c9
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/MutatorConfigImpl.java
@@ -0,0 +1,616 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Mutator Config</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getRootEClass <em>Root EClass</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getMinObjectsCount <em>Min Objects Count
+ * </em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#isIgnoreAndLog <em>Ignore And Log</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#isDoNotGenerateRoot <em>Do Not Generate
+ * Root</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#isUseEcoreUtilDelete <em>Use Ecore Util
+ * Delete</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getEClassesToIgnore <em>EClasses To
+ * Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getEStructuralFeaturesToIgnore <em>
+ * EStructural Features To Ignore</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getEPackages <em>EPackages</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.MutatorConfigImpl#getMaxDeleteCount <em>Max Delete Count
+ * </em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MutatorConfigImpl extends EObjectImpl implements MutatorConfig {
+ /**
+ * The cached value of the '{@link #getRootEClass() <em>Root EClass</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getRootEClass()
+ * @generated
+ * @ordered
+ */
+ protected EClass rootEClass;
+
+ /**
+ * The default value of the '{@link #getMinObjectsCount() <em>Min Objects Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getMinObjectsCount()
+ * @generated
+ * @ordered
+ */
+ protected static final int MIN_OBJECTS_COUNT_EDEFAULT = 100;
+
+ /**
+ * The cached value of the '{@link #getMinObjectsCount() <em>Min Objects Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getMinObjectsCount()
+ * @generated
+ * @ordered
+ */
+ protected int minObjectsCount = MIN_OBJECTS_COUNT_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isIgnoreAndLog() <em>Ignore And Log</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isIgnoreAndLog()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean IGNORE_AND_LOG_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isIgnoreAndLog() <em>Ignore And Log</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isIgnoreAndLog()
+ * @generated
+ * @ordered
+ */
+ protected boolean ignoreAndLog = IGNORE_AND_LOG_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isDoNotGenerateRoot() <em>Do Not Generate Root</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isDoNotGenerateRoot()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean DO_NOT_GENERATE_ROOT_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isDoNotGenerateRoot() <em>Do Not Generate Root</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isDoNotGenerateRoot()
+ * @generated
+ * @ordered
+ */
+ protected boolean doNotGenerateRoot = DO_NOT_GENERATE_ROOT_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isUseEcoreUtilDelete() <em>Use Ecore Util Delete</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isUseEcoreUtilDelete()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean USE_ECORE_UTIL_DELETE_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isUseEcoreUtilDelete() <em>Use Ecore Util Delete</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isUseEcoreUtilDelete()
+ * @generated
+ * @ordered
+ */
+ protected boolean useEcoreUtilDelete = USE_ECORE_UTIL_DELETE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getEClassesToIgnore() <em>EClasses To Ignore</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getEClassesToIgnore()
+ * @generated
+ * @ordered
+ */
+ protected EList<EClass> eClassesToIgnore;
+
+ /**
+ * The cached value of the '{@link #getEStructuralFeaturesToIgnore() <em>EStructural Features To Ignore</em>}'
+ * reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getEStructuralFeaturesToIgnore()
+ * @generated
+ * @ordered
+ */
+ protected EList<EStructuralFeature> eStructuralFeaturesToIgnore;
+
+ /**
+ * The cached value of the '{@link #getEPackages() <em>EPackages</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getEPackages()
+ * @generated
+ * @ordered
+ */
+ protected EList<EPackage> ePackages;
+
+ /**
+ * The default value of the '{@link #getMaxDeleteCount() <em>Max Delete Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getMaxDeleteCount()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer MAX_DELETE_COUNT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getMaxDeleteCount() <em>Max Delete Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getMaxDeleteCount()
+ * @generated
+ * @ordered
+ */
+ protected Integer maxDeleteCount = MAX_DELETE_COUNT_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected MutatorConfigImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.MUTATOR_CONFIG;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass getRootEClass() {
+ if (rootEClass != null && rootEClass.eIsProxy()) {
+ InternalEObject oldRootEClass = (InternalEObject) rootEClass;
+ rootEClass = (EClass) eResolveProxy(oldRootEClass);
+ if (rootEClass != oldRootEClass) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE,
+ ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS, oldRootEClass, rootEClass));
+ }
+ }
+ return rootEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EClass basicGetRootEClass() {
+ return rootEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setRootEClass(EClass newRootEClass) {
+ EClass oldRootEClass = rootEClass;
+ rootEClass = newRootEClass;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS,
+ oldRootEClass, rootEClass));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public int getMinObjectsCount() {
+ return minObjectsCount;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setMinObjectsCount(int newMinObjectsCount) {
+ int oldMinObjectsCount = minObjectsCount;
+ minObjectsCount = newMinObjectsCount;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT,
+ oldMinObjectsCount, minObjectsCount));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public boolean isIgnoreAndLog() {
+ return ignoreAndLog;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setIgnoreAndLog(boolean newIgnoreAndLog) {
+ boolean oldIgnoreAndLog = ignoreAndLog;
+ ignoreAndLog = newIgnoreAndLog;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG,
+ oldIgnoreAndLog, ignoreAndLog));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public boolean isDoNotGenerateRoot() {
+ return doNotGenerateRoot;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setDoNotGenerateRoot(boolean newDoNotGenerateRoot) {
+ boolean oldDoNotGenerateRoot = doNotGenerateRoot;
+ doNotGenerateRoot = newDoNotGenerateRoot;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT,
+ oldDoNotGenerateRoot, doNotGenerateRoot));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public boolean isUseEcoreUtilDelete() {
+ return useEcoreUtilDelete;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setUseEcoreUtilDelete(boolean newUseEcoreUtilDelete) {
+ boolean oldUseEcoreUtilDelete = useEcoreUtilDelete;
+ useEcoreUtilDelete = newUseEcoreUtilDelete;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE,
+ oldUseEcoreUtilDelete, useEcoreUtilDelete));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EList<EClass> getEClassesToIgnore() {
+ if (eClassesToIgnore == null) {
+ eClassesToIgnore = new EObjectResolvingEList<EClass>(EClass.class, this,
+ ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE);
+ }
+ return eClassesToIgnore;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EList<EStructuralFeature> getEStructuralFeaturesToIgnore() {
+ if (eStructuralFeaturesToIgnore == null) {
+ eStructuralFeaturesToIgnore = new EObjectResolvingEList<EStructuralFeature>(EStructuralFeature.class, this,
+ ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE);
+ }
+ return eStructuralFeaturesToIgnore;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EList<EPackage> getEPackages() {
+ if (ePackages == null) {
+ ePackages = new EObjectResolvingEList<EPackage>(EPackage.class, this,
+ ConfigPackage.MUTATOR_CONFIG__EPACKAGES);
+ }
+ return ePackages;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Integer getMaxDeleteCount() {
+ return maxDeleteCount;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setMaxDeleteCount(Integer newMaxDeleteCount) {
+ Integer oldMaxDeleteCount = maxDeleteCount;
+ maxDeleteCount = newMaxDeleteCount;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT,
+ oldMaxDeleteCount, maxDeleteCount));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+ if (resolve)
+ return getRootEClass();
+ return basicGetRootEClass();
+ case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+ return getMinObjectsCount();
+ case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+ return isIgnoreAndLog();
+ case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+ return isDoNotGenerateRoot();
+ case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+ return isUseEcoreUtilDelete();
+ case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+ return getEClassesToIgnore();
+ case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+ return getEStructuralFeaturesToIgnore();
+ case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+ return getEPackages();
+ case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+ return getMaxDeleteCount();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+ setRootEClass((EClass) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+ setMinObjectsCount((Integer) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+ setIgnoreAndLog((Boolean) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+ setDoNotGenerateRoot((Boolean) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+ setUseEcoreUtilDelete((Boolean) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+ getEClassesToIgnore().clear();
+ getEClassesToIgnore().addAll((Collection<? extends EClass>) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+ getEStructuralFeaturesToIgnore().clear();
+ getEStructuralFeaturesToIgnore().addAll((Collection<? extends EStructuralFeature>) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+ getEPackages().clear();
+ getEPackages().addAll((Collection<? extends EPackage>) newValue);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+ setMaxDeleteCount((Integer) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+ setRootEClass((EClass) null);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+ setMinObjectsCount(MIN_OBJECTS_COUNT_EDEFAULT);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+ setIgnoreAndLog(IGNORE_AND_LOG_EDEFAULT);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+ setDoNotGenerateRoot(DO_NOT_GENERATE_ROOT_EDEFAULT);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+ setUseEcoreUtilDelete(USE_ECORE_UTIL_DELETE_EDEFAULT);
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+ getEClassesToIgnore().clear();
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+ getEStructuralFeaturesToIgnore().clear();
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+ getEPackages().clear();
+ return;
+ case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+ setMaxDeleteCount(MAX_DELETE_COUNT_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.MUTATOR_CONFIG__ROOT_ECLASS:
+ return rootEClass != null;
+ case ConfigPackage.MUTATOR_CONFIG__MIN_OBJECTS_COUNT:
+ return minObjectsCount != MIN_OBJECTS_COUNT_EDEFAULT;
+ case ConfigPackage.MUTATOR_CONFIG__IGNORE_AND_LOG:
+ return ignoreAndLog != IGNORE_AND_LOG_EDEFAULT;
+ case ConfigPackage.MUTATOR_CONFIG__DO_NOT_GENERATE_ROOT:
+ return doNotGenerateRoot != DO_NOT_GENERATE_ROOT_EDEFAULT;
+ case ConfigPackage.MUTATOR_CONFIG__USE_ECORE_UTIL_DELETE:
+ return useEcoreUtilDelete != USE_ECORE_UTIL_DELETE_EDEFAULT;
+ case ConfigPackage.MUTATOR_CONFIG__ECLASSES_TO_IGNORE:
+ return eClassesToIgnore != null && !eClassesToIgnore.isEmpty();
+ case ConfigPackage.MUTATOR_CONFIG__ESTRUCTURAL_FEATURES_TO_IGNORE:
+ return eStructuralFeaturesToIgnore != null && !eStructuralFeaturesToIgnore.isEmpty();
+ case ConfigPackage.MUTATOR_CONFIG__EPACKAGES:
+ return ePackages != null && !ePackages.isEmpty();
+ case ConfigPackage.MUTATOR_CONFIG__MAX_DELETE_COUNT:
+ return MAX_DELETE_COUNT_EDEFAULT == null ? maxDeleteCount != null : !MAX_DELETE_COUNT_EDEFAULT
+ .equals(maxDeleteCount);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy())
+ return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (minObjectsCount: ");
+ result.append(minObjectsCount);
+ result.append(", ignoreAndLog: ");
+ result.append(ignoreAndLog);
+ result.append(", doNotGenerateRoot: ");
+ result.append(doNotGenerateRoot);
+ result.append(", useEcoreUtilDelete: ");
+ result.append(useEcoreUtilDelete);
+ result.append(", maxDeleteCount: ");
+ result.append(maxDeleteCount);
+ result.append(')');
+ return result.toString();
+ }
+
+} // MutatorConfigImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/RootImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/RootImpl.java
new file mode 100644
index 0000000..194d4ac
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/RootImpl.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Root</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.RootImpl#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RootImpl extends EObjectImpl implements Root {
+ /**
+ * The cached value of the '{@link #getElements() <em>Elements</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getElements()
+ * @generated
+ * @ordered
+ */
+ protected EList<EObject> elements;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected RootImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.ROOT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EList<EObject> getElements() {
+ if (elements == null) {
+ elements = new EObjectContainmentEList<EObject>(EObject.class, this, ConfigPackage.ROOT__ELEMENTS);
+ }
+ return elements;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ConfigPackage.ROOT__ELEMENTS:
+ return ((InternalEList<?>) getElements()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.ROOT__ELEMENTS:
+ return getElements();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.ROOT__ELEMENTS:
+ getElements().clear();
+ getElements().addAll((Collection<? extends EObject>) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.ROOT__ELEMENTS:
+ getElements().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.ROOT__ELEMENTS:
+ return elements != null && !elements.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} // RootImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestConfigImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestConfigImpl.java
new file mode 100644
index 0000000..128e732
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestConfigImpl.java
@@ -0,0 +1,440 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Config</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getSeed <em>Seed</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getCount <em>Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getTestClass <em>Test Class</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getId <em>Id</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestConfigImpl#getMutatorConfig <em>Mutator Config</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestConfigImpl extends EObjectImpl implements TestConfig {
+ /**
+ * The default value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getSeed()
+ * @generated
+ * @ordered
+ */
+ protected static final long SEED_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getSeed()
+ * @generated
+ * @ordered
+ */
+ protected long seed = SEED_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getCount()
+ * @generated
+ * @ordered
+ */
+ protected static final int COUNT_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getCount()
+ * @generated
+ * @ordered
+ */
+ protected int count = COUNT_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getTestClass() <em>Test Class</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getTestClass()
+ * @generated
+ * @ordered
+ */
+ protected Class<?> testClass;
+
+ /**
+ * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected static final String ID_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected String id = ID_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getMutatorConfig() <em>Mutator Config</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getMutatorConfig()
+ * @generated
+ * @ordered
+ */
+ protected MutatorConfig mutatorConfig;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestConfigImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.TEST_CONFIG;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public long getSeed() {
+ return seed;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setSeed(long newSeed) {
+ long oldSeed = seed;
+ seed = newSeed;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__SEED, oldSeed, seed));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public int getCount() {
+ return count;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setCount(int newCount) {
+ int oldCount = count;
+ count = newCount;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__COUNT, oldCount, count));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Class<?> getTestClass() {
+ return testClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setTestClass(Class<?> newTestClass) {
+ Class<?> oldTestClass = testClass;
+ testClass = newTestClass;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__TEST_CLASS, oldTestClass,
+ testClass));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setId(String newId) {
+ String oldId = id;
+ id = newId;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__ID, oldId, id));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public MutatorConfig getMutatorConfig() {
+ return mutatorConfig;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public NotificationChain basicSetMutatorConfig(MutatorConfig newMutatorConfig, NotificationChain msgs) {
+ MutatorConfig oldMutatorConfig = mutatorConfig;
+ mutatorConfig = newMutatorConfig;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+ ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG, oldMutatorConfig, newMutatorConfig);
+ if (msgs == null)
+ msgs = notification;
+ else
+ msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setMutatorConfig(MutatorConfig newMutatorConfig) {
+ if (newMutatorConfig != mutatorConfig) {
+ NotificationChain msgs = null;
+ if (mutatorConfig != null)
+ msgs = ((InternalEObject) mutatorConfig).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG, null, msgs);
+ if (newMutatorConfig != null)
+ msgs = ((InternalEObject) newMutatorConfig).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG, null, msgs);
+ msgs = basicSetMutatorConfig(newMutatorConfig, msgs);
+ if (msgs != null)
+ msgs.dispatch();
+ } else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG,
+ newMutatorConfig, newMutatorConfig));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+ return basicSetMutatorConfig(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.TEST_CONFIG__SEED:
+ return getSeed();
+ case ConfigPackage.TEST_CONFIG__COUNT:
+ return getCount();
+ case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+ return getTestClass();
+ case ConfigPackage.TEST_CONFIG__ID:
+ return getId();
+ case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+ return getMutatorConfig();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.TEST_CONFIG__SEED:
+ setSeed((Long) newValue);
+ return;
+ case ConfigPackage.TEST_CONFIG__COUNT:
+ setCount((Integer) newValue);
+ return;
+ case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+ setTestClass((Class<?>) newValue);
+ return;
+ case ConfigPackage.TEST_CONFIG__ID:
+ setId((String) newValue);
+ return;
+ case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+ setMutatorConfig((MutatorConfig) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_CONFIG__SEED:
+ setSeed(SEED_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_CONFIG__COUNT:
+ setCount(COUNT_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+ setTestClass((Class<?>) null);
+ return;
+ case ConfigPackage.TEST_CONFIG__ID:
+ setId(ID_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+ setMutatorConfig((MutatorConfig) null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_CONFIG__SEED:
+ return seed != SEED_EDEFAULT;
+ case ConfigPackage.TEST_CONFIG__COUNT:
+ return count != COUNT_EDEFAULT;
+ case ConfigPackage.TEST_CONFIG__TEST_CLASS:
+ return testClass != null;
+ case ConfigPackage.TEST_CONFIG__ID:
+ return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
+ case ConfigPackage.TEST_CONFIG__MUTATOR_CONFIG:
+ return mutatorConfig != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy())
+ return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (seed: ");
+ result.append(seed);
+ result.append(", count: ");
+ result.append(count);
+ result.append(", testClass: ");
+ result.append(testClass);
+ result.append(", id: ");
+ result.append(id);
+ result.append(')');
+ return result.toString();
+ }
+
+} // TestConfigImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestDiffImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestDiffImpl.java
new file mode 100644
index 0000000..1151ab1
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestDiffImpl.java
@@ -0,0 +1,423 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import java.util.Date;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Diff</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getLastUpdate <em>Last Update</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getOldResult <em>Old Result</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestDiffImpl#getNewResult <em>New Result</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestDiffImpl extends EObjectImpl implements TestDiff {
+ /**
+ * The default value of the '{@link #getLastUpdate() <em>Last Update</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getLastUpdate()
+ * @generated
+ * @ordered
+ */
+ protected static final Date LAST_UPDATE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLastUpdate() <em>Last Update</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getLastUpdate()
+ * @generated
+ * @ordered
+ */
+ protected Date lastUpdate = LAST_UPDATE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getConfig() <em>Config</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getConfig()
+ * @generated
+ * @ordered
+ */
+ protected TestConfig config;
+
+ /**
+ * The cached value of the '{@link #getOldResult() <em>Old Result</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getOldResult()
+ * @generated
+ * @ordered
+ */
+ protected TestResult oldResult;
+
+ /**
+ * The cached value of the '{@link #getNewResult() <em>New Result</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getNewResult()
+ * @generated
+ * @ordered
+ */
+ protected TestResult newResult;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestDiffImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.TEST_DIFF;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Date getLastUpdate() {
+ return lastUpdate;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setLastUpdate(Date newLastUpdate) {
+ Date oldLastUpdate = lastUpdate;
+ lastUpdate = newLastUpdate;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__LAST_UPDATE, oldLastUpdate,
+ lastUpdate));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestConfig getConfig() {
+ if (config != null && config.eIsProxy()) {
+ InternalEObject oldConfig = (InternalEObject) config;
+ config = (TestConfig) eResolveProxy(oldConfig);
+ if (config != oldConfig) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ConfigPackage.TEST_DIFF__CONFIG,
+ oldConfig, config));
+ }
+ }
+ return config;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestConfig basicGetConfig() {
+ return config;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setConfig(TestConfig newConfig) {
+ TestConfig oldConfig = config;
+ config = newConfig;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__CONFIG, oldConfig, config));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestResult getOldResult() {
+ return oldResult;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public NotificationChain basicSetOldResult(TestResult newOldResult, NotificationChain msgs) {
+ TestResult oldOldResult = oldResult;
+ oldResult = newOldResult;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+ ConfigPackage.TEST_DIFF__OLD_RESULT, oldOldResult, newOldResult);
+ if (msgs == null)
+ msgs = notification;
+ else
+ msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setOldResult(TestResult newOldResult) {
+ if (newOldResult != oldResult) {
+ NotificationChain msgs = null;
+ if (oldResult != null)
+ msgs = ((InternalEObject) oldResult).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_DIFF__OLD_RESULT, null, msgs);
+ if (newOldResult != null)
+ msgs = ((InternalEObject) newOldResult).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_DIFF__OLD_RESULT, null, msgs);
+ msgs = basicSetOldResult(newOldResult, msgs);
+ if (msgs != null)
+ msgs.dispatch();
+ } else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__OLD_RESULT, newOldResult,
+ newOldResult));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestResult getNewResult() {
+ return newResult;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public NotificationChain basicSetNewResult(TestResult newNewResult, NotificationChain msgs) {
+ TestResult oldNewResult = newResult;
+ newResult = newNewResult;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+ ConfigPackage.TEST_DIFF__NEW_RESULT, oldNewResult, newNewResult);
+ if (msgs == null)
+ msgs = notification;
+ else
+ msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setNewResult(TestResult newNewResult) {
+ if (newNewResult != newResult) {
+ NotificationChain msgs = null;
+ if (newResult != null)
+ msgs = ((InternalEObject) newResult).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_DIFF__NEW_RESULT, null, msgs);
+ if (newNewResult != null)
+ msgs = ((InternalEObject) newNewResult).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_DIFF__NEW_RESULT, null, msgs);
+ msgs = basicSetNewResult(newNewResult, msgs);
+ if (msgs != null)
+ msgs.dispatch();
+ } else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_DIFF__NEW_RESULT, newNewResult,
+ newNewResult));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ConfigPackage.TEST_DIFF__OLD_RESULT:
+ return basicSetOldResult(null, msgs);
+ case ConfigPackage.TEST_DIFF__NEW_RESULT:
+ return basicSetNewResult(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+ return getLastUpdate();
+ case ConfigPackage.TEST_DIFF__CONFIG:
+ if (resolve)
+ return getConfig();
+ return basicGetConfig();
+ case ConfigPackage.TEST_DIFF__OLD_RESULT:
+ return getOldResult();
+ case ConfigPackage.TEST_DIFF__NEW_RESULT:
+ return getNewResult();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+ setLastUpdate((Date) newValue);
+ return;
+ case ConfigPackage.TEST_DIFF__CONFIG:
+ setConfig((TestConfig) newValue);
+ return;
+ case ConfigPackage.TEST_DIFF__OLD_RESULT:
+ setOldResult((TestResult) newValue);
+ return;
+ case ConfigPackage.TEST_DIFF__NEW_RESULT:
+ setNewResult((TestResult) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+ setLastUpdate(LAST_UPDATE_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_DIFF__CONFIG:
+ setConfig((TestConfig) null);
+ return;
+ case ConfigPackage.TEST_DIFF__OLD_RESULT:
+ setOldResult((TestResult) null);
+ return;
+ case ConfigPackage.TEST_DIFF__NEW_RESULT:
+ setNewResult((TestResult) null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_DIFF__LAST_UPDATE:
+ return LAST_UPDATE_EDEFAULT == null ? lastUpdate != null : !LAST_UPDATE_EDEFAULT.equals(lastUpdate);
+ case ConfigPackage.TEST_DIFF__CONFIG:
+ return config != null;
+ case ConfigPackage.TEST_DIFF__OLD_RESULT:
+ return oldResult != null;
+ case ConfigPackage.TEST_DIFF__NEW_RESULT:
+ return newResult != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy())
+ return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (lastUpdate: ");
+ result.append(lastUpdate);
+ result.append(')');
+ return result.toString();
+ }
+
+} // TestDiffImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestResultImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestResultImpl.java
new file mode 100644
index 0000000..2552221
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestResultImpl.java
@@ -0,0 +1,419 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Result</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getSeedCount <em>Seed Count</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getTestName <em>Test Name</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getError <em>Error</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getFailure <em>Failure</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestResultImpl#getExecutionTime <em>Execution Time</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestResultImpl extends EObjectImpl implements TestResult {
+ /**
+ * The default value of the '{@link #getSeedCount() <em>Seed Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getSeedCount()
+ * @generated
+ * @ordered
+ */
+ protected static final int SEED_COUNT_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getSeedCount() <em>Seed Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getSeedCount()
+ * @generated
+ * @ordered
+ */
+ protected int seedCount = SEED_COUNT_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getTestName() <em>Test Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getTestName()
+ * @generated
+ * @ordered
+ */
+ protected static final String TEST_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getTestName() <em>Test Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getTestName()
+ * @generated
+ * @ordered
+ */
+ protected String testName = TEST_NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getError() <em>Error</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getError()
+ * @generated
+ * @ordered
+ */
+ protected static final String ERROR_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getError() <em>Error</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getError()
+ * @generated
+ * @ordered
+ */
+ protected String error = ERROR_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getFailure() <em>Failure</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getFailure()
+ * @generated
+ * @ordered
+ */
+ protected static final String FAILURE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getFailure() <em>Failure</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getFailure()
+ * @generated
+ * @ordered
+ */
+ protected String failure = FAILURE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getExecutionTime() <em>Execution Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getExecutionTime()
+ * @generated
+ * @ordered
+ */
+ protected static final long EXECUTION_TIME_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getExecutionTime() <em>Execution Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getExecutionTime()
+ * @generated
+ * @ordered
+ */
+ protected long executionTime = EXECUTION_TIME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestResultImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.TEST_RESULT;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public int getSeedCount() {
+ return seedCount;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setSeedCount(int newSeedCount) {
+ int oldSeedCount = seedCount;
+ seedCount = newSeedCount;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__SEED_COUNT, oldSeedCount,
+ seedCount));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getTestName() {
+ return testName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setTestName(String newTestName) {
+ String oldTestName = testName;
+ testName = newTestName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__TEST_NAME, oldTestName,
+ testName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getError() {
+ return error;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setError(String newError) {
+ String oldError = error;
+ error = newError;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__ERROR, oldError, error));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getFailure() {
+ return failure;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setFailure(String newFailure) {
+ String oldFailure = failure;
+ failure = newFailure;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__FAILURE, oldFailure,
+ failure));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public long getExecutionTime() {
+ return executionTime;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setExecutionTime(long newExecutionTime) {
+ long oldExecutionTime = executionTime;
+ executionTime = newExecutionTime;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RESULT__EXECUTION_TIME,
+ oldExecutionTime, executionTime));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RESULT__SEED_COUNT:
+ return getSeedCount();
+ case ConfigPackage.TEST_RESULT__TEST_NAME:
+ return getTestName();
+ case ConfigPackage.TEST_RESULT__ERROR:
+ return getError();
+ case ConfigPackage.TEST_RESULT__FAILURE:
+ return getFailure();
+ case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+ return getExecutionTime();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RESULT__SEED_COUNT:
+ setSeedCount((Integer) newValue);
+ return;
+ case ConfigPackage.TEST_RESULT__TEST_NAME:
+ setTestName((String) newValue);
+ return;
+ case ConfigPackage.TEST_RESULT__ERROR:
+ setError((String) newValue);
+ return;
+ case ConfigPackage.TEST_RESULT__FAILURE:
+ setFailure((String) newValue);
+ return;
+ case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+ setExecutionTime((Long) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RESULT__SEED_COUNT:
+ setSeedCount(SEED_COUNT_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_RESULT__TEST_NAME:
+ setTestName(TEST_NAME_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_RESULT__ERROR:
+ setError(ERROR_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_RESULT__FAILURE:
+ setFailure(FAILURE_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+ setExecutionTime(EXECUTION_TIME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RESULT__SEED_COUNT:
+ return seedCount != SEED_COUNT_EDEFAULT;
+ case ConfigPackage.TEST_RESULT__TEST_NAME:
+ return TEST_NAME_EDEFAULT == null ? testName != null : !TEST_NAME_EDEFAULT.equals(testName);
+ case ConfigPackage.TEST_RESULT__ERROR:
+ return ERROR_EDEFAULT == null ? error != null : !ERROR_EDEFAULT.equals(error);
+ case ConfigPackage.TEST_RESULT__FAILURE:
+ return FAILURE_EDEFAULT == null ? failure != null : !FAILURE_EDEFAULT.equals(failure);
+ case ConfigPackage.TEST_RESULT__EXECUTION_TIME:
+ return executionTime != EXECUTION_TIME_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy())
+ return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (seedCount: ");
+ result.append(seedCount);
+ result.append(", testName: ");
+ result.append(testName);
+ result.append(", error: ");
+ result.append(error);
+ result.append(", failure: ");
+ result.append(failure);
+ result.append(", executionTime: ");
+ result.append(executionTime);
+ result.append(')');
+ return result.toString();
+ }
+
+} // TestResultImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestRunImpl.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestRunImpl.java
new file mode 100644
index 0000000..9414427
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/impl/TestRunImpl.java
@@ -0,0 +1,323 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.impl;
+
+import java.util.Collection;
+import java.util.Date;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Run</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl#getConfig <em>Config</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl#getTime <em>Time</em>}</li>
+ * <li>{@link org.eclipse.emf.emfstore.fuzzy.emf.config.impl.TestRunImpl#getResults <em>Results</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestRunImpl extends EObjectImpl implements TestRun {
+ /**
+ * The cached value of the '{@link #getConfig() <em>Config</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getConfig()
+ * @generated
+ * @ordered
+ */
+ protected TestConfig config;
+
+ /**
+ * The default value of the '{@link #getTime() <em>Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getTime()
+ * @generated
+ * @ordered
+ */
+ protected static final Date TIME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getTime() <em>Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getTime()
+ * @generated
+ * @ordered
+ */
+ protected Date time = TIME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getResults() <em>Results</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getResults()
+ * @generated
+ * @ordered
+ */
+ protected EList<TestResult> results;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TestRunImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ConfigPackage.Literals.TEST_RUN;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public TestConfig getConfig() {
+ return config;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public NotificationChain basicSetConfig(TestConfig newConfig, NotificationChain msgs) {
+ TestConfig oldConfig = config;
+ config = newConfig;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+ ConfigPackage.TEST_RUN__CONFIG, oldConfig, newConfig);
+ if (msgs == null)
+ msgs = notification;
+ else
+ msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setConfig(TestConfig newConfig) {
+ if (newConfig != config) {
+ NotificationChain msgs = null;
+ if (config != null)
+ msgs = ((InternalEObject) config).eInverseRemove(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_RUN__CONFIG, null, msgs);
+ if (newConfig != null)
+ msgs = ((InternalEObject) newConfig).eInverseAdd(this, EOPPOSITE_FEATURE_BASE
+ - ConfigPackage.TEST_RUN__CONFIG, null, msgs);
+ msgs = basicSetConfig(newConfig, msgs);
+ if (msgs != null)
+ msgs.dispatch();
+ } else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RUN__CONFIG, newConfig, newConfig));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Date getTime() {
+ return time;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setTime(Date newTime) {
+ Date oldTime = time;
+ time = newTime;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ConfigPackage.TEST_RUN__TIME, oldTime, time));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EList<TestResult> getResults() {
+ if (results == null) {
+ results = new EObjectContainmentEList<TestResult>(TestResult.class, this, ConfigPackage.TEST_RUN__RESULTS);
+ }
+ return results;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RUN__CONFIG:
+ return basicSetConfig(null, msgs);
+ case ConfigPackage.TEST_RUN__RESULTS:
+ return ((InternalEList<?>) getResults()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RUN__CONFIG:
+ return getConfig();
+ case ConfigPackage.TEST_RUN__TIME:
+ return getTime();
+ case ConfigPackage.TEST_RUN__RESULTS:
+ return getResults();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RUN__CONFIG:
+ setConfig((TestConfig) newValue);
+ return;
+ case ConfigPackage.TEST_RUN__TIME:
+ setTime((Date) newValue);
+ return;
+ case ConfigPackage.TEST_RUN__RESULTS:
+ getResults().clear();
+ getResults().addAll((Collection<? extends TestResult>) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RUN__CONFIG:
+ setConfig((TestConfig) null);
+ return;
+ case ConfigPackage.TEST_RUN__TIME:
+ setTime(TIME_EDEFAULT);
+ return;
+ case ConfigPackage.TEST_RUN__RESULTS:
+ getResults().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ConfigPackage.TEST_RUN__CONFIG:
+ return config != null;
+ case ConfigPackage.TEST_RUN__TIME:
+ return TIME_EDEFAULT == null ? time != null : !TIME_EDEFAULT.equals(time);
+ case ConfigPackage.TEST_RUN__RESULTS:
+ return results != null && !results.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy())
+ return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (time: ");
+ result.append(time);
+ result.append(')');
+ return result.toString();
+ }
+
+} // TestRunImpl
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigAdapterFactory.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigAdapterFactory.java
new file mode 100644
index 0000000..67ddb3c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigAdapterFactory.java
@@ -0,0 +1,267 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage
+ * @generated
+ */
+public class ConfigAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected static ConfigPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ConfigPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance
+ * object of the model.
+ * <!-- end-user-doc -->
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject) object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ConfigSwitch<Adapter> modelSwitch = new ConfigSwitch<Adapter>() {
+ @Override
+ public Adapter caseTestConfig(TestConfig object) {
+ return createTestConfigAdapter();
+ }
+
+ @Override
+ public Adapter caseTestRun(TestRun object) {
+ return createTestRunAdapter();
+ }
+
+ @Override
+ public Adapter caseTestResult(TestResult object) {
+ return createTestResultAdapter();
+ }
+
+ @Override
+ public Adapter caseTestDiff(TestDiff object) {
+ return createTestDiffAdapter();
+ }
+
+ @Override
+ public Adapter caseDiffReport(DiffReport object) {
+ return createDiffReportAdapter();
+ }
+
+ @Override
+ public Adapter caseRoot(Root object) {
+ return createRootAdapter();
+ }
+
+ @Override
+ public Adapter caseMutatorConfig(MutatorConfig object) {
+ return createMutatorConfigAdapter();
+ }
+
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject) target);
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+ * <em>Test Config</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig
+ * @generated
+ */
+ public Adapter createTestConfigAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun
+ * <em>Test Run</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun
+ * @generated
+ */
+ public Adapter createTestRunAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+ * <em>Test Result</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult
+ * @generated
+ */
+ public Adapter createTestResultAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff
+ * <em>Test Diff</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff
+ * @generated
+ */
+ public Adapter createTestDiffAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+ * <em>Diff Report</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport
+ * @generated
+ */
+ public Adapter createDiffReportAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.Root
+ * <em>Root</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.Root
+ * @generated
+ */
+ public Adapter createRootAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+ * <em>Mutator Config</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig
+ * @generated
+ */
+ public Adapter createMutatorConfigAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} // ConfigAdapterFactory
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigSwitch.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigSwitch.java
new file mode 100644
index 0000000..da2a386
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/config/util/ConfigSwitch.java
@@ -0,0 +1,287 @@
+/**
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ */
+package org.eclipse.emf.emfstore.fuzzy.emf.config.util;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.MutatorConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.Root;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)} to invoke the <code>caseXXX</code> method for each
+ * class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigPackage
+ * @generated
+ */
+public class ConfigSwitch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected static ConfigPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ConfigSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ConfigPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that
+ * result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ public T doSwitch(EObject theEObject) {
+ return doSwitch(theEObject.eClass(), theEObject);
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that
+ * result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ protected T doSwitch(EClass theEClass, EObject theEObject) {
+ if (theEClass.eContainer() == modelPackage) {
+ return doSwitch(theEClass.getClassifierID(), theEObject);
+ } else {
+ List<EClass> eSuperTypes = theEClass.getESuperTypes();
+ return eSuperTypes.isEmpty() ? defaultCase(theEObject) : doSwitch(eSuperTypes.get(0), theEObject);
+ }
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that
+ * result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ConfigPackage.TEST_CONFIG: {
+ TestConfig testConfig = (TestConfig) theEObject;
+ T result = caseTestConfig(testConfig);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ case ConfigPackage.TEST_RUN: {
+ TestRun testRun = (TestRun) theEObject;
+ T result = caseTestRun(testRun);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ case ConfigPackage.TEST_RESULT: {
+ TestResult testResult = (TestResult) theEObject;
+ T result = caseTestResult(testResult);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ case ConfigPackage.TEST_DIFF: {
+ TestDiff testDiff = (TestDiff) theEObject;
+ T result = caseTestDiff(testDiff);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ case ConfigPackage.DIFF_REPORT: {
+ DiffReport diffReport = (DiffReport) theEObject;
+ T result = caseDiffReport(diffReport);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ case ConfigPackage.ROOT: {
+ Root root = (Root) theEObject;
+ T result = caseRoot(root);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ case ConfigPackage.MUTATOR_CONFIG: {
+ MutatorConfig mutatorConfig = (MutatorConfig) theEObject;
+ T result = caseMutatorConfig(mutatorConfig);
+ if (result == null)
+ result = defaultCase(theEObject);
+ return result;
+ }
+ default:
+ return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Test Config</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Test Config</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTestConfig(TestConfig object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Test Run</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Test Run</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTestRun(TestRun object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Test Result</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Test Result</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTestResult(TestResult object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Test Diff</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Test Diff</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTestDiff(TestDiff object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Diff Report</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Diff Report</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseDiffReport(DiffReport object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Root</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Root</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRoot(Root object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Mutator Config</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Mutator Config</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMutatorConfig(MutatorConfig object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} // ConfigSwitch
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java
new file mode 100644
index 0000000..5d86204
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/CreateAllDiffs.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.diff;
+
+import java.io.IOException;
+
+import org.dom4j.DocumentException;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+import org.junit.Test;
+
+/**
+ * Class used as junit plugin test to create {@link org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport}s from an
+ * {@link TestRunProvider}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class CreateAllDiffs {
+
+ private static final String CREATE_DIFFS = "createDiffs";
+
+ /**
+ * Creates all {@link org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff}s from an {@link TestRunProvider}.
+ */
+ @Test
+ public void createAllDiffs() {
+
+ if(!Boolean.parseBoolean(System.getProperty(CREATE_DIFFS))){
+ return;
+ }
+
+ DiffGenerator diffGenerator = new DiffGenerator();
+
+ try {
+ HudsonTestRunProvider runProvider = new HudsonTestRunProvider();
+ for (TestConfig config : runProvider.getAllConfigs()) {
+ runProvider.setConfig(config);
+ TestRun[] runs = runProvider.getTestRuns();
+ diffGenerator.createDiff(runs[0], runs[1]);
+ }
+ } catch (DocumentException e) {
+ throw new RuntimeException("Could not create diffs.", e);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not create diffs.", e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/DiffGenerator.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/DiffGenerator.java
new file mode 100644
index 0000000..f49a991
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/DiffGenerator.java
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.diff;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.FuzzyUtil;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.ConfigFactory;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.DiffReport;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestDiff;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestResult;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * Generates {@link TestDiff}s out of {@link TestRun}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class DiffGenerator {
+
+ private DiffReport diffReport;
+
+ private Resource diffResource;
+
+ /**
+ * A {@link DiffGenerator} with the standard diff file {@link FuzzyUtil#DIFF_FILE}.
+ */
+ public DiffGenerator() {
+ this(FuzzyUtil.DIFF_FILE);
+ }
+
+ /**
+ * A {@link DiffGenerator} with using the diffPath.
+ *
+ * @param diffPath The path to the Diff file.
+ */
+ public DiffGenerator(String diffPath) {
+ this(FuzzyUtil.createResource(diffPath));
+ }
+
+ /**
+ * A {@link DiffGenerator} using the diffResource.
+ *
+ * @param diffResource The resource to use for the diff.
+ */
+ public DiffGenerator(Resource diffResource) {
+ this.diffResource = diffResource;
+
+ if (FuzzyUtil.resourceExists(diffResource)) {
+ try {
+ diffResource.load(null);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not load resource: " + diffResource.getURI(), e);
+ }
+ }
+
+ diffReport = getDiffReport(diffResource);
+ }
+
+ /**
+ * Create a diff from two {@link TestRun}s.
+ *
+ * @param firstRun The first {@link TestRun}.
+ * @param secondRun The second {@link TestRun}.
+ * @throws IOException If there is a saving/loading failure with resources.
+ */
+ public void createDiff(TestRun firstRun, TestRun secondRun) throws IOException {
+
+ TestConfig config = firstRun.getConfig();
+
+ // check if it already contains the config
+ boolean containsConfig = false;
+ // create map containing existing diffs
+ // identified through testname + seedcount (e.g. test1)
+ Map<String, TestDiff> existingDiffs = new HashMap<String, TestDiff>();
+ List<TestDiff> diffs = diffReport.getDiffs();
+ for (TestDiff diff : diffs) {
+
+ // add existing diffs
+ TestResult result = FuzzyUtil.getValidTestResult(diff);
+ existingDiffs.put(getResultIdentifier(result), diff);
+
+ // check for configs
+ if ((!containsConfig) && (diff.getConfig().getId().equals(config.getId()))) {
+ containsConfig = true;
+ config = diff.getConfig();
+ }
+ }
+
+ // if the resource does not contain the config already add it
+ if (!containsConfig) {
+ diffResource.getContents().add(config);
+ }
+
+ // create diffs for the two testruns
+ checkForDiffs(firstRun.getResults(), secondRun.getResults(), config, existingDiffs);
+ checkForDiffs(secondRun.getResults(), firstRun.getResults(), config, existingDiffs);
+
+ diffResource.getContents().add(diffReport);
+ diffResource.save(null);
+ }
+
+ private void checkForDiffs(List<TestResult> firstResults, List<TestResult> secondResults, TestConfig config,
+ Map<String, TestDiff> existingDiffs) {
+ EList<TestDiff> diffs = diffReport.getDiffs();
+ for (TestResult result : new ArrayList<TestResult>(firstResults)) {
+ TestResult corrResult = getCorrespondingTestResult(result, secondResults);
+
+ TestDiff diff = getChangedTestDiff(result, corrResult);
+ if (diff != null) {
+ diff.setConfig(config);
+
+ // remove diff if it already contains it
+ diffs.remove(existingDiffs.get(getResultIdentifier(result)));
+ diffs.add(diff);
+ }
+ }
+ }
+
+ private static String getResultIdentifier(TestResult result) {
+ return result.getTestName() + result.getSeedCount();
+ }
+
+ private static TestDiff getChangedTestDiff(TestResult fRes, TestResult sRes) {
+ boolean changed = false;
+
+ // check if a state switch occured
+ // TODO test state switches
+ if (fRes == null || sRes == null) {
+ changed = true;
+ } else if (changed(fRes.getFailure(), sRes.getFailure())) {
+ changed = true;
+ } else if (changed(fRes.getError(), sRes.getError())) {
+ changed = true;
+ } else if (fRes.getFailure() != null && sRes.getError() != null) {
+ changed = true;
+ } else if (fRes.getError() != null && sRes.getFailure() != null) {
+ changed = true;
+ }
+
+ // if it changed, create a new TestDiff
+ if (changed) {
+ return createTestDiff(fRes, sRes);
+ }
+
+ return null;
+ }
+
+ private static boolean changed(Object o1, Object o2) {
+ if (o1 == null && o2 != null) {
+ return true;
+ }
+ if (o1 != null && o2 == null) {
+ return true;
+ }
+ return false;
+ }
+
+ private static TestDiff createTestDiff(TestResult fRes, TestResult sRes) {
+ TestDiff diff = ConfigFactory.eINSTANCE.createTestDiff();
+ diff.setLastUpdate(new Date(System.currentTimeMillis()));
+ diff.setOldResult(fRes);
+ diff.setNewResult(sRes);
+ return diff;
+ }
+
+ private static TestResult getCorrespondingTestResult(TestResult result, List<TestResult> results) {
+ for (TestResult res : results) {
+ if (res.getSeedCount() == result.getSeedCount() && res.getTestName().equals(result.getTestName())) {
+ return res;
+ }
+ }
+ return null;
+ }
+
+ private static DiffReport getDiffReport(Resource resource) {
+ for (EObject obj : resource.getContents()) {
+ if (obj instanceof DiffReport) {
+ return (DiffReport) obj;
+ }
+ }
+ return ConfigFactory.eINSTANCE.createDiffReport();
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/FileTestRunProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/FileTestRunProvider.java
new file mode 100644
index 0000000..26263f4
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/FileTestRunProvider.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.diff;
+
+import java.io.IOException;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.FuzzyUtil;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * A {@link TestRunProvider} reading the infos out of files.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class FileTestRunProvider extends TestRunProvider {
+
+ @Override
+ public TestRun[] getTestRuns() throws IOException {
+
+ Resource run1Resource = FuzzyUtil.createResource("file://D:/downloads/1.xml");
+ Resource run2Resource = FuzzyUtil.createResource("file://D:/downloads/2.xml");
+
+ if (FuzzyUtil.resourceExists(run1Resource)) {
+ run1Resource.load(null);
+ }
+ if (FuzzyUtil.resourceExists(run2Resource)) {
+ run2Resource.load(null);
+ }
+
+ return new TestRun[] { getTestRun(run1Resource), getTestRun(run2Resource) };
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/HudsonTestRunProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/HudsonTestRunProvider.java
new file mode 100644
index 0000000..0fb4fc0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/HudsonTestRunProvider.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.diff;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.FuzzyUtil;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * An implementation of {@link TestRunProvider} to provide {@link TestRun}s created by the CI-Server Hudson.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class HudsonTestRunProvider extends TestRunProvider {
+
+ private static final String JOB = "job/";
+
+ private static SAXReader saxReader = new SAXReader();
+
+ private String hudsonUrl;
+
+ private static String jobUrl;
+
+ private int firstBuildNumber;
+
+ private int secondBuildNumber;
+
+ /**
+ * The prefix for hudson peroperties.
+ */
+ public static final String PROP_HUDSON = ".hudson";
+
+ /**
+ * The hudson url property.
+ */
+ public static final String PROP_URL = ".url";
+
+ /**
+ * The hudson artifact folder property.
+ */
+ public static final String PROP_ARTIFACT_FOLDER = ".artifact.folder";
+
+ /**
+ * The hudson port property.
+ */
+ public static final String PROP_PORT = ".port";
+
+ /**
+ * The name of the hudson job property.
+ */
+ public static final String PROP_JOB = ".job";
+
+ /**
+ * The property of the hudson diff job.
+ */
+ public static final String PROP_DIFF_JOB = ".diffjob";
+
+ private static final String LAST_BUILD = "lastBuild";
+
+ /**
+ * An array containing all valid states of a hudson build. Valid means it can be used for creating diffs.
+ */
+ public static final String[] VALID_STATES = new String[] { "SUCCESS", "UNSTABLE" };
+
+ private static final String ARTIFACT = FuzzyUtil.getProperty(PROP_HUDSON + PROP_ARTIFACT_FOLDER, "/artifact/");
+
+ /**
+ * Standard constructor using the last build and the build before the last build for reading testruns.
+ *
+ * @throws DocumentException If it cannot read the buildnumbers correctly from hudson.
+ * @throws IOException If it cannot read the buildnumbers correctly from hudson.
+ */
+ public HudsonTestRunProvider() throws DocumentException, IOException {
+ initProperties();
+
+ firstBuildNumber = getLastValidBuildNumber(
+ Integer.parseInt(getFirstElementValue(jobUrl + LAST_BUILD + "/api/xml?tree=number")), jobUrl);
+ secondBuildNumber = getLastValidBuildNumber(firstBuildNumber - 1, jobUrl);
+ }
+
+ /**
+ * Constructor using tow special numbers for testruns.
+ *
+ * @param firstBuildNumber The number of the first build (first from the last one backwards, so it is later than the
+ * second one).
+ * @param secondBuildNumber The number of the second build.
+ */
+ public HudsonTestRunProvider(int firstBuildNumber, int secondBuildNumber) {
+ initProperties();
+
+ this.firstBuildNumber = firstBuildNumber;
+ this.secondBuildNumber = secondBuildNumber;
+ }
+
+ private void initProperties() {
+ hudsonUrl = getHudsonUrl();
+ jobUrl = hudsonUrl + JOB + FuzzyUtil.getProperty(PROP_HUDSON + PROP_JOB, "Explorer") + "/";
+ }
+
+ private static String getHudsonUrl() {
+ String port = FuzzyUtil.getProperty(PROP_HUDSON + PROP_PORT, null);
+ return FuzzyUtil.getProperty(PROP_HUDSON + PROP_URL, "http://localhost") + (port != null ? (":" + port) : "")
+ + "/";
+ }
+
+ private static int getLastValidBuildNumber(int maxBuildNumber, String jobUrl) throws MalformedURLException,
+ DocumentException {
+ if (maxBuildNumber < 0) {
+ throw new RuntimeException("There are not enough valid builds till now!");
+ }
+ if (isValidBuild(maxBuildNumber, jobUrl)) {
+ return maxBuildNumber;
+ } else {
+ return getLastValidBuildNumber(maxBuildNumber - 1, jobUrl);
+ }
+ }
+
+ private static boolean isValidBuild(int buildNumber, String jobUrl) throws MalformedURLException, DocumentException {
+ String result = getFirstElementValue(jobUrl + buildNumber + "/api/xml?tree=result");
+ for (String valid : VALID_STATES) {
+ if (valid.equals(result)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static String getFirstElementValue(String url) throws MalformedURLException, DocumentException {
+ Document doc = saxReader.read(new URL(url));
+ List<Element> elements = doc.getRootElement().elements();
+ if (elements.size() == 0) {
+ throw new RuntimeException("There are no elements in the result of the url: " + url);
+ }
+ return elements.get(0).getText();
+ }
+
+ @Override
+ public TestRun[] getTestRuns() throws IOException {
+
+ TestRun[] runs = new TestRun[2];
+
+ Resource resource = getTestRunResource(firstBuildNumber);
+ if (!FuzzyUtil.resourceExists(resource)) {
+ throw new RuntimeException("No TestRun file for first run!");
+ }
+ resource.load(null);
+
+ runs[0] = getTestRun(resource);
+
+ resource = getTestRunResource(secondBuildNumber);
+ if (!FuzzyUtil.resourceExists(resource)) {
+ throw new RuntimeException("No TestRun file for second run!");
+ }
+ resource.load(null);
+
+ runs[1] = getTestRun(resource);
+
+ return runs;
+ }
+
+ private Resource getTestRunResource(int buildNumber) {
+ return FuzzyUtil.createResource(jobUrl + buildNumber + ARTIFACT + FuzzyUtil.FUZZY_FOLDER + FuzzyUtil.RUN_FOLDER
+ + getTestConfig().getId() + FuzzyUtil.FILE_SUFFIX);
+ }
+
+ /**
+ * @return All {@link TestConfig} which are loadable via this {@link HudsonTestRunProvider}.
+ */
+ public List<TestConfig> getAllConfigs() {
+ Resource resource = FuzzyUtil.createResource(jobUrl + firstBuildNumber + ARTIFACT + FuzzyUtil.FUZZY_FOLDER
+ + FuzzyUtil.TEST_CONFIG_FILE);
+ try {
+ resource.load(null);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not load configs file!", e);
+ }
+ List<TestConfig> configs = new ArrayList<TestConfig>();
+ for (EObject obj : resource.getContents()) {
+ if (obj instanceof TestConfig) {
+ configs.add((TestConfig) obj);
+ }
+ }
+ return configs;
+ }
+
+ /**
+ * @return The diff resource created by hudson.
+ * @throws DocumentException
+ * in case an error occurs during obtainment of the resource.
+ * @throws MalformedURLException
+ * in case an error occurs during obtainment of the resource.
+ */
+ public static Resource getDiffResource() throws MalformedURLException, DocumentException {
+ String diffJobUrl = getHudsonUrl() + JOB + FuzzyUtil.getProperty(PROP_HUDSON + PROP_DIFF_JOB, "Diff") + "/";
+ int lastValidNumber = getLastValidBuildNumber(
+ Integer.parseInt(getFirstElementValue(diffJobUrl + LAST_BUILD + "/api/xml?tree=number")), diffJobUrl);
+ return FuzzyUtil.createResource(diffJobUrl + lastValidNumber + ARTIFACT + FuzzyUtil.FUZZY_FOLDER + "diff"
+ + FuzzyUtil.FILE_SUFFIX);
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/TestRunProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/TestRunProvider.java
new file mode 100644
index 0000000..c745b5c
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy.emf/src/org/eclipse/emf/emfstore/fuzzy/emf/diff/TestRunProvider.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy.emf.diff;
+
+import java.io.IOException;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestConfig;
+import org.eclipse.emf.emfstore.fuzzy.emf.config.TestRun;
+
+/**
+ * Abstract TestRunProvider to provide the {@link TestRun}s needed in the {@link DiffGenerator}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public abstract class TestRunProvider {
+
+ /**
+ * The config for which to provide testruns.
+ */
+ private TestConfig config;
+
+ /**
+ * @return The two {@link TestRun}s specified by the config and this provider.
+ * @throws IOException If there is an error reading the {@link TestRun}s.
+ */
+ public abstract TestRun[] getTestRuns() throws IOException;
+
+ /**
+ * @param config The new {@link TestConfig} to use.
+ */
+ public void setConfig(TestConfig config) {
+ this.config = config;
+ }
+
+ /**
+ * @param resource The {@link Resource} where to get a {@link TestRun} out.
+ * @return The {@link TestRun} out of the {@link Resource}.
+ */
+ protected TestRun getTestRun(Resource resource) {
+ for (EObject obj : resource.getContents()) {
+ if (obj instanceof TestRun) {
+ return (TestRun) obj;
+ }
+ }
+ throw new RuntimeException("Could not load TestRuns from config!");
+ }
+
+ /**
+ * @return The current {@link TestConfig}.
+ */
+ protected TestConfig getTestConfig() {
+ return config;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.classpath b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.project b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.project
new file mode 100644
index 0000000..3724be2
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.emf.emfstore.fuzzy</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+ </natures>
+</projectDescription>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.settings/org.eclipse.jdt.core.prefs b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..15b8456
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Fuzzy JUnit Testing Framework (Incubation)
+Bundle-SymbolicName: org.eclipse.emf.emfstore.fuzzy;singleton:=true
+Bundle-Version: 0.9.3.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Localization: plugin
+Export-Package: org.eclipse.emf.emfstore.fuzzy
+Require-Bundle: org.junit4;bundle-version="[4.8.1,5.0.0)";visibility:=reexport
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/build.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/build.properties
new file mode 100644
index 0000000..6cf6ee0
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/build.properties
@@ -0,0 +1,12 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+ META-INF/,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/plugin.properties b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/plugin.properties
new file mode 100644
index 0000000..fe01abf
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/plugin.properties
@@ -0,0 +1,8 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+pluginName = Config Model
+providerName = www.example.org
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/pom.xml b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/pom.xml
new file mode 100644
index 0000000..6a7689f
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>emfstore-parent</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <relativePath>../../org.eclipse.emf.emfstore.releng/emfstore-parent/</relativePath>
+ </parent>
+ <groupId>org.eclipse.emf.emfstore</groupId>
+ <artifactId>org.eclipse.emf.emfstore.fuzzy</artifactId>
+ <version>0.9.3-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Annotations.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Annotations.java
new file mode 100644
index 0000000..c654a51
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Annotations.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotations used in tests using the {@link FuzzyRunner}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public final class Annotations {
+
+ /**
+ * Annotation to declare the field in the test, where to set the data.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ ElementType.FIELD })
+ public @interface Data {
+ }
+
+ /**
+ * Annotations to declare the field for the {@link Util}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ ElementType.FIELD })
+ public @interface Util {
+ }
+
+ /**
+ * An annotation to set the {@link FuzzyDataProvider} for the {@link FuzzyRunner}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ ElementType.TYPE })
+ public @interface DataProvider {
+
+ /***/
+ Class<?> value();
+ }
+
+ /**
+ * An optional annotation to declare options to use in the {@link FuzzyDataProvider}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ ElementType.FIELD })
+ public @interface Options {
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyDataProvider.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyDataProvider.java
new file mode 100644
index 0000000..dad15f6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyDataProvider.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy;
+
+import java.util.List;
+import java.util.Map;
+
+import org.junit.runner.notification.RunListener;
+import org.junit.runners.model.TestClass;
+
+/**
+ * A Data Provider for the JUnit Runner: {@link FuzzyRunner}.<br>
+ * <br>
+ * An implementation of it must have a zero-parameter constructor.
+ *
+ * @author Julian Sommerfeldt
+ *
+ * @param <T> Type to specify the values created by this data provider.
+ */
+public interface FuzzyDataProvider<T> {
+
+ /**
+ * Creates and returns the data for the next run.<br>
+ * <br>
+ * Note that it is strongly recommended to instantiate the data
+ * in this method for every call and not in the instantiation of the class, e.g. the init method,
+ * to avoid overloading the memory.
+ *
+ * @param count The count of the testcase.
+ * @return The data for the next run of the test class.
+ */
+ T get(int count);
+
+ /**
+ * This method is called after the {@link FuzzyDataProvider} was created and everything was set BEFORE the first
+ * run.<br/>
+ * Should be used to to create internal stuff depending on e.g. the {@link TestClass}.
+ */
+ void init();
+
+ /**
+ * @return The total size(count) of the repetition of the tests.
+ */
+ int size();
+
+ /**
+ * @param testClass The {@link TestClass} of the calling {@link FuzzyRunner}.
+ */
+ void setTestClass(TestClass testClass);
+
+ /**
+ * @return A list of listeners to add to the runner, e.g. to get information about errors. <code>null</code>
+ * permitted.
+ */
+ List<RunListener> getListener();
+
+ /**
+ * @return A list of {@link Test}s to specify, which tests the {@link FuzzyRunner} should run. <code>null</code>
+ * means run all tests.
+ */
+ List<Test> getTestsToRun();
+
+ /**
+ * @return The {@link Util} for this {@link FuzzyDataProvider}. <code>null</code> permitted.
+ */
+ Util getUtil();
+
+ /**
+ * @param options The options for the {@link FuzzyDataProvider}. Can be <code>null</code>.
+ */
+ void setOptions(Map<String, Object> options);
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyRunner.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyRunner.java
new file mode 100644
index 0000000..4f1ef25
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyRunner.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.DataProvider;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Options;
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Util;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunListener;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.Suite;
+import org.junit.runners.model.FrameworkField;
+import org.junit.runners.model.InitializationError;
+
+/**
+ * A {@link Runner} for JUnit, to realize multiple runs with different values for a data field. <br/>
+ * <br/>
+ * Activate with the {@link org.junit.runner.RunWith} annotation: <code>@RunWith(FuzzyRunner.class)</code>. <br/>
+ * <br/>
+ * The test class must have a field, which is not static and annotated with {@link Data}, e.g.<br/>
+ * <br/>
+ * <code>@Data<br/>private Integer i;</code> <br/>
+ * <br/>
+ * To provide data an implementation of {@link FuzzyDataProvider} can be set via the {@link DataProvider} annotation,
+ * e.g.<br/>
+ * <br/>
+ * <code>@DataProvider(IntDataProvider.class)</code><br/>
+ * <br/>
+ * This class must implement the interface {@link FuzzyDataProvider}. The default value is the example implementation:
+ * {@link IntDataProvider}.<br/>
+ * <br/>
+ * The {@link MyTest} class illustrates an example usage of the {@link FuzzyRunner}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class FuzzyRunner extends Suite {
+
+ private ArrayList<Runner> runners = new ArrayList<Runner>();
+
+ private FuzzyDataProvider<?> dataProvider;
+
+ /**
+ * The string representing a seperation in a name (e.g. test name).
+ */
+ public static final String NAME_SEPARATOR = " ";
+
+ /**
+ * Default constructor, called by JUnit.
+ *
+ * @param clazz The root class of the suite.
+ * @throws InitializationError If there
+ */
+ public FuzzyRunner(Class<?> clazz) throws InitializationError {
+ super(clazz, Collections.<Runner> emptyList());
+ dataProvider = getDataProvider();
+ dataProvider.setTestClass(getTestClass());
+ dataProvider.init();
+ FrameworkField dataField = getDataField();
+ FrameworkField utilField = getUtilField();
+ FrameworkField optionsField = getOptionsField();
+ org.eclipse.emf.emfstore.fuzzy.Util util = dataProvider.getUtil();
+ for (int i = 0; i < dataProvider.size(); i++) {
+ FuzzyTestClassRunner runner = new FuzzyTestClassRunner(clazz, dataProvider, dataField, utilField,
+ optionsField, util, i + 1);
+ if (runner.getChildren().size() > 0) {
+ runners.add(runner);
+ }
+ }
+ }
+
+ /*
+ * Override to add RunListeners of the FuzzyDataProvider
+ * (non-Javadoc)
+ * @see org.junit.runners.ParentRunner#run(org.junit.runner.notification.RunNotifier)
+ */
+ @Override
+ public void run(final RunNotifier notifier) {
+ List<RunListener> listener = dataProvider.getListener();
+ if (listener != null) {
+ for (RunListener runListener : listener) {
+ notifier.addListener(runListener);
+ }
+ }
+ super.run(notifier);
+ }
+
+ /**
+ * @return The field annotated with {@link Util}.
+ * @throws Exception If there is are more than one fitting fields.
+ */
+ private FrameworkField getUtilField() {
+ return getSingleStaticFrameworkField(Util.class);
+ }
+
+ private FrameworkField getOptionsField() {
+ return getSingleStaticFrameworkField(Options.class);
+ }
+
+ private FrameworkField getSingleStaticFrameworkField(Class<? extends Annotation> annotation) {
+ List<FrameworkField> fields = getTestClass().getAnnotatedFields(annotation);
+
+ // Check if there are more than one Data field in the class
+ if (fields.size() > 1) {
+ throw new RuntimeException("Only one field annotated with " + annotation.getSimpleName() + " permitted: "
+ + getTestClass().getName() + " contains " + fields.size());
+ }
+
+ // get the field and check modifiers
+ for (FrameworkField field : fields) {
+ int modifiers = field.getField().getModifiers();
+ if (!Modifier.isStatic(modifiers)) {
+ return field;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @return The field annotated with {@link Data}.
+ * @throws InitializationError
+ * @throws Exception If there is not exact one fitting field.
+ */
+ private FrameworkField getDataField() throws InitializationError {
+ FrameworkField field = getSingleStaticFrameworkField(Data.class);
+
+ if (field == null) {
+ throw new InitializationError("No non-static model field anntoted with " + Data.class.getSimpleName()
+ + " in class " + getTestClass().getName());
+ }
+
+ return field;
+ }
+
+ /**
+ * @return The {@link FuzzyDataProvider} defined by the {@link DataProvider} annotation or the default one.
+ * @throws InitializationError
+ * @throws Exception If the data provider does not implement the {@link FuzzyDataProvider} interface.
+ */
+ private FuzzyDataProvider<?> getDataProvider() throws InitializationError {
+ // Get the DataProvider Annotation
+ Annotation[] annotations = getTestClass().getAnnotations();
+
+ // take default DataProvider, if there is no annotation
+ Class<?> dataProviderClass = null;
+
+ // check for the dataprovider annotation
+ for (Annotation annotation : annotations) {
+ if (annotation instanceof DataProvider) {
+
+ // Check if the given class is an implementation of FuzzyDataProvider
+ dataProviderClass = ((DataProvider) annotation).value();
+ if (!FuzzyDataProvider.class.isAssignableFrom(dataProviderClass)) {
+ throw new InitializationError(dataProviderClass + " is not an implementation of "
+ + FuzzyDataProvider.class.getSimpleName());
+ }
+ }
+ }
+
+ // create a new instance of the DataProvider
+ try {
+ return (FuzzyDataProvider<?>) dataProviderClass.getConstructor().newInstance();
+ } catch (InstantiationException e) {
+ throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+ } catch (IllegalAccessException e) {
+ throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+ } catch (IllegalArgumentException e) {
+ throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+ } catch (InvocationTargetException e) {
+ throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+ } catch (NoSuchMethodException e) {
+ throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+ } catch (SecurityException e) {
+ throw new InitializationError("The DataProvider must have a zero-parameter constructor!");
+ }
+ }
+
+ @Override
+ protected List<Runner> getChildren() {
+ return runners;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyTestClassRunner.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyTestClassRunner.java
new file mode 100644
index 0000000..10cabe6
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/FuzzyTestClassRunner.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.emfstore.fuzzy.Annotations.Data;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkField;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+/**
+ * A {@link org.junit.runner.Runner} for each {@link org.junit.runners.model.TestClass}.
+ * Used in the {@link FuzzyRunner}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class FuzzyTestClassRunner extends BlockJUnit4ClassRunner {
+
+ /**
+ * Which run is it?
+ */
+ private int counter;
+
+ /**
+ * The {@link FuzzyDataProvider}, which "contains" the data for the test.
+ */
+ private FuzzyDataProvider<?> dataProvider;
+
+ /**
+ * The {@link FrameworkField} of the {@link TestClass} where to put in the data.
+ */
+ private FrameworkField dataField;
+
+ /**
+ * The {@link FrameworkField} for the {@link Util}.
+ */
+ private FrameworkField utilField;
+
+ private Util util;
+
+ private FrameworkField optionsField;
+
+ /**
+ * Constructor.
+ *
+ * @param type The testclass
+ * @param dataProvider The {@link FuzzyDataProvider} providing the data to put into the dataField
+ * @param dataField The datafield in the testclass
+ * @param utilField the utilfield in the testclass
+ * @param optionsField the options field in the testclass
+ * @param util The {@link Util} class
+ * @param counter The counter of the run
+ * @throws InitializationError If there was a problem during the initialization of the test
+ */
+ FuzzyTestClassRunner(Class<?> type, FuzzyDataProvider<?> dataProvider, FrameworkField dataField,
+ FrameworkField utilField, FrameworkField optionsField, Util util, int counter) throws InitializationError {
+ super(type);
+ this.counter = counter;
+ this.dataField = dataField;
+ this.utilField = utilField;
+ this.optionsField = optionsField;
+ this.util = util;
+ this.dataProvider = dataProvider;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object createTest() {
+ try {
+ // create a new instance of the testclass
+ Object testInstance = getTestClass().getOnlyConstructor().newInstance();
+
+ // set the options to dataprovider
+ if (optionsField != null) {
+ Object options = getValueFromField(optionsField.getField(), testInstance);
+ if (options == null) {
+ throw new IllegalStateException(
+ "The options field has to be not null! Fill it or remove annotation.");
+ }
+ try {
+ dataProvider.setOptions((Map<String, Object>) options);
+ } catch (ClassCastException e) {
+ throw new ClassCastException("The options field is not of type: Map<String, Object>!");
+ }
+ }
+
+ // get the new data from dataprovider
+ Object data = dataProvider.get(counter);
+
+ // set the data to the datafield
+ setValueToField(dataField.getField(), testInstance, data,
+ "The field annotated with " + Data.class.getSimpleName()
+ + " does not fit to the type of the dataprovider (" + dataProvider.getClass() + ").");
+
+ // set the util to the util field
+ if (util != null && utilField != null) {
+ setValueToField(utilField.getField(), testInstance, util,
+ "The field annotated " + Util.class.getSimpleName() + " does not fit to the Util type!");
+ }
+
+ return testInstance;
+ } catch (InstantiationException e) {
+ throw new RuntimeException(e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private Object getValueFromField(Field field, Object instance) throws IllegalAccessException {
+ try{
+ field.setAccessible(true);
+ Object o = field.get(instance);
+ return o;
+ } finally {
+ field.setAccessible(false);
+ }
+ }
+
+ private void setValueToField(Field field, Object instance, Object value, String errorMsg) throws IllegalAccessException
+ {
+ try {
+ field.setAccessible(true);
+ field.set(instance, value);
+ } finally {
+ field.setAccessible(false);
+ }
+ }
+
+ @Override
+ protected List<FrameworkMethod> getChildren() {
+ List<Test> testsToRun = dataProvider.getTestsToRun();
+ List<FrameworkMethod> allChildren = super.getChildren();
+
+ // check if it should filter tests
+ if (testsToRun != null) {
+ List<FrameworkMethod> filteredChildren = new ArrayList<FrameworkMethod>();
+ for (Test test : testsToRun) {
+ String name = test.getName();
+ int seedCount = test.getSeedCount();
+ for (FrameworkMethod child : allChildren) {
+ if (seedCount == counter && name.equals(child.getName())) {
+ filteredChildren.add(child);
+ }
+ }
+ }
+ return filteredChildren;
+ }
+
+ // if not return all children
+ return allChildren;
+ }
+
+ private String testName(String name) {
+ return String.format("%s%s[%s]", name, FuzzyRunner.NAME_SEPARATOR, counter);
+ }
+
+ @Override
+ protected String testName(final FrameworkMethod method) {
+ return testName(method.getName());
+ }
+
+ @Override
+ protected String getName() {
+ return String.format("%s%s[%s]", getTestClass().getName(), FuzzyRunner.NAME_SEPARATOR, counter);
+ }
+
+ @Override
+ protected Statement classBlock(RunNotifier notifier) {
+ return childrenInvoker(notifier);
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Test.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Test.java
new file mode 100644
index 0000000..2b0a0a3
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Test.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy;
+
+/**
+ *
+ * Class to get a connection between a test and a specific run of it.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public class Test {
+
+ private String name;
+
+ private int seedCount;
+
+ /**
+ * @param name The name of the test.
+ * @param seedCount The count (run) of the test.
+ */
+ public Test(String name, int seedCount) {
+ this.name = name;
+ this.seedCount = seedCount;
+ }
+
+ /**
+ * @return The name of the test.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return The run of this test.
+ */
+ public int getSeedCount() {
+ return seedCount;
+ }
+}
\ No newline at end of file
diff --git a/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Util.java b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Util.java
new file mode 100644
index 0000000..099198a
--- /dev/null
+++ b/Fuzzy/org.eclipse.emf.emfstore.fuzzy/src/org/eclipse/emf/emfstore/fuzzy/Util.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource Muenchen GmbH.
+ *
+ * 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:
+ ******************************************************************************/
+package org.eclipse.emf.emfstore.fuzzy;
+
+/**
+ * Marker Interface for utility classes in test classes using the {@link FuzzyRunner}.
+ *
+ * @author Julian Sommerfeldt
+ *
+ */
+public interface Util {
+
+}
\ No newline at end of file