View | Details | Raw Unified | Return to bug 181187 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/gmf/internal/common/ui/ElementSelectorExtension.java (-7 / +13 lines)
Lines 44-49 Link Here
44
	}
44
	}
45
45
46
	protected List<EObject> getModelElements(Resource resource) {
46
	protected List<EObject> getModelElements(Resource resource) {
47
		return getModelElements(resource, true);
48
	}
49
50
	protected List<EObject> getModelElements(Resource resource, boolean sort) {
47
		List<EObject> elements = new ArrayList<EObject>();
51
		List<EObject> elements = new ArrayList<EObject>();
48
		for (Iterator<EObject> it = resource.getAllContents(); it.hasNext();) {
52
		for (Iterator<EObject> it = resource.getAllContents(); it.hasNext();) {
49
			EObject next = it.next();
53
			EObject next = it.next();
Lines 52-65 Link Here
52
				elements.add(next);
56
				elements.add(next);
53
			}
57
			}
54
		}
58
		}
55
		Collections.sort(elements, new Comparator<EObject>() {
59
		if (sort) {
60
			Collections.sort(elements, new Comparator<EObject>() {
56
61
57
			public int compare(EObject o1, EObject o2) {
62
				public int compare(EObject o1, EObject o2) {
58
				String n1 = getModelElementLabel(o1);
63
					String n1 = getModelElementLabel(o1);
59
				String n2 = getModelElementLabel(o2);
64
					String n2 = getModelElementLabel(o2);
60
				return n1.compareTo(n2);
65
					return n1.compareTo(n2);
61
			}
66
				}
62
		});
67
			});
68
		}
63
		return elements;
69
		return elements;
64
	}
70
	}
65
71
(-)META-INF/MANIFEST.MF (-2 / +2 lines)
Lines 22-29 Link Here
22
Eclipse-LazyStart: true
22
Eclipse-LazyStart: true
23
Export-Package: org.eclipse.gmf.internal.bridge.resolver;x-internal:=true,
23
Export-Package: org.eclipse.gmf.internal.bridge.resolver;x-internal:=true,
24
 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",
24
 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",
25
 org.eclipse.gmf.internal.bridge.ui;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui",
25
 org.eclipse.gmf.internal.bridge.ui;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui,org.eclipse.gmf.codegen.ui",
26
 org.eclipse.gmf.internal.bridge.wizards;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui",
26
 org.eclipse.gmf.internal.bridge.wizards;x-friends:="org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.doc.ui,org.eclipse.gmf.codegen.ui",
27
 org.eclipse.gmf.internal.bridge.wizards.pages;x-friends:="org.eclipse.gmf.doc.ui",
27
 org.eclipse.gmf.internal.bridge.wizards.pages;x-friends:="org.eclipse.gmf.doc.ui",
28
 org.eclipse.gmf.internal.bridge.wizards.strategy;x-internal:=true
28
 org.eclipse.gmf.internal.bridge.wizards.strategy;x-internal:=true
29
Bundle-RequiredExecutionEnvironment: J2SE-1.5
29
Bundle-RequiredExecutionEnvironment: J2SE-1.5
(-)plugin.properties (+2 lines)
Lines 23-25 Link Here
23
migrate.model.action=Migrate to GMF 2.0
23
migrate.model.action=Migrate to GMF 2.0
24
24
25
dashboard.gende=Generate diagram editor
25
dashboard.gende=Generate diagram editor
26
27
addextensionmodel.action=Add extension model...
(-)plugin.xml (+20 lines)
Lines 29-34 Link Here
29
               id="gmf.codegen.ui.executeTemplatesAction">
29
               id="gmf.codegen.ui.executeTemplatesAction">
30
         </action>
30
         </action>
31
      </objectContribution>
31
      </objectContribution>
32
      <objectContribution
33
            adaptable="true"
34
            id="gmf.codegen.ui.addExtensionModel"
35
            nameFilter="*.gmfgen"
36
            objectClass="org.eclipse.core.resources.IFile">
37
		<!-- uncomment to use PredefinedModelExtension feature -->
38
		<!--visibility>
39
			<or>
40
  				<objectState name="extension" value="gmfgen"/>
41
	  			<objectState name="extension" value="ecore"/>
42
			</or>
43
		</visibility-->
44
         <action
45
               label="%addextensionmodel.action"
46
               class="org.eclipse.gmf.internal.codegen.popup.actions.AddExtensionModelAction"
47
               menubarPath="additions"
48
               enablesFor="+"
49
               id="gmf.codegen.ui.addExtensionModelAction">
50
         </action>
51
      </objectContribution>
32
	<objectContribution
52
	<objectContribution
33
    		adaptable="true"
53
    		adaptable="true"
34
	        id="gmf.codegen.ui.migrate.model.gmfgen"
54
	        id="gmf.codegen.ui.migrate.model.gmfgen"
(-)src/org/eclipse/gmf/internal/codegen/popup/actions/Messages.java (+10 lines)
Lines 22-27 Link Here
22
22
23
	public static String DiagnosticsDialog_gotoProblem_menuItem;
23
	public static String DiagnosticsDialog_gotoProblem_menuItem;
24
24
25
	public static String GMFGenExtensionModelWizard_classChooserLabel;
26
27
	public static String GMFGenExtensionModelWizard_pageDescription;
28
29
	public static String GMFGenExtensionModelWizard_pageTitle;
30
31
	public static String GMFGenExtensionModelWizard_unnamedClassName;
32
33
	public static String GMFGenExtensionModelWizard_windowTitle;
34
25
	public static String migration_confirmModelOverwriteMessage;
35
	public static String migration_confirmModelOverwriteMessage;
26
36
27
	public static String migration_confirmModelOverwriteTitle;
37
	public static String migration_confirmModelOverwriteTitle;
(-)src/org/eclipse/gmf/internal/codegen/popup/actions/messages.properties (+5 lines)
Lines 8-10 Link Here
8
DiagnosticsDialog_Copy_menuItem=Copy
8
DiagnosticsDialog_Copy_menuItem=Copy
9
DiagnosticsDialog_gotoProblem_menuItem=Go to problem
9
DiagnosticsDialog_gotoProblem_menuItem=Go to problem
10
10
11
GMFGenExtensionModelWizard_windowTitle=Add Your Extension Domain Model To GMFGen
12
GMFGenExtensionModelWizard_pageTitle=Select Extension Domain Model
13
GMFGenExtensionModelWizard_pageDescription=Load extension model and select root element to create in GMFGen.
14
GMFGenExtensionModelWizard_classChooserLabel=Root Class:
15
GMFGenExtensionModelWizard_unnamedClassName=<unnamed>
(-)src/org/eclipse/gmf/internal/codegen/popup/actions/AddExtensionModelAction.java (+63 lines)
Added Link Here
1
/*
2
 * Copyright (c) 2007 Borland Software Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Borland Software Corporation - initial API and implementation
10
 */
11
package org.eclipse.gmf.internal.codegen.popup.actions;
12
13
import org.eclipse.jface.action.IAction;
14
import org.eclipse.jface.viewers.ISelection;
15
import org.eclipse.jface.viewers.IStructuredSelection;
16
import org.eclipse.jface.wizard.WizardDialog;
17
import org.eclipse.swt.widgets.Shell;
18
import org.eclipse.ui.IObjectActionDelegate;
19
import org.eclipse.ui.IWorkbench;
20
import org.eclipse.ui.IWorkbenchPart;
21
import org.eclipse.ui.IWorkbenchWizard;
22
23
public class AddExtensionModelAction implements IObjectActionDelegate {
24
25
	private IStructuredSelection mySelection;
26
27
	private IWorkbenchPart myPart;
28
29
	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
30
		myPart = targetPart;
31
	}
32
33
	public void selectionChanged(IAction action, ISelection selection) {
34
		mySelection = (IStructuredSelection) selection;
35
	}
36
37
	public void run(IAction action) {
38
		// Create the wizard
39
		IWorkbenchWizard wizard = createWizard();
40
		wizard.init(getWorkbench(), getSelection());
41
		
42
		// Create the wizard dialog
43
		WizardDialog dialog = new WizardDialog(getShell(), wizard);
44
		// Open the wizard dialog
45
		dialog.open();
46
	}
47
	
48
	protected IWorkbenchWizard createWizard() {
49
		return new GMFGenExtensionModelWizard();
50
	}
51
52
	private Shell getShell() {
53
		return myPart.getSite().getShell();
54
	}
55
	
56
	private IWorkbench getWorkbench() {
57
		return myPart.getSite().getWorkbenchWindow().getWorkbench();
58
	}
59
60
	private IStructuredSelection getSelection() {
61
		return mySelection;
62
	}
63
}
(-)src/org/eclipse/gmf/internal/codegen/popup/actions/GMFGenExtensionModelWizard.java (+185 lines)
Added Link Here
1
/*
2
 * Copyright (c) 2007 Borland Software Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Borland Software Corporation - initial API and implementation
10
 */
11
package org.eclipse.gmf.internal.codegen.popup.actions;
12
13
import java.io.IOException;
14
import java.lang.reflect.InvocationTargetException;
15
import java.util.HashMap;
16
import java.util.List;
17
import java.util.Map;
18
19
import org.eclipse.core.resources.IFile;
20
import org.eclipse.core.runtime.IProgressMonitor;
21
import org.eclipse.emf.common.util.URI;
22
import org.eclipse.emf.ecore.EClass;
23
import org.eclipse.emf.ecore.EObject;
24
import org.eclipse.emf.ecore.EcorePackage;
25
import org.eclipse.emf.ecore.resource.Resource;
26
import org.eclipse.emf.ecore.resource.ResourceSet;
27
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
28
import org.eclipse.emf.ecore.xmi.XMLResource;
29
import org.eclipse.gmf.internal.bridge.ui.Plugin;
30
import org.eclipse.gmf.internal.bridge.wizards.WizardUtil;
31
import org.eclipse.gmf.internal.common.ui.ElementSelectorExtension;
32
import org.eclipse.gmf.internal.common.ui.ExtensibleModelSelectionPage;
33
import org.eclipse.gmf.internal.common.ui.ListElementSelectorExtension;
34
import org.eclipse.gmf.internal.common.ui.PredefinedModelExtension;
35
import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider;
36
import org.eclipse.jface.viewers.IStructuredSelection;
37
import org.eclipse.jface.viewers.StructuredSelection;
38
import org.eclipse.jface.wizard.Wizard;
39
import org.eclipse.ui.IWorkbench;
40
import org.eclipse.ui.IWorkbenchWizard;
41
import org.eclipse.ui.PartInitException;
42
import org.eclipse.ui.actions.WorkspaceModifyOperation;
43
44
public class GMFGenExtensionModelWizard extends Wizard implements IWorkbenchWizard {
45
	private static String GMFGEN_FILE_EXTENSION = "gmfgen"; //$NON-NLS-1$
46
	private static String ECORE_FILE_EXTENSION = "ecore"; //$NON-NLS-1$
47
48
	private IWorkbench myWorkbench;
49
	private IStructuredSelection mySelection;
50
	private ElementSelectorExtension myRootElementSelectorExtension;
51
	private ResourceSet myResourceSet;
52
	private ResourceLocationProvider myResourceLocationProvider;
53
	private Map<String, Object> myGmfgenResourceSaveOptions;
54
	
55
	public GMFGenExtensionModelWizard() {
56
		super();
57
	}
58
59
	public void init(IWorkbench workbench, IStructuredSelection selection) {
60
		myWorkbench = workbench;
61
		mySelection = selection;
62
		setWindowTitle(Messages.GMFGenExtensionModelWizard_windowTitle);
63
	}
64
	
65
	public IWorkbench getWorkbench() {
66
		return myWorkbench;
67
	}
68
	
69
	public IStructuredSelection getSelection() {
70
		return mySelection;
71
	}
72
	
73
	protected ResourceSet getResourceSet() {
74
		if (myResourceSet == null) {
75
			myResourceSet = new ResourceSetImpl();
76
		}
77
		return myResourceSet;
78
	}
79
80
	private Map<String, Object> getGmfgenResourceSaveOptions() {
81
		if (myGmfgenResourceSaveOptions == null) {
82
			myGmfgenResourceSaveOptions = new HashMap<String, Object>();
83
			myGmfgenResourceSaveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
84
		}
85
		return myGmfgenResourceSaveOptions;
86
	}
87
88
	public ElementSelectorExtension getRootElementSelectorExtension() {
89
		return myRootElementSelectorExtension;
90
	}
91
	
92
	public ResourceLocationProvider getResourceLocationProvider() {
93
		return myResourceLocationProvider;
94
	}
95
	
96
	@Override
97
	public void addPages() {
98
		myResourceLocationProvider = new ResourceLocationProvider(getSelection());
99
		ExtensibleModelSelectionPage domainModelSelectionPage = new ExtensibleModelSelectionPage("domain", myResourceLocationProvider, getResourceSet()) { //$NON-NLS-1$
100
101
			protected String getModelFileExtension() {
102
				return ECORE_FILE_EXTENSION;
103
			}
104
		};
105
		domainModelSelectionPage.setTitle(Messages.GMFGenExtensionModelWizard_pageTitle);
106
		domainModelSelectionPage.setDescription(Messages.GMFGenExtensionModelWizard_pageDescription);
107
		List<URI> uris = myResourceLocationProvider.getSelectedURIs(ECORE_FILE_EXTENSION);
108
		uris.add(URI.createURI("platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore")); //$NON-NLS-1$
109
		domainModelSelectionPage.addExtension("prem", new PredefinedModelExtension(domainModelSelectionPage, uris)); //$NON-NLS-1$
110
		myRootElementSelectorExtension = new ListElementSelectorExtension() {
111
112
			protected String getModelElementName() {
113
				return Messages.GMFGenExtensionModelWizard_classChooserLabel;
114
			}
115
116
			protected String getModelElementLabel(EObject modelElement) {
117
				String name = ((EClass) modelElement).getName();
118
				if (name == null || name.trim().length() == 0) {
119
					name = Messages.GMFGenExtensionModelWizard_unnamedClassName;
120
				}
121
				return name;
122
			}
123
124
			protected boolean isApplicable(EObject element) {
125
				EClass clazz = (EClass) element;
126
				return !clazz.isAbstract();
127
			}
128
			
129
			protected EClass getModelElementClass() {
130
				return EcorePackage.eINSTANCE.getEClass();
131
			}
132
		};
133
		domainModelSelectionPage.addExtension("domainElement", myRootElementSelectorExtension); //$NON-NLS-1$
134
		addPage(domainModelSelectionPage);
135
		super.addPages();
136
	}
137
138
	@Override
139
	public boolean performFinish() {
140
		WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
141
142
			protected void execute(IProgressMonitor progressMonitor) {
143
				try {
144
					ElementSelectorExtension extension = getRootElementSelectorExtension();
145
					EClass rootClass = (EClass) extension.getModelElement();
146
					EObject instantiated = rootClass.getEPackage().getEFactoryInstance().create(rootClass);
147
					List<URI> gmfgenURIs = getResourceLocationProvider().getSelectedURIs(GMFGEN_FILE_EXTENSION);
148
					for (int i=0; i<gmfgenURIs.size(); i++) {
149
						URI nextGmfgenURI = gmfgenURIs.get(i);
150
						addExtensionMetamodelRootToGmfgen(nextGmfgenURI, instantiated);
151
					}
152
				} catch (Exception ex) {
153
					Plugin.log(ex);
154
				} finally {
155
					progressMonitor.done();
156
				}
157
			}
158
		};
159
160
		try {
161
			getContainer().run(false, false, operation);
162
			List<IFile> selectedGmfgenFiles = getResourceLocationProvider().getSelectedFiles(GMFGEN_FILE_EXTENSION, false);
163
			WizardUtil.selectReveal(getWorkbench(), new StructuredSelection(selectedGmfgenFiles));
164
			if (!selectedGmfgenFiles.isEmpty()) {
165
				WizardUtil.openInEditor(getWorkbench(), selectedGmfgenFiles.get(0));
166
			}
167
		} catch (InvocationTargetException ex) {
168
			return false;
169
		} catch (InterruptedException ex) {
170
			return false;
171
		} catch (PartInitException ex) {
172
			Plugin.log(ex);
173
		}
174
		return true;
175
	}
176
177
	protected void addExtensionMetamodelRootToGmfgen(URI nextGmfgenURI, EObject instantiated) throws IOException {
178
		Resource gmfgenModel = getResourceSet().createResource(nextGmfgenURI);
179
		gmfgenModel.load(getResourceSet().getLoadOptions());
180
		gmfgenModel.getContents().add(instantiated);
181
		gmfgenModel.save(getGmfgenResourceSaveOptions());
182
		gmfgenModel.unload();
183
	}
184
185
}

Return to bug 181187