generation manager structure improved
diff --git a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/Activator.class b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/Activator.class
index 6b999a5..bb175e2 100644
--- a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/Activator.class
+++ b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/Activator.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/managers/GenerationManager.class b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/managers/SmellGenerationManager.class
similarity index 93%
rename from org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/managers/GenerationManager.class
rename to org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/managers/SmellGenerationManager.class
index 859b0cb..598eec2 100644
--- a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/managers/GenerationManager.class
+++ b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/managers/SmellGenerationManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava$1.class b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava$1.class
index bbe5e98..05f34c3 100644
--- a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava$1.class
+++ b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric$1.class b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric$1.class
index 80028c4..0ce6575 100644
--- a/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric$1.class
+++ b/org.eclipse.emf.refactor.smells.generator/bin/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/Activator.java b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/Activator.java
index 7f05ba9..a3393f7 100644
--- a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/Activator.java
+++ b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/Activator.java
@@ -1,6 +1,6 @@
package org.eclipse.emf.refactor.smells.generator;
-import org.eclipse.emf.refactor.smells.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.smells.generator.managers.SmellGenerationManager;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -28,7 +28,7 @@
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
- GenerationManager.getInstance();
+ SmellGenerationManager.getInstance();
}
/*
diff --git a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/managers/GenerationManager.java b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/managers/SmellGenerationManager.java
similarity index 96%
rename from org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/managers/GenerationManager.java
rename to org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/managers/SmellGenerationManager.java
index 7bb43a8..fd7518a 100644
--- a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/managers/GenerationManager.java
+++ b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/managers/SmellGenerationManager.java
@@ -26,9 +26,9 @@
import org.eclipse.jdt.core.JavaCore;
import org.osgi.framework.Bundle;
-public class GenerationManager {
+public class SmellGenerationManager {
- private static GenerationManager instance;
+ private static SmellGenerationManager instance;
private static final String JAVA_TEMPLATE_CLASS_NAME = "JavaFinderClassTemplate";
private static final String METRIC_TEMPLATE_CLASS_NAME = "MetricBasedFinderClassTemplate";
@@ -41,7 +41,7 @@
protected static String templateDirectory;
protected static List<IClasspathEntry> classpathEntries;
- protected GenerationManager() {
+ protected SmellGenerationManager() {
templateDirectory = setTemplateDirectory();
classpathEntries = setClassPathEntries();
System.out.println("GenerationManager initialized!");
@@ -62,9 +62,9 @@
return cpe;
}
- public static GenerationManager getInstance() {
+ public static SmellGenerationManager getInstance() {
if (instance == null) {
- instance = new GenerationManager();
+ instance = new SmellGenerationManager();
}
return instance;
}
diff --git a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava.java b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava.java
index 440b6f3..a673a26 100644
--- a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava.java
+++ b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardJava.java
@@ -10,7 +10,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.refactor.smells.generator.core.ModelSmellInfo;
import org.eclipse.emf.refactor.smells.generator.interfaces.INewModelSmellWizard;
-import org.eclipse.emf.refactor.smells.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.smells.generator.managers.SmellGenerationManager;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
@@ -77,8 +77,8 @@
try{
getContainer().run(true, true, new IRunnableWithProgress(){
public void run(IProgressMonitor monitor)throws InvocationTargetException, InterruptedException {
- GenerationManager.getInstance();
- GenerationManager.createNewModelSmell(monitor, getModelSmellInfo(), newSmellTargetProject);
+ SmellGenerationManager.getInstance();
+ SmellGenerationManager.createNewModelSmell(monitor, getModelSmellInfo(), newSmellTargetProject);
}
});
}
diff --git a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric.java b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric.java
index 690db01..3782452 100644
--- a/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric.java
+++ b/org.eclipse.emf.refactor.smells.generator/src/org/eclipse/emf/refactor/smells/generator/ui/NewModelSmellWizardMetric.java
@@ -10,7 +10,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.refactor.smells.generator.core.MetricBasedModelSmellInfo;
import org.eclipse.emf.refactor.smells.generator.interfaces.INewModelSmellWizard;
-import org.eclipse.emf.refactor.smells.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.smells.generator.managers.SmellGenerationManager;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
@@ -80,8 +80,8 @@
try{
getContainer().run(true, true, new IRunnableWithProgress(){
public void run(IProgressMonitor monitor)throws InvocationTargetException, InterruptedException {
- GenerationManager.getInstance();
- GenerationManager.createNewModelSmell(monitor, getModelSmellInfo(), newSmellTargetProject);
+ SmellGenerationManager.getInstance();
+ SmellGenerationManager.createNewModelSmell(monitor, getModelSmellInfo(), newSmellTargetProject);
}
});
}
diff --git a/org.eclipse.emf.refactor.smells.henshin/bin/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.class b/org.eclipse.emf.refactor.smells.henshin/bin/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.class
index 7ec6535..3953638 100644
--- a/org.eclipse.emf.refactor.smells.henshin/bin/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.class
+++ b/org.eclipse.emf.refactor.smells.henshin/bin/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.henshin/src/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.java b/org.eclipse.emf.refactor.smells.henshin/src/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.java
index 8544ef9..a68e949 100644
--- a/org.eclipse.emf.refactor.smells.henshin/src/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.java
+++ b/org.eclipse.emf.refactor.smells.henshin/src/org/eclipse/emf/refactor/smells/henshin/managers/HenshinGenerationManager.java
@@ -1,18 +1,25 @@
package org.eclipse.emf.refactor.smells.henshin.managers;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
import java.util.List;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
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.smells.generator.managers.GenerationManager;
+import org.eclipse.emf.codegen.util.CodeGenUtil;
+import org.eclipse.emf.refactor.smells.generator.core.ModelSmellInfo;
import org.eclipse.emf.refactor.smells.generator.managers.XMLPluginFileManager;
import org.eclipse.emf.refactor.smells.henshin.Activator;
import org.eclipse.emf.refactor.smells.henshin.core.HenshinModelSmellInfo;
@@ -20,10 +27,18 @@
import org.eclipse.jdt.core.JavaCore;
import org.osgi.framework.Bundle;
-public class HenshinGenerationManager extends GenerationManager {
+public class HenshinGenerationManager {
private static final String HENSHIN_TEMPLATE_CLASS_NAME = "HenshinFinderClassTemplate";
private static HenshinGenerationManager instance;
+ private static final String TEMPLATE_DIR = "/templates";
+ private static final String SOURCE_DIR = "/src/";
+ private static final String TEMPLATE_FILE_EXTENSION = ".javajet";
+ private static final String JAVA_FILE_EXTENSION = ".java";
+ private static final String PLUGINSPATH = Platform.getInstallLocation().getURL().getPath() + "plugins/";
+ private static final String BUNDLEVERSION = "Bundle-Version";
+ protected static String templateDirectory;
+ protected static List<IClasspathEntry> classpathEntries;
private HenshinGenerationManager() {
templateDirectory = setTemplateDirectory();
@@ -39,12 +54,17 @@
}
protected List<IClasspathEntry> setClassPathEntries() {
- List<IClasspathEntry> cpe = super.setClassPathEntries();
+ List<IClasspathEntry> cpe = new ArrayList<IClasspathEntry>();
Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
// add org.eclipse.emf.refactor.smells.henshin to class path
String version = (String) bundle.getHeaders().get(BUNDLEVERSION);
cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH +
Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));
+ // add org.eclipse.emf.refactor.smells to class path
+ bundle = Platform.getBundle(org.eclipse.emf.refactor.smells.Activator.PLUGIN_ID);
+ version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+ cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH +
+ org.eclipse.emf.refactor.smells.Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));
return cpe;
}
@@ -65,8 +85,7 @@
}
}
- private static void createCalculateClass(IProgressMonitor monitor,
- HenshinModelSmellInfo modelSmellInfo) {
+ private static void createCalculateClass(IProgressMonitor monitor, HenshinModelSmellInfo modelSmellInfo) {
String generatedCode = "";
String templateName = HENSHIN_TEMPLATE_CLASS_NAME;
try {
@@ -95,8 +114,7 @@
return directory;
}
- protected static String generateCode(IProgressMonitor monitor, String template,
- HenshinModelSmellInfo modelSmellInfo) {
+ protected static String generateCode(IProgressMonitor monitor, String template, HenshinModelSmellInfo modelSmellInfo) {
String templatePath = templateDirectory + template + TEMPLATE_FILE_EXTENSION;
ClassLoader classLoader = modelSmellInfo.getClass().getClassLoader();
JETEmitter jetEmitter = new JETEmitter(templatePath, classLoader);
@@ -111,5 +129,29 @@
System.out.println(result);
return result;
}
+
+ protected static void saveCode(IProgressMonitor monitor, String content, ModelSmellInfo modelSmellInfo) throws CoreException, JETException {
+ IContainer container = findOrCreatePackage(monitor, modelSmellInfo);
+ if (container == null) {
+ throw new JETException("Could not find or create container for package " + modelSmellInfo.getPackage() + " in " + modelSmellInfo.getProjectName());
+ }
+ IFile file = container.getFile(new Path(modelSmellInfo.getClassName() + JAVA_FILE_EXTENSION));
+ System.out.println("saving code into: "+file.getLocation());
+ InputStream inputStream = new ByteArrayInputStream(content.getBytes());
+ if (!file.exists()) {
+ file.create(inputStream, false, monitor);
+ } else {
+ container.refreshLocal(1, monitor);
+ file.setContents(inputStream, true, false, monitor);
+ }
+ }
+
+ private static IContainer findOrCreatePackage(IProgressMonitor progressMonitor, ModelSmellInfo modelSmellInfo) throws CoreException {
+ IPath outputPath = new Path(modelSmellInfo.getProjectName() + SOURCE_DIR + modelSmellInfo.getPackage().replace('.', '/'));
+ IProgressMonitor subMonitor = new SubProgressMonitor(progressMonitor, 1);
+ IPath localLocation = null;
+ IContainer container = CodeGenUtil.EclipseUtil.findOrCreateContainer(outputPath, true, localLocation, subMonitor);
+ return container;
+ }
}