diff options
author | Ed Merks | 2014-07-13 10:10:31 +0000 |
---|---|---|
committer | Ed Merks | 2014-07-13 10:10:31 +0000 |
commit | 3bf3085258cc1f591696b7a01ddd85b4efc26ec3 (patch) | |
tree | c643630f20121bde4fffe17d528b08f630b9dd22 /plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal | |
parent | 0549931493f523191ed3d542be72e4dcc0b93464 (diff) | |
download | org.eclipse.oomph-3bf3085258cc1f591696b7a01ddd85b4efc26ec3.tar.gz org.eclipse.oomph-3bf3085258cc1f591696b7a01ddd85b4efc26ec3.tar.xz org.eclipse.oomph-3bf3085258cc1f591696b7a01ddd85b4efc26ec3.zip |
[439398] Cannot deploy Kepler without P2 director task that contains
repository for EMF 2.10
https://bugs.eclipse.org/bugs/show_bug.cgi?id=439398
Diffstat (limited to 'plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal')
2 files changed, 99 insertions, 35 deletions
diff --git a/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/TargletContainer.java b/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/TargletContainer.java index 8fd9df731..22843af09 100644 --- a/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/TargletContainer.java +++ b/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/TargletContainer.java @@ -13,6 +13,7 @@ package org.eclipse.oomph.targlets.internal.core; import org.eclipse.oomph.p2.ProfileDefinition; import org.eclipse.oomph.p2.Repository; import org.eclipse.oomph.p2.Requirement; +import org.eclipse.oomph.p2.core.P2Util; import org.eclipse.oomph.p2.core.Profile; import org.eclipse.oomph.p2.core.ProfileTransaction; import org.eclipse.oomph.p2.core.ProfileTransaction.CommitContext; @@ -102,6 +103,8 @@ import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Collection; @@ -144,7 +147,7 @@ public class TargletContainer extends AbstractBundleContainer private ITargetDefinition target; - private EList<Targlet> targlets = new BasicEList<Targlet>(); + private final EList<Targlet> targlets = new BasicEList<Targlet>(); public TargletContainer(String id) { @@ -164,6 +167,41 @@ public class TargletContainer extends AbstractBundleContainer basicSetTarglets(targlets); } + protected int getResolveBundlesWork() + { + return 999; + } + + protected int getResolveFeaturesWork() + { + return 1; + } + + public boolean isContentEqual(AbstractBundleContainer container) + { + if (container instanceof TargletContainer) + { + TargletContainer targletContainer = (TargletContainer)container; + if (targlets.size() != targletContainer.targlets.size()) + { + return false; + } + + for (Targlet targlet : targletContainer.targlets) + { + Targlet existingTarglet = getTarglet(targlet.getName()); + if (existingTarglet == null || !EcoreUtil.equals(existingTarglet, targlet)) + { + return false; + } + } + + return true; + } + + return false; + } + public String getID() { return id; @@ -266,7 +304,7 @@ public class TargletContainer extends AbstractBundleContainer TargletContainerListenerRegistryImpl.INSTANCE.notifyListeners(new TargletContainerChanged(this), new NullProgressMonitor()); } - private EList<Targlet> basicSetTarglets(Collection<? extends Targlet> targlets) + private void basicSetTarglets(Collection<? extends Targlet> targlets) { Set<String> names = new HashSet<String>(); for (Targlet targlet : targlets) @@ -278,9 +316,8 @@ public class TargletContainer extends AbstractBundleContainer } } - EList<Targlet> oldTarglets = this.targlets; - this.targlets = TargletFactory.eINSTANCE.copyTarglets(targlets); - return oldTarglets; + this.targlets.clear(); + this.targlets.addAll(TargletFactory.eINSTANCE.copyTarglets(targlets)); } @Override @@ -413,18 +450,6 @@ public class TargletContainer extends AbstractBundleContainer } @Override - protected int getResolveBundlesWork() - { - return 999; - } - - @Override - protected int getResolveFeaturesWork() - { - return 1; - } - - @Override protected TargetBundle[] resolveBundles(ITargetDefinition target, IProgressMonitor monitor) throws CoreException { resolveUnits(monitor); @@ -907,7 +932,7 @@ public class TargletContainer extends AbstractBundleContainer private static Set<File> getProjectLocations(IProfile profile, Map<IInstallableUnit, File> sources, IProgressMonitor monitor) { Set<File> projectLocations = new HashSet<File>(); - for (IInstallableUnit iu : profile.query(QueryUtil.createIUAnyQuery(), monitor)) + for (IInstallableUnit iu : P2Util.asIterable(profile.query(QueryUtil.createIUAnyQuery(), monitor))) { File folder = sources.get(iu); if (folder != null) @@ -962,30 +987,68 @@ public class TargletContainer extends AbstractBundleContainer return null; } - public static void updateWorkspace(IProgressMonitor monitor) throws CoreException - { - ITargetPlatformService service = null; + private static final Method GET_WORKSPACE_TARGET_DEFINITION_METHOD; + static + { + Method method = null; try { - service = TargletsCorePlugin.INSTANCE.getService(ITargetPlatformService.class); - Set<File> projectLocations = new HashSet<File>(); - ITargetDefinition target = null; + method = ITargetPlatformService.class.getMethod("getWorkspaceTargetDefinition"); + } + catch (NoSuchMethodException ex) + { + // Ignore. + } + catch (SecurityException ex) + { + // Ignore. + } + GET_WORKSPACE_TARGET_DEFINITION_METHOD = method; + } + + private static ITargetDefinition getWorkITargetDefinition(ITargetPlatformService service) throws CoreException + { + if (GET_WORKSPACE_TARGET_DEFINITION_METHOD != null) + { try { - target = service.getWorkspaceTargetDefinition(); + return (ITargetDefinition)GET_WORKSPACE_TARGET_DEFINITION_METHOD.invoke(service); } - catch (NoSuchMethodError ex) + catch (IllegalAccessException ex) { - // Handle gracefully that getWorkspaceTargetDefinition() has been added in Eclipse 4.4 - ITargetHandle handle = service.getWorkspaceTargetHandle(); - if (handle != null) - { - target = handle.getTargetDefinition(); - } + // Ignore. } + catch (IllegalArgumentException ex) + { + // Ignore. + } + catch (InvocationTargetException ex) + { + // Ignore. + } + } + + // Handle gracefully that getWorkspaceTargetDefinition() has been added in Eclipse 4.4 + ITargetHandle handle = service.getWorkspaceTargetHandle(); + if (handle != null) + { + return handle.getTargetDefinition(); + } + + return null; + } + + public static void updateWorkspace(IProgressMonitor monitor) throws CoreException + { + ITargetPlatformService service = null; + try + { + service = TargletsCorePlugin.INSTANCE.getService(ITargetPlatformService.class); + Set<File> projectLocations = new HashSet<File>(); + ITargetDefinition target = getWorkITargetDefinition(service); if (target != null) { ITargetLocation[] targetLocations = target.getTargetLocations(); diff --git a/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java b/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java index bc4f71fb9..3053d51b9 100644 --- a/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java +++ b/plugins/org.eclipse.oomph.targlets.core/src/org/eclipse/oomph/targlets/internal/core/listeners/TargetDefinitionGenerator.java @@ -13,6 +13,7 @@ package org.eclipse.oomph.targlets.internal.core.listeners; import org.eclipse.oomph.base.Annotation; import org.eclipse.oomph.base.ModelElement; import org.eclipse.oomph.p2.Repository; +import org.eclipse.oomph.p2.core.P2Util; import org.eclipse.oomph.p2.core.Profile; import org.eclipse.oomph.targlets.Targlet; import org.eclipse.oomph.targlets.core.TargletContainerEvent; @@ -281,7 +282,7 @@ public class TargetDefinitionGenerator implements TargletContainerListener Set<IU> resultIUs = new HashSet<IU>(); IMetadataRepository metadataRepository = getMetadataRepository(repository.getURL(), metadataRepositories); - for (IInstallableUnit repositoryIU : metadataRepository.query(QueryUtil.createIUAnyQuery(), null)) + for (IInstallableUnit repositoryIU : P2Util.asIterable(metadataRepository.query(QueryUtil.createIUAnyQuery(), null))) { TargletsCorePlugin.checkCancelation(monitor); @@ -313,7 +314,7 @@ public class TargetDefinitionGenerator implements TargletContainerListener { TargletsCorePlugin.checkCancelation(monitor); - for (IInstallableUnit installableUnit : profile.query(QueryUtil.createMatchQuery(requirement.getMatches()), null)) + for (IInstallableUnit installableUnit : P2Util.asIterable(profile.query(QueryUtil.createMatchQuery(requirement.getMatches()), null))) { TargletsCorePlugin.checkCancelation(monitor); @@ -392,7 +393,7 @@ public class TargetDefinitionGenerator implements TargletContainerListener private static IInstallableUnit getInstallableUnitFromProfile(IInstallableUnit repositoryIU, Profile profile) { - for (IInstallableUnit profileIU : profile.query(QueryUtil.createIUQuery(repositoryIU), null)) + for (IInstallableUnit profileIU : P2Util.asIterable(profile.query(QueryUtil.createIUQuery(repositoryIU), null))) { if (!TRUE.equalsIgnoreCase(profileIU.getProperty(IUGenerator.IU_PROPERTY_SOURCE))) { |