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

Collapse All | Expand All

(-)a/r4e/org.eclipse.mylyn.reviews.r4e.core/model/org.eclipse.mylyn.reviews.r4e.core.model.ecore (+5 lines)
Lines 307-310 Link Here
307
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
307
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
308
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="body" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
308
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="body" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
309
  </eClassifiers>
309
  </eClassifiers>
310
  <eClassifiers xsi:type="ecore:EClass" name="R4EModelPosition" eSuperTypes="#//R4EPosition">
311
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="objectID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
312
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="differenceDescription"
313
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
314
  </eClassifiers>
310
</ecore:EPackage>
315
</ecore:EPackage>
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/impl/RModelFactoryImpl.java (+10 lines)
Lines 26-31 Link Here
26
import org.eclipse.emf.ecore.EPackage;
26
import org.eclipse.emf.ecore.EPackage;
27
import org.eclipse.emf.ecore.impl.EFactoryImpl;
27
import org.eclipse.emf.ecore.impl.EFactoryImpl;
28
import org.eclipse.emf.ecore.plugin.EcorePlugin;
28
import org.eclipse.emf.ecore.plugin.EcorePlugin;
29
import org.eclipse.mylyn.reviews.r4e.core.model.*;
29
import org.eclipse.emf.ecore.resource.Resource;
30
import org.eclipse.emf.ecore.resource.Resource;
30
import org.eclipse.mylyn.reviews.r4e.core.model.R4EAnomaly;
31
import org.eclipse.mylyn.reviews.r4e.core.model.R4EAnomaly;
31
import org.eclipse.mylyn.reviews.r4e.core.model.R4EAnomalyState;
32
import org.eclipse.mylyn.reviews.r4e.core.model.R4EAnomalyState;
Lines 44-49 Link Here
44
import org.eclipse.mylyn.reviews.r4e.core.model.R4EIDComponent;
45
import org.eclipse.mylyn.reviews.r4e.core.model.R4EIDComponent;
45
import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem;
46
import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem;
46
import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData;
47
import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData;
48
import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition;
47
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
49
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
48
import org.eclipse.mylyn.reviews.r4e.core.model.R4EPosition;
50
import org.eclipse.mylyn.reviews.r4e.core.model.R4EPosition;
49
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
51
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
Lines 1275-1278 Link Here
1275
		return factoryExtension.copyR4EReview(origGroup, destGroup, origReviewName, destReviewName);
1277
		return factoryExtension.copyR4EReview(origGroup, destGroup, origReviewName, destReviewName);
1276
	}
1278
	}
1277
1279
1280
	/* (non-Javadoc)
1281
	 * @see org.eclipse.mylyn.reviews.r4e.core.model.serial.Persistence.UserItemResFactory#createR4EModelPosition(org.eclipse.mylyn.reviews.r4e.core.model.R4EContent)
1282
	 */
1283
	public R4EModelPosition createR4EModelPosition(R4EContent content)
1284
			throws ResourceHandlingException {
1285
		return factoryExtension.createR4EModelPosition(content);
1286
	}
1287
1278
} //RModelFactoryImpl
1288
} //RModelFactoryImpl
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/Persistence.java (+8 lines)
Lines 31-36 Link Here
31
import org.eclipse.mylyn.reviews.r4e.core.model.R4EFormalReview;
31
import org.eclipse.mylyn.reviews.r4e.core.model.R4EFormalReview;
32
import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem;
32
import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem;
33
import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData;
33
import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData;
34
import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition;
34
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
35
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
35
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
36
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
36
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup;
37
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup;
Lines 268-273 Link Here
268
		 * @throws ResourceHandlingException
269
		 * @throws ResourceHandlingException
269
		 */
270
		 */
270
		public R4ETextPosition createR4ETextPosition(R4ETextContent content) throws ResourceHandlingException;
271
		public R4ETextPosition createR4ETextPosition(R4ETextContent content) throws ResourceHandlingException;
272
		
273
		/**
274
		 * @param content
275
		 * @return
276
		 * @throws ResourceHandlingException
277
		 */
278
		public R4EModelPosition createR4EModelPosition(R4EContent content) throws ResourceHandlingException;
271
279
272
	}
280
	}
273
281
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/impl/RModelFactoryExtImpl.java (+19 lines)
Lines 40-45 Link Here
40
import org.eclipse.mylyn.reviews.r4e.core.model.R4EIDComponent;
40
import org.eclipse.mylyn.reviews.r4e.core.model.R4EIDComponent;
41
import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem;
41
import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem;
42
import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData;
42
import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData;
43
import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition;
43
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
44
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
44
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
45
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
45
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup;
46
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup;
Lines 1572-1575 Link Here
1572
		return null;
1573
		return null;
1573
	}
1574
	}
1574
1575
1576
	public R4EModelPosition createR4EModelPosition(R4EContent content) throws ResourceHandlingException {
1577
		R4EModelPosition modelPosition = null;
1578
		if (!(isAssociatedToResource(content))) {
1579
			StringBuilder sb = new StringBuilder(
1580
					"Can not create a ModelLocation from a Content not associated to a Resource");
1581
			throw new ResourceHandlingException(sb.toString());
1582
		}
1583
1584
		modelPosition = RModelFactoryExt.eINSTANCE.createR4EModelPosition();
1585
		content.setLocation(modelPosition);
1586
1587
		// Associate to resource and save
1588
		content.eResource().getContents().add(modelPosition);
1589
		fWriter.saveResource(modelPosition.eResource());
1590
1591
		return modelPosition;
1592
	}
1593
1575
}
1594
}
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/META-INF/MANIFEST.MF (-1 / +4 lines)
Lines 25-31 Link Here
25
 org.eclipse.mylyn.versions.ui;bundle-version="0.8.0",
25
 org.eclipse.mylyn.versions.ui;bundle-version="0.8.0",
26
 org.eclipse.mylyn.reviews.ldap;bundle-version="0.2.0";resolution:=optional,
26
 org.eclipse.mylyn.reviews.ldap;bundle-version="0.2.0";resolution:=optional,
27
 org.eclipse.mylyn.reviews.notifications;bundle-version="0.8.0",
27
 org.eclipse.mylyn.reviews.notifications;bundle-version="0.8.0",
28
 org.eclipse.mylyn.reviews.r4e.report;bundle-version="0.9.0";resolution:=optional
28
 org.eclipse.mylyn.reviews.r4e.report;bundle-version="0.9.0";resolution:=optional,
29
 org.eclipse.emf.compare;bundle-version="1.3.0",
30
 org.eclipse.emf.compare.diagram;bundle-version="1.3.0",
31
 org.eclipse.emf.compare.ui;bundle-version="1.3.0"
29
Bundle-ActivationPolicy: lazy
32
Bundle-ActivationPolicy: lazy
30
Bundle-RequiredExecutionEnvironment: J2SE-1.5
33
Bundle-RequiredExecutionEnvironment: J2SE-1.5
31
Bundle-Vendor: %providerName
34
Bundle-Vendor: %providerName
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/commands/FindReviewItemsHandler.java (-16 / +124 lines)
Lines 19-29 Link Here
19
19
20
package org.eclipse.mylyn.reviews.r4e.ui.internal.commands;
20
package org.eclipse.mylyn.reviews.r4e.ui.internal.commands;
21
21
22
import java.io.IOException;
23
import java.io.InputStream;
24
import java.lang.reflect.InvocationTargetException;
22
import java.util.ArrayList;
25
import java.util.ArrayList;
23
import java.util.Collections;
26
import java.util.Collections;
27
import java.util.Iterator;
24
import java.util.List;
28
import java.util.List;
25
29
30
import org.eclipse.compare.IStreamContentAccessor;
31
import org.eclipse.compare.ITypedElement;
26
import org.eclipse.compare.rangedifferencer.RangeDifference;
32
import org.eclipse.compare.rangedifferencer.RangeDifference;
33
import org.eclipse.compare.structuremergeviewer.ICompareInput;
27
import org.eclipse.core.commands.AbstractHandler;
34
import org.eclipse.core.commands.AbstractHandler;
28
import org.eclipse.core.commands.ExecutionEvent;
35
import org.eclipse.core.commands.ExecutionEvent;
29
import org.eclipse.core.commands.ExecutionException;
36
import org.eclipse.core.commands.ExecutionException;
Lines 33-40 Link Here
33
import org.eclipse.core.runtime.IAdaptable;
40
import org.eclipse.core.runtime.IAdaptable;
34
import org.eclipse.core.runtime.IProgressMonitor;
41
import org.eclipse.core.runtime.IProgressMonitor;
35
import org.eclipse.core.runtime.IStatus;
42
import org.eclipse.core.runtime.IStatus;
43
import org.eclipse.core.runtime.NullProgressMonitor;
36
import org.eclipse.core.runtime.Status;
44
import org.eclipse.core.runtime.Status;
37
import org.eclipse.core.runtime.jobs.Job;
45
import org.eclipse.core.runtime.jobs.Job;
46
import org.eclipse.emf.common.util.URI;
47
import org.eclipse.emf.compare.diff.metamodel.ComparisonResourceSetSnapshot;
48
import org.eclipse.emf.compare.diff.metamodel.ComparisonResourceSnapshot;
49
import org.eclipse.emf.compare.diff.metamodel.ComparisonSnapshot;
50
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
51
import org.eclipse.emf.compare.diff.metamodel.DiffModel;
52
import org.eclipse.emf.compare.diff.metamodel.DiffResourceSet;
53
import org.eclipse.emf.compare.ui.ModelCompareInput;
54
import org.eclipse.emf.compare.ui.internal.ModelComparator;
55
import org.eclipse.emf.ecore.resource.Resource;
56
import org.eclipse.emf.ecore.resource.ResourceSet;
57
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
38
import org.eclipse.jdt.core.IJavaElement;
58
import org.eclipse.jdt.core.IJavaElement;
39
import org.eclipse.jdt.core.IJavaProject;
59
import org.eclipse.jdt.core.IJavaProject;
40
import org.eclipse.jdt.core.IPackageFragment;
60
import org.eclipse.jdt.core.IPackageFragment;
Lines 61-69 Link Here
61
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDeltaContainer;
81
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDeltaContainer;
62
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIFileContext;
82
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIFileContext;
63
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
83
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
84
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelPosition;
64
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
85
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
65
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewItem;
86
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewItem;
66
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUITextPosition;
67
import org.eclipse.mylyn.reviews.r4e.ui.internal.preferences.PreferenceConstants;
87
import org.eclipse.mylyn.reviews.r4e.ui.internal.preferences.PreferenceConstants;
68
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.CommandUtils;
88
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.CommandUtils;
69
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.Diff;
89
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.Diff;
Lines 280-286 Link Here
280
															R4EUIConstants.DELTAS_LABEL);
300
															R4EUIConstants.DELTAS_LABEL);
281
													uiFileContext.addChildren(deltaContainer);
301
													uiFileContext.addChildren(deltaContainer);
282
												}
302
												}
283
												deltaContainer.createDelta((R4EUITextPosition) position);
303
												deltaContainer.createDelta(position);
284
											}
304
											}
285
										} catch (OutOfSyncException e) {
305
										} catch (OutOfSyncException e) {
286
											R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " ("
306
											R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " ("
Lines 331-336 Link Here
331
		}
351
		}
332
	}
352
	}
333
353
354
	private Object retrieveInputFromSnapshot(final ComparisonSnapshot comparisonResult) {
355
		Object retrievedInput = null;
356
		if (comparisonResult instanceof ComparisonResourceSnapshot) {
357
			retrievedInput = ((ComparisonResourceSnapshot) comparisonResult).getDiff();
358
		} else {
359
			retrievedInput = ((ComparisonResourceSetSnapshot) comparisonResult).getDiffResourceSet();
360
		}
361
		return retrievedInput;
362
	}
363
334
	/**
364
	/**
335
	 * Method updateFilesWithDeltas.
365
	 * Method updateFilesWithDeltas.
336
	 * 
366
	 * 
Lines 344-365 Link Here
344
		final R4ECompareEditorInput input = CommandUtils.createCompareEditorInput(aFile.getBase(), aFile.getTarget());
374
		final R4ECompareEditorInput input = CommandUtils.createCompareEditorInput(aFile.getBase(), aFile.getTarget());
345
		input.prepareCompareInputNoEditor();
375
		input.prepareCompareInputNoEditor();
346
376
347
		final DiffUtils diffUtils = new DiffUtils();
377
		if (isModelResource(input)) {
348
		final List<Diff> diffs;
378
			// Model part
349
379
			try {
350
		diffs = diffUtils.doDiff(false, true, input);
380
				input.run(new NullProgressMonitor());
351
381
			} catch (InterruptedException e) {
352
		//Add Deltas from the list of differences
382
				// TODO Auto-generated catch block
353
		for (Diff diff : diffs) {
383
				e.printStackTrace();
354
			IR4EUIPosition position = CommandUtils.getPosition(diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR)
384
			} catch (InvocationTargetException e) {
355
					.getOffset(), diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR).getLength(),
385
				// TODO Auto-generated catch block
356
					diff.getDocument(R4EUIConstants.LEFT_CONTRIBUTOR));
386
				e.printStackTrace();
357
358
			if (null == position || RangeDifference.NOCHANGE == diff.getKind()) {
359
				continue; //Cannot resolve position for this delta or no change
360
			}
387
			}
361
			aFile.getPositions().add(position);
388
			Object diffModel = null;
389
			// Model
390
			final ModelComparator comparator;
391
			Object in = input.getCompareResult();
392
			if (in instanceof ICompareInput) {
393
				comparator = ModelComparator.getComparator(input.getCompareConfiguration(), (ICompareInput) in);
394
			} else {
395
				comparator = ModelComparator.getComparator(input.getCompareConfiguration());
396
			}
397
398
			ComparisonSnapshot snapshot = null;
399
			if (in instanceof ModelCompareInput) {
400
				snapshot = ((ModelCompareInput) in).getComparisonSnapshot();
401
			} else if (in instanceof ComparisonSnapshot) {
402
				snapshot = (ComparisonSnapshot) in;
403
			}
404
405
			if (snapshot instanceof ComparisonResourceSnapshot) {
406
				diffModel = ((ComparisonResourceSnapshot) snapshot).getDiff();
407
			} else if (snapshot instanceof ComparisonResourceSetSnapshot) {
408
				diffModel = ((ComparisonResourceSetSnapshot) snapshot).getDiffResourceSet();
409
			} else if (comparator.getComparisonResult() != null) {
410
				diffModel = retrieveInputFromSnapshot(comparator.getComparisonResult());
411
			} else if (in instanceof ModelCompareInput) {
412
				diffModel = ((ModelCompareInput) in).getDiff();
413
			} else if (in instanceof ICompareInput) {
414
				comparator.loadResources((ICompareInput) in);
415
				diffModel = retrieveInputFromSnapshot(comparator.compareSilentlyInThreadUI(input.getCompareConfiguration()));
416
			}
417
418
			if (diffModel instanceof DiffModel) {
419
				for (DiffElement adiff : ((DiffModel) diffModel).getDifferences()) {
420
					R4EUIModelPosition position = CommandUtils.getPosition(adiff);
421
					aFile.getPositions().add(position);
422
				}
423
			} else if (diffModel instanceof DiffResourceSet) {
424
				Iterator<DiffModel> it = ((DiffResourceSet) diffModel).getDiffModels().iterator();
425
				//Add Deltas from the list of differences
426
				while (it.hasNext()) {
427
					DiffModel currentDiffModel = it.next();
428
					for (DiffElement adiff : currentDiffModel.getDifferences()) {
429
						R4EUIModelPosition position = CommandUtils.getPosition(adiff);
430
						aFile.getPositions().add(position);
431
					}
432
				}
433
			}
434
435
		} else {
436
437
			final DiffUtils diffUtils = new DiffUtils();
438
			final List<Diff> diffs;
439
440
			diffs = diffUtils.doDiff(false, true, input);
441
442
			//Add Deltas from the list of differences
443
			for (Diff diff : diffs) {
444
				IR4EUIPosition position = CommandUtils.getPosition(diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR)
445
						.getOffset(), diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR).getLength(),
446
						diff.getDocument(R4EUIConstants.LEFT_CONTRIBUTOR));
447
448
				if (null == position || RangeDifference.NOCHANGE == diff.getKind()) {
449
					continue; //Cannot resolve position for this delta or no change
450
				}
451
				aFile.getPositions().add(position);
452
			}
362
		}
453
		}
454
455
	}
456
457
	private boolean isModelResource(final R4ECompareEditorInput input) throws CoreException {
458
		ITypedElement elt = input.getLeftElement();
459
		if (elt instanceof IStreamContentAccessor) {
460
			InputStream is = ((IStreamContentAccessor) elt).getContents();
461
			ResourceSet resourceSet = new ResourceSetImpl();
462
			Resource resource = resourceSet.createResource(URI.createURI("test.resource.type"));
463
			try {
464
				resource.load(is, Collections.EMPTY_MAP);
465
				resource.unload();
466
				return true;
467
			} catch (IOException e) {
468
			}
469
		}
470
		return false;
363
	}
471
	}
364
472
365
	/**
473
	/**
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/EditorProxy.java (-1 / +1 lines)
Lines 214-220 Link Here
214
			aPage.activate(editor); //Simply provide focus to editor
214
			aPage.activate(editor); //Simply provide focus to editor
215
215
216
			//Go to the correct element in the compare editor
216
			//Go to the correct element in the compare editor
217
			UIUtils.selectElementInEditor((R4ECompareEditorInput) editor.getEditorInput());
217
			UIUtils.selectElementInEditor(editor);
218
		} else {
218
		} else {
219
			input = CommandUtils.createCompareEditorInput(aBaseFileVersion, aTargetFileVersion);
219
			input = CommandUtils.createCompareEditorInput(aBaseFileVersion, aTargetFileVersion);
220
			input.setTitle(R4E_COMPARE_EDITOR_TITLE); // Adjust the compare title
220
			input.setTitle(R4E_COMPARE_EDITOR_TITLE); // Adjust the compare title
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/R4ECompareEditorInput.java (-2 / +14 lines)
Lines 33-38 Link Here
33
import org.eclipse.swt.widgets.Composite;
33
import org.eclipse.swt.widgets.Composite;
34
import org.eclipse.swt.widgets.Control;
34
import org.eclipse.swt.widgets.Control;
35
import org.eclipse.team.ui.synchronize.SaveableCompareEditorInput;
35
import org.eclipse.team.ui.synchronize.SaveableCompareEditorInput;
36
import org.eclipse.ui.IEditorPart;
37
import org.eclipse.ui.IWorkbenchPage;
38
import org.eclipse.ui.PlatformUI;
36
39
37
/**
40
/**
38
 * @author lmcdubo
41
 * @author lmcdubo
Lines 282-289 Link Here
282
	public Control createContents(Composite aParent) {
285
	public Control createContents(Composite aParent) {
283
		final Control control = super.createContents(aParent);
286
		final Control control = super.createContents(aParent);
284
287
285
		//Go to the correct element in the compare editor
288
		IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
286
		UIUtils.selectElementInEditor(this);
289
		if (page != null) {
290
			IEditorPart editor = page.findEditor(this);
291
			if (editor != null) {
292
				UIUtils.selectElementInEditor(editor);
293
			}
294
		} else {
295
			//Go to the correct element in the compare editor
296
			UIUtils.selectElementInEditor(this);
297
		}
298
287
		return control;
299
		return control;
288
	}
300
	}
289
}
301
}
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIDeltaContainer.java (-7 / +20 lines)
Lines 20-27 Link Here
20
20
21
import org.eclipse.emf.common.util.EList;
21
import org.eclipse.emf.common.util.EList;
22
import org.eclipse.mylyn.reviews.r4e.core.model.R4EDelta;
22
import org.eclipse.mylyn.reviews.r4e.core.model.R4EDelta;
23
import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition;
23
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
24
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
24
import org.eclipse.mylyn.reviews.r4e.core.model.R4ETextPosition;
25
import org.eclipse.mylyn.reviews.r4e.core.model.R4EPosition;
25
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException;
26
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException;
26
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
27
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
27
import org.eclipse.mylyn.reviews.r4e.ui.R4EUIPlugin;
28
import org.eclipse.mylyn.reviews.r4e.ui.R4EUIPlugin;
Lines 73-84 Link Here
73
	 * @throws ResourceHandlingException
74
	 * @throws ResourceHandlingException
74
	 * @throws OutOfSyncException
75
	 * @throws OutOfSyncException
75
	 */
76
	 */
76
	public R4EUIDelta createDelta(R4EUITextPosition aUiPosition) throws ResourceHandlingException, OutOfSyncException {
77
	public R4EUIDelta createDelta(IR4EUIPosition aUiPosition) throws ResourceHandlingException, OutOfSyncException {
77
78
78
		//Create and set content model element
79
		//Create and set content model element
79
		final R4EDelta delta = R4EUIModelController.FModelExt.createR4EDelta(((R4EUIFileContext) getParent()).getFileContext());
80
		final R4EDelta delta = R4EUIModelController.FModelExt.createR4EDelta(((R4EUIFileContext) getParent()).getFileContext());
80
		final R4ETextPosition position = R4EUIModelController.FModelExt.createR4ETextPosition(R4EUIModelController.FModelExt.createR4ETargetTextContent(delta));
81
81
		aUiPosition.setPositionInModel(position);
82
		R4EPosition position = null;
83
		if (aUiPosition instanceof R4EUITextPosition) {
84
			position = R4EUIModelController.FModelExt.createR4ETextPosition(R4EUIModelController.FModelExt.createR4ETargetTextContent(delta));
85
			aUiPosition.setPositionInModel(position);
86
		} else if (aUiPosition instanceof R4EUIModelPosition) {
87
			position = R4EUIModelController.FModelExt.createR4EModelPosition(R4EUIModelController.FModelExt.createR4ETargetTextContent(delta));
88
			aUiPosition.setPositionInModel(position);
89
		}
82
90
83
		//Create and set UI model element
91
		//Create and set UI model element
84
		final R4EUIDelta uiDelta = new R4EUIDelta(this, delta, aUiPosition);
92
		final R4EUIDelta uiDelta = new R4EUIDelta(this, delta, aUiPosition);
Lines 97-103 Link Here
97
	public void open() {
105
	public void open() {
98
		final EList<R4EDelta> deltas = ((R4EUIFileContext) getParent()).getFileContext().getDeltas();
106
		final EList<R4EDelta> deltas = ((R4EUIFileContext) getParent()).getFileContext().getDeltas();
99
		if (null != deltas) {
107
		if (null != deltas) {
100
			R4EUITextPosition position = null;
108
			IR4EUIPosition uiPosition = null;
101
			R4EUIDelta newDelta = null;
109
			R4EUIDelta newDelta = null;
102
			final int deltaSize = deltas.size();
110
			final int deltaSize = deltas.size();
103
			R4EDelta delta = null;
111
			R4EDelta delta = null;
Lines 107-114 Link Here
107
						|| R4EUIPlugin.getDefault()
115
						|| R4EUIPlugin.getDefault()
108
								.getPreferenceStore()
116
								.getPreferenceStore()
109
								.getBoolean(PreferenceConstants.P_SHOW_DISABLED)) {
117
								.getBoolean(PreferenceConstants.P_SHOW_DISABLED)) {
110
					position = new R4EUITextPosition(deltas.get(i).getTarget().getLocation());
118
					R4EPosition position = deltas.get(i).getTarget().getLocation();
111
					newDelta = new R4EUIDelta(this, deltas.get(i), position);
119
					if (position instanceof R4EModelPosition) {
120
						uiPosition = new R4EUIModelPosition(position);
121
					} else {
122
						uiPosition = new R4EUITextPosition(position);
123
					}
124
					newDelta = new R4EUIDelta(this, deltas.get(i), uiPosition);
112
					addChildren(newDelta);
125
					addChildren(newDelta);
113
				}
126
				}
114
			}
127
			}
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIModelPosition.java (+115 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2012 Ericsson Research Canada
3
 * 
4
 * All rights reserved. This program and the accompanying materials are
5
 * made available under the terms of the Eclipse Public License v1.0 which
6
 * accompanies this distribution, and is available at
7
 * http://www.eclipse.org/legal/epl-v10.html
8
 * 
9
 * Description:
10
 * 
11
 * This class implements the position interface to manage text positions
12
 * within a file under review.
13
 * 
14
 * Contributors:
15
 *   Cedric Notot - Obeo
16
 *   
17
 ******************************************************************************/
18
19
package org.eclipse.mylyn.reviews.r4e.ui.internal.model;
20
21
import org.eclipse.emf.compare.diagram.diff.util.DiffUtil;
22
import org.eclipse.emf.compare.diagram.diff.util.DiffUtil.Side;
23
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
24
import org.eclipse.emf.compare.util.AdapterUtils;
25
import org.eclipse.emf.ecore.EObject;
26
import org.eclipse.mylyn.reviews.r4e.core.model.R4EContent;
27
import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition;
28
import org.eclipse.mylyn.reviews.r4e.core.model.R4EPosition;
29
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException;
30
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
31
32
/**
33
 * @author cnotot
34
 */
35
public class R4EUIModelPosition implements IR4EUIPosition {
36
37
	// ------------------------------------------------------------------------
38
	// Member variables
39
	// ------------------------------------------------------------------------
40
	private R4EModelPosition fPosition;
41
42
	private final String fObjectID;
43
44
	private final String fDifferenceDescription;
45
46
	// ------------------------------------------------------------------------
47
	// Constructors
48
	// ------------------------------------------------------------------------
49
	public R4EUIModelPosition(R4EPosition aModelPosition) {
50
		fPosition = (R4EModelPosition) aModelPosition;
51
		fObjectID = ((R4EModelPosition) aModelPosition).getObjectID();
52
		fDifferenceDescription = ((R4EModelPosition) aModelPosition).getDifferenceDescription();
53
	}
54
55
	public R4EUIModelPosition(DiffElement aDiff) {
56
		EObject obj = DiffUtil.getElement(aDiff, Side.LEFT, EObject.class);
57
		fObjectID = obj.eResource().getURIFragment(obj);
58
		fDifferenceDescription = AdapterUtils.getItemProviderText(aDiff);
59
	}
60
61
	// ------------------------------------------------------------------------
62
	// Methods
63
	// ------------------------------------------------------------------------
64
65
	// Attributes
66
67
	public String getObjectID() {
68
		return fObjectID;
69
	}
70
71
	/**
72
	 * Method setPositionInModel.
73
	 * 
74
	 * @param aModelPosition
75
	 *            R4EPosition
76
	 * @throws OutOfSyncException
77
	 * @throws ResourceHandlingException
78
	 * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIPosition#setPositionInModel(R4EPosition)
79
	 */
80
	public void setPositionInModel(R4EPosition aModelPosition) throws ResourceHandlingException, OutOfSyncException {
81
		fPosition = (R4EModelPosition) aModelPosition;
82
		Long bookNum = R4EUIModelController.FResourceUpdater.checkOut(fPosition, R4EUIModelController.getReviewer());
83
		fPosition.setObjectID(fObjectID);
84
		fPosition.setDifferenceDescription(fDifferenceDescription);
85
		R4EUIModelController.FResourceUpdater.checkIn(bookNum);
86
87
		final R4EContent content = (R4EContent) fPosition.eContainer();
88
		bookNum = R4EUIModelController.FResourceUpdater.checkOut(content, R4EUIModelController.getReviewer());
89
		content.setInfo(((R4EContent) fPosition.eContainer()).getInfo());
90
		R4EUIModelController.FResourceUpdater.checkIn(bookNum);
91
	}
92
93
	/**
94
	 * Method isSameAs.
95
	 * 
96
	 * @param aPosition
97
	 *            IR4EPosition
98
	 * @return boolean
99
	 * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIPosition#isSameAs(IR4EUIPosition)
100
	 */
101
	public boolean isSameAs(IR4EUIPosition aPosition) {
102
		return fObjectID.equals(((R4EModelPosition) aPosition).getObjectID());
103
	}
104
105
	/**
106
	 * Method toString.
107
	 * 
108
	 * @return String
109
	 * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIPosition#toString()
110
	 */
111
	@Override
112
	public String toString() {
113
		return fDifferenceDescription;
114
	}
115
}
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/CommandUtils.java (+14 lines)
Lines 36-41 Link Here
36
import org.eclipse.core.runtime.IStatus;
36
import org.eclipse.core.runtime.IStatus;
37
import org.eclipse.core.runtime.Status;
37
import org.eclipse.core.runtime.Status;
38
import org.eclipse.emf.common.util.EList;
38
import org.eclipse.emf.common.util.EList;
39
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
39
import org.eclipse.jdt.core.IJavaElement;
40
import org.eclipse.jdt.core.IJavaElement;
40
import org.eclipse.jdt.core.ISourceReference;
41
import org.eclipse.jdt.core.ISourceReference;
41
import org.eclipse.jface.dialogs.ErrorDialog;
42
import org.eclipse.jface.dialogs.ErrorDialog;
Lines 68-73 Link Here
68
import org.eclipse.mylyn.reviews.r4e.ui.internal.editors.R4EFileTypedElement;
69
import org.eclipse.mylyn.reviews.r4e.ui.internal.editors.R4EFileTypedElement;
69
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement;
70
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement;
70
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
71
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
72
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelPosition;
71
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedContainer;
73
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedContainer;
72
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedFile;
74
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedFile;
73
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
75
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
Lines 372-377 Link Here
372
	}
374
	}
373
375
374
	/**
376
	/**
377
	 * Method getPosition. Get position based on a IDiffElement.
378
	 * 
379
	 * @param aDiff
380
	 *            IDiffElement
381
	 * @return R4EUIModelPosition
382
	 */
383
	public static R4EUIModelPosition getPosition(DiffElement aDiff) {
384
		final R4EUIModelPosition position = new R4EUIModelPosition(aDiff);
385
		return position;
386
	}
387
388
	/**
375
	 * Method getPosition. Get position for generic workspace files
389
	 * Method getPosition. Get position for generic workspace files
376
	 * 
390
	 * 
377
	 * @param aSelectedElement
391
	 * @param aSelectedElement
(-)a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/UIUtils.java (-3 / +32 lines)
Lines 23-28 Link Here
23
import java.net.MalformedURLException;
23
import java.net.MalformedURLException;
24
import java.net.URL;
24
import java.net.URL;
25
import java.util.ArrayList;
25
import java.util.ArrayList;
26
import java.util.Arrays;
26
import java.util.Calendar;
27
import java.util.Calendar;
27
import java.util.List;
28
import java.util.List;
28
import java.util.StringTokenizer;
29
import java.util.StringTokenizer;
Lines 36-41 Link Here
36
import org.eclipse.core.runtime.CoreException;
37
import org.eclipse.core.runtime.CoreException;
37
import org.eclipse.core.runtime.IStatus;
38
import org.eclipse.core.runtime.IStatus;
38
import org.eclipse.core.runtime.Status;
39
import org.eclipse.core.runtime.Status;
40
import org.eclipse.emf.compare.ui.services.CompareServices;
39
import org.eclipse.jface.dialogs.ErrorDialog;
41
import org.eclipse.jface.dialogs.ErrorDialog;
40
import org.eclipse.jface.resource.ImageDescriptor;
42
import org.eclipse.jface.resource.ImageDescriptor;
41
import org.eclipse.jface.viewers.ISelection;
43
import org.eclipse.jface.viewers.ISelection;
Lines 62-67 Link Here
62
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDelta;
64
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDelta;
63
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDeltaContainer;
65
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDeltaContainer;
64
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
66
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
67
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelPosition;
65
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedAnomaly;
68
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedAnomaly;
66
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
69
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
67
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewExtended;
70
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewExtended;
Lines 76-81 Link Here
76
import org.eclipse.swt.graphics.Point;
79
import org.eclipse.swt.graphics.Point;
77
import org.eclipse.swt.widgets.Composite;
80
import org.eclipse.swt.widgets.Composite;
78
import org.eclipse.swt.widgets.Text;
81
import org.eclipse.swt.widgets.Text;
82
import org.eclipse.ui.IEditorInput;
83
import org.eclipse.ui.IEditorPart;
79
import org.eclipse.ui.PartInitException;
84
import org.eclipse.ui.PartInitException;
80
import org.eclipse.ui.PlatformUI;
85
import org.eclipse.ui.PlatformUI;
81
import org.eclipse.ui.browser.IWebBrowser;
86
import org.eclipse.ui.browser.IWebBrowser;
Lines 401-406 Link Here
401
		return tempStr.toString();
406
		return tempStr.toString();
402
	}
407
	}
403
408
409
	public static void selectElementInEditor(IEditorPart editor) {
410
411
		final IR4EUIModelElement element = getR4EUIElement();
412
		if (element instanceof R4EUIContent) {
413
			final IR4EUIPosition position = ((R4EUIContent) element).getPosition();
414
			if (position instanceof R4EUIModelPosition) {
415
				selectElementInCompareModelEditor(editor, (R4EUIModelPosition) position);
416
			} else {
417
				final IEditorInput aInput = editor.getEditorInput();
418
				selectElementInEditor((R4ECompareEditorInput) aInput);
419
			}
420
		}
421
	}
422
423
	public static void selectElementInCompareModelEditor(IEditorPart editor, R4EUIModelPosition pos) {
424
		final String id = pos.getObjectID();
425
		final List<String> ids = Arrays.asList(id);
426
		CompareServices.setSelection(ids, editor);
427
	}
428
429
	private static IR4EUIModelElement getR4EUIElement() {
430
		final ISelection selection = R4EUIModelController.getNavigatorView().getTreeViewer().getSelection();
431
		final IR4EUIModelElement element = (IR4EUIModelElement) ((IStructuredSelection) selection).getFirstElement();
432
		return element;
433
	}
434
404
	/**
435
	/**
405
	 * Method selectElementInEditor.
436
	 * Method selectElementInEditor.
406
	 * 
437
	 * 
Lines 408-416 Link Here
408
	 *            R4ECompareEditorInput
439
	 *            R4ECompareEditorInput
409
	 */
440
	 */
410
	public static void selectElementInEditor(R4ECompareEditorInput aInput) {
441
	public static void selectElementInEditor(R4ECompareEditorInput aInput) {
411
442
		final IR4EUIModelElement element = getR4EUIElement();
412
		final ISelection selection = R4EUIModelController.getNavigatorView().getTreeViewer().getSelection();
413
		final IR4EUIModelElement element = (IR4EUIModelElement) ((IStructuredSelection) selection).getFirstElement();
414
		IR4EUIPosition position = null;
443
		IR4EUIPosition position = null;
415
		int selectionIndex = -1;
444
		int selectionIndex = -1;
416
445

Return to bug 370783