source: default/v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/handler/BT_GenerationHandler.java @ 72

Last change on this file since 72 was 72, checked in by hkaulbersch, 10 years ago

Automatic PDF Generation from .fo files now works

  • Property svn:mime-type set to text/plain
File size: 5.0 KB
Line 
1package de.ugoe.cs.swe.bnftools.ui.handler;
2
3import java.io.File;
4import java.util.Iterator;
5import java.util.Map;
6import java.util.Map.Entry;
7
8import org.eclipse.core.commands.AbstractHandler;
9import org.eclipse.core.commands.ExecutionEvent;
10import org.eclipse.core.commands.ExecutionException;
11import org.eclipse.core.commands.IHandler;
12import org.eclipse.core.commands.common.NotDefinedException;
13import org.eclipse.core.resources.IFile;
14import org.eclipse.core.resources.IFolder;
15import org.eclipse.core.resources.IProject;
16import org.eclipse.core.resources.IWorkspace;
17import org.eclipse.core.resources.ResourcesPlugin;
18import org.eclipse.core.runtime.CoreException;
19import org.eclipse.core.runtime.IPath;
20import org.eclipse.core.runtime.NullProgressMonitor;
21import org.eclipse.core.runtime.Path;
22import org.eclipse.emf.common.util.URI;
23import org.eclipse.emf.ecore.EcorePackage;
24import org.eclipse.emf.ecore.resource.Resource;
25import org.eclipse.emf.ecore.resource.ResourceSet;
26import org.eclipse.emf.ecore.xml.type.SimpleAnyType;
27import org.eclipse.emf.ecore.xml.type.XMLTypeFactory;
28import org.eclipse.ui.IEditorInput;
29import org.eclipse.ui.IEditorPart;
30import org.eclipse.ui.IWorkbench;
31import org.eclipse.ui.IWorkbenchPage;
32import org.eclipse.ui.IWorkbenchWindow;
33import org.eclipse.ui.PlatformUI;
34import org.eclipse.ui.part.FileEditorInput;
35import org.eclipse.xtext.builder.EclipseResourceFileSystemAccess2;
36import org.eclipse.xtext.generator.IGenerator;
37import org.eclipse.xtext.generator.OutputConfiguration;
38import org.eclipse.xtext.resource.IResourceDescriptions;
39import org.eclipse.xtext.ui.resource.IResourceSetProvider;
40
41import com.google.inject.Inject;
42import com.google.inject.Provider;
43
44public class BT_GenerationHandler  extends AbstractHandler implements IHandler {
45
46        @Inject
47    private IGenerator generator;
48 
49    @Inject
50    private Provider<EclipseResourceFileSystemAccess2> fileAccessProvider;
51     
52    @Inject
53    IResourceDescriptions resourceDescriptions;
54     
55    @Inject
56    IResourceSetProvider resourceSetProvider;
57     
58    @Override
59    public Object execute(ExecutionEvent event) throws ExecutionException {
60         
61          //used to save the command name (defined in extensions)
62          String mode = "";
63         
64          try {
65             mode = event.getCommand().getName();
66          } catch (NotDefinedException e1) {
67          // TODO Auto-generated catch block
68            e1.printStackTrace();
69          }
70         
71          // stuff to get the workbench and current file
72          IWorkbench wb = PlatformUI.getWorkbench();
73          IWorkbenchWindow window = wb.getActiveWorkbenchWindow();
74          IWorkbenchPage page = window.getActivePage();
75          IEditorPart editor = page.getActiveEditor();
76          IEditorInput input = editor.getEditorInput();
77          IPath path = ((FileEditorInput) input).getPath();
78         
79          String name = path.toString();
80          File myfile = new File(name);
81         
82          IWorkspace workspace= ResourcesPlugin.getWorkspace();
83          IPath location= Path.fromOSString(myfile.getAbsolutePath());
84          IFile file= workspace.getRoot().getFileForLocation(location);
85         
86          IProject project = file.getProject();
87          IFolder srcGenFolder = project.getFolder("src-gen");
88          if (!srcGenFolder.exists()) {
89            try {
90              srcGenFolder.create(true, true, new NullProgressMonitor());
91            } catch (CoreException e) {
92            return null;
93            }
94          }
95         
96          final EclipseResourceFileSystemAccess2 fsa = fileAccessProvider.get();
97         
98          fsa.setProject(project);
99         
100          //same stuff
101          //fsa.setOutputPath("src-gen");
102          fsa.setOutputPath(srcGenFolder.getName().toString());
103         
104          fsa.setMonitor(new NullProgressMonitor());
105          Map<String, OutputConfiguration> teste = fsa.getOutputConfigurations();
106         
107          Iterator<Entry<String, OutputConfiguration>> it = teste.entrySet().iterator();
108         
109          //make a new Outputconfiguration <- needed
110          while(it.hasNext()){
111         
112            Entry<String, OutputConfiguration> next = it.next();
113            OutputConfiguration out = next.getValue();
114            out.isOverrideExistingResources();
115            out.setCreateOutputDirectory(true); // <--- do not touch this
116         
117          }
118          // ----->
119         
120          URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
121          ResourceSet rs = resourceSetProvider.get(project);
122          Resource r = rs.getResource(uri, true);
123         
124          // to pass a String inside a resource i have to wrap it in a EOBject
125          SimpleAnyType wrapper = XMLTypeFactory.eINSTANCE.createSimpleAnyType();
126          wrapper.setInstanceType(EcorePackage.eINSTANCE.getEString());
127          wrapper.setValue(mode);
128          //
129         
130          // add string to resource
131          r.getContents().add(wrapper);
132         
133          generator.doGenerate(r, fsa);
134         
135          return null;
136         
137        }
138   
139    @Override
140    public boolean isEnabled() {
141        return true;
142    }
143 
144}
Note: See TracBrowser for help on using the repository browser.