diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.dawn.codegen/src/org/eclipse/emf/cdo/dawn/codegen/actions/GenerateDawnGenModelAction.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.dawn.codegen/src/org/eclipse/emf/cdo/dawn/codegen/actions/GenerateDawnGenModelAction.java | 171 |
1 files changed, 123 insertions, 48 deletions
diff --git a/plugins/org.eclipse.emf.cdo.dawn.codegen/src/org/eclipse/emf/cdo/dawn/codegen/actions/GenerateDawnGenModelAction.java b/plugins/org.eclipse.emf.cdo.dawn.codegen/src/org/eclipse/emf/cdo/dawn/codegen/actions/GenerateDawnGenModelAction.java index c7544b2d85..85157774e3 100644 --- a/plugins/org.eclipse.emf.cdo.dawn.codegen/src/org/eclipse/emf/cdo/dawn/codegen/actions/GenerateDawnGenModelAction.java +++ b/plugins/org.eclipse.emf.cdo.dawn.codegen/src/org/eclipse/emf/cdo/dawn/codegen/actions/GenerateDawnGenModelAction.java @@ -10,10 +10,13 @@ */ package org.eclipse.emf.cdo.dawn.codegen.actions; +import org.eclipse.emf.cdo.dawn.codegen.dawngenmodel.DawnEMFGenerator; import org.eclipse.emf.cdo.dawn.codegen.dawngenmodel.DawnGMFGenerator; +import org.eclipse.emf.cdo.dawn.codegen.dawngenmodel.DawnGenerator; import org.eclipse.emf.cdo.dawn.codegen.dawngenmodel.DawngenmodelFactory; import org.eclipse.emf.cdo.dawn.codegen.util.ProjectCreationHelper; +import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; @@ -63,54 +66,32 @@ public class GenerateDawnGenModelAction implements IObjectActionDelegate public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.beginTask("Generate Dawn Code", 1000); - IFile gmfGen = (IFile)selectedElement; - - String gmfGenModelFile = gmfGen.getRawLocationURI().toString(); - String path = gmfGenModelFile.replace(gmfGen.getName(), ""); - String modelname = gmfGen.getName().replace(".gmfgen", ""); - - ResourceSet resourceSet = new ResourceSetImpl(); - resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("gmfgen", - new XMIResourceFactoryImpl()); - resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("genmodel", - new XMIResourceFactoryImpl()); - resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(dawngenmodelFileExtension, - new XMIResourceFactoryImpl()); - - URI gmfGenModelResourceUri = URI.createURI(gmfGenModelFile); - Resource gmfGenModelResource = resourceSet.getResource(gmfGenModelResourceUri, true); - - String dawnGenModelResourcePath = path + "" + modelname + "." + dawngenmodelFileExtension; - Resource dawnGenModelResource = resourceSet.createResource(URI.createURI(dawnGenModelResourcePath)); - - GenEditorGenerator editorGenerator = (GenEditorGenerator)gmfGenModelResource.getContents().get(0); - - DawnGMFGenerator dawnGMFGenerator = DawngenmodelFactory.eINSTANCE.createDawnGMFGenerator(); - - String dawnEditorClassName = getDawnEditorClassName(editorGenerator); - - dawnGMFGenerator.setDawnEditorClassName(dawnEditorClassName); - dawnGMFGenerator.setFragmentName(editorGenerator.getPlugin().getID() + ".dawn"); - dawnGMFGenerator.setDawnCanonicalEditingPolicyClassName(generalPrefix - + editorGenerator.getDiagram().getCanonicalEditPolicyClassName()); - dawnGMFGenerator.setDawnCreationWizardClassName(generalPrefix - + editorGenerator.getDiagram().getCreationWizardClassName()); - dawnGMFGenerator.setDawnDiagramEditPartClassName(generalPrefix - + editorGenerator.getDiagram().getEditPartClassName()); - dawnGMFGenerator.setDawnDocumentProviderClassName(generalPrefix - + editorGenerator.getDiagram().getDocumentProviderClassName()); - dawnGMFGenerator.setDawnEditorUtilClassName(generalPrefix - + editorGenerator.getDiagram().getDiagramEditorUtilClassName()); - dawnGMFGenerator.setDawnEditPartFactoryClassName(generalPrefix - + editorGenerator.getDiagram().getEditPartFactoryClassName()); - dawnGMFGenerator.setDawnEditPartProviderClassName(generalPrefix - + editorGenerator.getDiagram().getEditPartProviderClassName()); - dawnGMFGenerator.setDawnEditPolicyProviderClassName(generalPrefix - + editorGenerator.getDiagram().getEditPartProviderClassName().replace("EditPart", "EditPolicy")); - - dawnGMFGenerator.setGMFGenEditorGenerator(editorGenerator); - - dawnGenModelResource.getContents().add(dawnGMFGenerator); + IFile genFile = (IFile)selectedElement; + + String genModelFile = genFile.getRawLocationURI().toString(); + String path = genModelFile.replace(genFile.getName(), ""); + + ResourceSet resourceSet = createResourceSet(); + + String modelname = "default"; + + modelname = getModelName(genFile); + + Resource dawnGenModelResource = getDawnGenModelResource(path, modelname, resourceSet); + DawnGenerator dawnGenerator = getDawngenerator(dawnGenModelResource); + + if (genFile.getName().endsWith(".gmfgen")) + { + DawnGMFGenerator dawnGMFGenerator = createDawnGMFGenerator(genModelFile, resourceSet); + dawnGenerator.setGmfFragmentgenerator(dawnGMFGenerator); + } + else if (genFile.getName().endsWith(".genmodel")) + { + DawnEMFGenerator dawnEMFGenerator = createDawnEMFGenerator(genModelFile, resourceSet); + dawnGenerator.setEmfFragmentgenerator(dawnEMFGenerator); + } + + dawnGenModelResource.getContents().add(dawnGenerator); try { @@ -123,6 +104,22 @@ public class GenerateDawnGenModelAction implements IObjectActionDelegate ProjectCreationHelper.refreshProject(null, monitor); } + + private DawnGenerator getDawngenerator(Resource dawnGenModelResource) + { + DawnGenerator dawnGenerator; + + if (dawnGenModelResource.getContents().size() != 0) + { + dawnGenerator = (DawnGenerator)dawnGenModelResource.getContents().get(0); + } + else + { + dawnGenerator = DawngenmodelFactory.eINSTANCE.createDawnGenerator(); + } + return dawnGenerator; + } + }); } catch (InvocationTargetException e) @@ -146,6 +143,84 @@ public class GenerateDawnGenModelAction implements IObjectActionDelegate return dawnEditorClassName; } + private DawnEMFGenerator createDawnEMFGenerator(String genModelFile, ResourceSet resourceSet) + { + DawnEMFGenerator dawnEMFGenerator = DawngenmodelFactory.eINSTANCE.createDawnEMFGenerator(); + + URI emfGenModelResourceUri = URI.createURI(genModelFile); + Resource emfGenModelResource = resourceSet.getResource(emfGenModelResourceUri, true); + + GenModel genModel = (GenModel)emfGenModelResource.getContents().get(0); + + dawnEMFGenerator.setEmfGenModel(genModel); + dawnEMFGenerator.setDawnEditorClassName("Dawn" + genModel.getModelName() + "Editor"); + dawnEMFGenerator.setFragmentName(genModel.getEditorPluginID() + ".dawn"); + return dawnEMFGenerator; + } + + private String getModelName(IFile genFile) + { + int lastIndexOf = genFile.getName().lastIndexOf("."); + return genFile.getName().substring(0, lastIndexOf); + } + + private DawnGMFGenerator createDawnGMFGenerator(String gmfGenModelFile, ResourceSet resourceSet) + { + URI gmfGenModelResourceUri = URI.createURI(gmfGenModelFile); + Resource gmfGenModelResource = resourceSet.getResource(gmfGenModelResourceUri, true); + + GenEditorGenerator editorGenerator = (GenEditorGenerator)gmfGenModelResource.getContents().get(0); + + DawnGMFGenerator dawnGMFGenerator = DawngenmodelFactory.eINSTANCE.createDawnGMFGenerator(); + + String dawnEditorClassName = getDawnEditorClassName(editorGenerator); + + dawnGMFGenerator.setDawnEditorClassName(dawnEditorClassName); + dawnGMFGenerator.setFragmentName(editorGenerator.getPlugin().getID() + ".dawn"); + dawnGMFGenerator.setDawnCanonicalEditingPolicyClassName(generalPrefix + + editorGenerator.getDiagram().getCanonicalEditPolicyClassName()); + dawnGMFGenerator.setDawnCreationWizardClassName(generalPrefix + + editorGenerator.getDiagram().getCreationWizardClassName()); + dawnGMFGenerator.setDawnDiagramEditPartClassName(generalPrefix + + editorGenerator.getDiagram().getEditPartClassName()); + dawnGMFGenerator.setDawnDocumentProviderClassName(generalPrefix + + editorGenerator.getDiagram().getDocumentProviderClassName()); + dawnGMFGenerator.setDawnEditorUtilClassName(generalPrefix + + editorGenerator.getDiagram().getDiagramEditorUtilClassName()); + dawnGMFGenerator.setDawnEditPartFactoryClassName(generalPrefix + + editorGenerator.getDiagram().getEditPartFactoryClassName()); + dawnGMFGenerator.setDawnEditPartProviderClassName(generalPrefix + + editorGenerator.getDiagram().getEditPartProviderClassName()); + dawnGMFGenerator.setDawnEditPolicyProviderClassName(generalPrefix + + editorGenerator.getDiagram().getEditPartProviderClassName().replace("EditPart", "EditPolicy")); + + dawnGMFGenerator.setGMFGenEditorGenerator(editorGenerator); + return dawnGMFGenerator; + } + + private Resource getDawnGenModelResource(String path, String modelname, ResourceSet resourceSet) + { + String dawnGenModelResourcePath = path + "" + modelname + "." + dawngenmodelFileExtension; + URI uri = URI.createURI(dawnGenModelResourcePath); + Resource dawnGenModelResource = resourceSet.getResource(uri, true); + + if (dawnGenModelResource == null) + { + dawnGenModelResource = resourceSet.createResource(uri); + } + return dawnGenModelResource; + } + + private ResourceSet createResourceSet() + { + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("gmfgen", new XMIResourceFactoryImpl()); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("genmodel", new XMIResourceFactoryImpl()); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap() + .put(dawngenmodelFileExtension, new XMIResourceFactoryImpl()); + return resourceSet; + } + public void selectionChanged(IAction action, ISelection selection) { if (selection instanceof IStructuredSelection) |