package org.reuseware.air.ui.eclipse.actions; import java.util.Iterator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; 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; public class GeneratePluginsAction implements IObjectActionDelegate { private ISelection selection; private IWorkbenchPart part; private void process(final IFile file) { /** * Generate extended language model * */ GenerateReuseLanguageModelAction extendedModelAction = new GenerateReuseLanguageModelAction(); // simulate the action extendedModelAction.process(file); /** * Generate base language plugin * */ IExtensionContext context = null; try { context = new ExtensionContext((ExtensionProgram)CMSLSpecificationLoader.parseCMSLSpecification(file).getUnit()); } catch (FileProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } String baseLanguageModelName = context.getBaseLanguageName() + ".ecore"; GenerateLanguagePluginAction generatePluginAction = new GenerateLanguagePluginAction(); // get the base language model file IFile baseModelFile = getFile(file.getParent(), baseLanguageModelName); // simulate the action if (baseModelFile != null) generatePluginAction.process(baseModelFile, part); /** * Generate reuse language plugin * */ String reuseLanguageModelName = context.getReuseLanguageName() + ".ecore"; // get the base language model file IFile reuseModelFile = getFile(file.getParent(), reuseLanguageModelName); // simulate the action if (baseModelFile != null) generatePluginAction.process(reuseModelFile, part); /** * Generate component model plugin * */ GenerateComponentModelAction generateComponentModelAction = new GenerateComponentModelAction(); generateComponentModelAction.process(file, part); return; } /** * Retrieves a file, regardless if contained in IFolder or IProject * * @param parent * @param fileName * @return */ private IFile getFile(IResource parent, String fileName) { IFile file = null; // get the reuse language model file if (parent instanceof IFolder) { IFolder folder = (IFolder)parent; file = folder.getFile(fileName); } else if (parent instanceof IProject) { IProject folder = (IProject) parent; file = folder.getFile(fileName); } return file; } /** * Run * */ @SuppressWarnings("unchecked") public void run(IAction action) { 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); } } } } /* * (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; } }