Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 210666 Details for
Bug 370783
Integration with EMF Compare (Model Reviews support)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch
integrationDeltas.patch (text/plain), 29.50 KB, created by
Cedric Notot
on 2012-02-07 12:26:02 EST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Cedric Notot
Created:
2012-02-07 12:26:02 EST
Size:
29.50 KB
patch
obsolete
>From 0b128429cce4b097f8088a3d10685a124e918095 Tue, 7 Feb 2012 17:14:09 +0100 >From: Cedric Notot <cedric.notot@obeo.fr> >Date: Mon, 6 Feb 2012 16:05:52 +0100 >Subject: [PATCH] evolutions to integrate EMF Compare > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.core/model/org.eclipse.mylyn.reviews.r4e.core.model.ecore b/r4e/org.eclipse.mylyn.reviews.r4e.core/model/org.eclipse.mylyn.reviews.r4e.core.model.ecore >index 1d3479d..6c7ebb7 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.core/model/org.eclipse.mylyn.reviews.r4e.core.model.ecore >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.core/model/org.eclipse.mylyn.reviews.r4e.core.model.ecore >@@ -307,4 +307,9 @@ > eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> > <eStructuralFeatures xsi:type="ecore:EAttribute" name="body" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> > </eClassifiers> >+ <eClassifiers xsi:type="ecore:EClass" name="R4EModelPosition" eSuperTypes="#//R4EPosition"> >+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="objectID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> >+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="differenceDescription" >+ eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> >+ </eClassifiers> > </ecore:EPackage> > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/Persistence.java b/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/Persistence.java >index eff5630..24a0001 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/Persistence.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/Persistence.java >@@ -31,6 +31,7 @@ > import org.eclipse.mylyn.reviews.r4e.core.model.R4EFormalReview; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup; >@@ -268,6 +269,8 @@ > * @throws ResourceHandlingException > */ > public R4ETextPosition createR4ETextPosition(R4ETextContent content) throws ResourceHandlingException; >+ >+ public R4EModelPosition createR4EModelPosition(R4EContent content) throws ResourceHandlingException; > > } > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/impl/RModelFactoryExtImpl.java b/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/impl/RModelFactoryExtImpl.java >index 8c6508f..9b7da21 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/impl/RModelFactoryExtImpl.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.core/src/org/eclipse/mylyn/reviews/r4e/core/model/serial/impl/RModelFactoryExtImpl.java >@@ -40,6 +40,7 @@ > import org.eclipse.mylyn.reviews.r4e.core.model.R4EIDComponent; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EItem; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EMeetingData; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup; >@@ -1572,4 +1573,22 @@ > return null; > } > >+ public R4EModelPosition createR4EModelPosition(R4EContent content) throws ResourceHandlingException { >+ R4EModelPosition modelPosition = null; >+ if (!(isAssociatedToResource(content))) { >+ StringBuilder sb = new StringBuilder( >+ "Can not create a ModelLocation from a Content not associated to a Resource"); >+ throw new ResourceHandlingException(sb.toString()); >+ } >+ >+ modelPosition = RModelFactoryExt.eINSTANCE.createR4EModelPosition(); >+ content.setLocation(modelPosition); >+ >+ // Associate to resource and save >+ content.eResource().getContents().add(modelPosition); >+ fWriter.saveResource(modelPosition.eResource()); >+ >+ return modelPosition; >+ } >+ > } > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/META-INF/MANIFEST.MF b/r4e/org.eclipse.mylyn.reviews.r4e.ui/META-INF/MANIFEST.MF >index 0126d63..0718403 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/META-INF/MANIFEST.MF >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/META-INF/MANIFEST.MF >@@ -25,7 +25,10 @@ > org.eclipse.mylyn.versions.ui;bundle-version="0.8.0", > org.eclipse.mylyn.reviews.ldap;bundle-version="0.2.0";resolution:=optional, > org.eclipse.mylyn.reviews.notifications;bundle-version="0.8.0", >- org.eclipse.mylyn.reviews.r4e.report;bundle-version="0.9.0";resolution:=optional >+ org.eclipse.mylyn.reviews.r4e.report;bundle-version="0.9.0";resolution:=optional, >+ org.eclipse.emf.compare;bundle-version="1.3.0", >+ org.eclipse.emf.compare.diagram;bundle-version="1.3.0", >+ org.eclipse.emf.compare.ui;bundle-version="1.3.0" > Bundle-ActivationPolicy: lazy > Bundle-RequiredExecutionEnvironment: J2SE-1.5 > Bundle-Vendor: %providerName > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/commands/FindReviewItemsHandler.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/commands/FindReviewItemsHandler.java >index cf28a2f..60eb906 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/commands/FindReviewItemsHandler.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/commands/FindReviewItemsHandler.java >@@ -19,11 +19,18 @@ > > package org.eclipse.mylyn.reviews.r4e.ui.internal.commands; > >+import java.io.IOException; >+import java.io.InputStream; >+import java.lang.reflect.InvocationTargetException; > import java.util.ArrayList; > import java.util.Collections; >+import java.util.Iterator; > import java.util.List; > >+import org.eclipse.compare.IStreamContentAccessor; >+import org.eclipse.compare.ITypedElement; > import org.eclipse.compare.rangedifferencer.RangeDifference; >+import org.eclipse.compare.structuremergeviewer.ICompareInput; > import org.eclipse.core.commands.AbstractHandler; > import org.eclipse.core.commands.ExecutionEvent; > import org.eclipse.core.commands.ExecutionException; >@@ -33,8 +40,21 @@ > import org.eclipse.core.runtime.IAdaptable; > import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.NullProgressMonitor; > import org.eclipse.core.runtime.Status; > import org.eclipse.core.runtime.jobs.Job; >+import org.eclipse.emf.common.util.URI; >+import org.eclipse.emf.compare.diff.metamodel.ComparisonResourceSetSnapshot; >+import org.eclipse.emf.compare.diff.metamodel.ComparisonResourceSnapshot; >+import org.eclipse.emf.compare.diff.metamodel.ComparisonSnapshot; >+import org.eclipse.emf.compare.diff.metamodel.DiffElement; >+import org.eclipse.emf.compare.diff.metamodel.DiffModel; >+import org.eclipse.emf.compare.diff.metamodel.DiffResourceSet; >+import org.eclipse.emf.compare.ui.ModelCompareInput; >+import org.eclipse.emf.compare.ui.internal.ModelComparator; >+import org.eclipse.emf.ecore.resource.Resource; >+import org.eclipse.emf.ecore.resource.ResourceSet; >+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; > import org.eclipse.jdt.core.IJavaElement; > import org.eclipse.jdt.core.IJavaProject; > import org.eclipse.jdt.core.IPackageFragment; >@@ -61,9 +81,9 @@ > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDeltaContainer; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIFileContext; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController; >+import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelPosition; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewItem; >-import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUITextPosition; > import org.eclipse.mylyn.reviews.r4e.ui.internal.preferences.PreferenceConstants; > import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.CommandUtils; > import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.Diff; >@@ -280,7 +300,7 @@ > R4EUIConstants.DELTAS_LABEL); > uiFileContext.addChildren(deltaContainer); > } >- deltaContainer.createDelta((R4EUITextPosition) position); >+ deltaContainer.createDelta(position); > } > } catch (OutOfSyncException e) { > R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" >@@ -331,6 +351,16 @@ > } > } > >+ private Object retrieveInputFromSnapshot(final ComparisonSnapshot comparisonResult) { >+ Object retrievedInput = null; >+ if (comparisonResult instanceof ComparisonResourceSnapshot) { >+ retrievedInput = ((ComparisonResourceSnapshot) comparisonResult).getDiff(); >+ } else { >+ retrievedInput = ((ComparisonResourceSetSnapshot) comparisonResult).getDiffResourceSet(); >+ } >+ return retrievedInput; >+ } >+ > /** > * Method updateFilesWithDeltas. > * >@@ -344,22 +374,100 @@ > final R4ECompareEditorInput input = CommandUtils.createCompareEditorInput(aFile.getBase(), aFile.getTarget()); > input.prepareCompareInputNoEditor(); > >- final DiffUtils diffUtils = new DiffUtils(); >- final List<Diff> diffs; >- >- diffs = diffUtils.doDiff(false, true, input); >- >- //Add Deltas from the list of differences >- for (Diff diff : diffs) { >- IR4EUIPosition position = CommandUtils.getPosition(diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR) >- .getOffset(), diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR).getLength(), >- diff.getDocument(R4EUIConstants.LEFT_CONTRIBUTOR)); >- >- if (null == position || RangeDifference.NOCHANGE == diff.getKind()) { >- continue; //Cannot resolve position for this delta or no change >+ if (isModelResource(input)) { >+ // Model part >+ try { >+ input.run(new NullProgressMonitor()); >+ } catch (InterruptedException e) { >+ // TODO Auto-generated catch block >+ e.printStackTrace(); >+ } catch (InvocationTargetException e) { >+ // TODO Auto-generated catch block >+ e.printStackTrace(); > } >- aFile.getPositions().add(position); >+ Object diffModel = null; >+ // Model >+ final ModelComparator comparator; >+ Object in = input.getCompareResult(); >+ if (in instanceof ICompareInput) { >+ comparator = ModelComparator.getComparator(input.getCompareConfiguration(), (ICompareInput) in); >+ } else { >+ comparator = ModelComparator.getComparator(input.getCompareConfiguration()); >+ } >+ >+ ComparisonSnapshot snapshot = null; >+ if (in instanceof ModelCompareInput) { >+ snapshot = ((ModelCompareInput) in).getComparisonSnapshot(); >+ } else if (in instanceof ComparisonSnapshot) { >+ snapshot = (ComparisonSnapshot) in; >+ } >+ >+ if (snapshot instanceof ComparisonResourceSnapshot) { >+ diffModel = ((ComparisonResourceSnapshot) snapshot).getDiff(); >+ } else if (snapshot instanceof ComparisonResourceSetSnapshot) { >+ diffModel = ((ComparisonResourceSetSnapshot) snapshot).getDiffResourceSet(); >+ } else if (comparator.getComparisonResult() != null) { >+ diffModel = retrieveInputFromSnapshot(comparator.getComparisonResult()); >+ } else if (in instanceof ModelCompareInput) { >+ diffModel = ((ModelCompareInput) in).getDiff(); >+ } else if (in instanceof ICompareInput) { >+ comparator.loadResources((ICompareInput) in); >+ diffModel = retrieveInputFromSnapshot(comparator.compareSilentlyInThreadUI(input.getCompareConfiguration())); >+ } >+ >+ if (diffModel instanceof DiffModel) { >+ for (DiffElement adiff : ((DiffModel) diffModel).getDifferences()) { >+ R4EUIModelPosition position = CommandUtils.getPosition(adiff); >+ aFile.getPositions().add(position); >+ } >+ } else if (diffModel instanceof DiffResourceSet) { >+ Iterator<DiffModel> it = ((DiffResourceSet) diffModel).getDiffModels().iterator(); >+ //Add Deltas from the list of differences >+ while (it.hasNext()) { >+ DiffModel currentDiffModel = it.next(); >+ for (DiffElement adiff : currentDiffModel.getDifferences()) { >+ R4EUIModelPosition position = CommandUtils.getPosition(adiff); >+ aFile.getPositions().add(position); >+ } >+ } >+ } >+ >+ } else { >+ >+ final DiffUtils diffUtils = new DiffUtils(); >+ final List<Diff> diffs; >+ >+ diffs = diffUtils.doDiff(false, true, input); >+ >+ //Add Deltas from the list of differences >+ for (Diff diff : diffs) { >+ IR4EUIPosition position = CommandUtils.getPosition(diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR) >+ .getOffset(), diff.getPosition(R4EUIConstants.LEFT_CONTRIBUTOR).getLength(), >+ diff.getDocument(R4EUIConstants.LEFT_CONTRIBUTOR)); >+ >+ if (null == position || RangeDifference.NOCHANGE == diff.getKind()) { >+ continue; //Cannot resolve position for this delta or no change >+ } >+ aFile.getPositions().add(position); >+ } > } >+ >+ } >+ >+ private boolean isModelResource(final R4ECompareEditorInput input) throws CoreException { >+ ITypedElement elt = input.getLeftElement(); >+ if (elt instanceof IStreamContentAccessor) { >+ InputStream is = ((IStreamContentAccessor) elt).getContents(); >+ ResourceSet resourceSet = new ResourceSetImpl(); >+ Resource resource = resourceSet.createResource(URI.createURI("test.resource.type")); >+ try { >+ resource.load(is, Collections.EMPTY_MAP); >+ resource.unload(); >+ return true; >+ } catch (IOException e) { >+ } >+ } >+ return false; > } > > /** > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/EditorProxy.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/EditorProxy.java >index da6e81d..41e02f8 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/EditorProxy.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/EditorProxy.java >@@ -214,7 +214,7 @@ > aPage.activate(editor); //Simply provide focus to editor > > //Go to the correct element in the compare editor >- UIUtils.selectElementInEditor((R4ECompareEditorInput) editor.getEditorInput()); >+ UIUtils.selectElementInEditor(editor); > } else { > input = CommandUtils.createCompareEditorInput(aBaseFileVersion, aTargetFileVersion); > input.setTitle(R4E_COMPARE_EDITOR_TITLE); // Adjust the compare title > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/R4ECompareEditorInput.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/R4ECompareEditorInput.java >index 4089f10..88a5c12 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/R4ECompareEditorInput.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/editors/R4ECompareEditorInput.java >@@ -33,6 +33,9 @@ > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Control; > import org.eclipse.team.ui.synchronize.SaveableCompareEditorInput; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.IWorkbenchPage; >+import org.eclipse.ui.PlatformUI; > > /** > * @author lmcdubo >@@ -282,8 +285,17 @@ > public Control createContents(Composite aParent) { > final Control control = super.createContents(aParent); > >- //Go to the correct element in the compare editor >- UIUtils.selectElementInEditor(this); >+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); >+ if (page != null) { >+ IEditorPart editor = page.findEditor(this); >+ if (editor != null) { >+ UIUtils.selectElementInEditor(editor); >+ } >+ } else { >+ //Go to the correct element in the compare editor >+ UIUtils.selectElementInEditor(this); >+ } >+ > return control; > } > } > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIDeltaContainer.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIDeltaContainer.java >index 5e1a3ec..f4c25a3 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIDeltaContainer.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIDeltaContainer.java >@@ -20,8 +20,9 @@ > > import org.eclipse.emf.common.util.EList; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EDelta; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition; > import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant; >-import org.eclipse.mylyn.reviews.r4e.core.model.R4ETextPosition; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EPosition; > import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException; > import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException; > import org.eclipse.mylyn.reviews.r4e.ui.R4EUIPlugin; >@@ -73,12 +74,19 @@ > * @throws ResourceHandlingException > * @throws OutOfSyncException > */ >- public R4EUIDelta createDelta(R4EUITextPosition aUiPosition) throws ResourceHandlingException, OutOfSyncException { >+ public R4EUIDelta createDelta(IR4EUIPosition aUiPosition) throws ResourceHandlingException, OutOfSyncException { > > //Create and set content model element > final R4EDelta delta = R4EUIModelController.FModelExt.createR4EDelta(((R4EUIFileContext) getParent()).getFileContext()); >- final R4ETextPosition position = R4EUIModelController.FModelExt.createR4ETextPosition(R4EUIModelController.FModelExt.createR4ETargetTextContent(delta)); >- aUiPosition.setPositionInModel(position); >+ >+ R4EPosition position = null; >+ if (aUiPosition instanceof R4EUITextPosition) { >+ position = R4EUIModelController.FModelExt.createR4ETextPosition(R4EUIModelController.FModelExt.createR4ETargetTextContent(delta)); >+ aUiPosition.setPositionInModel(position); >+ } else if (aUiPosition instanceof R4EUIModelPosition) { >+ position = R4EUIModelController.FModelExt.createR4EModelPosition(R4EUIModelController.FModelExt.createR4ETargetTextContent(delta)); >+ aUiPosition.setPositionInModel(position); >+ } > > //Create and set UI model element > final R4EUIDelta uiDelta = new R4EUIDelta(this, delta, aUiPosition); >@@ -97,7 +105,7 @@ > public void open() { > final EList<R4EDelta> deltas = ((R4EUIFileContext) getParent()).getFileContext().getDeltas(); > if (null != deltas) { >- R4EUITextPosition position = null; >+ IR4EUIPosition uiPosition = null; > R4EUIDelta newDelta = null; > final int deltaSize = deltas.size(); > R4EDelta delta = null; >@@ -107,8 +115,13 @@ > || R4EUIPlugin.getDefault() > .getPreferenceStore() > .getBoolean(PreferenceConstants.P_SHOW_DISABLED)) { >- position = new R4EUITextPosition(deltas.get(i).getTarget().getLocation()); >- newDelta = new R4EUIDelta(this, deltas.get(i), position); >+ R4EPosition position = deltas.get(i).getTarget().getLocation(); >+ if (position instanceof R4EModelPosition) { >+ uiPosition = new R4EUIModelPosition(position); >+ } else { >+ uiPosition = new R4EUITextPosition(position); >+ } >+ newDelta = new R4EUIDelta(this, deltas.get(i), uiPosition); > addChildren(newDelta); > } > } > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIModelPosition.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIModelPosition.java >new file mode 100644 >index 0000000..afe348f >--- /dev/null >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/model/R4EUIModelPosition.java >@@ -0,0 +1,115 @@ >+/******************************************************************************* >+ * Copyright (c) 2012 Ericsson Research Canada >+ * >+ * All rights reserved. This program and the accompanying materials are >+ * made available under the terms of the Eclipse Public License v1.0 which >+ * accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Description: >+ * >+ * This class implements the position interface to manage text positions >+ * within a file under review. >+ * >+ * Contributors: >+ * Cedric Notot - Obeo >+ * >+ ******************************************************************************/ >+ >+package org.eclipse.mylyn.reviews.r4e.ui.internal.model; >+ >+import org.eclipse.emf.compare.diagram.diff.util.DiffUtil; >+import org.eclipse.emf.compare.diagram.diff.util.DiffUtil.Side; >+import org.eclipse.emf.compare.diff.metamodel.DiffElement; >+import org.eclipse.emf.compare.util.AdapterUtils; >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EContent; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EModelPosition; >+import org.eclipse.mylyn.reviews.r4e.core.model.R4EPosition; >+import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException; >+import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException; >+ >+/** >+ * @author cnotot >+ */ >+public class R4EUIModelPosition implements IR4EUIPosition { >+ >+ // ------------------------------------------------------------------------ >+ // Member variables >+ // ------------------------------------------------------------------------ >+ private R4EModelPosition fPosition; >+ >+ private final String fObjectID; >+ >+ private final String fDifferenceDescription; >+ >+ // ------------------------------------------------------------------------ >+ // Constructors >+ // ------------------------------------------------------------------------ >+ public R4EUIModelPosition(R4EPosition aModelPosition) { >+ fPosition = (R4EModelPosition) aModelPosition; >+ fObjectID = ((R4EModelPosition) aModelPosition).getObjectID(); >+ fDifferenceDescription = ((R4EModelPosition) aModelPosition).getDifferenceDescription(); >+ } >+ >+ public R4EUIModelPosition(DiffElement aDiff) { >+ EObject obj = DiffUtil.getElement(aDiff, Side.LEFT, EObject.class); >+ fObjectID = obj.eResource().getURIFragment(obj); >+ fDifferenceDescription = AdapterUtils.getItemProviderText(aDiff); >+ } >+ >+ // ------------------------------------------------------------------------ >+ // Methods >+ // ------------------------------------------------------------------------ >+ >+ // Attributes >+ >+ public String getObjectID() { >+ return fObjectID; >+ } >+ >+ /** >+ * Method setPositionInModel. >+ * >+ * @param aModelPosition >+ * R4EPosition >+ * @throws OutOfSyncException >+ * @throws ResourceHandlingException >+ * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIPosition#setPositionInModel(R4EPosition) >+ */ >+ public void setPositionInModel(R4EPosition aModelPosition) throws ResourceHandlingException, OutOfSyncException { >+ fPosition = (R4EModelPosition) aModelPosition; >+ Long bookNum = R4EUIModelController.FResourceUpdater.checkOut(fPosition, R4EUIModelController.getReviewer()); >+ fPosition.setObjectID(fObjectID); >+ fPosition.setDifferenceDescription(fDifferenceDescription); >+ R4EUIModelController.FResourceUpdater.checkIn(bookNum); >+ >+ final R4EContent content = (R4EContent) fPosition.eContainer(); >+ bookNum = R4EUIModelController.FResourceUpdater.checkOut(content, R4EUIModelController.getReviewer()); >+ content.setInfo(((R4EContent) fPosition.eContainer()).getInfo()); >+ R4EUIModelController.FResourceUpdater.checkIn(bookNum); >+ } >+ >+ /** >+ * Method isSameAs. >+ * >+ * @param aPosition >+ * IR4EPosition >+ * @return boolean >+ * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIPosition#isSameAs(IR4EUIPosition) >+ */ >+ public boolean isSameAs(IR4EUIPosition aPosition) { >+ return fObjectID.equals(((R4EModelPosition) aPosition).getObjectID()); >+ } >+ >+ /** >+ * Method toString. >+ * >+ * @return String >+ * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIPosition#toString() >+ */ >+ @Override >+ public String toString() { >+ return fDifferenceDescription; >+ } >+} > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/CommandUtils.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/CommandUtils.java >index e066831..fe3bdca 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/CommandUtils.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/CommandUtils.java >@@ -36,6 +36,7 @@ > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Status; > import org.eclipse.emf.common.util.EList; >+import org.eclipse.emf.compare.diff.metamodel.DiffElement; > import org.eclipse.jdt.core.IJavaElement; > import org.eclipse.jdt.core.ISourceReference; > import org.eclipse.jface.dialogs.ErrorDialog; >@@ -68,6 +69,7 @@ > import org.eclipse.mylyn.reviews.r4e.ui.internal.editors.R4EFileTypedElement; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController; >+import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelPosition; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedContainer; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedFile; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic; >@@ -372,6 +374,18 @@ > } > > /** >+ * Method getPosition. Get position based on a IDiffElement. >+ * >+ * @param aDiff >+ * IDiffElement >+ * @return R4EUIModelPosition >+ */ >+ public static R4EUIModelPosition getPosition(DiffElement aDiff) { >+ final R4EUIModelPosition position = new R4EUIModelPosition(aDiff); >+ return position; >+ } >+ >+ /** > * Method getPosition. Get position for generic workspace files > * > * @param aSelectedElement > >diff --git a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/UIUtils.java b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/UIUtils.java >index 9604d35..e9475a6 100644 >--- a/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/UIUtils.java >+++ b/r4e/org.eclipse.mylyn.reviews.r4e.ui/src/org/eclipse/mylyn/reviews/r4e/ui/internal/utils/UIUtils.java >@@ -23,6 +23,7 @@ > import java.net.MalformedURLException; > import java.net.URL; > import java.util.ArrayList; >+import java.util.Arrays; > import java.util.Calendar; > import java.util.List; > import java.util.StringTokenizer; >@@ -36,6 +37,7 @@ > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Status; >+import org.eclipse.emf.compare.ui.services.CompareServices; > import org.eclipse.jface.dialogs.ErrorDialog; > import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.jface.viewers.ISelection; >@@ -62,6 +64,7 @@ > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDelta; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIDeltaContainer; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController; >+import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelPosition; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIPostponedAnomaly; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic; > import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewExtended; >@@ -76,6 +79,8 @@ > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Text; >+import org.eclipse.ui.IEditorInput; >+import org.eclipse.ui.IEditorPart; > import org.eclipse.ui.PartInitException; > import org.eclipse.ui.PlatformUI; > import org.eclipse.ui.browser.IWebBrowser; >@@ -401,6 +406,32 @@ > return tempStr.toString(); > } > >+ public static void selectElementInEditor(IEditorPart editor) { >+ >+ final IR4EUIModelElement element = getR4EUIElement(); >+ if (element instanceof R4EUIContent) { >+ final IR4EUIPosition position = ((R4EUIContent) element).getPosition(); >+ if (position instanceof R4EUIModelPosition) { >+ selectElementInCompareModelEditor(editor, (R4EUIModelPosition) position); >+ } else { >+ final IEditorInput aInput = editor.getEditorInput(); >+ selectElementInEditor((R4ECompareEditorInput) aInput); >+ } >+ } >+ } >+ >+ public static void selectElementInCompareModelEditor(IEditorPart editor, R4EUIModelPosition pos) { >+ final String id = pos.getObjectID(); >+ final List<String> ids = Arrays.asList(id); >+ CompareServices.setSelection(ids, editor); >+ } >+ >+ private static IR4EUIModelElement getR4EUIElement() { >+ final ISelection selection = R4EUIModelController.getNavigatorView().getTreeViewer().getSelection(); >+ final IR4EUIModelElement element = (IR4EUIModelElement) ((IStructuredSelection) selection).getFirstElement(); >+ return element; >+ } >+ > /** > * Method selectElementInEditor. > * >@@ -408,9 +439,7 @@ > * R4ECompareEditorInput > */ > public static void selectElementInEditor(R4ECompareEditorInput aInput) { >- >- final ISelection selection = R4EUIModelController.getNavigatorView().getTreeViewer().getSelection(); >- final IR4EUIModelElement element = (IR4EUIModelElement) ((IStructuredSelection) selection).getFirstElement(); >+ final IR4EUIModelElement element = getR4EUIElement(); > IR4EUIPosition position = null; > int selectionIndex = -1; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 370783
:
210666
|
210715
|
210716