Преглед изворни кода

DefaultFeatureValueProvider implementation for Java Code Generator

Andreas Mülder пре 14 година
родитељ
комит
23b743c22a

+ 1 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/.classpath

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 <classpath>
+	<classpathentry kind="src" path="xtend-gen"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
 	<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.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+ 2 - 2
plugins/org.yakindu.sct.generator.genmodel.ui/.project

@@ -21,7 +21,7 @@
 			</arguments>
 			</arguments>
 		</buildCommand>
 		</buildCommand>
 		<buildCommand>
 		<buildCommand>
-			<name>org.eclipse.xtend.shared.ui.xtendBuilder</name>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
 			<arguments>
 			<arguments>
 			</arguments>
 			</arguments>
 		</buildCommand>
 		</buildCommand>
@@ -29,6 +29,6 @@
 	<natures>
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 	</natures>
 	</natures>
 </projectDescription>
 </projectDescription>

+ 2 - 2
plugins/org.yakindu.sct.generator.genmodel.ui/.settings/org.eclipse.xtend.shared.ui.prefs

@@ -1,4 +1,4 @@
-#Fri Nov 11 10:33:56 CET 2011
+#Fri Nov 11 14:00:31 CET 2011
 eclipse.preferences.version=1
 eclipse.preferences.version=1
-metamodelContributor=org.eclipse.xtend.shared.ui.core.metamodel.jdt.javabean.JavaBeanMetamodelContributor
+metamodelContributor=org.eclipse.xtend.shared.ui.core.metamodel.jdt.javabean.JavaBeanMetamodelContributor,org.eclipse.xtend.typesystem.emf.ui.EmfMetamodelContributor
 project.specific.metamodel=true
 project.specific.metamodel=true

+ 3 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/META-INF/MANIFEST.MF

@@ -20,7 +20,9 @@ Require-Bundle: org.yakindu.sct.generator.genmodel;visibility:=reexport,
  org.eclipse.core.runtime,
  org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.core.resources,
  org.eclipse.xtend,
  org.eclipse.xtend,
- org.eclipse.xpand
+ org.eclipse.xpand,
+ org.eclipse.xtext.xtend2;bundle-version="2.0.0",
+ org.eclipse.xtext.xtend2.lib;bundle-version="2.0.0"
 Import-Package: org.apache.log4j,
 Import-Package: org.apache.log4j,
  org.apache.commons.logging
  org.apache.commons.logging
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-RequiredExecutionEnvironment: J2SE-1.5

+ 0 - 36
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/DefaultFeatureModel.java

@@ -1,36 +0,0 @@
-package org.yakindu.sct.generator.genmodel.ui.wizard;
-
-import java.util.List;
-
-/**
- * 
- * @author muelder
- * 
- */
-public class DefaultFeatureModel {
-
-	private String fileName = "example.sgen";
-	private List<String> statecharts;
-	private String generatorId;
-
-	public String getFileName() {
-		return fileName;
-	}
-
-	public void setFileName(String fileName) {
-		this.fileName = fileName;
-	}
-
-	public List<String> getStatecharts() {
-		return statecharts;
-	}
-
-	public String getGeneratorId() {
-		return generatorId;
-	}
-
-	public void setGeneratorId(String generatorId) {
-		this.generatorId = generatorId;
-	}
-
-}

+ 85 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/ModelCreator.java

@@ -0,0 +1,85 @@
+package org.yakindu.sct.generator.genmodel.ui.wizard;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.yakindu.sct.generator.genmodel.extensions.IDefaultFeatureValueProvider;
+import org.yakindu.sct.generator.genmodel.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.genmodel.extensions.LibraryExtensions.LibraryDescriptor;
+import org.yakindu.sct.model.sgen.FeatureConfiguration;
+import org.yakindu.sct.model.sgen.FeatureType;
+import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
+import org.yakindu.sct.model.sgen.GeneratorEntry;
+import org.yakindu.sct.model.sgen.GeneratorModel;
+import org.yakindu.sct.model.sgen.SGenFactory;
+import org.yakindu.sct.model.sgraph.Statechart;
+
+import com.google.common.collect.Lists;
+
+/**
+ * 
+ * @author muelder
+ * 
+ */
+public class ModelCreator {
+
+	private SGenFactory factory = SGenFactory.eINSTANCE;
+	private final String generatorId;
+	private final List<Statechart> statecharts;
+
+	public ModelCreator(String generatorId, List<Statechart> statecharts) {
+		this.generatorId = generatorId;
+		this.statecharts = statecharts;
+	}
+
+	public GeneratorModel create() {
+		GeneratorModel model = factory.createGeneratorModel();
+		model.setGeneratorId(generatorId);
+		for (Statechart statechart : statecharts) {
+			model.getEntries().add(createGeneratorEntry(statechart));
+		}
+		return model;
+	}
+
+	private GeneratorEntry createGeneratorEntry(Statechart statechart) {
+		GeneratorEntry entry = factory.createGeneratorEntry();
+		entry.setStatechart(statechart);
+		List<FeatureType> featureTypes = getFeatureTypes();
+		for (FeatureType featureType : featureTypes) {
+			entry.getFeatures().add(
+					createFeatureConfiguration(statechart, featureType));
+		}
+		return entry;
+	}
+
+	private FeatureConfiguration createFeatureConfiguration(
+			Statechart statechart, FeatureType featureType) {
+		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
+				.getLibraryDescriptor(generatorId);
+		for (LibraryDescriptor desc : libraryDescriptor) {
+			IDefaultFeatureValueProvider defaultProvider = desc
+					.createFeatureValueProvider();
+			if (defaultProvider.isProviderFor(featureType.getName()))
+				return defaultProvider.createDefaultFeatureConfiguration(
+						featureType, statechart);
+		}
+		return factory.createFeatureConfiguration();
+	}
+
+	public List<FeatureType> getFeatureTypes() {
+		ArrayList<FeatureType> features = Lists.newArrayList();
+		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
+				.getLibraryDescriptor(generatorId);
+		for (LibraryDescriptor desc : libraryDescriptor) {
+			ResourceSet set = new ResourceSetImpl();
+			Resource resource = set.getResource(desc.getURI(), true);
+			FeatureTypeLibrary lib = (FeatureTypeLibrary) resource
+					.getContents().get(0);
+			features.addAll(lib.getTypes());
+		}
+		return features;
+	}
+}

+ 32 - 38
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenNewFileWizard.java

@@ -10,23 +10,27 @@
  */
  */
 package org.yakindu.sct.generator.genmodel.ui.wizard;
 package org.yakindu.sct.generator.genmodel.ui.wizard;
 
 
-import org.eclipse.core.resources.IResource;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.xpand2.XpandExecutionContextImpl;
-import org.eclipse.xpand2.XpandFacade;
-import org.eclipse.xpand2.output.Outlet;
-import org.eclipse.xpand2.output.OutputImpl;
-import org.eclipse.xtend.type.impl.java.JavaBeansMetaModel;
+import org.eclipse.xtext.serializer.ISerializer;
+import org.yakindu.sct.generator.genmodel.ui.internal.SGenActivator;
+import org.yakindu.sct.model.sgen.GeneratorModel;
+import org.yakindu.sct.model.sgraph.Statechart;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Injector;
 
 
 /**
 /**
  * 
  * 
@@ -50,7 +54,7 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 
 
 	@Override
 	@Override
 	public void addPages() {
 	public void addPages() {
-		modelFilePage = new SGenWizardPage1("DiagramModelFile", selection,
+		modelFilePage = new SGenWizardPage1("fileName", selection,
 				"sgen");
 				"sgen");
 		modelFilePage.setTitle("YAKINDU SCT Diagram");
 		modelFilePage.setTitle("YAKINDU SCT Diagram");
 		modelFilePage.setDescription("Create a new YAKINDU SCT Diagram File");
 		modelFilePage.setDescription("Create a new YAKINDU SCT Diagram File");
@@ -63,7 +67,14 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 			@Override
 			@Override
 			protected void execute(IProgressMonitor monitor)
 			protected void execute(IProgressMonitor monitor)
 					throws CoreException, InterruptedException {
 					throws CoreException, InterruptedException {
-				generateFile();
+				// TODO: Does not work for linked projects
+				IPath containerFullPath = modelFilePage.getContainerFullPath();
+				IPath location = ResourcesPlugin.getWorkspace().getRoot()
+						.getLocation();
+				location = location.append(containerFullPath);
+				String osString = location.toOSString();
+				System.out.println(osString);
+				createDefaultModel(osString);
 			}
 			}
 		};
 		};
 		try {
 		try {
@@ -74,35 +85,18 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 		return true;
 		return true;
 	}
 	}
 
 
-	protected void generateFile() throws CoreException {
-		
-		IPath containerFullPath = modelFilePage.getContainerFullPath();
-		String outlet = containerFullPath.toFile().getAbsolutePath();
-		System.out.println(outlet);
-		
-		OutputImpl output = new OutputImpl();
-		output.addOutlet(new Outlet(false, System.getProperty("file.encoding"),
-				null, true, outlet));
-
-		XpandExecutionContextImpl execCtx = new XpandExecutionContextImpl(
-				output, null);
-		execCtx.getResourceManager().setFileEncoding("Cp1252");
-		execCtx.registerMetaModel(new JavaBeansMetaModel());
-
-		XpandFacade facade = XpandFacade.create(execCtx);
-		facade.evaluate(
-				"org::yakindu::sct::generator::genmodel::ui::wizard::SGenNewProject::main",
-				getProjectInfo());
-		// TODO: Update only current project
-		ResourcesPlugin
-				.getWorkspace()
-				.getRoot()
-				.refreshLocal(IResource.DEPTH_INFINITE,
-						new NullProgressMonitor());
-	}
-
-	private Object getProjectInfo() {
-		return null;
+	private void createDefaultModel(String target) {
+		ArrayList<Statechart> statecharts = Lists.newArrayList();
+		ModelCreator creator = new ModelCreator("yakindu::java", statecharts);
+		GeneratorModel model = creator.create();
+		Injector injector = SGenActivator.getInstance().getInjector(
+				"org.yakindu.sct.generator.genmodel.SGen");
+		ISerializer serializer = injector.getInstance(ISerializer.class);
+		try {
+			serializer.serialize(model, new FileWriter(target), null);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	public IStructuredSelection getSelection() {
 	public IStructuredSelection getSelection() {

+ 0 - 36
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenNewProject.xpt

@@ -1,36 +0,0 @@
-«IMPORT org::yakindu::sct::generator::genmodel::ui::wizard»
-«REM»
-@author Andreas Mülder
-«ENDREM»
-«DEFINE main FOR DefaultFeatureModel»
-«FILE this.fileName»
-	«EXPAND header»
-	«EXPAND GeneratorModel FOR this»
-«ENDFILE»
-«ENDDEFINE»
-
-«DEFINE header FOR DefaultFeatureModel»
-/**
-*	Generated by YAKINDU
-**/
-«ENDDEFINE»
-
-«DEFINE GeneratorModel FOR DefaultFeatureModel»
-GeneratorModel for «this.generatorId» {
-«EXPAND GeneratorEntry FOREACH this.statecharts»
-}
-«ENDDEFINE»
-
-«DEFINE GeneratorEntry FOR String»
-	statechart «this» {
-		«EXPAND FeatureConfiguration»
-	}
-«ENDDEFINE»
-
-«DEFINE FeatureConfiguration FOR String»
-		feature	OutletFeature {
-			targetProject = "TestScenarios"
-			targetFolder = "src-gen-c/InterfaceTest"
-		}
-«ENDDEFINE»
-

+ 4 - 1
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/extensions/IDefaultFeatureValueProvider.java

@@ -11,5 +11,8 @@ import org.yakindu.sct.model.sgraph.Statechart;
  */
  */
 public interface IDefaultFeatureValueProvider {
 public interface IDefaultFeatureValueProvider {
 
 
-	public FeatureConfiguration createDefaultFeatureConfiguration(FeatureType type, Statechart statechart);
+	public FeatureConfiguration createDefaultFeatureConfiguration(
+			FeatureType type, Statechart statechart);
+
+	public boolean isProviderFor(String featureTypeName);
 }
 }

+ 10 - 4
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/DefaultFeatureValueProvider.java

@@ -1,10 +1,12 @@
 package org.yakindu.sct.generator.java.features;
 package org.yakindu.sct.generator.java.features;
 
 
+import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.BASE_PACKAGE;
+import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.IMPLEMENTATION_SUFFIX;
+
 import org.yakindu.sct.generator.genmodel.extensions.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.generator.genmodel.extensions.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.generator.genmodel.extensions.IDefaultFeatureValueProvider;
 import org.yakindu.sct.generator.genmodel.extensions.IDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.sgraph.Statechart;
-import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.*;
 
 
 /**
 /**
  * 
  * 
@@ -19,11 +21,15 @@ public class DefaultFeatureValueProvider extends
 	protected void setDefaultValue(FeatureParameterValue parameterValue,
 	protected void setDefaultValue(FeatureParameterValue parameterValue,
 			Statechart statechart) {
 			Statechart statechart) {
 		if (parameterValue.getParameter().getName().equals(BASE_PACKAGE)) {
 		if (parameterValue.getParameter().getName().equals(BASE_PACKAGE)) {
-			parameterValue.setValue("org.yakindu.sct."+statechart.getName());
-		}
-		else if (parameterValue.getParameter().getName().equals(IMPLEMENTATION_SUFFIX)) {
+			parameterValue.setValue("org.yakindu.sct." + statechart.getName());
+		} else if (parameterValue.getParameter().getName()
+				.equals(IMPLEMENTATION_SUFFIX)) {
 			parameterValue.setValue("impl");
 			parameterValue.setValue("impl");
 		}
 		}
 	}
 	}
 
 
+	public boolean isProviderFor(String featureTypeName) {
+		return IJavaFeatureConstants.NAMING_FEATURE.equals(featureTypeName);
+	}
+
 }
 }