diff options
author | Eike Stepper | 2014-01-27 17:40:12 +0000 |
---|---|---|
committer | Eike Stepper | 2014-01-27 17:40:12 +0000 |
commit | eee341797c6f3a54570a2b5595d86386ecf52abd (patch) | |
tree | 172b1d6a052ec5aaa90d1dcffc74d1a0c73bc9ee | |
parent | c049df3a2c0991ed08dde28f28ccd24ca497d8d5 (diff) | |
download | cdo-eee341797c6f3a54570a2b5595d86386ecf52abd.tar.gz cdo-eee341797c6f3a54570a2b5595d86386ecf52abd.tar.xz cdo-eee341797c6f3a54570a2b5595d86386ecf52abd.zip |
Improve setup related models; add Targlets
7 files changed, 207 insertions, 11 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TargletBundleContainer.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TargletBundleContainer.java index cd150a87ed..13570bf492 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TargletBundleContainer.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TargletBundleContainer.java @@ -21,6 +21,7 @@ import org.eclipse.emf.cdo.releng.setup.util.XMLUtil; import org.eclipse.emf.cdo.releng.setup.util.XMLUtil.ElementHandler; import org.eclipse.net4j.util.HexUtil; +import org.eclipse.net4j.util.ObjectUtil; import org.eclipse.net4j.util.io.IOUtil; import org.eclipse.core.resources.IProject; @@ -170,16 +171,42 @@ public class TargletBundleContainer extends AbstractBundleContainer return Collections.unmodifiableList(targlets); } + public Targlet getTarglet(String name) + { + for (Targlet targlet : targlets) + { + if (ObjectUtil.equals(targlet.getName(), name)) + { + return targlet; + } + } + + return null; + } + public void addTarglet(Targlet targlet) { - targlets.add(targlet); + Targlet copy = SetupFactory.eINSTANCE.createTarglet(targlet); + + removeTarglet(copy.getName()); + targlets.add(copy); resetProfile(); } - public void removeTarglet(Targlet targlet) + public Targlet removeTarglet(String name) { - targlets.remove(targlet); - resetProfile(); + for (Iterator<Targlet> it = targlets.iterator(); it.hasNext();) + { + Targlet targlet = it.next(); + if (ObjectUtil.equals(targlet.getName(), name)) + { + it.remove(); + resetProfile(); + return targlet; + } + } + + return null; } @Override diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TestAction.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TestAction.java index b4aa62d9a7..d606102d57 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TestAction.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TestAction.java @@ -29,8 +29,6 @@ import org.eclipse.pde.core.target.ITargetDefinition; import org.eclipse.pde.core.target.ITargetHandle; import org.eclipse.pde.core.target.ITargetLocation; import org.eclipse.pde.core.target.ITargetPlatformService; -import org.eclipse.pde.internal.core.PDECore; -import org.eclipse.pde.internal.core.target.TargetPlatformService; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; @@ -39,7 +37,7 @@ import java.io.File; /** * @author Eike Stepper */ -@SuppressWarnings({ "restriction", "unused" }) +@SuppressWarnings("unused") public class TestAction implements IWorkbenchWindowActionDelegate { public TestAction() @@ -164,8 +162,9 @@ public class TestAction implements IWorkbenchWindowActionDelegate container.addTarglet(targlet); ITargetLocation[] locations = { container }; - TargetPlatformService targetService = (TargetPlatformService)PDECore.getDefault().acquireService( - ITargetPlatformService.class.getName()); + @SuppressWarnings("restriction") + ITargetPlatformService targetService = (ITargetPlatformService)org.eclipse.pde.internal.core.PDECore.getDefault() + .acquireService(ITargetPlatformService.class.getName()); for (ITargetHandle handle : targetService.getTargets(new NullProgressMonitor())) { diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/SetupFactory.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/SetupFactory.java index 8424b05bc4..ab3c890922 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/SetupFactory.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/SetupFactory.java @@ -296,6 +296,7 @@ public interface SetupFactory extends EFactory * @return a new object of class '<em>Targlet Import Task</em>'. * @generated */ + @SuppressWarnings("deprecation") TargletImportTask createTargletImportTask(); /** @@ -361,6 +362,8 @@ public interface SetupFactory extends EFactory */ Targlet createTarglet(); + Targlet createTarglet(TargletData source); + /** * Returns a new object of class '<em>Repository List</em>'. * <!-- begin-user-doc --> diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/TargletImportTask.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/TargletImportTask.java index 3528509c28..24a7392119 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/TargletImportTask.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/TargletImportTask.java @@ -18,6 +18,7 @@ package org.eclipse.emf.cdo.releng.setup; * @model * @generated */ +@Deprecated public interface TargletImportTask extends SetupTask { /** diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/SetupFactoryImpl.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/SetupFactoryImpl.java index dffd662235..777f02e822 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/SetupFactoryImpl.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/SetupFactoryImpl.java @@ -59,6 +59,7 @@ import org.eclipse.emf.cdo.releng.setup.SetupTaskScope; import org.eclipse.emf.cdo.releng.setup.TargetPlatformTask; import org.eclipse.emf.cdo.releng.setup.Targlet; import org.eclipse.emf.cdo.releng.setup.TargletContainer; +import org.eclipse.emf.cdo.releng.setup.TargletData; import org.eclipse.emf.cdo.releng.setup.TargletImportTask; import org.eclipse.emf.cdo.releng.setup.TargletTask; import org.eclipse.emf.cdo.releng.setup.TextModification; @@ -76,6 +77,7 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.impl.EFactoryImpl; import org.eclipse.emf.ecore.plugin.EcorePlugin; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.equinox.p2.metadata.Version; import org.eclipse.equinox.p2.metadata.VersionRange; @@ -757,6 +759,32 @@ public class SetupFactoryImpl extends EFactoryImpl implements SetupFactory return targlet; } + public Targlet createTarglet(TargletData source) + { + Targlet targlet = SetupFactory.eINSTANCE.createTarglet(); + targlet.setName(source.getName()); + targlet.setActiveRepositoryList(source.getActiveRepositoryList()); + targlet.setIncludeSources(source.isIncludeSources()); + targlet.setIncludeAllPlatforms(source.isIncludeAllPlatforms()); + + for (InstallableUnit root : source.getRoots()) + { + targlet.getRoots().add(EcoreUtil.copy(root)); + } + + for (AutomaticSourceLocator sourceLocator : source.getSourceLocators()) + { + targlet.getSourceLocators().add(EcoreUtil.copy(sourceLocator)); + } + + for (RepositoryList repositoryList : source.getRepositoryLists()) + { + targlet.getRepositoryLists().add(EcoreUtil.copy(repositoryList)); + } + + return targlet; + } + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletImportTaskImpl.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletImportTaskImpl.java index 0e5e33ab91..a28d59b67b 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletImportTaskImpl.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletImportTaskImpl.java @@ -23,6 +23,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl; * * @generated */ +@Deprecated public class TargletImportTaskImpl extends SetupTaskImpl implements TargletImportTask { /** diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletTaskImpl.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletTaskImpl.java index 972b397c95..c356a6c4b8 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletTaskImpl.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletTaskImpl.java @@ -2,14 +2,19 @@ */ package org.eclipse.emf.cdo.releng.setup.impl; +import org.eclipse.emf.cdo.releng.internal.setup.targlets.TargletBundleContainer; import org.eclipse.emf.cdo.releng.setup.AutomaticSourceLocator; import org.eclipse.emf.cdo.releng.setup.InstallableUnit; import org.eclipse.emf.cdo.releng.setup.P2Repository; import org.eclipse.emf.cdo.releng.setup.RepositoryList; +import org.eclipse.emf.cdo.releng.setup.SetupFactory; import org.eclipse.emf.cdo.releng.setup.SetupPackage; import org.eclipse.emf.cdo.releng.setup.SetupTaskContext; +import org.eclipse.emf.cdo.releng.setup.Targlet; import org.eclipse.emf.cdo.releng.setup.TargletData; import org.eclipse.emf.cdo.releng.setup.TargletTask; +import org.eclipse.emf.cdo.releng.setup.log.ProgressLogMonitor; +import org.eclipse.emf.cdo.releng.setup.util.ServiceUtil; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; @@ -19,8 +24,17 @@ import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.EObjectEList; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.util.InternalEList; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.pde.core.target.ITargetDefinition; +import org.eclipse.pde.core.target.ITargetHandle; +import org.eclipse.pde.core.target.ITargetLocation; +import org.eclipse.pde.core.target.ITargetPlatformService; +import org.eclipse.pde.core.target.LoadTargetDefinitionJob; + import java.util.Collection; /** @@ -155,6 +169,14 @@ public class TargletTaskImpl extends SetupTaskImpl implements TargletTask */ protected boolean includeAllPlatforms = INCLUDE_ALL_PLATFORMS_EDEFAULT; + private static final String TARGET_NAME = "Modular Target"; + + private transient Targlet targlet; + + private transient TargletBundleContainer targletContainer; + + private transient ITargetDefinition target; + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -603,12 +625,127 @@ public class TargletTaskImpl extends SetupTaskImpl implements TargletTask public boolean isNeeded(SetupTaskContext context) throws Exception { - throw new UnsupportedOperationException(); + targlet = SetupFactory.eINSTANCE.createTarglet(this); + + ITargetPlatformService service = null; + + try + { + service = ServiceUtil.getService(ITargetPlatformService.class); + ITargetDefinition activeTarget = service.getWorkspaceTargetDefinition(); + + target = getTarget(context, service); + if (target == null) + { + return true; + } + + boolean targetNeedsActivation = true; + if (target.equals(activeTarget)) + { + targetNeedsActivation = false; + } + + targletContainer = getTargletContainer(); + if (targletContainer == null) + { + return true; + } + + Targlet targlet = targletContainer.getTarglet(getName()); + if (targlet == null || !EcoreUtil.equals(targlet, this.targlet)) + { + return true; + } + + return targetNeedsActivation; + } + finally + { + ServiceUtil.ungetService(service); + } } public void perform(SetupTaskContext context) throws Exception { - throw new UnsupportedOperationException(); + ITargetPlatformService service = null; + + try + { + service = ServiceUtil.getService(ITargetPlatformService.class); + if (target == null) + { + target = service.newTarget(); + target.setName(TARGET_NAME); + } + + if (targletContainer == null) + { + targletContainer = new TargletBundleContainer(); + + ITargetLocation[] oldLocations = target.getTargetLocations(); + ITargetLocation[] newLocations = new ITargetLocation[oldLocations.length + 1]; + System.arraycopy(oldLocations, 0, newLocations, 0, oldLocations.length); + newLocations[oldLocations.length] = targletContainer; + + target.setTargetLocations(newLocations); + } + + targletContainer.addTarglet(targlet); + service.saveTargetDefinition(target); + + target.resolve(new ProgressLogMonitor(context)); + + LoadTargetDefinitionJob job = new LoadTargetDefinitionJob(target); + IStatus status = job.run(new ProgressLogMonitor(context)); + if (status.getSeverity() == IStatus.ERROR) + { + throw new CoreException(status); + } + } + finally + { + ServiceUtil.ungetService(service); + } + } + + private ITargetDefinition getTarget(SetupTaskContext context, ITargetPlatformService service) throws CoreException + { + for (ITargetHandle targetHandle : service.getTargets(new ProgressLogMonitor(context))) + { + ITargetDefinition target = targetHandle.getTargetDefinition(); + if (TARGET_NAME.equals(target.getName())) + { + return target; + } + } + + return null; + } + + private TargletBundleContainer getTargletContainer() + { + TargletBundleContainer firstTargletContainer = null; + + for (ITargetLocation location : target.getTargetLocations()) + { + if (location instanceof TargletBundleContainer) + { + TargletBundleContainer targletContainer = (TargletBundleContainer)location; + if (firstTargletContainer == null) + { + firstTargletContainer = targletContainer; + } + + Targlet targlet = targletContainer.getTarglet(getName()); + if (targlet != null) + { + return targletContainer; + } + } + } + + return firstTargletContainer; } } // TargletTaskImpl |