Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusan Franklin2008-03-10 20:54:28 +0000
committerSusan Franklin2008-03-10 20:54:28 +0000
commit415237238d00e68a54150b69ebf6786560ed1128 (patch)
tree8671fac96eb1ec2d1c912ef7b22755029846856c /bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox
parentb6ad585a19fb4e6f0e3961996434870d7c34ebad (diff)
downloadrt.equinox.p2-415237238d00e68a54150b69ebf6786560ed1128.tar.gz
rt.equinox.p2-415237238d00e68a54150b69ebf6786560ed1128.tar.xz
rt.equinox.p2-415237238d00e68a54150b69ebf6786560ed1128.zip
Bug 207220 - [ui] - quick and easy ways to get an URL into the repo list
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox')
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java1
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties1
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/IRepositoryManipulator.java21
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AddRepositoryDialog.java47
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/DefaultURLValidator.java33
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulatorDropTarget.java56
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/TextURLDropAdapter.java7
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLDropAdapter.java12
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLValidator.java12
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateAndInstallGroup.java28
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policies.java1
11 files changed, 179 insertions, 40 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
index 936b06c4b..079b1f209 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
@@ -175,6 +175,7 @@ public class ProvUIMessages extends NLS {
public static String UpdateAndInstallSelectionDialog_DeselectAllLabel;
public static String UpdateAndInstallSelectionDialog_SelectAllLabel;
public static String UpdateAndInstallGroup_Refresh;
+ public static String URLValidator_UnrecognizedURL;
public static String UpdateManagerCompatibility_UnableToOpenFindAndInstall;
public static String UpdateManagerCompatibility_UnableToOpenManageConfiguration;
public static String UpdateOperation_NothingToUpdate;
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
index f50647078..a41d055d4 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
@@ -116,6 +116,7 @@ UpdateDialog_AssemblingUpdatesProgress=Assembling updates
UpdateAction_UpdatesAvailableTitle=Available Updates
UpdateOperation_NothingToUpdate=There is nothing to update.
UpdateAndInstallGroup_Refresh=&Refresh
+URLValidator_UnrecognizedURL=The URL {0} is not recognized.
UpdateManagerCompatibility_UnableToOpenFindAndInstall=Unable to open the Update Manager Find and Install Wizard.
UpdateManagerCompatibility_UnableToOpenManageConfiguration=Unable to open the Update Manager Configuration Manager.
CategoryElementCollector_Uncategorized=Other
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/IRepositoryManipulator.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/IRepositoryManipulator.java
index d401f2c6b..bf7e0a5cd 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/IRepositoryManipulator.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/IRepositoryManipulator.java
@@ -10,6 +10,9 @@
*******************************************************************************/
package org.eclipse.equinox.internal.provisional.p2.ui;
+import java.net.URL;
+import org.eclipse.equinox.internal.provisional.p2.ui.dialogs.URLValidator;
+import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningOperation;
import org.eclipse.swt.widgets.Shell;
/**
@@ -35,4 +38,22 @@ public interface IRepositoryManipulator {
*/
public String getLabel();
+ /**
+ * Return an array of URLs containing the repositories already known.
+ */
+ public URL[] getKnownRepositories();
+
+ /**
+ * Return an operation that could be used to add the specified URL as
+ * a repository.
+ */
+ public ProvisioningOperation getAddOperation(URL repoURL);
+
+ /**
+ * Return an operation that could be used to remove the specified URL as
+ * a repositories.
+ */
+ public ProvisioningOperation getRemoveOperation(URL[] repoURLs);
+
+ public URLValidator getURLValidator(Shell shell);
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AddRepositoryDialog.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AddRepositoryDialog.java
index 97746b004..1f0f324b4 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AddRepositoryDialog.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/AddRepositoryDialog.java
@@ -10,26 +10,23 @@
*******************************************************************************/
package org.eclipse.equinox.internal.provisional.p2.ui.dialogs;
-import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
-import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI;
import org.eclipse.equinox.internal.provisional.p2.ui.ProvisioningOperationRunner;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningOperation;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.dnd.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.statushandlers.StatusManager;
/**
* Abstract dialog class for adding repositories of different types. This class
@@ -44,15 +41,16 @@ public abstract class AddRepositoryDialog extends StatusDialog {
Button okButton;
Text url;
- URLValidator urlValidator;
+ DefaultURLValidator urlValidator;
static final String[] ARCHIVE_EXTENSIONS = new String[] {"*.jar;*.zip"}; //$NON-NLS-1$
static String lastLocalLocation = null;
static String lastArchiveLocation = null;
- public AddRepositoryDialog(Shell parentShell, URL[] knownRepositories) {
+ public AddRepositoryDialog(Shell parentShell, int repoFlag) {
super(parentShell);
- urlValidator = createURLValidator(knownRepositories);
+ urlValidator = createURLValidator();
+ urlValidator.setKnownRepositoriesFlag(repoFlag);
setTitle(ProvUIMessages.AddRepositoryDialog_Title);
}
@@ -78,7 +76,13 @@ public abstract class AddRepositoryDialog extends StatusDialog {
url.setLayoutData(data);
DropTarget target = new DropTarget(url, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
target.setTransfer(new Transfer[] {URLTransfer.getInstance()});
- target.addDropListener(new TextURLDropAdapter(url));
+ target.addDropListener(new TextURLDropAdapter(url) {
+ protected void handleURLString(String urlText, DropTargetEvent event) {
+ super.handleURLString(urlText, event);
+ // validate the URL with remote checking since drop is more heavyweight than typing text
+ validateRepositoryURL(true);
+ }
+ });
url.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validateRepositoryURL(false);
@@ -133,8 +137,8 @@ public abstract class AddRepositoryDialog extends StatusDialog {
return comp;
}
- protected URLValidator createURLValidator(URL[] knownRepositories) {
- return new DefaultURLValidator(knownRepositories);
+ protected DefaultURLValidator createURLValidator() {
+ return new DefaultURLValidator();
}
protected URLValidator getURLValidator() {
@@ -184,24 +188,19 @@ public abstract class AddRepositoryDialog extends StatusDialog {
if (url == null || url.isDisposed())
return Status.OK_STATUS;
final IStatus[] status = new IStatus[1];
- status[0] = Status.OK_STATUS;
+ status[0] = URLValidator.getInvalidURLStatus(url.getText().trim());
final URL userURL = getUserURL();
if (url.getText().length() == 0)
status[0] = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, URLValidator.LOCAL_VALIDATION_ERROR, ProvUIMessages.RepositoryGroup_URLRequired, null);
else if (userURL == null)
status[0] = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, URLValidator.LOCAL_VALIDATION_ERROR, ProvUIMessages.AddRepositoryDialog_InvalidURL, null);
else {
- try {
- PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) {
- status[0] = getURLValidator().validateRepositoryURL(userURL, contactRepositories, status[0], monitor);
- }
- });
- } catch (InvocationTargetException e) {
- return ProvUI.handleException(e.getCause(), ProvUIMessages.AddRepositoryDialog_URLValidationError, StatusManager.SHOW | StatusManager.LOG);
- } catch (InterruptedException e) {
- // ignore
- }
+ BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
+ public void run() {
+ status[0] = getURLValidator().validateRepositoryURL(userURL, contactRepositories, null);
+ }
+ });
+
}
// At this point the subclasses may have decided to opt out of
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/DefaultURLValidator.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/DefaultURLValidator.java
index 12d7af918..59e58a446 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/DefaultURLValidator.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/DefaultURLValidator.java
@@ -15,6 +15,8 @@ import java.net.URL;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
+import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil;
/**
@@ -23,25 +25,38 @@ import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUti
*/
public class DefaultURLValidator extends URLValidator {
- URL[] knownRepositories;
+ int repoFlag;
- public DefaultURLValidator(URL[] knownRepositories) {
- this.knownRepositories = knownRepositories;
+ public DefaultURLValidator() {
+ repoFlag = IMetadataRepositoryManager.REPOSITORIES_ALL;
+ }
+
+ public void setKnownRepositoriesFlag(int flag) {
+ repoFlag = flag;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.internal.provisional.p2.ui.dialogs.URLValidator#validateRepositoryURL(boolean)
*/
- protected IStatus validateRepositoryURL(URL location, boolean contactRepositories, IStatus originalStatus, IProgressMonitor monitor) {
- IStatus status = originalStatus;
+ protected IStatus validateRepositoryURL(URL location, boolean contactRepositories, IProgressMonitor monitor) {
+ IStatus duplicateStatus = Status.OK_STATUS;
+ URL[] knownRepositories;
+ try {
+ knownRepositories = ProvisioningUtil.getMetadataRepositories(repoFlag);
+ } catch (ProvisionException e) {
+ knownRepositories = new URL[0];
+ }
for (int i = 0; i < knownRepositories.length; i++) {
if (knownRepositories[i].toExternalForm().equalsIgnoreCase(location.toExternalForm())) {
- status = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, LOCAL_VALIDATION_ERROR, ProvUIMessages.AddRepositoryDialog_DuplicateURL, null);
+ duplicateStatus = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, LOCAL_VALIDATION_ERROR, ProvUIMessages.AddRepositoryDialog_DuplicateURL, null);
break;
}
}
- if (status.isOK() && contactRepositories)
- status = ProvisioningUtil.validateMetadataRepositoryLocation(location, monitor);
- return status;
+ if (!duplicateStatus.isOK())
+ return duplicateStatus;
+
+ if (contactRepositories)
+ return ProvisioningUtil.validateMetadataRepositoryLocation(location, monitor);
+ return duplicateStatus;
}
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulatorDropTarget.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulatorDropTarget.java
new file mode 100644
index 000000000..e27bbfb82
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulatorDropTarget.java
@@ -0,0 +1,56 @@
+package org.eclipse.equinox.internal.provisional.p2.ui.dialogs;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.internal.provisional.p2.ui.*;
+import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningOperation;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+/**
+ * @since 3.4
+ *
+ */
+public class RepositoryManipulatorDropTarget extends URLDropAdapter {
+ IRepositoryManipulator manipulator;
+ Control control;
+
+ public RepositoryManipulatorDropTarget(IRepositoryManipulator manipulator, Control control) {
+ Assert.isNotNull(manipulator);
+ this.manipulator = manipulator;
+ this.control = control;
+ }
+
+ protected void handleURLString(String urlText, final DropTargetEvent event) {
+ event.detail = DND.DROP_NONE;
+ if (!dropTargetIsValid(event))
+ return;
+ final URL url;
+ try {
+ url = new URL(urlText);
+ } catch (MalformedURLException e) {
+ ProvUI.reportStatus(URLValidator.getInvalidURLStatus(urlText), StatusManager.SHOW | StatusManager.LOG);
+ return;
+ }
+ BusyIndicator.showWhile(control.getDisplay(), new Runnable() {
+ public void run() {
+ IStatus status = manipulator.getURLValidator(control.getShell()).validateRepositoryURL(url, true, null);
+ if (status.isOK()) {
+ ProvisioningOperation addOperation = manipulator.getAddOperation(url);
+ ProvisioningOperationRunner.run(addOperation, control.getShell());
+ event.detail = DND.DROP_LINK;
+ } else if (status.getCode() == URLValidator.REPO_AUTO_GENERATED) {
+ event.detail = DND.DROP_COPY;
+ } else if (!(status.getCode() == URLValidator.ALTERNATE_ACTION_TAKEN)) {
+ ProvUI.reportStatus(status, StatusManager.BLOCK | StatusManager.LOG);
+ }
+
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/TextURLDropAdapter.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/TextURLDropAdapter.java
index f999712ce..5e7aa02b9 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/TextURLDropAdapter.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/TextURLDropAdapter.java
@@ -11,6 +11,8 @@
package org.eclipse.equinox.internal.provisional.p2.ui.dialogs;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.widgets.Text;
/**
@@ -26,10 +28,11 @@ public class TextURLDropAdapter extends URLDropAdapter {
}
/* (non-Javadoc)
- * @see org.eclipse.equinox.internal.provisional.p2.ui.dialogs.URLDropAdapter#handleURLString(java.lang.String)
+ * @see org.eclipse.equinox.internal.provisional.p2.ui.dialogs.URLDropAdapter#handleURLString(java.lang.String, org.eclipse.swt.dnd.DropTargetEvent)
*/
- protected void handleURLString(String urlText) {
+ protected void handleURLString(String urlText, DropTargetEvent event) {
text.setText(urlText);
+ event.detail = DND.DROP_LINK;
}
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLDropAdapter.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLDropAdapter.java
index 5ac605f60..647178759 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLDropAdapter.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLDropAdapter.java
@@ -20,6 +20,10 @@ import org.eclipse.swt.dnd.*;
*/
public abstract class URLDropAdapter extends DropTargetAdapter {
public void dragEnter(DropTargetEvent e) {
+ if (!dropTargetIsValid(e)) {
+ e.detail = DND.DROP_NONE;
+ return;
+ }
if (e.detail == DND.DROP_NONE)
e.detail = DND.DROP_LINK;
}
@@ -34,8 +38,12 @@ public abstract class URLDropAdapter extends DropTargetAdapter {
event.detail = DND.DROP_NONE;
return;
}
- handleURLString((String) event.data);
+ handleURLString((String) event.data, event);
+ }
+
+ protected boolean dropTargetIsValid(DropTargetEvent event) {
+ return true;
}
- protected abstract void handleURLString(String urlText);
+ protected abstract void handleURLString(String urlText, DropTargetEvent event);
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLValidator.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLValidator.java
index fadb07d41..cecaefb12 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLValidator.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/URLValidator.java
@@ -12,8 +12,10 @@
package org.eclipse.equinox.internal.provisional.p2.ui.dialogs;
import java.net.URL;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
+import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.osgi.util.NLS;
/**
*
@@ -34,5 +36,9 @@ public abstract class URLValidator {
public static final int REPO_AUTO_GENERATED = 3001;
public static final int ALTERNATE_ACTION_TAKEN = 3002;
- protected abstract IStatus validateRepositoryURL(URL url, boolean contactRepositories, IStatus originalStatus, IProgressMonitor monitor);
+ public static Status getInvalidURLStatus(String urlText) {
+ return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, LOCAL_VALIDATION_ERROR, NLS.bind(ProvUIMessages.URLValidator_UnrecognizedURL, urlText), null);
+ }
+
+ protected abstract IStatus validateRepositoryURL(URL url, boolean contactRepositories, IProgressMonitor monitor);
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateAndInstallGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateAndInstallGroup.java
index d45295e2a..a0bfc4da6 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateAndInstallGroup.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/UpdateAndInstallGroup.java
@@ -28,6 +28,7 @@ import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.SameShellProvider;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.*;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
@@ -45,6 +46,7 @@ public class UpdateAndInstallGroup {
private static final String BUTTONACTION = "buttonAction"; //$NON-NLS-1$
private static final int DEFAULT_HEIGHT = 240;
private static final int DEFAULT_WIDTH = 300;
+ static final int INDEX_AVAILABLE = 1;
TabFolder tabFolder;
AvailableIUGroup availableIUGroup;
InstalledIUGroup installedIUGroup;
@@ -87,6 +89,8 @@ public class UpdateAndInstallGroup {
TabItem availableTab = new TabItem(tabFolder, SWT.NONE);
availableTab.setText(availableString);
availableTab.setControl(createAvailableIUsPage(tabFolder, policies.getQueryProvider()));
+
+ setDropTarget(tabFolder);
}
public TabFolder getTabFolder() {
@@ -98,6 +102,7 @@ public class UpdateAndInstallGroup {
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
gd.widthHint = convertHorizontalDLUsToPixels(DEFAULT_WIDTH);
composite.setLayoutData(gd);
+ setDropTarget(composite);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
@@ -120,6 +125,8 @@ public class UpdateAndInstallGroup {
}
});
+ setDropTarget(availableIUGroup.getStructuredViewer().getControl());
+
validateAvailableIUButtons(availableIUGroup.getStructuredViewer().getSelection());
return composite;
}
@@ -339,4 +346,25 @@ public class UpdateAndInstallGroup {
public InstalledIUGroup getInstalledIUGroup() {
return installedIUGroup;
}
+
+ private void setDropTarget(final Control control) {
+ // Don't bother hooking drag/drop if we won't know
+ // what to do with it.
+ if (repositoryManipulator == null)
+ return;
+
+ DropTarget target = new DropTarget(control, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
+ target.setTransfer(new Transfer[] {URLTransfer.getInstance()});
+ target.addDropListener(new RepositoryManipulatorDropTarget(repositoryManipulator, control) {
+ protected boolean dropTargetIsValid(DropTargetEvent event) {
+ // If we are on available features page, all drops are good.
+ if (tabFolder.getSelectionIndex() == UpdateAndInstallGroup.INDEX_AVAILABLE)
+ return true;
+ if (tabFolder.getItem(INDEX_AVAILABLE) == event.item)
+ return true;
+ return false;
+ }
+ });
+
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policies.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policies.java
index 0eb39c933..847e3a447 100644
--- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policies.java
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/Policies.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.equinox.internal.provisional.p2.ui.policy;
+
/**
* Abstract class for a set of policies provided by applications that
* are used for decision making during provisioning operations.

Back to the top