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

Collapse All | Expand All

(-)src/org/eclipse/gmf/internal/common/ui/ListElementSelectorExtension.java (-1 / +5 lines)
Lines 48-54 Link Here
48
			GridData data = new GridData();
48
			GridData data = new GridData();
49
			label.setLayoutData(data);
49
			label.setLayoutData(data);
50
		}
50
		}
51
		list = new List(plate, SWT.SINGLE | SWT.V_SCROLL);
51
		int listStyle = SWT.SINGLE | SWT.V_SCROLL;
52
		if ("win32".equals(SWT.getPlatform())) { //$NON-NLS-1$
53
			listStyle = listStyle | SWT.BORDER;
54
		}
55
		list = new List(plate, listStyle);
52
		list.setEnabled(false);
56
		list.setEnabled(false);
53
		{
57
		{
54
			GridData data = new GridData();
58
			GridData data = new GridData();
(-)src/org/eclipse/gmf/internal/common/ui/ElementSelectorExtension.java (-3 / +7 lines)
Lines 55-63 Link Here
55
		Collections.sort(elements, new Comparator<EObject>() {
55
		Collections.sort(elements, new Comparator<EObject>() {
56
56
57
			public int compare(EObject o1, EObject o2) {
57
			public int compare(EObject o1, EObject o2) {
58
				String n1 = getModelElementLabel(o1);
58
				return compareModelElementsOrder(o1, o2);
59
				String n2 = getModelElementLabel(o2);
60
				return n1.compareTo(n2);
61
			}
59
			}
62
		});
60
		});
63
		return elements;
61
		return elements;
Lines 71-74 Link Here
71
	public EObject getModelElement() {
69
	public EObject getModelElement() {
72
		return selectedModelElement;
70
		return selectedModelElement;
73
	}
71
	}
72
73
	protected int compareModelElementsOrder(EObject o1, EObject o2) {
74
		String n1 = getModelElementLabel(o1);
75
		String n2 = getModelElementLabel(o2);
76
		return n1.compareTo(n2);
77
	}
74
}
78
}
(-)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 (+190 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
			protected int compareModelElementsOrder(EObject o1, EObject o2) {
134
				// we override this method to turn off sorting of the list and provide natural classes order
135
				return 0;
136
			}
137
		};
138
		domainModelSelectionPage.addExtension("domainElement", myRootElementSelectorExtension); //$NON-NLS-1$
139
		addPage(domainModelSelectionPage);
140
		super.addPages();
141
	}
142
143
	@Override
144
	public boolean performFinish() {
145
		WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
146
147
			protected void execute(IProgressMonitor progressMonitor) {
148
				try {
149
					ElementSelectorExtension extension = getRootElementSelectorExtension();
150
					EClass rootClass = (EClass) extension.getModelElement();
151
					EObject instantiated = rootClass.getEPackage().getEFactoryInstance().create(rootClass);
152
					List<URI> gmfgenURIs = getResourceLocationProvider().getSelectedURIs(GMFGEN_FILE_EXTENSION);
153
					for (int i=0; i<gmfgenURIs.size(); i++) {
154
						URI nextGmfgenURI = gmfgenURIs.get(i);
155
						addExtensionMetamodelRootToGmfgen(nextGmfgenURI, instantiated);
156
					}
157
				} catch (Exception ex) {
158
					Plugin.log(ex);
159
				} finally {
160
					progressMonitor.done();
161
				}
162
			}
163
		};
164
165
		try {
166
			getContainer().run(false, false, operation);
167
			List<IFile> selectedGmfgenFiles = getResourceLocationProvider().getSelectedFiles(GMFGEN_FILE_EXTENSION, false);
168
			WizardUtil.selectReveal(getWorkbench(), new StructuredSelection(selectedGmfgenFiles));
169
			if (!selectedGmfgenFiles.isEmpty()) {
170
				WizardUtil.openInEditor(getWorkbench(), selectedGmfgenFiles.get(0));
171
			}
172
		} catch (InvocationTargetException ex) {
173
			return false;
174
		} catch (InterruptedException ex) {
175
			return false;
176
		} catch (PartInitException ex) {
177
			Plugin.log(ex);
178
		}
179
		return true;
180
	}
181
182
	protected void addExtensionMetamodelRootToGmfgen(URI nextGmfgenURI, EObject instantiated) throws IOException {
183
		Resource gmfgenModel = getResourceSet().createResource(nextGmfgenURI);
184
		gmfgenModel.load(getResourceSet().getLoadOptions());
185
		gmfgenModel.getContents().add(instantiated);
186
		gmfgenModel.save(getGmfgenResourceSaveOptions());
187
		gmfgenModel.unload();
188
	}
189
190
}

Return to bug 181187