Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2014-01-27 17:40:12 +0000
committerEike Stepper2014-01-27 17:40:12 +0000
commiteee341797c6f3a54570a2b5595d86386ecf52abd (patch)
tree172b1d6a052ec5aaa90d1dcffc74d1a0c73bc9ee
parentc049df3a2c0991ed08dde28f28ccd24ca497d8d5 (diff)
downloadcdo-eee341797c6f3a54570a2b5595d86386ecf52abd.tar.gz
cdo-eee341797c6f3a54570a2b5595d86386ecf52abd.tar.xz
cdo-eee341797c6f3a54570a2b5595d86386ecf52abd.zip
Improve setup related models; add Targlets
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TargletBundleContainer.java35
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/TestAction.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/SetupFactory.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/TargletImportTask.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/SetupFactoryImpl.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletImportTaskImpl.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/TargletTaskImpl.java141
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

Back to the top