diff --git a/io.opencaesar.rosetta.feature/feature.xml b/io.opencaesar.rosetta.feature/feature.xml index 13f85f9..876050b 100644 --- a/io.opencaesar.rosetta.feature/feature.xml +++ b/io.opencaesar.rosetta.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/io.opencaesar.rosetta.feature/pom.xml b/io.opencaesar.rosetta.feature/pom.xml index 3de2779..df042e0 100644 --- a/io.opencaesar.rosetta.feature/pom.xml +++ b/io.opencaesar.rosetta.feature/pom.xml @@ -4,7 +4,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 io.opencaesar.rosetta.feature eclipse-feature diff --git a/io.opencaesar.rosetta.oml.ui/META-INF/MANIFEST.MF b/io.opencaesar.rosetta.oml.ui/META-INF/MANIFEST.MF index d04ce35..a23159e 100644 --- a/io.opencaesar.rosetta.oml.ui/META-INF/MANIFEST.MF +++ b/io.opencaesar.rosetta.oml.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: io.opencaesar.rosetta.oml.ui;singleton:=true -Bundle-Version: 0.9.1 +Bundle-Version: 0.9.2 Automatic-Module-Name: io.opencaesar.rosetta.oml.ui Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin diff --git a/io.opencaesar.rosetta.oml.ui/pom.xml b/io.opencaesar.rosetta.oml.ui/pom.xml index fc59deb..c383f40 100644 --- a/io.opencaesar.rosetta.oml.ui/pom.xml +++ b/io.opencaesar.rosetta.oml.ui/pom.xml @@ -4,7 +4,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 io.opencaesar.rosetta.oml.ui eclipse-plugin diff --git a/io.opencaesar.rosetta.oml.ui/src/io/opencaesar/rosetta/oml/ui/compare/OmlModelResolver.java b/io.opencaesar.rosetta.oml.ui/src/io/opencaesar/rosetta/oml/ui/compare/OmlModelResolver.java index 4a43762..211345c 100644 --- a/io.opencaesar.rosetta.oml.ui/src/io/opencaesar/rosetta/oml/ui/compare/OmlModelResolver.java +++ b/io.opencaesar.rosetta.oml.ui/src/io/opencaesar/rosetta/oml/ui/compare/OmlModelResolver.java @@ -22,10 +22,15 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IStorage; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.emf.compare.ide.ui.logical.AbstractModelResolver; import org.eclipse.emf.compare.ide.ui.logical.IStorageProviderAccessor; +import org.eclipse.emf.compare.ide.ui.logical.IStorageProviderAccessor.DiffSide; import org.eclipse.emf.compare.ide.ui.logical.SynchronizationModel; +import org.eclipse.emf.compare.ide.utils.ResourceUtil; import org.eclipse.emf.compare.ide.utils.StorageTraversal; /** @@ -36,33 +41,75 @@ public class OmlModelResolver extends AbstractModelResolver { @Override - public SynchronizationModel resolveLocalModels(IResource left, IResource right, IResource origin, - IProgressMonitor monitor) throws InterruptedException { - return new SynchronizationModel(getTraversal(left), getTraversal(right), getTraversal(origin)); - } - - @Override - public SynchronizationModel resolveModels(IStorageProviderAccessor storageAccessor, IStorage left, IStorage right, - IStorage origin, IProgressMonitor monitor) throws InterruptedException { - return new SynchronizationModel(getTraversal(left), getTraversal(right), getTraversal(origin)); + public boolean canResolve(IStorage sourceStorage) { + return true; } - + + // Local + @Override public StorageTraversal resolveLocalModel(IResource resource, IProgressMonitor monitor) throws InterruptedException { - return getTraversal(resource); + return getLocalTraversal(resource); } @Override - public boolean canResolve(IStorage sourceStorage) { - return true; + public SynchronizationModel resolveLocalModels(IResource left, IResource right, IResource origin, + IProgressMonitor monitor) throws InterruptedException { + return new SynchronizationModel(getLocalTraversal(left), getLocalTraversal(right), getLocalTraversal(origin)); } - private static StorageTraversal getTraversal(Object resource) { + /** + * For local resources, include the given resource directly in the StorageTraversal. + */ + private static StorageTraversal getLocalTraversal(IResource resource) { if (resource instanceof IStorage) { return new StorageTraversal(Collections.singleton((IStorage)resource)); } else { return new StorageTraversal(Collections.emptySet()); } } + + // Remote + + @Override + public SynchronizationModel resolveModels(IStorageProviderAccessor storageAccessor, IStorage left, IStorage right, + IStorage origin, IProgressMonitor monitor) throws InterruptedException { + var subMonitor = SubMonitor.convert(monitor, 3); + return new SynchronizationModel( + getRemoteTraversal(storageAccessor, left, DiffSide.SOURCE, subMonitor.split(1)), + getRemoteTraversal(storageAccessor, right, DiffSide.REMOTE, subMonitor.split(1)), + getRemoteTraversal(storageAccessor, origin, DiffSide.ORIGIN, subMonitor.split(1)) + ); + } + + /** + * For remote traversals, the IStorage given to us may be a wrapper for an underlying IStorage object that + * doesn't actually exist and is null; trying to load the contents of this IStorage results in an error. + * + * To prevent this, try to locate the storage object ourselves from the + * storageAccessor using the given storage object's name to ensure it exists. + */ + private static StorageTraversal getRemoteTraversal(IStorageProviderAccessor storageAccessor, IStorage givenStorage, DiffSide side, IProgressMonitor monitor) { + try { + if (givenStorage != null) { + var path = ResourceUtil.getAbsolutePath(givenStorage); + var file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); + var storageProvider = storageAccessor.getStorageProvider(file, side); + if (storageProvider != null) { + var foundStorage = storageProvider.getStorage(monitor); + if (foundStorage != null) { + return new StorageTraversal(Collections.singleton(foundStorage)); + } + } + } + } catch (CoreException e) { + // returns an empty traversal in the event of a CoreException + e.printStackTrace(); + } finally { + monitor.done(); + } + return new StorageTraversal(Collections.emptySet()); + } + } diff --git a/io.opencaesar.rosetta.product/pom.xml b/io.opencaesar.rosetta.product/pom.xml index d04a329..eb95637 100644 --- a/io.opencaesar.rosetta.product/pom.xml +++ b/io.opencaesar.rosetta.product/pom.xml @@ -7,7 +7,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 diff --git a/io.opencaesar.rosetta.product/rosetta.product b/io.opencaesar.rosetta.product/rosetta.product index bccd448..88a92ae 100644 --- a/io.opencaesar.rosetta.product/rosetta.product +++ b/io.opencaesar.rosetta.product/rosetta.product @@ -1,7 +1,7 @@ - + diff --git a/io.opencaesar.rosetta.rcp.feature/feature.xml b/io.opencaesar.rosetta.rcp.feature/feature.xml index 749dbcf..fd25445 100644 --- a/io.opencaesar.rosetta.rcp.feature/feature.xml +++ b/io.opencaesar.rosetta.rcp.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/io.opencaesar.rosetta.rcp.feature/pom.xml b/io.opencaesar.rosetta.rcp.feature/pom.xml index b35adfc..a1b62ff 100644 --- a/io.opencaesar.rosetta.rcp.feature/pom.xml +++ b/io.opencaesar.rosetta.rcp.feature/pom.xml @@ -4,7 +4,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 io.opencaesar.rosetta.rcp.feature eclipse-feature diff --git a/io.opencaesar.rosetta.rcp/META-INF/MANIFEST.MF b/io.opencaesar.rosetta.rcp/META-INF/MANIFEST.MF index e6b91fe..1b3f0c6 100644 --- a/io.opencaesar.rosetta.rcp/META-INF/MANIFEST.MF +++ b/io.opencaesar.rosetta.rcp/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: io.opencaesar.rosetta.rcp;singleton:=true -Bundle-Version: 0.9.1 +Bundle-Version: 0.9.2 Automatic-Module-Name: io.opencaesar.rosetta.rcp Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Localization: plugin diff --git a/io.opencaesar.rosetta.rcp/pom.xml b/io.opencaesar.rosetta.rcp/pom.xml index ae0feaa..8897dc3 100644 --- a/io.opencaesar.rosetta.rcp/pom.xml +++ b/io.opencaesar.rosetta.rcp/pom.xml @@ -4,7 +4,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 io.opencaesar.rosetta.rcp eclipse-plugin diff --git a/io.opencaesar.rosetta.repository/pom.xml b/io.opencaesar.rosetta.repository/pom.xml index d671299..0d0a9b1 100644 --- a/io.opencaesar.rosetta.repository/pom.xml +++ b/io.opencaesar.rosetta.repository/pom.xml @@ -5,7 +5,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 io.opencaesar.rosetta.repository diff --git a/io.opencaesar.rosetta.sirius.viewpoint/META-INF/MANIFEST.MF b/io.opencaesar.rosetta.sirius.viewpoint/META-INF/MANIFEST.MF index 30d5b33..eb80174 100644 --- a/io.opencaesar.rosetta.sirius.viewpoint/META-INF/MANIFEST.MF +++ b/io.opencaesar.rosetta.sirius.viewpoint/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: io.opencaesar.rosetta.sirius.viewpoint;singleton:=true -Bundle-Version: 0.9.1 +Bundle-Version: 0.9.2 Automatic-Module-Name: io.opencaesar.rosetta.sirius.viewpoint Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Activator: io.opencaesar.rosetta.sirius.viewpoint.Activator diff --git a/io.opencaesar.rosetta.sirius.viewpoint/pom.xml b/io.opencaesar.rosetta.sirius.viewpoint/pom.xml index 8cedc38..12c5f9d 100644 --- a/io.opencaesar.rosetta.sirius.viewpoint/pom.xml +++ b/io.opencaesar.rosetta.sirius.viewpoint/pom.xml @@ -5,7 +5,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 io.opencaesar.rosetta.sirius.viewpoint diff --git a/io.opencaesar.rosetta.sirius/META-INF/MANIFEST.MF b/io.opencaesar.rosetta.sirius/META-INF/MANIFEST.MF index edc49a5..019f3c7 100644 --- a/io.opencaesar.rosetta.sirius/META-INF/MANIFEST.MF +++ b/io.opencaesar.rosetta.sirius/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: io.opencaesar.rosetta.sirius;singleton:=true -Bundle-Version: 0.9.1 +Bundle-Version: 0.9.2 Bundle-Localization: plugin Automatic-Module-Name: io.opencaesar.rosetta.sirius Bundle-RequiredExecutionEnvironment: JavaSE-11 diff --git a/io.opencaesar.rosetta.target/pom.xml b/io.opencaesar.rosetta.target/pom.xml index f052b42..fed533a 100644 --- a/io.opencaesar.rosetta.target/pom.xml +++ b/io.opencaesar.rosetta.target/pom.xml @@ -7,7 +7,7 @@ io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 diff --git a/pom.xml b/pom.xml index 7d5eaff..327c756 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.opencaesar.rosetta io.opencaesar.rosetta.parent - 0.9.1 + 0.9.2 pom diff --git a/version.txt b/version.txt index f514a2f..f76f913 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.9.1 \ No newline at end of file +0.9.2 \ No newline at end of file