### Eclipse Workspace Patch 1.0 #P org.eclipse.gmf.common Index: src/org/eclipse/gmf/internal/common/ui/ListElementSelectorExtension.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/ui/ListElementSelectorExtension.java,v retrieving revision 1.4 diff -u -r1.4 ListElementSelectorExtension.java --- src/org/eclipse/gmf/internal/common/ui/ListElementSelectorExtension.java 19 Mar 2007 16:49:09 -0000 1.4 +++ src/org/eclipse/gmf/internal/common/ui/ListElementSelectorExtension.java 17 Apr 2007 23:12:30 -0000 @@ -48,7 +48,11 @@ GridData data = new GridData(); label.setLayoutData(data); } - list = new List(plate, SWT.SINGLE | SWT.V_SCROLL); + int listStyle = SWT.SINGLE | SWT.V_SCROLL; + if ("win32".equals(SWT.getPlatform())) { //$NON-NLS-1$ + listStyle = listStyle | SWT.BORDER; + } + list = new List(plate, listStyle); list.setEnabled(false); { GridData data = new GridData(); Index: src/org/eclipse/gmf/internal/common/ui/ElementSelectorExtension.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/ui/ElementSelectorExtension.java,v retrieving revision 1.6 diff -u -r1.6 ElementSelectorExtension.java --- src/org/eclipse/gmf/internal/common/ui/ElementSelectorExtension.java 19 Mar 2007 16:49:09 -0000 1.6 +++ src/org/eclipse/gmf/internal/common/ui/ElementSelectorExtension.java 17 Apr 2007 23:12:30 -0000 @@ -55,9 +55,7 @@ Collections.sort(elements, new Comparator() { public int compare(EObject o1, EObject o2) { - String n1 = getModelElementLabel(o1); - String n2 = getModelElementLabel(o2); - return n1.compareTo(n2); + return compareModelElementsOrder(o1, o2); } }); return elements; @@ -71,4 +69,10 @@ public EObject getModelElement() { return selectedModelElement; } + + protected int compareModelElementsOrder(EObject o1, EObject o2) { + String n1 = getModelElementLabel(o1); + String n2 = getModelElementLabel(o2); + return n1.compareTo(n2); + } } #P org.eclipse.gmf.bridge.ui Index: META-INF/MANIFEST.MF =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.bridge.ui/META-INF/MANIFEST.MF,v retrieving revision 1.14 diff -u -r1.14 MANIFEST.MF --- META-INF/MANIFEST.MF 5 Apr 2007 20:57:15 -0000 1.14 +++ META-INF/MANIFEST.MF 17 Apr 2007 23:12:31 -0000 @@ -22,8 +22,8 @@ Eclipse-LazyStart: true Export-Package: org.eclipse.gmf.internal.bridge.resolver;x-internal:=true, org.eclipse.gmf.internal.bridge.transform;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.codegen.ui,org.eclipse.gmf.tests,org.eclipse.gmf.codegen.lite.ui", - org.eclipse.gmf.internal.bridge.ui;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui", - org.eclipse.gmf.internal.bridge.wizards;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui", + org.eclipse.gmf.internal.bridge.ui;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui,org.eclipse.gmf.codegen.ui", + org.eclipse.gmf.internal.bridge.wizards;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui,org.eclipse.gmf.codegen.ui", org.eclipse.gmf.internal.bridge.wizards.pages;x-friends:="org.eclipse.gmf.doc.ui", org.eclipse.gmf.internal.bridge.wizards.strategy;x-internal:=true Bundle-RequiredExecutionEnvironment: J2SE-1.5 #P org.eclipse.gmf.codegen.ui Index: plugin.properties =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.codegen.ui/plugin.properties,v retrieving revision 1.16 diff -u -r1.16 plugin.properties --- plugin.properties 5 Apr 2007 20:57:00 -0000 1.16 +++ plugin.properties 17 Apr 2007 23:12:31 -0000 @@ -23,3 +23,5 @@ migrate.model.action=Migrate to GMF 2.0 dashboard.gende=Generate diagram editor + +addextensionmodel.action=Add extension model... Index: plugin.xml =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.codegen.ui/plugin.xml,v retrieving revision 1.18 diff -u -r1.18 plugin.xml --- plugin.xml 5 Apr 2007 20:57:00 -0000 1.18 +++ plugin.xml 17 Apr 2007 23:12:31 -0000 @@ -29,6 +29,26 @@ id="gmf.codegen.ui.executeTemplatesAction"> + + + + + + Index: src/org/eclipse/gmf/internal/codegen/popup/actions/AddExtensionModelAction.java =================================================================== RCS file: src/org/eclipse/gmf/internal/codegen/popup/actions/AddExtensionModelAction.java diff -N src/org/eclipse/gmf/internal/codegen/popup/actions/AddExtensionModelAction.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/gmf/internal/codegen/popup/actions/AddExtensionModelAction.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2007 Borland Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Borland Software Corporation - initial API and implementation + */ +package org.eclipse.gmf.internal.codegen.popup.actions; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWizard; + +public class AddExtensionModelAction implements IObjectActionDelegate { + + private IStructuredSelection mySelection; + + private IWorkbenchPart myPart; + + public void setActivePart(IAction action, IWorkbenchPart targetPart) { + myPart = targetPart; + } + + public void selectionChanged(IAction action, ISelection selection) { + mySelection = (IStructuredSelection) selection; + } + + public void run(IAction action) { + // Create the wizard + IWorkbenchWizard wizard = createWizard(); + wizard.init(getWorkbench(), getSelection()); + + // Create the wizard dialog + WizardDialog dialog = new WizardDialog(getShell(), wizard); + // Open the wizard dialog + dialog.open(); + } + + protected IWorkbenchWizard createWizard() { + return new GMFGenExtensionModelWizard(); + } + + private Shell getShell() { + return myPart.getSite().getShell(); + } + + private IWorkbench getWorkbench() { + return myPart.getSite().getWorkbenchWindow().getWorkbench(); + } + + private IStructuredSelection getSelection() { + return mySelection; + } +} Index: src/org/eclipse/gmf/internal/codegen/popup/actions/GMFGenExtensionModelWizard.java =================================================================== RCS file: src/org/eclipse/gmf/internal/codegen/popup/actions/GMFGenExtensionModelWizard.java diff -N src/org/eclipse/gmf/internal/codegen/popup/actions/GMFGenExtensionModelWizard.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/gmf/internal/codegen/popup/actions/GMFGenExtensionModelWizard.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2007 Borland Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Borland Software Corporation - initial API and implementation + */ +package org.eclipse.gmf.internal.codegen.popup.actions; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.XMLResource; +import org.eclipse.gmf.internal.bridge.ui.Plugin; +import org.eclipse.gmf.internal.bridge.wizards.WizardUtil; +import org.eclipse.gmf.internal.common.ui.ElementSelectorExtension; +import org.eclipse.gmf.internal.common.ui.ExtensibleModelSelectionPage; +import org.eclipse.gmf.internal.common.ui.ListElementSelectorExtension; +import org.eclipse.gmf.internal.common.ui.PredefinedModelExtension; +import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWizard; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.actions.WorkspaceModifyOperation; + +public class GMFGenExtensionModelWizard extends Wizard implements IWorkbenchWizard { + private static String GMFGEN_FILE_EXTENSION = "gmfgen"; //$NON-NLS-1$ + private static String ECORE_FILE_EXTENSION = "ecore"; //$NON-NLS-1$ + + private IWorkbench myWorkbench; + private IStructuredSelection mySelection; + private ElementSelectorExtension myRootElementSelectorExtension; + private ResourceSet myResourceSet; + private ResourceLocationProvider myResourceLocationProvider; + private Map myGmfgenResourceSaveOptions; + + public GMFGenExtensionModelWizard() { + super(); + } + + public void init(IWorkbench workbench, IStructuredSelection selection) { + myWorkbench = workbench; + mySelection = selection; + setWindowTitle(Messages.GMFGenExtensionModelWizard_windowTitle); + } + + public IWorkbench getWorkbench() { + return myWorkbench; + } + + public IStructuredSelection getSelection() { + return mySelection; + } + + protected ResourceSet getResourceSet() { + if (myResourceSet == null) { + myResourceSet = new ResourceSetImpl(); + } + return myResourceSet; + } + + private Map getGmfgenResourceSaveOptions() { + if (myGmfgenResourceSaveOptions == null) { + myGmfgenResourceSaveOptions = new HashMap(); + myGmfgenResourceSaveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$ + } + return myGmfgenResourceSaveOptions; + } + + public ElementSelectorExtension getRootElementSelectorExtension() { + return myRootElementSelectorExtension; + } + + public ResourceLocationProvider getResourceLocationProvider() { + return myResourceLocationProvider; + } + + @Override + public void addPages() { + myResourceLocationProvider = new ResourceLocationProvider(getSelection()); + ExtensibleModelSelectionPage domainModelSelectionPage = new ExtensibleModelSelectionPage("domain", myResourceLocationProvider, getResourceSet()) { //$NON-NLS-1$ + + protected String getModelFileExtension() { + return ECORE_FILE_EXTENSION; + } + }; + domainModelSelectionPage.setTitle(Messages.GMFGenExtensionModelWizard_pageTitle); + domainModelSelectionPage.setDescription(Messages.GMFGenExtensionModelWizard_pageDescription); + List uris = myResourceLocationProvider.getSelectedURIs(ECORE_FILE_EXTENSION); + uris.add(URI.createURI("platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore")); //$NON-NLS-1$ + domainModelSelectionPage.addExtension("prem", new PredefinedModelExtension(domainModelSelectionPage, uris)); //$NON-NLS-1$ + myRootElementSelectorExtension = new ListElementSelectorExtension() { + + protected String getModelElementName() { + return Messages.GMFGenExtensionModelWizard_classChooserLabel; + } + + protected String getModelElementLabel(EObject modelElement) { + String name = ((EClass) modelElement).getName(); + if (name == null || name.trim().length() == 0) { + name = Messages.GMFGenExtensionModelWizard_unnamedClassName; + } + return name; + } + + protected boolean isApplicable(EObject element) { + EClass clazz = (EClass) element; + return !clazz.isAbstract(); + } + + protected EClass getModelElementClass() { + return EcorePackage.eINSTANCE.getEClass(); + } + + protected int compareModelElementsOrder(EObject o1, EObject o2) { + // we override this method to turn off sorting of the list and provide natural classes order + return 0; + } + }; + domainModelSelectionPage.addExtension("domainElement", myRootElementSelectorExtension); //$NON-NLS-1$ + addPage(domainModelSelectionPage); + super.addPages(); + } + + @Override + public boolean performFinish() { + WorkspaceModifyOperation operation = new WorkspaceModifyOperation() { + + protected void execute(IProgressMonitor progressMonitor) { + try { + ElementSelectorExtension extension = getRootElementSelectorExtension(); + EClass rootClass = (EClass) extension.getModelElement(); + EObject instantiated = rootClass.getEPackage().getEFactoryInstance().create(rootClass); + List gmfgenURIs = getResourceLocationProvider().getSelectedURIs(GMFGEN_FILE_EXTENSION); + for (int i=0; i selectedGmfgenFiles = getResourceLocationProvider().getSelectedFiles(GMFGEN_FILE_EXTENSION, false); + WizardUtil.selectReveal(getWorkbench(), new StructuredSelection(selectedGmfgenFiles)); + if (!selectedGmfgenFiles.isEmpty()) { + WizardUtil.openInEditor(getWorkbench(), selectedGmfgenFiles.get(0)); + } + } catch (InvocationTargetException ex) { + return false; + } catch (InterruptedException ex) { + return false; + } catch (PartInitException ex) { + Plugin.log(ex); + } + return true; + } + + protected void addExtensionMetamodelRootToGmfgen(URI nextGmfgenURI, EObject instantiated) throws IOException { + Resource gmfgenModel = getResourceSet().createResource(nextGmfgenURI); + gmfgenModel.load(getResourceSet().getLoadOptions()); + gmfgenModel.getContents().add(instantiated); + gmfgenModel.save(getGmfgenResourceSaveOptions()); + gmfgenModel.unload(); + } + +}