소스 검색

Initial GenModel wizard contribution

Andreas Mülder 14 년 전
부모
커밋
65886340ed

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

@@ -20,9 +20,15 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtend.shared.ui.xtendBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 	</natures>
 </projectDescription>

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

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

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

@@ -16,7 +16,11 @@ Require-Bundle: org.yakindu.sct.generator.genmodel;visibility:=reexport,
  org.eclipse.xtext.common.types.ui,
  org.eclipse.xtext.ui.codetemplates.ui,
  org.eclipse.compare,
- org.yakindu.sct.generator.core;bundle-version="1.0.0"
+ org.yakindu.sct.generator.core;bundle-version="1.0.0",
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.xtend,
+ org.eclipse.xpand
 Import-Package: org.apache.log4j,
  org.apache.commons.logging
 Bundle-RequiredExecutionEnvironment: J2SE-1.5

+ 12 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/plugin.xml

@@ -212,6 +212,18 @@
          </command>
       </menuContribution>
    </extension>
+   <!-- New File Wizard -->
+    <extension
+         point="org.eclipse.ui.newWizards">
+      <wizard
+            category="YAKINDU"
+            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.yakindu.sct.generator.genmodel.ui.wizard.SGenNewFileWizard"
+            id="org.yakindu.sct.generator.genmodel.ui.SGenNewFileWizard"
+            name="SGen Project"
+            project="false">
+      </wizard>
+   </extension>
+   
 
   <extension point="org.eclipse.compare.contentViewers">
     <viewer id="org.yakindu.sct.generator.genmodel.SGen.compare.contentViewers"

+ 0 - 235
plugins/org.yakindu.sct.generator.genmodel.ui/plugin.xml_gen

@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<plugin>
-
-    <extension
-            point="org.eclipse.ui.editors">
-        <editor
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
-            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
-            default="true"
-            extensions="sgen"
-            id="org.yakindu.sct.generator.genmodel.SGen"
-            name="SGen Editor">
-        </editor>
-    </extension>
-    <extension
-        point="org.eclipse.ui.handlers">
-        <handler
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
-            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
-            <activeWhen>
-                <reference
-                    definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-                </reference>
-            </activeWhen>
-        </handler>
-        <handler
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
-            commandId="org.yakindu.sct.generator.genmodel.SGen.validate">
-         <activeWhen>
-            <reference
-                    definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-            </reference>
-         </activeWhen>
-      </handler>
-    </extension>
-    <extension point="org.eclipse.core.expressions.definitions">
-        <definition id="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-            <and>
-                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
-                <with variable="activeEditor">
-                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
-                        value="org.yakindu.sct.generator.genmodel.SGen" 
-                        forcePluginActivation="true"/>
-                </with>        
-            </and>
-        </definition>
-    </extension>
-    <extension
-            point="org.eclipse.ui.preferencePages">
-        <page
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
-            id="org.yakindu.sct.generator.genmodel.SGen"
-            name="SGen">
-            <keywordReference id="org.yakindu.sct.generator.genmodel.ui.keyword_SGen"/>
-        </page>
-        <page
-            category="org.yakindu.sct.generator.genmodel.SGen"
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
-            id="org.yakindu.sct.generator.genmodel.SGen.coloring"
-            name="Syntax Coloring">
-            <keywordReference id="org.yakindu.sct.generator.genmodel.ui.keyword_SGen"/>
-        </page>
-        <page
-            category="org.yakindu.sct.generator.genmodel.SGen"
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
-            id="org.yakindu.sct.generator.genmodel.SGen.templates"
-            name="Templates">
-            <keywordReference id="org.yakindu.sct.generator.genmodel.ui.keyword_SGen"/>
-        </page>
-    </extension>
-    <extension
-        point="org.eclipse.ui.keywords">
-        <keyword
-            id="org.yakindu.sct.generator.genmodel.ui.keyword_SGen"
-            label="SGen"/>
-    </extension>
-    <extension
-         point="org.eclipse.ui.commands">
-      <command
-            description="Trigger expensive validation"
-            id="org.yakindu.sct.generator.genmodel.SGen.validate"
-            name="Validate">
-      </command>
-    </extension>
-    <extension point="org.eclipse.ui.menus">
-        <menuContribution
-            locationURI="popup:#TextEditorContext?after=group.edit">
-             <command
-                 commandId="org.yakindu.sct.generator.genmodel.SGen.validate"
-                 style="push"
-                 tooltip="Trigger expensive validation">
-            <visibleWhen checkEnabled="false">
-                <reference
-                    definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-                </reference>
-            </visibleWhen>
-         </command>  
-         </menuContribution>
-    </extension>
-    <extension point="org.eclipse.ui.menus">
-		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
-			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
-				<visibleWhen checkEnabled="false">
-                	<reference definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-                	</reference>
-            	</visibleWhen>
-			</command>
-		</menuContribution>
-	</extension>
-	<extension point="org.eclipse.ui.handlers">
-	    <handler
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
-            commandId="org.eclipse.xtext.ui.editor.FindReferences">
-            <activeWhen>
-                <reference
-                    definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-                </reference>
-            </activeWhen>
-        </handler>
-    </extension>   
-
-<!-- adding resource factories -->
-
-	<extension
-		point="org.eclipse.emf.ecore.extension_parser">
-		<parser
-			class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
-			type="sgen">
-		</parser>
-	</extension>
-	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
-        <resourceServiceProvider
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
-            uriExtension="sgen">
-        </resourceServiceProvider>
-    </extension>
-
-
-
-   <extension
-         point="org.eclipse.xtext.builder.participant">
-      <participant
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant">
-      </participant>
-   </extension>
-
-	<!-- Quick Outline -->
-	<extension
-		point="org.eclipse.ui.handlers">
-		<handler 
-			class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
-			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
-			<activeWhen>
-				<reference
-					definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-				</reference>
-			</activeWhen>
-		</handler>
-	</extension>
-	<extension
-		point="org.eclipse.ui.commands">
-		<command
-			description="Open the quick outline."
-			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
-			name="Quick Outline">
-		</command>
-	</extension>
-	<extension point="org.eclipse.ui.menus">
-		<menuContribution
-			locationURI="popup:#TextEditorContext?after=group.open">
-			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
-				style="push"
-				tooltip="Open Quick Outline">
-				<visibleWhen checkEnabled="false">
-					<reference definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened"/>
-				</visibleWhen>
-			</command>
-		</menuContribution>
-	</extension>
-   <!-- quickfix marker resolution generator -->
-   <extension
-         point="org.eclipse.ui.ide.markerResolution">
-      <markerResolutionGenerator
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator">
-      </markerResolutionGenerator>
-   </extension>
-
-   	<!-- Rename Refactoring -->
-	<extension point="org.eclipse.ui.handlers">
-		<handler 
-			class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.RenameElementHandler"
-			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
-			<activeWhen>
-				<reference
-					definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-				</reference>
-			</activeWhen>
-		</handler>
-	</extension>
-    <extension point="org.eclipse.ui.menus">
-         <menuContribution
-            locationURI="popup:#TextEditorContext?after=group.edit">
-         <command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
-               style="push">
-            <visibleWhen checkEnabled="false">
-               <reference
-                     definitionId="org.yakindu.sct.generator.genmodel.SGen.Editor.opened">
-               </reference>
-            </visibleWhen>
-         </command>
-      </menuContribution>
-   </extension>
-
-  <extension point="org.eclipse.compare.contentViewers">
-    <viewer id="org.yakindu.sct.generator.genmodel.SGen.compare.contentViewers"
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
-            extensions="sgen">
-    </viewer>
-  </extension>
-  <extension point="org.eclipse.compare.contentMergeViewers">
-    <viewer id="org.yakindu.sct.generator.genmodel.SGen.compare.contentMergeViewers"
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
-            extensions="sgen" label="SGen Compare">
-     </viewer>
-  </extension>
-  <extension point="org.eclipse.ui.editors.documentProviders">
-    <provider id="org.yakindu.sct.generator.genmodel.SGen.editors.documentProviders"
-            class="org.yakindu.sct.generator.genmodel.ui.SGenExecutableExtensionFactory:org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"
-            extensions="sgen">
-    </provider>
-  </extension>
-
-</plugin>

+ 1 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/AbstractSGenUiModule.java

@@ -93,6 +93,7 @@ public abstract class AbstractSGenUiModule extends DefaultUiModule {
 		binder.bind(org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.CONTENT_ASSIST)).to(org.yakindu.sct.generator.genmodel.ui.contentassist.antlr.internal.InternalSGenLexer.class);
 	}
 
+
 	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
 	public java.lang.ClassLoader bindClassLoaderToInstance() {
 		return getClass().getClassLoader();

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

@@ -0,0 +1,36 @@
+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;
+	}
+
+}

+ 116 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenNewFileWizard.java

@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.generator.genmodel.ui.wizard;
+
+import org.eclipse.core.resources.IResource;
+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.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+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;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class SGenNewFileWizard extends Wizard implements INewWizard {
+
+	public static final String ID = "org.yakindu.sct.generator.genmodel.ui.SGenNewFileWizard";
+
+	protected SGenWizardPage1 modelFilePage;
+
+	private IStructuredSelection selection;
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.selection = selection;
+		setWindowTitle("New Yakindu SGen Model");
+		setNeedsProgressMonitor(true);
+
+	}
+
+	@Override
+	public void addPages() {
+		modelFilePage = new SGenWizardPage1("DiagramModelFile", selection,
+				"sgen");
+		modelFilePage.setTitle("YAKINDU SCT Diagram");
+		modelFilePage.setDescription("Create a new YAKINDU SCT Diagram File");
+		addPage(modelFilePage);
+	}
+
+	@Override
+	public boolean performFinish() {
+		IRunnableWithProgress op = new WorkspaceModifyOperation(null) {
+			@Override
+			protected void execute(IProgressMonitor monitor)
+					throws CoreException, InterruptedException {
+				generateFile();
+			}
+		};
+		try {
+			getContainer().run(false, true, op);
+		} catch (Exception e) {
+			return false;
+		}
+		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;
+	}
+
+	public IStructuredSelection getSelection() {
+		return selection;
+	}
+
+	public void setSelection(IStructuredSelection selection) {
+		this.selection = selection;
+	}
+
+}

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

@@ -0,0 +1,36 @@
+«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»
+

+ 93 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage1.java

@@ -0,0 +1,93 @@
+/**
+ * Copyright (c) 2010 committers of YAKINDU and others.
+ * 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.generator.genmodel.ui.wizard;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+public class SGenWizardPage1 extends WizardNewFileCreationPage {
+
+	private final String fileExtension;
+
+	public SGenWizardPage1(String pageName, IStructuredSelection selection,
+			String fileExtension) {
+		super(pageName, selection);
+		this.fileExtension = fileExtension;
+	}
+
+	protected String getExtension() {
+		return fileExtension;
+	}
+
+	public IPath getFilePath() {
+		IPath path = getContainerFullPath();
+		if (path == null) {
+			path = new Path(""); //$NON-NLS-1$
+		}
+		String fileName = getFileName();
+		if (fileName != null) {
+			path = path.append(fileName);
+		}
+		return path;
+	}
+
+	@Override
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		setFileName(getUniqueFileName(getContainerFullPath(), getFileName(),
+				getExtension()));
+		setPageComplete(validatePage());
+	}
+
+	@Override
+	protected boolean validatePage() {
+		if (!super.validatePage()) {
+			return false;
+		}
+		String extension = getExtension();
+		if (extension != null
+				&& !getFilePath().toString().endsWith("." + extension)) {
+			setErrorMessage(NLS.bind("file extension is not valid!", extension));
+			return false;
+		}
+		return true;
+	}
+
+	public static String getUniqueFileName(IPath containerFullPath,
+			String fileName, String extension) {
+		if (containerFullPath == null) {
+			containerFullPath = new Path(""); //$NON-NLS-1$
+		}
+		if (fileName == null || fileName.trim().length() == 0) {
+			fileName = "default"; //$NON-NLS-1$
+		}
+		IPath filePath = containerFullPath.append(fileName);
+		if (extension != null && !extension.equals(filePath.getFileExtension())) {
+			filePath = filePath.addFileExtension(extension);
+		}
+		extension = filePath.getFileExtension();
+		fileName = filePath.removeFileExtension().lastSegment();
+		int i = 1;
+		while (ResourcesPlugin.getWorkspace().getRoot().exists(filePath)) {
+			i++;
+			filePath = containerFullPath.append(fileName + i);
+			if (extension != null) {
+				filePath = filePath.addFileExtension(extension);
+			}
+		}
+		return filePath.lastSegment();
+	}
+}