Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Merks2013-10-25 17:42:06 +0000
committerEd Merks2013-10-25 17:42:06 +0000
commit5cf78af376366ec14722da2109f25aa552e9a00e (patch)
tree5e2b67b8e2036f5ffb552643f6d881e65def64a0
parenta380c91f5c2cb63269b93336796d2bcb559bffde (diff)
downloadcdo-5cf78af376366ec14722da2109f25aa552e9a00e.tar.gz
cdo-5cf78af376366ec14722da2109f25aa552e9a00e.tar.xz
cdo-5cf78af376366ec14722da2109f25aa552e9a00e.zip
Improve setup related models
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/ResourceCopyTaskItemProvider.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup.editor/src/org/eclipse/emf/cdo/releng/setup/presentation/actions/ManualPerformAction.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup.product/src/org/eclipse/emf/cdo/releng/setup/product/SetupDialog.java46
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/META-INF/MANIFEST.MF53
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java58
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressLogDialog.java226
6 files changed, 328 insertions, 68 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/ResourceCopyTaskItemProvider.java b/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/ResourceCopyTaskItemProvider.java
index c0e55926d9..33c7101e63 100644
--- a/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/ResourceCopyTaskItemProvider.java
+++ b/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/ResourceCopyTaskItemProvider.java
@@ -12,7 +12,6 @@ package org.eclipse.emf.cdo.releng.setup.provider;
import org.eclipse.emf.cdo.releng.setup.ResourceCopyTask;
import org.eclipse.emf.cdo.releng.setup.SetupPackage;
-import org.eclipse.emf.cdo.releng.setup.SetupTaskScope;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
@@ -118,15 +117,13 @@ public class ResourceCopyTaskItemProvider extends SetupTaskItemProvider implemen
* This returns the label text for the adapted class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
- * @generated
+ * @generated NOT
*/
@Override
public String getText(Object object)
{
- SetupTaskScope labelValue = ((ResourceCopyTask)object).getScope();
- String label = labelValue == null ? null : labelValue.toString();
- return label == null || label.length() == 0 ? getString("_UI_ResourceCopyTask_type")
- : getString("_UI_ResourceCopyTask_type") + " " + label;
+ ResourceCopyTask resourceCopyTask = (ResourceCopyTask)object;
+ return "" + resourceCopyTask.getSourceURL() + " --> " + resourceCopyTask.getTargetURL();
}
/**
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup.editor/src/org/eclipse/emf/cdo/releng/setup/presentation/actions/ManualPerformAction.java b/plugins/org.eclipse.emf.cdo.releng.setup.editor/src/org/eclipse/emf/cdo/releng/setup/presentation/actions/ManualPerformAction.java
index 6abd3c1f1a..344380de88 100644
--- a/plugins/org.eclipse.emf.cdo.releng.setup.editor/src/org/eclipse/emf/cdo/releng/setup/presentation/actions/ManualPerformAction.java
+++ b/plugins/org.eclipse.emf.cdo.releng.setup.editor/src/org/eclipse/emf/cdo/releng/setup/presentation/actions/ManualPerformAction.java
@@ -23,6 +23,8 @@ import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.PlatformUI;
+import java.util.Collections;
+
/**
* @author Eike Stepper
*/
@@ -72,7 +74,7 @@ public class ManualPerformAction implements IWorkbenchWindowActionDelegate
setupTaskPerformer.perform();
return true;
}
- });
+ }, Collections.singletonList(setupTaskPerformer));
}
catch (Exception ex)
{
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup.product/src/org/eclipse/emf/cdo/releng/setup/product/SetupDialog.java b/plugins/org.eclipse.emf.cdo.releng.setup.product/src/org/eclipse/emf/cdo/releng/setup/product/SetupDialog.java
index 16676a87ac..209bd3877f 100644
--- a/plugins/org.eclipse.emf.cdo.releng.setup.product/src/org/eclipse/emf/cdo/releng/setup/product/SetupDialog.java
+++ b/plugins/org.eclipse.emf.cdo.releng.setup.product/src/org/eclipse/emf/cdo/releng/setup/product/SetupDialog.java
@@ -88,6 +88,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -643,36 +644,42 @@ public class SetupDialog extends TitleAreaDialog
File folder = new File(installFolder);
folder.mkdirs();
+ final List<SetupTaskPerformer> setupTaskPerformers = new ArrayList<SetupTaskPerformer>();
+ for (Object checkedElement : checkedElements)
+ {
+ if (checkedElement instanceof Branch)
+ {
+ Branch branch = (Branch)checkedElement;
+ Setup setup = setups.get(branch);
+ if (setup != null)
+ {
+ setupTaskPerformers.add(createTaskPerformer(setup, installFolder, gitPrefix));
+ }
+ }
+ }
+
ProgressLogDialog.run(getShell(), "Setting up IDE", new ProgressLogRunnable()
{
public boolean run(ProgressLog log) throws Exception
{
- for (Object checkedElement : checkedElements)
+ for (SetupTaskPerformer setupTaskPerformer : setupTaskPerformers)
{
- if (checkedElement instanceof Branch)
+ try
{
- Branch branch = (Branch)checkedElement;
- Setup setup = setups.get(branch);
- if (setup != null)
- {
- try
- {
- install(setup, installFolder, gitPrefix);
- }
- catch (IOException ex)
- {
- throw new RuntimeException(ex);
- }
- }
+ install(setupTaskPerformer);
+ }
+ catch (IOException ex)
+ {
+ throw new RuntimeException(ex);
}
}
return false;
}
- });
+ }, setupTaskPerformers);
}
- private void install(Setup setup, String installFolder, String gitPrefix) throws Exception
+ private SetupTaskPerformer createTaskPerformer(Setup setup, String installFolder, String gitPrefix)
{
saveEObject(setup);
@@ -684,6 +691,11 @@ public class SetupDialog extends TitleAreaDialog
File branchDir = new File(installFolder, projectFolder + "/" + branchFolder);
SetupTaskPerformer performer = new SetupTaskPerformer(branchDir);
+ return performer;
+ }
+
+ private void install(SetupTaskPerformer performer) throws Exception
+ {
performer.getWorkspaceDir().mkdirs();
performer.perform();
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.releng.setup/META-INF/MANIFEST.MF
index c8145eee02..bfe3ede7c0 100644
--- a/plugins/org.eclipse.emf.cdo.releng.setup/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.releng.setup/META-INF/MANIFEST.MF
@@ -8,33 +8,33 @@ Bundle-Vendor: %providerName
Bundle-Localization: plugin
Require-Bundle: org.eclipse.net4j.util;bundle-version="[3.0.0,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.cdo.releng.workingsets;visibility:=reexport;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.emf.cdo.releng.predicates;visibility:=reexport;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.emf.ecore;visibility:=reexport;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.emf.cdo.releng.workingsets;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.cdo.releng.predicates;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)";visibility:=reexport,
org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)",
- org.eclipse.core.resources;resolution:=optional;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.core.variables;resolution:=optional;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.pde.core;resolution:=optional;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.pde.api.tools;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.team.ui;resolution:=optional;bundle-version="[3.5.0,4.0.0)",
- javaewah;resolution:=optional;bundle-version="[0.0.0,1.0.0)",
- org.eclipse.jgit;resolution:=optional;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.egit;resolution:=optional;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.egit.core;resolution:=optional;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.egit.ui;resolution:=optional;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.emf.edit.ui;resolution:=optional;bundle-version="[2.5.0,3.0.0)",
- org.eclipse.ecf.provider.filetransfer;resolution:=optional;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ecf.filetransfer;resolution:=optional;bundle-version="[5.0.0,6.0.0)",
- org.eclipse.ecf.identity;resolution:=optional;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ecf;resolution:=optional;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.buckminster.sax;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.buckminster.cmdline;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.buckminster.download;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.buckminster.runtime;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.buckminster.core;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.buckminster.pde;resolution:=optional;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)";resolution:=optional,
+ org.eclipse.core.variables;bundle-version="[3.0.0,4.0.0)";resolution:=optional,
+ org.eclipse.pde.core;bundle-version="[3.5.0,4.0.0)";resolution:=optional,
+ org.eclipse.pde.api.tools;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
+ org.eclipse.team.ui;bundle-version="[3.5.0,4.0.0)";resolution:=optional,
+ javaewah;bundle-version="[0.0.0,1.0.0)";resolution:=optional,
+ org.eclipse.jgit;bundle-version="[3.0.0,4.0.0)";resolution:=optional,
+ org.eclipse.egit;bundle-version="[3.0.0,4.0.0)";resolution:=optional,
+ org.eclipse.egit.core;bundle-version="[3.0.0,4.0.0)";resolution:=optional,
+ org.eclipse.egit.ui;bundle-version="[3.0.0,4.0.0)";resolution:=optional,
+ org.eclipse.emf.edit.ui;bundle-version="[2.5.0,3.0.0)";resolution:=optional,
+ org.eclipse.ecf.provider.filetransfer;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
+ org.eclipse.ecf.filetransfer;bundle-version="[5.0.0,6.0.0)";resolution:=optional,
+ org.eclipse.ecf.identity;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
+ org.eclipse.ecf;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
+ org.eclipse.buckminster.sax;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
+ org.eclipse.buckminster.cmdline;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
+ org.eclipse.buckminster.download;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
+ org.eclipse.buckminster.runtime;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
+ org.eclipse.buckminster.core;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
+ org.eclipse.buckminster.pde;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
org.eclipse.equinox.p2.core;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.ui;resolution:=optional;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.ui;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
org.eclipse.equinox.p2.metadata;bundle-version="[2.0.0,3.0.0)",
org.eclipse.equinox.p2.repository;bundle-version="[2.0.0,3.0.0)",
org.eclipse.equinox.p2.artifact.repository;bundle-version="[1.0.0,2.0.0)",
@@ -50,7 +50,8 @@ Require-Bundle: org.eclipse.net4j.util;bundle-version="[3.0.0,4.0.0)",
org.eclipse.core.net;bundle-version="[1.2.0,2.0.0)",
org.eclipse.equinox.p2.touchpoint.eclipse;bundle-version="[2.1.0,3.0.0)",
org.eclipse.equinox.p2.touchpoint.natives;bundle-version="[1.1.0,2.0.0)",
- org.eclipse.equinox.p2.updatesite;bundle-version="[1.0.0,2.0.0)"
+ org.eclipse.equinox.p2.updatesite;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.8.0,4.0.0)"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.emf.cdo.releng.internal.setup;x-friends:="org.eclipse.emf.cdo.releng.setup.product,org.eclipse.emf.cdo.releng.setup.editor";version="1.0.0",
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java
index 64b626a937..8f4ae54970 100644
--- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java
+++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/SetupTaskPerformer.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.cdo.releng.setup.util.OS;
import org.eclipse.emf.cdo.releng.setup.util.log.ProgressLog;
import org.eclipse.emf.cdo.releng.setup.util.log.ProgressLogRunnable;
+import org.eclipse.net4j.util.ReflectUtil;
import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.io.IOUtil;
@@ -47,7 +48,9 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
+import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
@@ -160,6 +163,14 @@ public class SetupTaskPerformer extends HashMap<Object, Object> implements Setup
log(ProgressLogDialog.toString(status));
}
+ public void task(SetupTask setupTask)
+ {
+ if (progress instanceof ProgressLogDialog)
+ {
+ ((ProgressLogDialog)progress).task(setupTask);
+ }
+ }
+
public boolean isCancelled()
{
if (progress != null)
@@ -299,18 +310,30 @@ public class SetupTaskPerformer extends HashMap<Object, Object> implements Setup
return setup;
}
- public void perform() throws Exception
+ private EList<SetupTask> triggeredSetupTasks;
+
+ public synchronized EList<SetupTask> getTriggeredSetupTasks()
{
- EList<SetupTask> setupTasks = setup.getSetupTasks(true, trigger);
- if (setupTasks.isEmpty())
+ if (triggeredSetupTasks == null)
{
- return;
+ triggeredSetupTasks = setup.getSetupTasks(true, trigger);
+ if (triggeredSetupTasks.isEmpty())
+ {
+ return triggeredSetupTasks;
+ }
+
+ Map<SetupTask, SetupTask> substitutions = getSubstitutions(triggeredSetupTasks);
+ setup = copySetup(triggeredSetupTasks, substitutions);
+
+ reorder(triggeredSetupTasks);
}
- Map<SetupTask, SetupTask> substitutions = getSubstitutions(setupTasks);
- setup = copySetup(setupTasks, substitutions);
+ return triggeredSetupTasks;
+ }
- reorder(setupTasks);
+ public void perform() throws Exception
+ {
+ EList<SetupTask> setupTasks = getTriggeredSetupTasks();
perform(setupTasks);
if (logStream != null)
@@ -435,7 +458,7 @@ public class SetupTaskPerformer extends HashMap<Object, Object> implements Setup
doPerform(neededTasks);
return isRestartNeeded();
}
- });
+ }, Collections.singletonList(this));
}
else
{
@@ -450,6 +473,7 @@ public class SetupTaskPerformer extends HashMap<Object, Object> implements Setup
for (SetupTask neededTask : neededTasks)
{
+ task(neededTask);
log("Performing setup task " + getLabel(neededTask));
neededTask.perform(this);
neededTask.dispose();
@@ -553,10 +577,22 @@ public class SetupTaskPerformer extends HashMap<Object, Object> implements Setup
return result;
}
- private static String getLabel(Object object)
+ private static String getLabel(SetupTask setupTask)
{
- IItemLabelProvider labelProvider = (IItemLabelProvider)ADAPTER_FACTORY.adapt(object, IItemLabelProvider.class);
- return labelProvider.getText(object);
+ IItemLabelProvider labelProvider = (IItemLabelProvider)ADAPTER_FACTORY.adapt(setupTask, IItemLabelProvider.class);
+ String type;
+ try
+ {
+ Method getTypeTextMethod = ReflectUtil.getMethod(labelProvider.getClass(), "getTypeText", Object.class);
+ getTypeTextMethod.setAccessible(true);
+ type = getTypeTextMethod.invoke(labelProvider, setupTask).toString();
+ }
+ catch (Exception ex)
+ {
+ type = setupTask.eClass().getName();
+ }
+ String label = labelProvider.getText(setupTask);
+ return label.startsWith(type) ? label : type + " " + label;
}
public static ProgressLog getProgress()
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressLogDialog.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressLogDialog.java
index 0a31732a85..fd3fac531f 100644
--- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressLogDialog.java
+++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/ui/ProgressLogDialog.java
@@ -12,10 +12,29 @@ package org.eclipse.emf.cdo.releng.internal.setup.ui;
import org.eclipse.emf.cdo.releng.internal.setup.Activator;
import org.eclipse.emf.cdo.releng.internal.setup.SetupTaskPerformer;
+import org.eclipse.emf.cdo.releng.setup.Branch;
+import org.eclipse.emf.cdo.releng.setup.Setup;
+import org.eclipse.emf.cdo.releng.setup.SetupTask;
import org.eclipse.emf.cdo.releng.setup.util.log.ProgressLog;
import org.eclipse.emf.cdo.releng.setup.util.log.ProgressLogProvider;
import org.eclipse.emf.cdo.releng.setup.util.log.ProgressLogRunnable;
+import org.eclipse.net4j.util.StringUtil;
+
+import org.eclipse.emf.common.ui.ImageURIRegistry;
+import org.eclipse.emf.common.ui.viewer.ColumnViewerInformationControlToolTipSupport;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.DecoratingColumLabelProvider;
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -24,10 +43,19 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
+import org.eclipse.swt.browser.LocationEvent;
+import org.eclipse.swt.browser.LocationListener;
+import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@@ -37,6 +65,7 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.progress.ProgressManager;
@@ -45,6 +74,7 @@ import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.List;
public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
{
@@ -75,10 +105,16 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
private String lastLine;
- private ProgressLogDialog(Shell parentShell)
+ private List<SetupTaskPerformer> setupTaskPerformers;
+
+ private TreeViewer treeViewer;
+
+ private ProgressLogDialog(Shell parentShell, List<SetupTaskPerformer> setupTaskPerformers)
{
super(parentShell);
+ this.setupTaskPerformers = setupTaskPerformers;
+
setHelpAvailable(false);
setShellStyle(SWT.BORDER | SWT.MAX | SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL);
}
@@ -92,6 +128,7 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
setTitle(TITLE);
Composite area = (Composite)super.createDialogArea(parent);
+
Composite container = new Composite(area, SWT.NONE);
GridLayout gl_container = new GridLayout(1, false);
gl_container.marginWidth = 10;
@@ -99,7 +136,154 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
container.setLayout(gl_container);
container.setLayoutData(new GridData(GridData.FILL_BOTH));
- text = new Text(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);
+ SashForm sashForm = new SashForm(container, SWT.VERTICAL);
+ sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ treeViewer = new TreeViewer(sashForm);
+ Tree tree = treeViewer.getTree();
+
+ ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
+ ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ final AdapterFactoryItemDelegator itemDelegator = new AdapterFactoryItemDelegator(adapterFactory);
+ ILabelProvider labelProvider = new DecoratingColumLabelProvider(new AdapterFactoryLabelProvider(adapterFactory),
+ new ILabelDecorator()
+ {
+ public void removeListener(ILabelProviderListener listener)
+ {
+ }
+
+ public boolean isLabelProperty(Object element, String property)
+ {
+ return true;
+ }
+
+ public void dispose()
+ {
+ }
+
+ public void addListener(ILabelProviderListener listener)
+ {
+ }
+
+ public String decorateText(String text, Object element)
+ {
+ return text;
+ }
+
+ public Image decorateImage(Image image, Object element)
+ {
+ return image;
+ }
+ })
+ {
+ @Override
+ public String getToolTipText(Object element)
+ {
+ StringBuilder result = new StringBuilder();
+ List<IItemPropertyDescriptor> propertyDescriptors = itemDelegator.getPropertyDescriptors(element);
+ if (propertyDescriptors != null)
+ {
+ result.append("<table border='1'>");
+ for (IItemPropertyDescriptor propertyDescriptor : propertyDescriptors)
+ {
+ result.append("<tr>");
+
+ String displayName = propertyDescriptor.getDisplayName(element);
+ result.append("<td>").append(DiagnosticDecorator.escapeContent(displayName)).append("</td>");
+
+ result.append("<td>");
+ IItemLabelProvider propertyLabelProvider = propertyDescriptor.getLabelProvider(element);
+ Object propertyValue = propertyDescriptor.getPropertyValue(element);
+ Object image = propertyLabelProvider.getImage(propertyValue);
+ if (image != null)
+ {
+ result.append(DiagnosticDecorator.enquote("<img src='"
+ + ImageURIRegistry.INSTANCE.getImageURI(ExtendedImageRegistry.INSTANCE.getImage(image)) + "'/> "));
+ }
+
+ String valueText = propertyLabelProvider.getText(propertyValue);
+ if (!StringUtil.isEmpty(valueText))
+ {
+ result.append(DiagnosticDecorator.escapeContent(valueText));
+ }
+ else
+ {
+ result.append("&nbsp;");
+ }
+
+ if (valueText == null && image == null)
+ {
+ result.append("&nbsp;");
+ }
+
+ result.append("</td>");
+ result.append("</tr>");
+ }
+
+ result.append("</table>");
+ }
+
+ return result.length() == 0 ? null : result.toString();
+ }
+ };
+
+ treeViewer.setLabelProvider(labelProvider);
+
+ ItemProvider input = new ItemProvider();
+ final EList<Object> children = input.getChildren();
+ final AdapterFactoryContentProvider contentProvider = new AdapterFactoryContentProvider(adapterFactory)
+ {
+ @Override
+ public Object getParent(Object object)
+ {
+ if (object instanceof SetupTask)
+ {
+ for (Object child : children)
+ {
+ for (Object grandChild : ((ItemProvider)child).getChildren())
+ {
+ if (grandChild == object)
+ {
+ return child;
+ }
+ }
+ }
+ }
+
+ return super.getParent(object);
+ }
+ };
+
+ treeViewer.setContentProvider(contentProvider);
+
+ new ColumnViewerInformationControlToolTipSupport(treeViewer, new LocationListener()
+ {
+ public void changing(LocationEvent event)
+ {
+ }
+
+ public void changed(LocationEvent event)
+ {
+ }
+ });
+
+ for (SetupTaskPerformer setupTaskPerformer : setupTaskPerformers)
+ {
+ final EList<SetupTask> triggeredSetupTasks = setupTaskPerformer.getTriggeredSetupTasks();
+ Setup setup = setupTaskPerformer.getSetup();
+ Branch branch = setup.getBranch();
+ ItemProvider branchPresentation = new ItemProvider(branch.getProject().getName() + " "
+ + labelProvider.getText(branch) + " (Eclipse " + setup.getEclipseVersion().getVersion() + ")",
+ labelProvider.getImage(branch));
+ branchPresentation.getChildren().addAll(triggeredSetupTasks);
+ children.add(branchPresentation);
+ }
+
+ treeViewer.setInput(input);
+ tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ tree.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+
+ text = new Text(sashForm, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);
text.setFont(SWTResourceManager.getFont("Courier New", 10, SWT.NORMAL));
text.setEditable(false);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
@@ -196,7 +380,17 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
{
try
{
- text.append("[" + TIME.format(date) + "] " + message);
+ String string = "[" + TIME.format(date) + "] " + message;
+ int visibleLines = text.getClientArea().height / text.getLineHeight();
+ int topVisibleLine = text.getLineCount() - visibleLines;
+ if (topVisibleLine - text.getTopIndex() <= 1)
+ {
+ text.append(string);
+ }
+ else
+ {
+ text.setText(text.getText() + text.getLineDelimiter() + string);
+ }
}
catch (Exception ex)
{
@@ -211,6 +405,17 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
log(toString(status));
}
+ public void task(final SetupTask setupTask)
+ {
+ getShell().getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ treeViewer.setSelection(new StructuredSelection(setupTask), true);
+ }
+ });
+ }
+
public void setFinished()
{
Job.getJobManager().setProgressProvider(ProgressManager.getInstance());
@@ -265,17 +470,18 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
return false;
}
- public static void run(Shell shell, final String jobName, final ProgressLogRunnable runnable)
+ public static void run(final Shell shell, final String jobName, final ProgressLogRunnable runnable,
+ List<SetupTaskPerformer> setupTaskPerformers)
{
try
{
final boolean[] restart = { false };
- final ProgressLogDialog dialog = new ProgressLogDialog(shell);
+ final ProgressLogDialog dialog = new ProgressLogDialog(shell, setupTaskPerformers);
Runnable jobRunnable = new Runnable()
{
public void run()
{
- Job job = new Job(jobName)
+ final Job job = new Job(jobName)
{
@Override
protected IStatus run(IProgressMonitor monitor)
@@ -305,7 +511,13 @@ public class ProgressLogDialog extends TitleAreaDialog implements ProgressLog
}
};
- job.schedule();
+ shell.getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ job.schedule();
+ }
+ });
if (dialog.open() == ProgressLogDialog.OK && restart[0])
{

Back to the top