Skip to content

Commit 610ed52

Browse files
committed
Add content assist proposal to create domain model project
1 parent 684fd34 commit 610ed52

3 files changed

Lines changed: 102 additions & 2 deletions

File tree

java_execution/java_xdsml/plugins/org.gemoc.execution.sequential.javaxdsml.ide.ui/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ Require-Bundle: org.eclipse.core.runtime,
2626
org.eclipse.core.expressions,
2727
org.eclipse.xtext,
2828
org.eclipse.xtext.ui,
29-
org.gemoc.xdsmlframework.ui.utils
29+
org.gemoc.xdsmlframework.ui.utils,
30+
org.eclipse.emf.ecoretools.design
3031
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
3132
Bundle-ActivationPolicy: lazy
3233
Bundle-ClassPath: .

java_execution/java_xdsml/plugins/org.gemoc.execution.sequential.javaxdsml.ide.ui/plugin.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,13 @@
309309
</definition>
310310
</extension>
311311
<extension
312-
point="fr.inria.diverse.melange.ui.contentassist_with">
312+
point="fr.inria.diverse.melange.ui.contentassist_operator">
313313
<proposal
314314
class="org.gemoc.execution.sequential.javaxdsml.ide.ui.editor.SelectDsaProposal">
315315
</proposal>
316+
<proposal
317+
class="org.gemoc.execution.sequential.javaxdsml.ide.ui.editor.CreateEcoreProposal">
318+
</proposal>
316319
</extension>
317320
<extension
318321
point="fr.inria.diverse.melange.ui.contentassist_syntax">
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package org.gemoc.execution.sequential.javaxdsml.ide.ui.editor;
2+
3+
import org.eclipse.core.resources.IFile;
4+
import org.eclipse.core.resources.IProject;
5+
import org.eclipse.core.resources.ResourcesPlugin;
6+
import org.eclipse.core.runtime.CoreException;
7+
import org.eclipse.emf.ecoretools.design.wizard.EcoreModelerWizard;
8+
import org.eclipse.jface.wizard.IWizard;
9+
import org.eclipse.jface.wizard.WizardDialog;
10+
import org.eclipse.ui.PlatformUI;
11+
import org.eclipse.ui.wizards.IWizardDescriptor;
12+
import org.gemoc.commons.eclipse.core.resources.FileFinderVisitor;
13+
import org.gemoc.commons.eclipse.core.resources.NewProjectWorkspaceListener;
14+
import org.gemoc.commons.eclipse.ui.WizardFinder;
15+
import org.gemoc.xdsmlframework.ide.ui.Activator;
16+
17+
import fr.inria.diverse.commons.eclipse.pde.manifest.ManifestChanger;
18+
import fr.inria.diverse.melange.ui.contentassist.IProposal;
19+
20+
public class CreateEcoreProposal implements IProposal{
21+
22+
private IProject ecoreProject;
23+
24+
@Override
25+
public String getDisplayText() {
26+
return "-- Create a Domain Model Project --";
27+
}
28+
29+
@Override
30+
public String getReplacementText() {
31+
32+
IWizardDescriptor descriptor = WizardFinder.findNewWizardDescriptor("org.eclipse.ecoretools.emf.design.wizardID");
33+
34+
// Then if we have a wizard, open it.
35+
if (descriptor != null) {
36+
// add a listener to capture the creation of the resulting project
37+
NewProjectWorkspaceListener workspaceListener = new NewProjectWorkspaceListener();
38+
ResourcesPlugin.getWorkspace().addResourceChangeListener(
39+
workspaceListener);
40+
try {
41+
IWizard wizard = descriptor.createWizard();
42+
// this wizard need some dedicated initialization
43+
((EcoreModelerWizard) wizard).init(PlatformUI.getWorkbench(),
44+
null);
45+
WizardDialog wd = new WizardDialog(PlatformUI.getWorkbench()
46+
.getActiveWorkbenchWindow().getShell(), wizard);
47+
wd.create();
48+
wd.setTitle(wizard.getWindowTitle());
49+
50+
int res = wd.open();
51+
if (res == WizardDialog.OK) {
52+
ResourcesPlugin.getWorkspace().removeResourceChangeListener(workspaceListener);
53+
ecoreProject = workspaceListener.getLastCreatedProject();
54+
}
55+
} catch (CoreException e) {
56+
Activator.error(e.getMessage(), e);
57+
} finally {
58+
// make sure to remove listener in all situations
59+
ResourcesPlugin.getWorkspace().removeResourceChangeListener(
60+
workspaceListener);
61+
if(ecoreProject != null){
62+
return getCreatedEcoreUri();
63+
}
64+
}
65+
}
66+
67+
return "\tsyntax \"platform/resource/project/file.ecore\"";
68+
}
69+
70+
@Override
71+
public void configureProject(IProject project) {
72+
ManifestChanger manifestChanger = new ManifestChanger(project);
73+
try {
74+
manifestChanger.addPluginDependency(ecoreProject.getName());
75+
manifestChanger.commit();
76+
} catch (Exception e) {
77+
e.printStackTrace();
78+
}
79+
}
80+
81+
private String getCreatedEcoreUri(){
82+
FileFinderVisitor ecoreProjectVisitor = new FileFinderVisitor(
83+
"ecore");
84+
try {
85+
ecoreProject.accept(ecoreProjectVisitor);
86+
IFile ecoreIFile = ecoreProjectVisitor.getFile();
87+
if (ecoreIFile != null) {
88+
return "\tsyntax \"platform:/resource"+ecoreIFile.getFullPath().toString()+"\"";
89+
}
90+
} catch (CoreException e) {
91+
Activator.error(e.getMessage(), e);
92+
}
93+
return "";
94+
}
95+
96+
}

0 commit comments

Comments
 (0)