packaging improved
diff --git a/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF
index 4e7f0e1..fd4e570 100644
--- a/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF
@@ -6,9 +6,13 @@
 Bundle-Activator: org.eclipse.emf.refactor.metrics.ocl.Activator
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.8.0",
+ org.eclipse.jdt.core;bundle-version="3.8.1",
  org.eclipse.emf.ecore;bundle-version="2.8.1",
  org.eclipse.ocl;bundle-version="3.2.1",
  org.eclipse.ocl.ecore;bundle-version="3.2.0",
- org.eclipse.emf.refactor.metrics.generator;bundle-version="0.7.0"
+ org.eclipse.emf.refactor.metrics;bundle-version="0.7.0",
+ org.eclipse.emf.refactor.metrics.generator;bundle-version="0.7.0",
+ org.eclipse.emf.codegen;bundle-version="2.8.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/OCLMetricInfo.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/core/OCLMetricInfo.java
similarity index 90%
rename from org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/OCLMetricInfo.java
rename to org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/core/OCLMetricInfo.java
index 5c9fe7c..38a0ab0 100644
--- a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/OCLMetricInfo.java
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/core/OCLMetricInfo.java
@@ -1,4 +1,4 @@
-package org.eclipse.emf.refactor.metrics.ocl;
+package org.eclipse.emf.refactor.metrics.ocl.core;
 
 import org.eclipse.emf.refactor.metrics.generator.core.MetricInfo;
 
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java
new file mode 100644
index 0000000..7312e44
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java
@@ -0,0 +1,113 @@
+package org.eclipse.emf.refactor.metrics.ocl.managers;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.emf.codegen.jet.JETEmitter;
+import org.eclipse.emf.codegen.jet.JETException;
+import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.metrics.generator.managers.XMLPluginFileManager;
+import org.eclipse.emf.refactor.metrics.ocl.Activator;
+import org.eclipse.emf.refactor.metrics.ocl.core.OCLMetricInfo;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.osgi.framework.Bundle;
+
+public class OCLGenerationManager extends GenerationManager {
+	
+	private static final String OCL_TEMPLATE_CLASS_NAME = "OCLCalculateClassTemplate";
+	private static OCLGenerationManager instance;
+	
+	private OCLGenerationManager() {
+		templateDirectory = setTemplateDirectory();
+		classpathEntries = setClassPathEntries();
+		System.out.println("OCLGenerationManager initialized!");
+	}
+	
+	public static OCLGenerationManager getInstance() {
+		if (instance == null) {
+			instance = new OCLGenerationManager();
+		}
+		return instance;
+	}
+	
+	protected List<IClasspathEntry> setClassPathEntries() {
+		List<IClasspathEntry> cpe = super.setClassPathEntries();
+		Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+	    // add org.eclipse.emf.refactor.metrics.ocl to class path
+	    String version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	    cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH + 
+	    		Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));
+	    return cpe;
+	}
+	
+	public static void createNewMetric(IProgressMonitor monitor,
+			OCLMetricInfo metricInfo, IProject targetProject) {
+		System.out.println(metricInfo);
+		HenshinDependenciesManager.updateDependencies(metricInfo);
+		createCalculateClass(monitor, metricInfo);		
+		XMLPluginFileManager.createMetricEntry(metricInfo.getProjectPath(), 
+				metricInfo.getName(), metricInfo.getId(), 
+				metricInfo.getDescription(), metricInfo.getMetamodel(), 
+				metricInfo.getContext(), metricInfo.getPackage()+"."+metricInfo.getClassName());
+		try {
+			targetProject.refreshLocal(IProject.DEPTH_INFINITE, monitor);
+			targetProject.refreshLocal(IProject.DEPTH_INFINITE, monitor);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private static void createCalculateClass(IProgressMonitor monitor, HenshinMetricInfo metricInfo) {
+		String generatedCode = "";
+		String templateName = HENSHIN_TEMPLATE_CLASS_NAME;
+		try {
+//			MessageDialog.openError(null, null, "vor generateCode()");
+			generatedCode = generateCode(monitor, templateName, metricInfo);
+//			MessageDialog.openError(null, null, "nach generateCode()");
+		    saveCode(monitor, generatedCode, metricInfo);
+//		    MessageDialog.openError(null, null, "nach saveCode()");
+		} catch (JETException e) {
+//			MessageDialog.openError(null, null, e.getMessage());
+			e.printStackTrace();
+		} catch (CoreException e) {
+//			MessageDialog.openError(null, null, e.getMessage());
+			e.printStackTrace();
+		}
+	}
+	
+	protected String setTemplateDirectory() {
+		String directory = "";
+		final Bundle bundle = Activator.getDefault().getBundle();
+		try {
+			directory = FileLocator.toFileURL(bundle.getEntry(TEMPLATE_DIR)).getFile();
+		} catch (final IOException e) {
+			e.printStackTrace();
+		}
+		return directory;
+	}
+	
+	protected static String generateCode(IProgressMonitor monitor, String template, HenshinMetricInfo metricInfo) {
+		String templatePath = templateDirectory + template + TEMPLATE_FILE_EXTENSION;
+		ClassLoader classLoader = metricInfo.getClass().getClassLoader();
+		JETEmitter jetEmitter = new JETEmitter(templatePath, classLoader);
+		jetEmitter.getClasspathEntries().addAll(classpathEntries);
+		String result = "";
+		IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
+		try {
+			result = jetEmitter.generate(subMonitor, new Object[] {metricInfo});
+		} catch (JETException e) {
+			e.printStackTrace();
+		}
+		System.out.println(result);
+		return result;
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/OCLManager.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLManager.java
similarity index 95%
rename from org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/OCLManager.java
rename to org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLManager.java
index 8dd2d9f..b68baac 100644
--- a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/OCLManager.java
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLManager.java
@@ -1,4 +1,4 @@
-package org.eclipse.emf.refactor.metrics.ocl;
+package org.eclipse.emf.refactor.metrics.ocl.managers;
 
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;