package org.reuseware.air.ui.eclipse.actions; import java.io.IOException; import java.util.Iterator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspaceDescription; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.reuseware.air.comogen.ExtensionContext; import org.reuseware.air.comogen.IExtensionContext; import org.reuseware.air.comogen.util.CMSLSpecificationLoader; import org.reuseware.air.language.cmsl.ExtensionProgram; import org.reuseware.air.util.FileProcessingException; import org.reuseware.air.comogen.CompositionSystemGenerator; public class GenerateLanguagePluginAction implements IObjectActionDelegate { private ISelection selection; private IWorkbenchPart part; /** * Process the file (use own workbench part) * * @param file */ public void process(final IFile file) { process(file, part); } /** * Process the file (use given workbench part) * * @param file * @param part */ public void process(final IFile file, IWorkbenchPart part) { IExtensionContext extensionContext; try { extensionContext = new ExtensionContext((ExtensionProgram)CMSLSpecificationLoader.parseCMSLSpecification(file).getUnit()); //GenerateLanguagePlugin genPlugin = new GenerateLanguagePlugin(); CompositionSystemGenerator.processLanguageExtension(extensionContext); try { CompositionSystemGenerator.generateEcoreFile(extensionContext); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } CompositionSystemGenerator.createGenModel(extensionContext); } catch (FileProcessingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Run action * */ @SuppressWarnings("unchecked") public void run(IAction action) { boolean autoBuildState = isAutoBuilding(); setAutoBuilding(false); if (selection instanceof IStructuredSelection) { for (Iterator i = ((IStructuredSelection)selection).iterator(); i.hasNext(); ) { Object o = i.next(); if (o instanceof IFile) { IFile file = (IFile) o; process(file); } } } setAutoBuilding(autoBuildState); } /** * * @param state */ private void setAutoBuilding(boolean state) { IWorkspaceDescription workspaceDesc = ResourcesPlugin.getWorkspace().getDescription(); workspaceDesc.setAutoBuilding(state); try { ResourcesPlugin.getWorkspace().setDescription(workspaceDesc); } catch (CoreException ex) { } } /** * * @return */ private boolean isAutoBuilding() { return ResourcesPlugin.getWorkspace().getDescription().isAutoBuilding(); } /* * (non-Javadoc) * * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, * org.eclipse.jface.viewers.ISelection) */ public void selectionChanged(IAction action, ISelection selection) { this.selection = selection; } /* * (non-Javadoc) * * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, * org.eclipse.ui.IWorkbenchPart) */ public void setActivePart(IAction action, IWorkbenchPart targetPart) { this.part = targetPart; } }