View | Details | Raw Unified | Return to bug 171593
Collapse All | Expand All

(-)src/org/eclipse/gmf/tests/setup/SessionSetup.java (-1 / +13 lines)
Lines 24-29 Link Here
24
	private GenProjectSetup myProject;
24
	private GenProjectSetup myProject;
25
	private MapDefSource myMapModel;
25
	private MapDefSource myMapModel;
26
	private DiaDefSource myGraphDefModel;
26
	private DiaDefSource myGraphDefModel;
27
	private ToolDefSource myToolDefModel;
27
	private int myUses;
28
	private int myUses;
28
	protected static boolean factoryClosed = false;
29
	protected static boolean factoryClosed = false;
29
	private GeneratorConfiguration myGeneratorConfiguration;
30
	private GeneratorConfiguration myGeneratorConfiguration;
Lines 103-109 Link Here
103
	}
104
	}
104
105
105
	protected MapDefSource createMapModel() {
106
	protected MapDefSource createMapModel() {
106
		return new MapSetup().init(getGraphDefModel(), getDomainModel(), new ToolDefSetup());
107
		return new MapSetup().init(getGraphDefModel(), getDomainModel(), getToolDefModel());
107
	}
108
	}
108
109
109
	public DiaDefSource getGraphDefModel() {
110
	public DiaDefSource getGraphDefModel() {
Lines 117-122 Link Here
117
		return new DiaDefSetup().init();
118
		return new DiaDefSetup().init();
118
	}
119
	}
119
120
121
	public ToolDefSource getToolDefModel() {
122
		if (myToolDefModel == null) {
123
			myToolDefModel = createToolDefModel();
124
		}
125
		return myToolDefModel;
126
	}
127
128
	protected ToolDefSource createToolDefModel() {
129
		return new ToolDefSetup();
130
	}
131
120
	public void cleanup() throws Exception {
132
	public void cleanup() throws Exception {
121
		System.err.println(getClass().getName() + ":uses:" + myUses);
133
		System.err.println(getClass().getName() + ":uses:" + myUses);
122
		if (myProject != null) {
134
		if (myProject != null) {
(-)META-INF/MANIFEST.MF (+1 lines)
Lines 13-18 Link Here
13
 org.eclipse.emf.validation;bundle-version="[1.1.0,2.0.0)",
13
 org.eclipse.emf.validation;bundle-version="[1.1.0,2.0.0)",
14
 org.eclipse.ui.ide;bundle-version="[3.3.0,4.0.0)",
14
 org.eclipse.ui.ide;bundle-version="[3.3.0,4.0.0)",
15
 org.eclipse.gmf.bridge;bundle-version="[1.1.0,2.0.0)",
15
 org.eclipse.gmf.bridge;bundle-version="[1.1.0,2.0.0)",
16
 org.eclipse.gmf.bridge.ui;bundle-version="[1.1.0,2.0.0)",
16
 org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.0.0,2.0.0)",
17
 org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.0.0,2.0.0)",
17
 org.eclipse.gmf.runtime.emf.commands.core;bundle-version="[1.0.0,2.0.0)",
18
 org.eclipse.gmf.runtime.emf.commands.core;bundle-version="[1.0.0,2.0.0)",
18
 org.eclipse.gmf.graphdef.codegen;bundle-version="[2.0.0,3.0.0)",
19
 org.eclipse.gmf.graphdef.codegen;bundle-version="[2.0.0,3.0.0)",
(-)src/org/eclipse/gmf/tests/tr/TransformToGenModelOperationTest.java (+397 lines)
Added Link Here
1
/**
2
 * Copyright (c) 2007 Borland Software Corporation
3
 * 
4
 * All rights reserved. This program and the accompanying materials
5
 * are made available under the terms of the Eclipse Public License v1.0
6
 * which accompanies this distribution, and is available at
7
 * http://www.eclipse.org/legal/epl-v10.html
8
 *
9
 * Contributors:
10
 *    Alexander Fedorov (Borland) - initial API and implementation
11
 */
12
package org.eclipse.gmf.tests.tr;
13
14
import java.io.IOException;
15
import java.util.Collections;
16
17
import org.eclipse.core.resources.IFile;
18
import org.eclipse.core.resources.IFolder;
19
import org.eclipse.core.resources.IProject;
20
import org.eclipse.core.resources.ResourcesPlugin;
21
import org.eclipse.core.runtime.CoreException;
22
import org.eclipse.core.runtime.IPath;
23
import org.eclipse.core.runtime.IStatus;
24
import org.eclipse.core.runtime.NullProgressMonitor;
25
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
26
import org.eclipse.emf.common.util.URI;
27
import org.eclipse.emf.ecore.EObject;
28
import org.eclipse.emf.ecore.resource.Resource;
29
import org.eclipse.emf.ecore.resource.ResourceSet;
30
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
31
import org.eclipse.gmf.gmfgraph.Canvas;
32
import org.eclipse.gmf.gmfgraph.Connection;
33
import org.eclipse.gmf.gmfgraph.DiagramLabel;
34
import org.eclipse.gmf.gmfgraph.Node;
35
import org.eclipse.gmf.internal.bridge.transform.GenModelDetector;
36
import org.eclipse.gmf.internal.bridge.transform.TransformToGenModelOperation;
37
import org.eclipse.gmf.internal.common.URIUtil;
38
import org.eclipse.gmf.mappings.CanvasMapping;
39
import org.eclipse.gmf.mappings.GMFMapFactory;
40
import org.eclipse.gmf.mappings.LinkMapping;
41
import org.eclipse.gmf.mappings.Mapping;
42
import org.eclipse.gmf.mappings.NodeMapping;
43
import org.eclipse.gmf.mappings.TopNodeReference;
44
import org.eclipse.gmf.tests.ConfiguredTestCase;
45
import org.eclipse.gmf.tests.setup.DiaDefSetup;
46
import org.eclipse.gmf.tests.setup.DiaDefSource;
47
import org.eclipse.gmf.tests.setup.MapDefSource;
48
import org.eclipse.gmf.tests.setup.ToolDefSource;
49
50
51
public class TransformToGenModelOperationTest extends ConfiguredTestCase {
52
	
53
	public TransformToGenModelOperationTest(String name) {
54
		super(name);
55
	}
56
	
57
	private static String FOLDER_MODELS = "models"; //$NON-NLS-1$
58
	private static String FILE_BASE = "test"; //$NON-NLS-1$
59
	private static String FILE_EXT_ECORE = "ecore"; //$NON-NLS-1$
60
	private static String FILE_EXT_GMFGEN = "gmfgen"; //$NON-NLS-1$
61
	private static String FILE_EXT_GMFGRAPH = "gmfgraph"; //$NON-NLS-1$
62
	private static String FILE_EXT_GMFMAP = "gmfmap"; //$NON-NLS-1$
63
	private static String FILE_EXT_GMFTOOL = "gmftool"; //$NON-NLS-1$
64
65
	private IProject myProject;
66
	private TransformToGenModelOperation myOperation;
67
	private ResourceSet myRS;
68
69
	/* (non-Javadoc)
70
	 * @see junit.framework.TestCase#setUp()
71
	 */
72
	@Override
73
	protected void setUp() throws Exception {
74
		super.setUp();
75
		myOperation = new TransformToGenModelOperation();
76
		myRS = new ResourceSetImpl();
77
		myProject = createProject();
78
		IFolder models = myProject.getFolder(FOLDER_MODELS);
79
		models.create(true, false, new NullProgressMonitor());
80
	}
81
	
82
	/* (non-Javadoc)
83
	 * @see org.eclipse.gmf.tests.ConfiguredTestCase#tearDown()
84
	 */
85
	@Override
86
	protected void tearDown() throws Exception {
87
		deleteProject();
88
		myProject = null;
89
		myOperation = null;
90
		super.tearDown();
91
	}
92
	
93
	public void testErrorArguments() {
94
		URI toolURI = prepareResource(myRS, FILE_EXT_GMFTOOL, getSetup().getToolDefModel().getRegistry());
95
		URI mapURI = prepareResource(myRS, FILE_EXT_GMFMAP, getSetup().getMapModel().getMapping());
96
		try {
97
			myOperation.loadMappingModel(myRS, toolURI, null);
98
			fail("Invalid MappingModel should not be accepted");
99
		} catch (CoreException e) {
100
			IStatus loadStatus = myOperation.getLoadMappingStatus();
101
			assertNotNull("Load MappingModel status should be set", loadStatus);
102
			assertFalse("Load MappingModel status should differ from OK value", IStatus.OK == loadStatus.getSeverity());
103
			assertNull("GenModelDetector should be reset", myOperation.getGenModelDetector());
104
			assertNull("GenModel should be reset", myOperation.getGenModel());
105
		}
106
		try {
107
			myOperation.loadMappingModel(myRS, null, null);
108
			fail("null gmfmap URI should not be accepted");
109
		} catch (CoreException e) {
110
			assertIllegalArgument(e);
111
		}
112
		try {
113
			myOperation.loadMappingModel(null, mapURI, null);
114
			fail("null ResorceSet should not be accepted");
115
		} catch (CoreException e) {
116
			assertIllegalArgument(e);
117
		}
118
		try {
119
			myOperation.findGenmodel(null);
120
			fail("null ResorceSet should not be accepted");
121
		} catch (CoreException e) {
122
			assertIllegalArgument(e);
123
		}
124
		try {
125
			myOperation.loadGenModel(null, null, null);
126
			fail("null ResorceSet should not be accepted");
127
		} catch (CoreException e) {
128
			assertIllegalArgument(e);
129
		}
130
		IStatus s = myOperation.executeTransformation(null, null);
131
		assertFalse("null ResorceSet should not be accepted", s.isOK());
132
	}
133
	
134
	public void testErrorState() {
135
		ResourceSetImpl rs = new ResourceSetImpl();
136
		IStatus s = myOperation.executeTransformation(rs, null);
137
		assertFalse("Target gmfgen URI should be specified", s.isOK());
138
		myOperation.setGenURI(createURI(FILE_EXT_GMFGEN));
139
		s = myOperation.executeTransformation(rs, null);
140
		assertFalse("Mapping model should be loaded before calling executeTransformation()", s.isOK());
141
142
		try {
143
			myOperation.loadGenModel(rs, null, null);
144
			fail("MappingModel should be loaded before calling loadGenModel()");
145
		} catch (CoreException e) {
146
			assertIllegalState(e);
147
		}
148
		try {
149
			myOperation.findGenmodel(rs);
150
			fail("MappingModel should be loaded before calling findGenmodel()");
151
		} catch (CoreException e) {
152
			assertIllegalState(e);
153
		}
154
	}
155
156
	public void testTransformMappingModel() {
157
		URI mapURI = prepareResources();
158
		loadMappingModel(mapURI);
159
		findAbsentGenmodel();
160
		URI genmodelURI = createDefaultGenModel(mapURI);
161
		GenModel genModel = null;
162
		try {
163
			genModel = myOperation.loadGenModel(myRS, genmodelURI, null);
164
			assertNotNull("Failed to load GenModel", genModel);
165
		} catch (CoreException e) {
166
			assertNotNull("Failed to load GenModel", genModel);
167
		}
168
		myOperation.setGenURI(createURI(FILE_EXT_GMFGEN));
169
		IStatus status = myOperation.executeTransformation(myRS, null);
170
		assertTrue(status.isOK());
171
	}
172
	
173
	public void testTransfromDesignMapping() {
174
		URI mapURI = prepareDesignResources();
175
		loadMappingModel(mapURI);
176
		myOperation.setGenURI(createURI(FILE_EXT_GMFGEN));
177
		IStatus status = myOperation.executeTransformation(myRS, null);
178
		assertTrue(status.isOK());
179
	}
180
181
	private void loadMappingModel(URI mapURI) {
182
		Mapping mapping = null;
183
		try {
184
			mapping = myOperation.loadMappingModel(myRS, mapURI, null);
185
			assertNotNull("Mapping should be resolved", mapping);
186
			IStatus loadStatus = myOperation.getLoadMappingStatus();
187
			assertNotNull("Load MappingModel status should be set", loadStatus);
188
			assertFalse("Load MappingModel status should differ from CANCEL value", IStatus.CANCEL == loadStatus.getSeverity());
189
			assertFalse("Load MappingModel status should differ from ERROR value", IStatus.ERROR == loadStatus.getSeverity());
190
			assertNotNull("GenModelDetector should be initialized", myOperation.getGenModelDetector());
191
			assertNull("GenModel should be reset", myOperation.getGenModel());
192
		} catch (CoreException e) {
193
			fail(e.getStatus().getMessage());
194
		}
195
	}
196
197
	private void findAbsentGenmodel() {
198
		try {
199
			myOperation.findGenmodel(myRS);
200
			fail("GenModel should not be found");
201
		} catch (CoreException e) {
202
			assertNull("GenModel should not be found", myOperation.getGenModel());
203
		}
204
	}
205
	
206
	private URI createDefaultGenModel(URI mapURI) {
207
		URI genmodelURI = null;
208
		try {
209
			GenModelDetector gmd = myOperation.getGenModelDetector();
210
			assertNotNull("GenModelDetector should be initialized", gmd);
211
			genmodelURI = gmd.createDefault(getProject().getName(), URIUtil.getFile(mapURI));
212
			assertNotNull("GenModel URI should be created", genmodelURI);
213
			IFile file = URIUtil.getFile(mapURI);
214
			assertNotNull("GenModel file should be created", file);
215
			assertTrue("GenModel file should exists", file.exists());
216
		} catch (CoreException e) {
217
			fail("Failed to create default GenModel: " + e.getMessage());
218
		}
219
		return genmodelURI;
220
	}
221
222
	protected IProject createProject() {
223
		String projectName = "TransformToGenModelOperationTest_" + String.valueOf(System.currentTimeMillis()); //$NON-NLS-1$
224
		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
225
		assertFalse("Project with this name already present in the workspace: " + projectName, project.exists());
226
		try {
227
			project.create(new NullProgressMonitor());
228
			project.open(new NullProgressMonitor());
229
		} catch (CoreException e) {
230
			fail(e.getMessage());
231
		}
232
		assertTrue("Project was not created: " + projectName, project.exists());
233
		return project;
234
	}
235
236
	protected void deleteProject() throws CoreException {
237
		if (getProject() != null) {
238
			if (getProject().isOpen()) {
239
				getProject().close(new NullProgressMonitor());
240
			}
241
			if (getProject().exists()) {
242
				getProject().delete(true, new NullProgressMonitor());
243
			}
244
		}
245
	}
246
247
	protected IProject getProject() {
248
		return myProject;
249
	}
250
	
251
	private URI prepareResources() {
252
		ResourceSet rs = new ResourceSetImpl();
253
		prepareResource(rs, FILE_EXT_ECORE, getSetup().getDomainModel().getModel());
254
		prepareResource(rs, FILE_EXT_GMFGRAPH, getSetup().getGraphDefModel().getCanvasDef());
255
		prepareResource(rs, FILE_EXT_GMFTOOL, getSetup().getToolDefModel().getRegistry());
256
		URI mapURI = prepareResource(rs, FILE_EXT_GMFMAP, getSetup().getMapModel().getMapping());
257
		return mapURI;
258
	}
259
260
	private URI prepareDesignResources() {
261
		ResourceSet rs = new ResourceSetImpl();
262
		DiaDefSource ddSource = getSetup().getGraphDefModel();
263
		prepareResource(rs, FILE_EXT_GMFGRAPH, ddSource.getCanvasDef());
264
		ToolDefSource toolDef = getSetup().getToolDefModel();
265
		prepareResource(rs, FILE_EXT_GMFTOOL, toolDef.getRegistry());
266
		URI mapURI = prepareResource(rs, FILE_EXT_GMFMAP, new DesignMapDefSource().init(ddSource, toolDef).getMapping());
267
		return mapURI;
268
	}
269
270
	private URI prepareResource(ResourceSet rs, String extension, EObject root) {
271
		URI uri = createURI(extension);
272
		Resource resource = rs.createResource(uri);
273
		resource.getContents().add(root);
274
		try {
275
			resource.save(Collections.EMPTY_MAP);
276
		} catch (IOException e) {
277
			fail("Failed to save " + uri.toFileString() + " :" + e.getMessage());
278
		}
279
		return uri;
280
	}
281
282
	private URI createURI(String extension) {
283
		String pathName = getProject().getName() + 
284
		IPath.SEPARATOR + FOLDER_MODELS + 
285
		IPath.SEPARATOR + FILE_BASE + "." + extension; //$NON-NLS-1$
286
		URI uri = URI.createPlatformResourceURI(pathName, true);
287
		return uri;
288
	}
289
	
290
	private void assertIllegalArgument(CoreException e) {
291
		Throwable cause = e.getStatus().getException();
292
		if (!(cause instanceof IllegalArgumentException)) {
293
			fail(e.getMessage());
294
		}
295
	}
296
297
	private void assertIllegalState(CoreException e) {
298
		Throwable cause = e.getStatus().getException();
299
		if (!(cause instanceof IllegalStateException)) {
300
			fail(e.getMessage());
301
		}
302
	}
303
	
304
	private class DesignMapDefSource implements MapDefSource {
305
306
		private Mapping myMap;
307
308
		private NodeMapping myNodeA;
309
310
		private NodeMapping myNodeB;
311
312
		private LinkMapping myClassLink;
313
314
		private LinkMapping myRefLink;
315
		
316
		
317
		public DesignMapDefSource() {
318
			// just create
319
		}
320
321
		public DesignMapDefSource init(DiaDefSource ddSource, ToolDefSource toolDef) {
322
			initCanvasMapping(ddSource.getCanvasDef());
323
			if (toolDef.getMainMenu() != null) {
324
				myMap.getDiagram().getMenuContributions().add(toolDef.getMainMenu());
325
			}
326
			myMap.getDiagram().setPalette(toolDef.getPalette());
327
			
328
			initCommonMapping(ddSource, toolDef);
329
330
			return this;
331
		}
332
333
		private void initCanvasMapping(Canvas canvas) {
334
			Mapping m = GMFMapFactory.eINSTANCE.createMapping();		
335
				
336
			CanvasMapping cme = GMFMapFactory.eINSTANCE.createCanvasMapping();
337
			cme.setDiagramCanvas(canvas);
338
			m.setDiagram(cme);
339
			myMap = m;
340
		}
341
342
		private void initCommonMapping(DiaDefSource ddSource, ToolDefSource toolDef) {
343
			myNodeA = createNodeMapping(ddSource.getNodeDef(), ddSource.getLabelDef(), true);
344
			myNodeA.setContextMenu(toolDef.getNodeContextMenu());
345
			myNodeA.setTool(toolDef.getNodeCreationTool());
346
			
347
			DiaDefSetup ddSetup = ddSource instanceof DiaDefSetup ? (DiaDefSetup) ddSource : null;
348
			Node graphNode = ddSetup != null ? ddSetup.getColoredNodeDef() : ddSource.getNodeDef();
349
			DiagramLabel graphLabel = ddSetup != null ? ddSetup.getDecoratedLabelDef() : ddSource.getLabelDef();
350
			myNodeB = createNodeMapping(graphNode, graphLabel, true);
351
			
352
			myClassLink = createLinkMapping(ddSource.getLinkDef());
353
			myClassLink.setTool(toolDef.getLinkCreationTool());
354
			myRefLink = createLinkMapping(ddSetup != null ? ddSetup.getColoredLinkDef() : ddSource.getLinkDef());
355
		}
356
357
		private final NodeMapping createNodeMapping(Node nodeDef, DiagramLabel labelDef, boolean addTopNodeReference) {
358
			NodeMapping nme = GMFMapFactory.eINSTANCE.createNodeMapping();
359
			nme.setDiagramNode(nodeDef);
360
		
361
			if (addTopNodeReference){
362
				TopNodeReference tnr = GMFMapFactory.eINSTANCE.createTopNodeReference();
363
				tnr.setOwnedChild(nme);
364
				myMap.getNodes().add(tnr);
365
			}
366
			return nme;	
367
		}
368
369
		private LinkMapping createLinkMapping(Connection link) {		
370
			LinkMapping lme = GMFMapFactory.eINSTANCE.createLinkMapping();
371
			lme.setDiagramLink(link);
372
			myMap.getLinks().add(lme);
373
			return lme;
374
		}
375
376
		public final Mapping getMapping() {
377
			return myMap;
378
		}
379
380
		public NodeMapping getNodeA() {
381
			return myNodeA;
382
		}
383
384
		public NodeMapping getNodeB() {
385
			return myNodeB;
386
		}
387
388
		public LinkMapping getClassLink() {
389
			return myClassLink;
390
		}
391
392
		public LinkMapping getReferenceLink() {
393
			return myRefLink;
394
		}
395
		
396
	}
397
}
(-)src/org/eclipse/gmf/internal/bridge/transform/TransformToGenModelOperation.java (-43 / +67 lines)
Lines 12-17 Link Here
12
package org.eclipse.gmf.internal.bridge.transform;
12
package org.eclipse.gmf.internal.bridge.transform;
13
13
14
import java.io.IOException;
14
import java.io.IOException;
15
import java.text.MessageFormat;
15
import java.util.HashMap;
16
import java.util.HashMap;
16
import java.util.List;
17
import java.util.List;
17
import java.util.Map;
18
import java.util.Map;
Lines 26-31 Link Here
26
import org.eclipse.emf.common.util.BasicDiagnostic;
27
import org.eclipse.emf.common.util.BasicDiagnostic;
27
import org.eclipse.emf.common.util.Diagnostic;
28
import org.eclipse.emf.common.util.Diagnostic;
28
import org.eclipse.emf.common.util.URI;
29
import org.eclipse.emf.common.util.URI;
30
import org.eclipse.emf.ecore.EObject;
29
import org.eclipse.emf.ecore.resource.Resource;
31
import org.eclipse.emf.ecore.resource.Resource;
30
import org.eclipse.emf.ecore.resource.ResourceSet;
32
import org.eclipse.emf.ecore.resource.ResourceSet;
31
import org.eclipse.emf.ecore.xmi.XMLResource;
33
import org.eclipse.emf.ecore.xmi.XMLResource;
Lines 51-89 Link Here
51
53
52
public class TransformToGenModelOperation {
54
public class TransformToGenModelOperation {
53
	
55
	
54
	private URI myMapModelURI;
55
	private URI myGMFGenModelURI;
56
	private URI myGMFGenModelURI;
56
	private TransformOptions myOptions;
57
	private TransformOptions myOptions;
57
	private Mapping myMapping;
58
	private Mapping myMapping;
58
	private GenModelDetector myGMDetector;
59
	private GenModelDetector myGMDetector;
59
	private GenModel myGenModel;
60
	private GenModel myGenModel;
60
	
61
	
61
	private IStatus myLoadMapmodelStatus;
62
	private IStatus myLoadMapmodelStatus = Status.CANCEL_STATUS;
62
	private IStatus myStaleGenmodelStatus;
63
	private IStatus myStaleGenmodelStatus = Status.CANCEL_STATUS;
63
	
64
	
64
	public TransformToGenModelOperation(URI mapURI) {
65
	public TransformToGenModelOperation() {
65
		assert mapURI != null;
66
		this.myMapModelURI = mapURI;
67
		this.myOptions = new TransformOptions();
66
		this.myOptions = new TransformOptions();
68
	}
67
	}
69
	
68
70
	public TransformOptions getOptions() {
69
	public TransformOptions getOptions() {
71
		return myOptions;
70
		return myOptions;
72
	}
71
	}
73
	
72
	
74
	public URI getMapURI() {
75
		return this.myMapModelURI;
76
	}
77
	
78
	public URI getGenURI() {
73
	public URI getGenURI() {
79
		return this.myGMFGenModelURI;
74
		return this.myGMFGenModelURI;
80
	}
75
	}
81
76
82
	void setGenURI(URI gmfGen) {
77
	public void setGenURI(URI gmfGen) {
83
		this.myGMFGenModelURI = gmfGen;
78
		this.myGMFGenModelURI = gmfGen;
84
	}
79
	}
85
80
86
	private GenModel getGenModel() {
81
	public GenModel getGenModel() {
87
		return this.myGenModel;
82
		return this.myGenModel;
88
	}
83
	}
89
84
Lines 91-150 Link Here
91
		return this.myMapping;
86
		return this.myMapping;
92
	}
87
	}
93
	
88
	
94
	private void setMapping(Mapping m) {
89
	private void setMapping(Mapping m, IStatus loadStatus) {
95
		this.myMapping = m;
90
		this.myMapping = m;
96
		myGMDetector = null;
91
		this.myLoadMapmodelStatus = loadStatus;
92
		myGMDetector = (m != null) ? new GenModelDetector(m) : null;
97
		myGenModel = null;
93
		myGenModel = null;
98
	}
94
	}
99
	
95
	
100
	GenModelDetector getGenModelDetector() {
96
	public GenModelDetector getGenModelDetector() {
101
		if (myGMDetector == null) {
102
			myGMDetector = new GenModelDetector(getMapping());
103
		}
104
		return myGMDetector;
97
		return myGMDetector;
105
	}
98
	}
106
	
99
	
107
	IStatus getLoadMappingStatus() {
100
	public IStatus getLoadMappingStatus() {
108
		return this.myLoadMapmodelStatus;
101
		return this.myLoadMapmodelStatus;
109
	}
102
	}
110
	
103
	
111
	IStatus getStaleGenmodelStatus() {
104
	public IStatus getStaleGenmodelStatus() {
112
		return this.myStaleGenmodelStatus;
105
		return this.myStaleGenmodelStatus;
113
	}
106
	}
114
107
115
	Mapping loadMappingModel(ResourceSet rs, URI uri, IProgressMonitor pm) throws CoreException {
108
	public Mapping loadMappingModel(ResourceSet rs, URI uri, IProgressMonitor pm) throws CoreException {
109
		Mapping content = null;
110
		IStatus status = Status.CANCEL_STATUS;
116
		IProgressMonitor monitor = null;
111
		IProgressMonitor monitor = null;
117
		try {
112
		try {
113
			checkResourceSet(rs);
114
			if (uri == null) {
115
				throw new IllegalArgumentException(Messages.TransformToGenModelOperation_e_null_map_uri);
116
			}
118
			monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); 
117
			monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); 
119
			String cancelMessage = Messages.TransformToGenModelOperation_e_map_load_cancelled;
118
			String cancelMessage = Messages.TransformToGenModelOperation_e_map_load_cancelled;
120
			monitor.beginTask("", 100); //$NON-NLS-1$
119
			monitor.beginTask("", 100); //$NON-NLS-1$
121
			subTask(monitor, 0, Messages.TransformToGenModelOperation_task_load, cancelMessage);
120
			subTask(monitor, 0, Messages.TransformToGenModelOperation_task_load, cancelMessage);
122
			ModelLoadHelper loadHelper = new ModelLoadHelper(rs, uri);
121
			ModelLoadHelper loadHelper = new ModelLoadHelper(rs, uri);
123
			IStatus loadStatus = loadHelper.getStatus();
122
			status = loadHelper.getStatus();
124
			if (!loadStatus.isOK()) {
123
			if (!status.isOK()) {
125
				throw new CoreException(loadStatus);
124
				throw new CoreException(status);
126
			}
125
			}
127
			subTask(monitor, 20, Messages.TransformToGenModelOperation_task_validate, cancelMessage);
126
			subTask(monitor, 20, Messages.TransformToGenModelOperation_task_validate, cancelMessage);
128
			final Mapping content = (Mapping) loadHelper.getContentsRoot();
127
			EObject root = loadHelper.getContentsRoot();
128
			if (!(root instanceof Mapping)) {
129
				String msg = MessageFormat.format(Messages.TransformToGenModelOperation_e_wrong_root_element, root.getClass().getName());
130
				status = Plugin.createError(msg, null);
131
				throw new CoreException(status);
132
			}
133
			content = (Mapping) loadHelper.getContentsRoot();
129
			Diagnostic mapIsValid = ValidationHelper.validate(content, true, monitor);
134
			Diagnostic mapIsValid = ValidationHelper.validate(content, true, monitor);
130
			monitor.worked(60);
135
			monitor.worked(60);
131
			IStatus mapStatus = getFirst(mapIsValid);
136
			status = getFirst(mapIsValid);
132
			if (Diagnostic.CANCEL == mapStatus.getSeverity()) {
137
			if (Diagnostic.CANCEL == status.getSeverity()) {
133
				throw new CoreException(Plugin.createCancel(cancelMessage));
138
				throw new CoreException(Plugin.createCancel(cancelMessage));
134
			} else if(Diagnostic.ERROR == mapStatus.getSeverity()) {
139
			} else if(Diagnostic.ERROR == status.getSeverity()) {
135
				throw new CoreException(mapStatus);
140
				throw new CoreException(status);
136
			} else {
141
			} else {
137
				setMapping(content);
138
				this.myLoadMapmodelStatus = mapStatus;
139
				return content;
142
				return content;
140
			}
143
			}
144
		} catch (CoreException e) {
145
			throw e;
146
		} catch (Exception e) {
147
			IStatus error = Plugin.createError(Messages.TransformToGenModelOperation_e_load_mapping_model, e);
148
			throw new CoreException(error);
141
		} finally {
149
		} finally {
142
			monitor.done();
150
			setMapping(content, status);
151
			if (monitor != null) {
152
				monitor.done();
153
			}
143
		}
154
		}
144
	}
155
	}
145
	
156
	
146
	GenModel findGenmodel(ResourceSet rs) throws CoreException {
157
	public GenModel findGenmodel(ResourceSet rs) throws CoreException {
147
		try {
158
		try {
159
			checkResourceSet(rs);
160
			checkMapping();
148
			GenModelDetector gmd = getGenModelDetector();
161
			GenModelDetector gmd = getGenModelDetector();
149
			IStatus detect = gmd.detect();
162
			IStatus detect = gmd.detect();
150
			if (detect.isOK()) {
163
			if (detect.isOK()) {
Lines 159-167 Link Here
159
		}
172
		}
160
	}
173
	}
161
174
162
	GenModel loadGenModel(ResourceSet rs, URI uri, IProgressMonitor pm) throws CoreException {
175
	public GenModel loadGenModel(ResourceSet rs, URI uri, IProgressMonitor pm) throws CoreException {
163
		IProgressMonitor monitor = null;
176
		IProgressMonitor monitor = null;
164
		try {
177
		try {
178
			checkResourceSet(rs);
179
			checkMapping();
165
			monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); 
180
			monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); 
166
			String cancelMessage = Messages.TransformToGenModelOperation_e_genmodel_load_cancelled;
181
			String cancelMessage = Messages.TransformToGenModelOperation_e_genmodel_load_cancelled;
167
			monitor.beginTask("", 100); //$NON-NLS-1$
182
			monitor.beginTask("", 100); //$NON-NLS-1$
Lines 206-214 Link Here
206
		}
221
		}
207
	}
222
	}
208
	
223
	
209
	IStatus executeTransformation(ResourceSet rs, IProgressMonitor pm) {
224
	public IStatus executeTransformation(ResourceSet rs, IProgressMonitor pm) {
210
		IProgressMonitor monitor = null;
225
		IProgressMonitor monitor = null;
211
		try {
226
		try {
227
			checkResourceSet(rs);
228
			if (getGenURI() == null) {
229
				throw new IllegalStateException(Messages.TransformToGenModelOperation_e_null_gmfgen_uri);
230
			}
231
			checkMapping();
212
			monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); 
232
			monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); 
213
			monitor.beginTask("", 100); //$NON-NLS-1$
233
			monitor.beginTask("", 100); //$NON-NLS-1$
214
			if (monitor.isCanceled()) {
234
			if (monitor.isCanceled()) {
Lines 256-267 Link Here
256
		}
276
		}
257
	}
277
	}
258
278
259
	public void reset(URI uri) {
279
	private void checkResourceSet(ResourceSet rs) {
260
		assert uri != null;
280
		if (rs == null) {
261
		myMapModelURI = uri;
281
			throw new IllegalArgumentException(Messages.TransformToGenModelOperation_e_null_resource_set);
262
		setMapping(null);
282
		}
263
		myLoadMapmodelStatus = null;
283
	}
264
		myStaleGenmodelStatus = null;
284
285
	private void checkMapping() {
286
		if (getMapping() == null) {
287
			throw new IllegalStateException(Messages.TransformToGenModelOperation_e_null_mapping);
288
		}
265
	}
289
	}
266
	
290
	
267
	private IStatus getFirst(Diagnostic d) {
291
	private IStatus getFirst(Diagnostic d) {
Lines 362-365 Link Here
362
			monitor.subTask(name);
386
			monitor.subTask(name);
363
		}
387
		}
364
	}
388
	}
365
}
389
}
(-)src/org/eclipse/gmf/internal/bridge/transform/StaleGenModelDetector.java (-1 / +3 lines)
Lines 36-42 Link Here
36
	private final GenModel myGenModel;
36
	private final GenModel myGenModel;
37
37
38
	public StaleGenModelDetector(GenModel genModel) {
38
	public StaleGenModelDetector(GenModel genModel) {
39
		assert genModel != null;
39
		if (genModel == null) {
40
			throw new IllegalArgumentException("Could not detect with null GenModel");
41
		}
40
		myGenModel = genModel;
42
		myGenModel = genModel;
41
	}
43
	}
42
44
(-)src/org/eclipse/gmf/internal/bridge/transform/GenModelConfigurationPage.java (-7 / +5 lines)
Lines 25-31 Link Here
25
import org.eclipse.emf.ecore.resource.ResourceSet;
25
import org.eclipse.emf.ecore.resource.ResourceSet;
26
import org.eclipse.emf.importer.ui.EMFModelWizard;
26
import org.eclipse.emf.importer.ui.EMFModelWizard;
27
import org.eclipse.emf.importer.ui.GenModelReloadActionDelegate;
27
import org.eclipse.emf.importer.ui.GenModelReloadActionDelegate;
28
import org.eclipse.gmf.internal.common.URIUtil;
29
import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider;
28
import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider;
30
import org.eclipse.jface.action.Action;
29
import org.eclipse.jface.action.Action;
31
import org.eclipse.jface.action.IAction;
30
import org.eclipse.jface.action.IAction;
Lines 172-182 Link Here
172
		try {
171
		try {
173
			TransformToGenModelOperation to = getOperation();
172
			TransformToGenModelOperation to = getOperation();
174
			GenModelDetector gmd = to.getGenModelDetector();
173
			GenModelDetector gmd = to.getGenModelDetector();
175
			URI mapURI = to.getMapURI();
174
			TransformToGenModelWizard wizard = (TransformToGenModelWizard) getWizard();
176
			IFile mapFile = URIUtil.getFile(mapURI);
175
			IFile mapFile = wizard.getMapFile();
177
			String pluginID = mapFile.getProject().getName();
176
			String pluginID = mapFile.getProject().getName();
178
			IFile genmodel = gmd.createDefault(pluginID, mapFile);
177
			URI genURI = gmd.createDefault(pluginID, mapFile);
179
			URI genURI = URI.createPlatformResourceURI(genmodel.getFullPath().toString(), true);
180
			setURI(genURI);
178
			setURI(genURI);
181
			updateURI();
179
			updateURI();
182
		} catch (CoreException e) {
180
		} catch (CoreException e) {
Lines 185-192 Link Here
185
	}
183
	}
186
	
184
	
187
	private void launchWizard() {
185
	private void launchWizard() {
188
		URI mapURI = getOperation().getMapURI();
186
		TransformToGenModelWizard wizard = (TransformToGenModelWizard) getWizard();
189
		IFile mapFile = URIUtil.getFile(mapURI);
187
		IFile mapFile = wizard.getMapFile();
190
		IFile genmodel = createWithWizard(getShell(), mapFile);
188
		IFile genmodel = createWithWizard(getShell(), mapFile);
191
		if (genmodel != null) {
189
		if (genmodel != null) {
192
			setURI(URI.createPlatformResourceURI(genmodel.getFullPath().toString(), true));
190
			setURI(URI.createPlatformResourceURI(genmodel.getFullPath().toString(), true));
(-)src/org/eclipse/gmf/internal/bridge/transform/TransformToGenModelWizard.java (-7 / +10 lines)
Lines 22-27 Link Here
22
import org.eclipse.emf.ecore.resource.ResourceSet;
22
import org.eclipse.emf.ecore.resource.ResourceSet;
23
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
23
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
24
import org.eclipse.gmf.internal.bridge.wizards.WizardUtil;
24
import org.eclipse.gmf.internal.bridge.wizards.WizardUtil;
25
import org.eclipse.gmf.internal.common.URIUtil;
25
import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider;
26
import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider;
26
import org.eclipse.jface.operation.IRunnableWithProgress;
27
import org.eclipse.jface.operation.IRunnableWithProgress;
27
import org.eclipse.jface.viewers.IStructuredSelection;
28
import org.eclipse.jface.viewers.IStructuredSelection;
Lines 114-126 Link Here
114
		this.mySelection = selection;
115
		this.mySelection = selection;
115
		setWindowTitle(Messages.TransformToGenModelWizard_title_wizard);
116
		setWindowTitle(Messages.TransformToGenModelWizard_title_wizard);
116
		setNeedsProgressMonitor(true);
117
		setNeedsProgressMonitor(true);
117
		IFile mapFile = (IFile) selection.getFirstElement();
118
		myOperation = new TransformToGenModelOperation();
118
		URI mapURI = URI.createPlatformResourceURI(mapFile.getFullPath().toString(), true);
119
		initOperation(mapURI);
120
	}
121
	
122
	void initOperation(URI mapURI) {
123
		myOperation = new TransformToGenModelOperation(mapURI);
124
	}
119
	}
125
	
120
	
126
	@Override
121
	@Override
Lines 180-185 Link Here
180
		return newFileCreationPage.getModelFile();
175
		return newFileCreationPage.getModelFile();
181
	}
176
	}
182
	
177
	
178
	IFile getMapFile() {
179
		URI mapURI = mapModelPage.getURI();
180
		if (mapURI != null) {
181
			return URIUtil.getFile(mapURI);
182
		}
183
		return (IFile) mySelection.getFirstElement();
184
	}
185
183
	private void setErrorMessage(String message) {
186
	private void setErrorMessage(String message) {
184
		WizardDialog wd = (WizardDialog) getContainer();
187
		WizardDialog wd = (WizardDialog) getContainer();
185
		WizardPage wp = (WizardPage) wd.getCurrentPage();
188
		WizardPage wp = (WizardPage) wd.getCurrentPage();
(-)src/org/eclipse/gmf/internal/bridge/transform/MapModelConfigurationPage.java (-1 lines)
Lines 45-51 Link Here
45
	@Override
45
	@Override
46
	protected Resource doLoadResource(IProgressMonitor monitor) throws CoreException {
46
	protected Resource doLoadResource(IProgressMonitor monitor) throws CoreException {
47
		TransformToGenModelOperation o = getOperation();
47
		TransformToGenModelOperation o = getOperation();
48
		o.reset(getURI());
49
		Mapping mapping = o.loadMappingModel(getResourceSet(), getURI(), monitor);
48
		Mapping mapping = o.loadMappingModel(getResourceSet(), getURI(), monitor);
50
		return mapping.eResource();
49
		return mapping.eResource();
51
	}
50
	}
(-)src/org/eclipse/gmf/internal/bridge/transform/Messages.java (+12 lines)
Lines 37-46 Link Here
37
37
38
	public static String TransformToGenModelOperation_e_genmodel_load_cancelled;
38
	public static String TransformToGenModelOperation_e_genmodel_load_cancelled;
39
39
40
	public static String TransformToGenModelOperation_e_load_mapping_model;
41
40
	public static String TransformToGenModelOperation_e_map_load_cancelled;
42
	public static String TransformToGenModelOperation_e_map_load_cancelled;
41
43
42
	public static String TransformToGenModelOperation_e_mapping_invalid;
44
	public static String TransformToGenModelOperation_e_mapping_invalid;
43
45
46
	public static String TransformToGenModelOperation_e_null_gmfgen_uri;
47
48
	public static String TransformToGenModelOperation_e_null_map_uri;
49
50
	public static String TransformToGenModelOperation_e_null_mapping;
51
52
	public static String TransformToGenModelOperation_e_null_resource_set;
53
54
	public static String TransformToGenModelOperation_e_wrong_root_element;
55
44
	public static String TransformToGenModelOperation_task_detect;
56
	public static String TransformToGenModelOperation_task_detect;
45
57
46
	public static String TransformToGenModelOperation_task_generate;
58
	public static String TransformToGenModelOperation_task_generate;
(-)src/org/eclipse/gmf/internal/bridge/transform/GenModelDetector.java (-11 / +13 lines)
Lines 50-56 Link Here
50
	private Collection<EPackage> myPackages;
50
	private Collection<EPackage> myPackages;
51
51
52
	public GenModelDetector(Mapping mapping) {
52
	public GenModelDetector(Mapping mapping) {
53
		assert mapping != null;
53
		if (mapping == null) {
54
			throw new IllegalArgumentException("Could not detect with null Mapping");
55
		}
54
		myMapping = mapping;
56
		myMapping = mapping;
55
	}
57
	}
56
	
58
	
Lines 70-82 Link Here
70
	}
72
	}
71
73
72
	public IStatus advise(URI genModelURI) {
74
	public IStatus advise(URI genModelURI) {
73
		assert genModelURI != null;
75
		if (genModelURI == null) {
76
			throw new IllegalArgumentException("Null GenModel URI");
77
		}
74
		GenModelAccess gma = new FileGenModelAccess(genModelURI);
78
		GenModelAccess gma = new FileGenModelAccess(genModelURI);
75
		return apply(gma);
79
		return apply(gma);
76
	}
80
	}
77
81
78
	public IStatus advise(IFile workspaceFile) {
82
	public IStatus advise(IFile workspaceFile) {
79
		assert workspaceFile != null;
83
		if (workspaceFile == null) {
84
			throw new IllegalArgumentException("Null GenModel file");
85
		}
80
		GenModelAccess gma = new FileGenModelAccess(workspaceFile);
86
		GenModelAccess gma = new FileGenModelAccess(workspaceFile);
81
		return apply(gma);
87
		return apply(gma);
82
	}
88
	}
Lines 120-136 Link Here
120
		return myPackages != null && myPackages.size() == 1;
126
		return myPackages != null && myPackages.size() == 1;
121
	}
127
	}
122
	
128
	
123
	public IFile createDefault(String pluginID, IFile patternResource) throws CoreException {
129
	public URI createDefault(String pluginID, IFile patternResource) throws CoreException {
124
		DummyGenModel gma = new DummyGenModel(getPrimaryPackage(), null);
130
		DummyGenModel gma = new DummyGenModel(getPrimaryPackage(), null);
125
		gma.setPluginID(pluginID);
131
		gma.setPluginID(pluginID);
126
		GenModel model = gma.create();
132
		GenModel model = gma.create();
127
		IPath path = patternResource.getFullPath().removeFileExtension().addFileExtension("genmodel"); //$NON-NLS-1$
133
		IPath path = patternResource.getFullPath().removeFileExtension().addFileExtension("genmodel"); //$NON-NLS-1$
128
		Resource res = new ResourceSetImpl().createResource(URI.createPlatformResourceURI(path.toString(), true));
134
		URI uri = URI.createPlatformResourceURI(path.toString(), true);
135
		Resource res = new ResourceSetImpl().createResource(uri);
129
		res.getContents().add(model);
136
		res.getContents().add(model);
130
		try {
137
		try {
131
			res.save(null);
138
			res.save(null);
132
			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
139
			return uri;
133
			return file;
134
		} catch (IOException ex) {
140
		} catch (IOException ex) {
135
			IStatus error = Plugin.createError(Messages.GenModelDetector_e_save, ex);
141
			IStatus error = Plugin.createError(Messages.GenModelDetector_e_save, ex);
136
			throw new CoreException(error);
142
			throw new CoreException(error);
Lines 148-155 Link Here
148
		return myGMAccess.model();
154
		return myGMAccess.model();
149
	}
155
	}
150
	
156
	
151
	public boolean checkState() {
152
		return myGMAccess != null;
153
	}
154
155
}
157
}
(-)src/org/eclipse/gmf/internal/bridge/transform/messages.properties (+6 lines)
Lines 6-14 Link Here
6
ValidationHelper_task_validate=Validating ...
6
ValidationHelper_task_validate=Validating ...
7
ValidationHelper_e_marker_creation=Marker creation failure
7
ValidationHelper_e_marker_creation=Marker creation failure
8
TransformToGenModelOperation_e_map_load_cancelled=Mapping model loading was interrupted
8
TransformToGenModelOperation_e_map_load_cancelled=Mapping model loading was interrupted
9
TransformToGenModelOperation_e_wrong_root_element=Wrong root element: {0}
10
TransformToGenModelOperation_e_load_mapping_model=Errors while loading Mapping model
11
TransformToGenModelOperation_e_null_resource_set=Can not operate without ResourceSet
9
TransformToGenModelOperation_task_load=Loading ...
12
TransformToGenModelOperation_task_load=Loading ...
10
TransformToGenModelOperation_task_validate=Validating ...
13
TransformToGenModelOperation_task_validate=Validating ...
11
TransformToGenModelOperation_e_mapping_invalid=Invalid Mapping Model
14
TransformToGenModelOperation_e_mapping_invalid=Invalid Mapping Model
15
TransformToGenModelOperation_e_null_gmfgen_uri=Target gmfgen URI should be specified
12
TransformToGenModelWizard_e_generator_creation=Errors while creating generator model
16
TransformToGenModelWizard_e_generator_creation=Errors while creating generator model
13
TransformToGenModelWizard_e_operation_cancelled=Operation cancelled
17
TransformToGenModelWizard_e_operation_cancelled=Operation cancelled
14
TransformToGenModelOperation_e_genmodel_load_cancelled=GenModel loading was interrupted
18
TransformToGenModelOperation_e_genmodel_load_cancelled=GenModel loading was interrupted
Lines 18-23 Link Here
18
TransformToGenModelWizard_title_genmodel=Select GenModel
22
TransformToGenModelWizard_title_genmodel=Select GenModel
19
TransformToGenModelWizard_descr_genmodel=Load GenModel or create new one
23
TransformToGenModelWizard_descr_genmodel=Load GenModel or create new one
20
TransformToGenModelOperation_e_genmodel_load=Failed to load GenModel
24
TransformToGenModelOperation_e_genmodel_load=Failed to load GenModel
25
TransformToGenModelOperation_e_null_mapping=Mapping model should be loaded
26
TransformToGenModelOperation_e_null_map_uri=Mapping model URI should specified
21
TransformToGenModelOperation_task_generate=Generating ...
27
TransformToGenModelOperation_task_generate=Generating ...
22
TransformToGenModelOperation_task_reconcile=Reconciling ...
28
TransformToGenModelOperation_task_reconcile=Reconciling ...
23
TransformToGenModelOperation_task_save=Saving ...
29
TransformToGenModelOperation_task_save=Saving ...

Return to bug 171593