diff options
author | Susan Franklin | 2007-10-15 22:20:27 +0000 |
---|---|---|
committer | Susan Franklin | 2007-10-15 22:20:27 +0000 |
commit | adec7392cfe5ee6292a28d7520b567e897c8975b (patch) | |
tree | d93c479ae0b66dbb2bb4d3a638fc1545e3cd6f11 /bundles/org.eclipse.equinox.p2.ui/src/org/eclipse | |
parent | 86ad8d63826d6186aa433020f7d4b06330feec04 (diff) | |
download | rt.equinox.p2-adec7392cfe5ee6292a28d7520b567e897c8975b.tar.gz rt.equinox.p2-adec7392cfe5ee6292a28d7520b567e897c8975b.tar.xz rt.equinox.p2-adec7392cfe5ee6292a28d7520b567e897c8975b.zip |
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui/src/org/eclipse')
23 files changed, 195 insertions, 656 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 a6289ce27..657b590f8 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 @@ -41,10 +41,10 @@ public class ProvUIMessages extends NLS { public static String IUPropertiesGroup_ProviderProperty; public static String ProfileGroup_Cache; public static String ProfileGroup_SelectBundlePoolCache; - public static String ProvisioningUtil_InstallProgressName; // utility error messages public static String ProvisioningUtil_NoRepositoryManager; public static String ProvisioningUtil_AddRepositoryFailure; + public static String ProvisioningUtil_CreateRepositoryFailure; public static String ProvisioningUtil_RepoNotWritable; public static String ProvisioningUtil_RepositoryNotFound; public static String ProvisioningUtil_NoProfileRegistryFound; @@ -89,21 +89,11 @@ public class ProvUIMessages extends NLS { // Property pages public static String ProfilePropertyPage_NoProfileSelected; public static String IUPropertyPage_NoIUSelected; - public static String RepositoryGroup_NameColumnLabel; - public static String RepositoryGroup_PropertiesLabel; - public static String RepositoryGroup_ValueColumnLabel; public static String RepositoryPropertyPage_NoRepoSelected; // Dialog groups - public static String IUGroup_ID; - public static String IUGroup_IU_ID_Required; - public static String IUGroup_Namespace; - public static String IUGroup_ProvidedCapabilities; - public static String IUGroup_RequiredCapabilities; - public static String IUGroup_TouchpointData; - public static String IUGroup_TouchpointType; - public static String IUGroup_Version; - public static String RepositoryGroup_Browse; + public static String RepositoryGroup_LocalRepoBrowseButton; + public static String RepositoryGroup_ArchivedRepoBrowseButton; public static String RepositoryGroup_RepositoryFile; public static String RepositoryGroup_SelectRepositoryDirectory; public static String RepositoryGroup_RepositoryNameFieldLabel; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningPropertyManager.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningEventManager.java index 6f9bc1a26..db0bf2528 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningPropertyManager.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningEventManager.java @@ -11,12 +11,12 @@ package org.eclipse.equinox.internal.p2.ui; +import java.util.EventObject; import org.eclipse.core.runtime.ListenerList; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.equinox.p2.ui.IProvisioningListener; /** - * ProvisioningPropertyManager can notify clients of changes to the properties + * ProvisioningEventManager can notify clients of changes to the properties * of provisioning objects. * * @since 3.4 @@ -26,26 +26,23 @@ import org.eclipse.jface.util.PropertyChangeEvent; // This class should go away and instead these kinds of events should be handled // by the provisioning event bus. See bug #197052 and #197701 // -// TODO Some of these aren't even truly property changes but rather just notification -// that something happened. Since this class is (hoped to be) temporary, I did not -// want to define new event types and just used what was already available. -public class ProvisioningPropertyManager { +public class ProvisioningEventManager { private ListenerList listeners = new ListenerList(); - public void addPropertyChangeListener(IPropertyChangeListener listener) { + public void addListener(IProvisioningListener listener) { listeners.add(listener); } - public void removePropertyChangeListener(IPropertyChangeListener listener) { + public void removeListener(IProvisioningListener listener) { listeners.remove(listener); } - public void notifyListeners(PropertyChangeEvent event) { + public void notifyListeners(EventObject event) { final Object[] listenerArray = listeners.getListeners(); for (int i = 0; i < listenerArray.length; i++) { - final IPropertyChangeListener listener = (IPropertyChangeListener) listenerArray[i]; - listener.propertyChange(event); + final IProvisioningListener listener = (IProvisioningListener) listenerArray[i]; + listener.notify(event); } } 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 1f742e5d2..be76ca2d9 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 @@ -11,6 +11,7 @@ ProvisioningUtil_NoRepositoryManager=No repository manager was found ProvisioningUtil_AddRepositoryFailure=Unable to add repository {0} +ProvisioningUtil_CreateRepositoryFailure=Unable to create repository {0} ProvisioningUtil_RepositoryNotFound=Could not find repository {0} ProvisioningUtil_RepoNotWritable=Repository is not writable ProvisioningUtil_NoProfileRegistryFound=No profile registry was found @@ -40,32 +41,30 @@ UpdateIUOperationLabelWithMnemonic=&Update UpdateIUCommandLabel=&Check for updates... UpdateIUCommandTooltip=See if updates are available for the selected items UpdateIUProgress=Updating... -RollbackIUOperationLabel=Rollback -RollbackIUOperationLabelWithMnemonic=&Rollback -RollbackIUCommandLabel=&Rollback... -RollbackIUCommandTooltip=Roll back to a previously installed configuration -RollbackIUProgress=Rolling back... +RollbackIUOperationLabel=Revert +RollbackIUOperationLabelWithMnemonic=&Revert +RollbackIUCommandLabel=&Revert... +RollbackIUCommandTooltip=Revert to a previously installed configuration +RollbackIUProgress=Reverting... ProvDropAdapter_NoIUsToDrop=No IUs were available to be dropped ProvDropAdapter_InvalidDropTarget=Invalid drop target ProvDropAdapter_UnsupportedDropOperation=Unsupported drop operation ProfilePropertyPage_NoProfileSelected=There was no profile selected -IUPropertyPage_NoIUSelected=There was no IU selected +IUPropertyPage_NoIUSelected=There was nothing selected to show in the properties. IUDetailsLabelProvider_Unknown=Unknown IUPropertiesGroup_NameProperty=Name IUPropertiesGroup_ProviderProperty=Provider IUPropertiesGroup_LicenseProperty=License RepositoryPropertyPage_NoRepoSelected=There was no repository selected -RepositoryGroup_RepositoryNameFieldLabel=Repository &name: -RepositoryGroup_RepositoryURLFieldLabel=Repository &URL: +RepositoryGroup_RepositoryNameFieldLabel=&Name: +RepositoryGroup_RepositoryURLFieldLabel=&URL: +RepositoryGroup_LocalRepoBrowseButton=&Local... +RepositoryGroup_ArchivedRepoBrowseButton=&Archive... RepositoryGroup_SelectRepositoryDirectory=Select a repository root directory: -RepositoryGroup_Browse=&Browse... -RepositoryGroup_RepositoryFile=Repository file -RepositoryGroup_PropertiesLabel=Repository properties: -RepositoryGroup_NameColumnLabel=Name -RepositoryGroup_ValueColumnLabel=Value +RepositoryGroup_RepositoryFile=Repository archive RepositoryGroup_URLRequired=Must specify a URL ProfileGroup_ID=Profile &id: ProfileGroup_Browse=&Browse... @@ -80,14 +79,6 @@ ProfileGroup_InstallFolder=Install &folder: ProfileGroup_Environments=&Environments: ProfileGroup_ProfileIDRequired=Must specify a Profile ID ProfileGroup_ProfileInstallFolderRequired=Must specify an install folder -IUGroup_ID=IU &id: -IUGroup_Version=&Version: -IUGroup_Namespace=&Namespace: -IUGroup_TouchpointType=&Touchpoint type: -IUGroup_TouchpointData=Touchpoint &data: -IUGroup_RequiredCapabilities=&Required capabilities: -IUGroup_ProvidedCapabilities=&Provided capabilities: -IUGroup_IU_ID_Required=Must set an IU ID AddRepositoryDialog_Title=Add Repository AddRepositoryDialog_DuplicateURL=Duplicate URL diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/IProvisioningProperties.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/IProvisioningListener.java index 125f782d2..0497ac9be 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/IProvisioningProperties.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/IProvisioningListener.java @@ -10,18 +10,19 @@ *******************************************************************************/ package org.eclipse.equinox.p2.ui; +import org.eclipse.equinox.p2.core.eventbus.ProvisioningListener; + /** - * Temporary class + * Temporary class. A tagging listener used to distinguish listeners + * for events that aren't triggered in the core yet. * * @since 3.4 */ // TODO this should all be defined in the core // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=197052 // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=197701 -public interface IProvisioningProperties { +public interface IProvisioningListener extends ProvisioningListener { public final static String REPO_ADDED = "org.eclipse.equinox.p2.ui.property.repoadded"; //$NON-NLS-1$ - public final static String REPO_NAME = "org.eclipse.equinox.p2.ui.property.reponame"; //$NON-NLS-1$ public final static String REPO_REMOVED = "org.eclipse.equinox.p2.ui.property.reporemoved"; //$NON-NLS-1$ - }
\ No newline at end of file diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvUIActivator.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvUIActivator.java index 38c579003..e749b1380 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvUIActivator.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvUIActivator.java @@ -11,13 +11,13 @@ package org.eclipse.equinox.p2.ui; import java.net.URL; +import java.util.EventObject; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; -import org.eclipse.equinox.internal.p2.ui.ProvisioningPropertyManager; +import org.eclipse.equinox.internal.p2.ui.ProvisioningEventManager; import org.eclipse.equinox.p2.core.eventbus.ProvisioningEventBus; import org.eclipse.equinox.p2.ui.viewers.StructuredViewerProvisioningListener; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.*; import org.osgi.service.packageadmin.PackageAdmin; @@ -32,7 +32,7 @@ public class ProvUIActivator extends AbstractUIPlugin { private static PackageAdmin packageAdmin = null; private static ServiceReference packageAdminRef = null; private static ProvUIActivator plugin; - private ProvisioningPropertyManager propertyManager = new ProvisioningPropertyManager(); + private ProvisioningEventManager eventManager = new ProvisioningEventManager(); public static final String PLUGIN_ID = "org.eclipse.equinox.p2.ui"; //$NON-NLS-1$ @@ -105,7 +105,7 @@ public class ProvUIActivator extends AbstractUIPlugin { // TODO hack for unsupported repository events. // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=197052 if ((listener.getEventTypes() & StructuredViewerProvisioningListener.PROV_EVENT_REPOSITORY) == StructuredViewerProvisioningListener.PROV_EVENT_REPOSITORY) { - propertyManager.addPropertyChangeListener(listener); + eventManager.addListener(listener); } else { ServiceReference busReference = context.getServiceReference(ProvisioningEventBus.class.getName()); ProvisioningEventBus bus = (ProvisioningEventBus) context.getService(busReference); @@ -114,13 +114,13 @@ public class ProvUIActivator extends AbstractUIPlugin { } // TODO hack for triggering events from the UI. - public void notifyListeners(PropertyChangeEvent event) { - propertyManager.notifyListeners(event); + public void notifyListeners(EventObject event) { + eventManager.notifyListeners(event); } public void removeProvisioningListener(StructuredViewerProvisioningListener listener) { if ((listener.getEventTypes() & StructuredViewerProvisioningListener.PROV_EVENT_REPOSITORY) == StructuredViewerProvisioningListener.PROV_EVENT_REPOSITORY) { - propertyManager.removePropertyChangeListener(listener); + eventManager.removeListener(listener); } else { ServiceReference busReference = context.getServiceReference(ProvisioningEventBus.class.getName()); ProvisioningEventBus bus = (ProvisioningEventBus) context.getService(busReference); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddColocatedRepositoryDialog.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddColocatedRepositoryDialog.java index b631ed49b..83ddaa46e 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddColocatedRepositoryDialog.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddColocatedRepositoryDialog.java @@ -33,8 +33,8 @@ public class AddColocatedRepositoryDialog extends AddRepositoryDialog { } - protected ProvisioningOperation getOperation(URL url, String name) { - return new AddColocatedRepositoryOperation(getShell().getText(), url, name); + protected ProvisioningOperation getOperation(URL url) { + return new AddColocatedRepositoryOperation(getShell().getText(), url); } protected URL makeRepositoryURL(String urlString) { @@ -56,12 +56,4 @@ public class AddColocatedRepositoryDialog extends AddRepositoryDialog { } return newURL; } - - protected String repositoryFileName() { - return null; - } - - protected boolean repositoryIsFile() { - return false; - } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddRepositoryDialog.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddRepositoryDialog.java index 8d4452f75..877b4085d 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddRepositoryDialog.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/AddRepositoryDialog.java @@ -22,8 +22,10 @@ import org.eclipse.jface.dialogs.*; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.window.Window; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.SWT; +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.statushandlers.StatusManager; @@ -38,9 +40,12 @@ import org.eclipse.ui.statushandlers.StatusManager; */ public abstract class AddRepositoryDialog extends StatusDialog { - private Button okButton; - private IRepository[] knownRepositories; - private RepositoryGroup repoGroup; + Button okButton; + Text url; + IRepository[] knownRepositories; + static final String[] ARCHIVE_EXTENSIONS = new String[] {"*.jar;*.zip"}; //$NON-NLS-1$ + static String lastLocalLocation = null; + static String lastArchiveLocation = null; public AddRepositoryDialog(Shell parentShell, IRepository[] knownRepositories) { @@ -55,14 +60,69 @@ public abstract class AddRepositoryDialog extends StatusDialog { } protected Control createDialogArea(Composite parent) { - repoGroup = new RepositoryGroup(parent, null, new ModifyListener() { - public void modifyText(ModifyEvent event) { + Composite comp = new Composite(parent, SWT.NONE); + initializeDialogUnits(comp); + GridLayout layout = new GridLayout(); + layout.numColumns = 3; + comp.setLayout(layout); + GridData data = new GridData(); + comp.setLayoutData(data); + + Label urlLabel = new Label(comp, SWT.NONE); + urlLabel.setText(ProvUIMessages.RepositoryGroup_RepositoryURLFieldLabel); + url = new Text(comp, SWT.BORDER); + data = new GridData(GridData.FILL_HORIZONTAL); + data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH); + url.setLayoutData(data); + url.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { verifyComplete(); } - }, repositoryIsFile(), null, repositoryFileName()); - - Dialog.applyDialogFont(repoGroup.getComposite()); - return repoGroup.getComposite(); + }); + url.setText("http://"); //$NON-NLS-1$ + + // add vertical buttons for setting archive or local repos + Composite buttonParent = new Composite(comp, SWT.NONE); + layout = new GridLayout(); + layout.numColumns = 1; + layout.marginWidth = 5; + layout.marginHeight = 0; + layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); + layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); + buttonParent.setLayout(layout); + Button locationButton = new Button(buttonParent, SWT.PUSH); + locationButton.setText(ProvUIMessages.RepositoryGroup_LocalRepoBrowseButton); + locationButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.APPLICATION_MODAL); + dialog.setMessage(ProvUIMessages.RepositoryGroup_SelectRepositoryDirectory); + dialog.setFilterPath(lastLocalLocation); + String path = dialog.open(); + if (path != null) { + lastLocalLocation = path; + url.setText("file:" + path.toLowerCase()); //$NON-NLS-1$ + } + } + }); + setButtonLayoutData(locationButton); + locationButton = new Button(buttonParent, SWT.PUSH); + locationButton.setText(ProvUIMessages.RepositoryGroup_ArchivedRepoBrowseButton); + locationButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + FileDialog dialog = new FileDialog(getShell(), SWT.APPLICATION_MODAL); + dialog.setText(ProvUIMessages.RepositoryGroup_RepositoryFile); + dialog.setFilterExtensions(ARCHIVE_EXTENSIONS); + dialog.setFileName(lastArchiveLocation); + String path = dialog.open(); + if (path != null) { + lastArchiveLocation = path; + url.setText("jar:file:" + path.toLowerCase() + "!/"); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + }); + setButtonLayoutData(locationButton); + Dialog.applyDialogFont(comp); + return comp; } protected void okPressed() { @@ -75,12 +135,12 @@ public abstract class AddRepositoryDialog extends StatusDialog { } protected boolean addRepository() { - URL newURL = makeRepositoryURL(repoGroup.getURLString()); + URL newURL = makeRepositoryURL(url.getText().trim()); if (newURL == null) { return false; } - final ProvisioningOperation op = getOperation(newURL, repoGroup.getRepositoryName()); + final ProvisioningOperation op = getOperation(newURL); final IStatus[] status = new IStatus[1]; IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { @@ -107,52 +167,37 @@ public abstract class AddRepositoryDialog extends StatusDialog { } - protected abstract ProvisioningOperation getOperation(URL url, String name); + protected abstract ProvisioningOperation getOperation(URL repoURL); protected abstract URL makeRepositoryURL(String urlString); - protected abstract boolean repositoryIsFile(); - - protected abstract String repositoryFileName(); - void verifyComplete() { if (okButton == null) { return; } - IStatus status = repoGroup.verify(); - if (!status.isOK()) { - okButton.setEnabled(false); - updateStatus(status); - return; - } - if (isDuplicate()) { - return; - } - okButton.setEnabled(true); - updateStatus(new Status(IStatus.OK, ProvUIActivator.PLUGIN_ID, IStatus.OK, "", null)); //$NON-NLS-1$ - - } - - protected boolean isDuplicate() { - String urlText = repoGroup.getURLString(); - for (int i = 0; i < knownRepositories.length; i++) { - URL repURL = knownRepositories[i].getLocation(); - if (repURL != null && repURL.equals(urlText)) { - setOkEnablement(false); - this.updateStatus(new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, IStatus.OK, ProvUIMessages.AddRepositoryDialog_DuplicateURL, null)); - return true; + String urlText = url.getText().trim(); + IStatus status = Status.OK_STATUS; + if (urlText.length() == 0) { + status = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, 0, ProvUIMessages.RepositoryGroup_URLRequired, null); + } else { + for (int i = 0; i < knownRepositories.length; i++) { + URL repURL = knownRepositories[i].getLocation(); + if (repURL != null && repURL.equals(urlText)) { + status = new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, IStatus.OK, ProvUIMessages.AddRepositoryDialog_DuplicateURL, null); + break; + } } } - return false; + setOkEnablement(status.isOK()); + updateStatus(status); } protected void updateButtonsEnableState(IStatus status) { setOkEnablement(!status.matches(IStatus.ERROR)); } - protected void setOkEnablement(boolean enable) { + private void setOkEnablement(boolean enable) { if (okButton != null && !okButton.isDisposed()) okButton.setEnabled(enable); } - } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/IUImplementationGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/IUImplementationGroup.java deleted file mode 100644 index 4c1cc990f..000000000 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/IUImplementationGroup.java +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.equinox.p2.ui.dialogs; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.p2.metadata.*; -import org.eclipse.equinox.p2.ui.ProvUIActivator; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.graphics.FontMetrics; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.*; -import org.osgi.framework.Version; - -/** - * An IUImplementationGroup is a reusable UI component that displays and edits the - * implementation-oriented properties of an IU. It can be used in - * different dialogs that manipulate or define IU's. - * - * @since 3.4 - */ -public class IUImplementationGroup extends IUGroup { - - private Text id; - private Text version; - private Text namespace; - private Text touchpointType; - private List touchpointData; - private List requiredCapabilities; - private List providedCapabilities; - - public IUImplementationGroup(final Composite parent, IInstallableUnit iu, ModifyListener listener) { - super(parent, iu, listener); - } - - protected Composite createGroupComposite(Composite parent, ModifyListener listener) { - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - composite.setLayout(layout); - GridData data = new GridData(); - data.widthHint = 350; - composite.setLayoutData(data); - - // Grid data for text controls - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - - // Grid data for controls spanning both columns - GridData gd2 = new GridData(GridData.FILL_HORIZONTAL); - gd2.horizontalSpan = 2; - - // Grid data for lists grabbing vertical space - GridData gdList = new GridData(GridData.FILL_HORIZONTAL); - GC gc = new GC(parent); - gc.setFont(JFaceResources.getDialogFont()); - FontMetrics fontMetrics = gc.getFontMetrics(); - gc.dispose(); - gdList.horizontalSpan = 2; - gdList.heightHint = Dialog.convertHeightInCharsToPixels(fontMetrics, 5); - - boolean editable = iuElement == null && listener != null; - - Label label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_ID); - id = new Text(composite, SWT.BORDER); - id.setLayoutData(gd); - if (editable) { - id.addModifyListener(listener); - } else { - id.setEditable(false); - } - - label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_Version); - version = new Text(composite, SWT.BORDER); - version.setLayoutData(gd); - - label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_Namespace); - namespace = new Text(composite, SWT.BORDER); - namespace.setLayoutData(gd); - - label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_TouchpointType); - touchpointType = new Text(composite, SWT.BORDER | SWT.READ_ONLY); - touchpointType.setLayoutData(gd); - - label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_TouchpointData); - label.setLayoutData(gd2); - touchpointData = new List(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - touchpointData.setLayoutData(gdList); - - label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_RequiredCapabilities); - label.setLayoutData(gd2); - requiredCapabilities = new List(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - requiredCapabilities.setLayoutData(gdList); - - label = new Label(composite, SWT.NONE); - label.setText(ProvUIMessages.IUGroup_ProvidedCapabilities); - label.setLayoutData(gd2); - providedCapabilities = new List(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - providedCapabilities.setLayoutData(gdList); - - if (editable) { - id.addModifyListener(listener); - version.addModifyListener(listener); - namespace.addModifyListener(listener); - touchpointType.addModifyListener(listener); - } else { - id.setEditable(false); - version.setEditable(false); - namespace.setEditable(false); - touchpointType.setEditable(false); - } - initializeFields(); - return composite; - } - - private void initializeFields() { - IInstallableUnit iu = getIU(); - if (iu == null) { - return; - } - id.setText(iu.getId()); - version.setText(iu.getVersion().toString()); - - String value = iu.getProperty(IInstallableUnit.IU_NAMESPACE); - if (value != null) { - namespace.setText(value); - } - TouchpointType type = iu.getTouchpointType(); - if (type != null) { - touchpointType.setText(type.getId()); - } - TouchpointData[] data = iu.getTouchpointData(); - String[] items = new String[data.length]; - for (int i = 0; i < data.length; i++) { - items[i] = data[i].toString(); - } - touchpointData.setItems(items); - - RequiredCapability[] req = iu.getRequiredCapabilities(); - items = new String[req.length]; - for (int i = 0; i < req.length; i++) { - items[i] = req[i].toString(); - } - requiredCapabilities.setItems(items); - ProvidedCapability[] prov = iu.getProvidedCapabilities(); - items = new String[prov.length]; - for (int i = 0; i < prov.length; i++) { - items[i] = prov[i].toString(); - } - providedCapabilities.setItems(items); - } - - public void updateIU() { - if (iuElement == null) { - iuElement = new InstallableUnit(); - } - // If it's not an InstallableUnit it is not editable - if (iuElement instanceof InstallableUnit) { - InstallableUnit unit = (InstallableUnit) iuElement; - unit.setId(id.getText().trim()); - unit.setVersion(new Version(version.getText().trim())); - unit.setProperty(IInstallableUnit.IU_NAMESPACE, namespace.getText().trim()); - // TODO this is bogus because we don't let user provide a touchpoint - // type version - unit.setTouchpointType(new TouchpointType(touchpointType.getText().trim(), new Version("1.0.0"))); //$NON-NLS-1$ - } - } - - /** - * Return a status indicating the validity of the profile info - * - * @return a status indicating the validity of the profile info - */ - public IStatus verify() { - if (id.getText().trim().length() == 0) { - return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, 0, ProvUIMessages.IUGroup_IU_ID_Required, null); - } - - // TODO what kind of validation do we perform for other properties? - return new Status(IStatus.OK, ProvUIActivator.PLUGIN_ID, IStatus.OK, "", null); //$NON-NLS-1$ - - } -} diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/IUImplementationPropertyPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/IUImplementationPropertyPage.java deleted file mode 100644 index 19283aa7f..000000000 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/IUImplementationPropertyPage.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.equinox.p2.ui.dialogs; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.p2.metadata.InstallableUnit; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.dialogs.PropertyPage; - -/** - * PropertyPage that shows an IU's properties - * - * @since 3.4 - */ -public class IUImplementationPropertyPage extends PropertyPage { - - private IUImplementationGroup iuGroup; - - protected Control createContents(Composite parent) { - InstallableUnit iu = (InstallableUnit) getElement().getAdapter(InstallableUnit.class); - if (iu == null) { - Label label = new Label(parent, SWT.DEFAULT); - label.setText(ProvUIMessages.IUPropertyPage_NoIUSelected); - } - iuGroup = new IUImplementationGroup(parent, iu, new ModifyListener() { - public void modifyText(ModifyEvent event) { - verifyComplete(); - } - }); - Dialog.applyDialogFont(iuGroup.getComposite()); - verifyComplete(); - return iuGroup.getComposite(); - } - - public boolean performOk() { - return true; - } - - void verifyComplete() { - if (iuGroup == null) { - return; - } - IStatus status = iuGroup.verify(); - setValid(status.isOK()); - } -} diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryGroup.java index 2a989a4be..f5de1edbe 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryGroup.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryGroup.java @@ -10,13 +10,12 @@ *******************************************************************************/ package org.eclipse.equinox.p2.ui.dialogs; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.p2.core.repository.IRepository; import org.eclipse.equinox.p2.ui.ProvUIActivator; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; +import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; @@ -30,21 +29,21 @@ import org.eclipse.swt.widgets.*; */ public class RepositoryGroup { - private static final String EXTENSION = "*.xml"; //$NON-NLS-1$ private Composite composite; Text name; Text url; IRepository repository; - public RepositoryGroup(Composite parent, IRepository repository, ModifyListener listener, boolean chooseFile, String dirPath, String fileName) { + public RepositoryGroup(Composite parent, IRepository repository, ModifyListener listener) { + Assert.isNotNull(repository); this.repository = repository; - createGroupComposite(parent, listener, chooseFile, dirPath, fileName); + createGroupComposite(parent, listener); } - protected Composite createGroupComposite(final Composite parent, ModifyListener listener, final boolean chooseFile, final String dirPath, final String fileName) { + protected Composite createGroupComposite(final Composite parent, ModifyListener listener) { Composite comp = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); - layout.numColumns = 3; + layout.numColumns = 2; comp.setLayout(layout); GridData data = new GridData(); data.widthHint = 350; @@ -55,55 +54,14 @@ public class RepositoryGroup { name = new Text(comp, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); - data.horizontalSpan = 2; name.setLayoutData(data); - name.addModifyListener(listener); - boolean readOnlyInfo = (repository != null && !repository.isModifiable()); - if (readOnlyInfo) { - name.setEditable(false); - } + name.setEditable(repository.isModifiable()); Label urlLabel = new Label(comp, SWT.NONE); urlLabel.setText(ProvUIMessages.RepositoryGroup_RepositoryURLFieldLabel); - url = new Text(comp, SWT.BORDER); url.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - if (repository == null) { - data = new GridData(GridData.FILL_HORIZONTAL); - url.setLayoutData(data); - url.addModifyListener(listener); - - // add a button for setting a local repository - Button locationButton = new Button(comp, SWT.PUSH); - locationButton.setText(ProvUIMessages.RepositoryGroup_Browse); - locationButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - String path; - if (chooseFile) { - FileDialog dialog = new FileDialog(parent.getShell(), SWT.APPLICATION_MODAL); - dialog.setText(ProvUIMessages.RepositoryGroup_RepositoryFile); - dialog.setFileName(fileName); - dialog.setFilterPath(dirPath); - dialog.setFilterExtensions(new String[] {EXTENSION}); - path = dialog.open(); - } else { - DirectoryDialog dialog = new DirectoryDialog(parent.getShell(), SWT.APPLICATION_MODAL); - dialog.setMessage(ProvUIMessages.RepositoryGroup_SelectRepositoryDirectory); - dialog.setFilterPath(dirPath); - path = dialog.open(); - } - if (path != null) { - url.setText("file:" + path.toLowerCase()); //$NON-NLS-1$ - } - } - }); - - } else { - data = new GridData(GridData.FILL_HORIZONTAL); - data.horizontalSpan = 2; - url.setLayoutData(data); - url.setEditable(false); - } + url.setEditable(repository.isModifiable()); initializeFields(); return comp; @@ -112,7 +70,6 @@ public class RepositoryGroup { private void initializeFields() { if (repository == null) { url.setText("http://"); //$NON-NLS-1$ - name.setText(""); //$NON-NLS-1$ } else { url.setText(repository.getLocation().toExternalForm()); name.setText(repository.getName()); @@ -123,7 +80,6 @@ public class RepositoryGroup { if (url.getText().trim().length() == 0) { return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, 0, ProvUIMessages.RepositoryGroup_URLRequired, null); } - // blank name is ok return new Status(IStatus.OK, ProvUIActivator.PLUGIN_ID, IStatus.OK, "", null); //$NON-NLS-1$ } @@ -137,16 +93,11 @@ public class RepositoryGroup { return url.getText().trim(); } - /** - * Get the repository name string as shown in the dialog. - * - * @return the repository name. - */ - public String getRepositoryName() { - return name.getText().trim(); - } - public Composite getComposite() { return composite; } + + protected IRepository getRepository() { + return repository; + } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryImplementationGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryImplementationGroup.java deleted file mode 100644 index d6fb366b5..000000000 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryImplementationGroup.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.equinox.p2.ui.dialogs; - -import java.util.Map; -import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; -import org.eclipse.equinox.p2.core.repository.IRepository; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.*; - -/** - * A RepositoryGroup is a reusable UI component that allows repository - * attributes to be displayed and edited in different UI dialogs. - * - * @since 3.4 - * - */ -public class RepositoryImplementationGroup extends RepositoryGroup { - - Table propertiesTable; - - public RepositoryImplementationGroup(final Composite parent, IRepository repository, ModifyListener listener, final boolean chooseFile, final String dirPath, final String fileName) { - super(parent, repository, listener, chooseFile, dirPath, fileName); - } - - protected Composite createGroupComposite(final Composite parent, ModifyListener listener, final boolean chooseFile, final String dirPath, final String fileName) { - Composite comp = super.createGroupComposite(parent, listener, chooseFile, dirPath, fileName); - Label propertiesLabel = new Label(comp, SWT.NONE); - propertiesLabel.setText(ProvUIMessages.RepositoryGroup_PropertiesLabel); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.horizontalSpan = 3; - propertiesLabel.setLayoutData(data); - - propertiesTable = new Table(comp, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); - data = new GridData(GridData.FILL_BOTH); - data.horizontalSpan = 3; - data.grabExcessVerticalSpace = true; - propertiesTable.setLayoutData(data); - propertiesTable.setHeaderVisible(true); - TableColumn nameColumn = new TableColumn(propertiesTable, SWT.NONE); - nameColumn.setText(ProvUIMessages.RepositoryGroup_NameColumnLabel); - TableColumn valueColumn = new TableColumn(propertiesTable, SWT.NONE); - valueColumn.setText(ProvUIMessages.RepositoryGroup_ValueColumnLabel); - - initializeTable(); - - nameColumn.pack(); - valueColumn.pack(); - return comp; - } - - private void initializeTable() { - if (repository != null) { - Map repoProperties = repository.getProperties(); - if (repoProperties != null) { - String[] propNames = (String[]) repoProperties.keySet().toArray(new String[repoProperties.size()]); - for (int i = 0; i < propNames.length; i++) { - TableItem item = new TableItem(propertiesTable, SWT.NULL); - item.setText(new String[] {propNames[i], repoProperties.get(propNames[i]).toString()}); - } - } - } - } -} diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryImplementationPropertyPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryImplementationPropertyPage.java deleted file mode 100644 index a949c3685..000000000 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryImplementationPropertyPage.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.equinox.p2.ui.dialogs; - -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.widgets.Composite; - -/** - * PropertyPage that shows a repository's properties - * - * @since 3.4 - */ -public class RepositoryImplementationPropertyPage extends RepositoryPropertyPage { - - protected RepositoryGroup createRepositoryGroup(Composite parent) { - return new RepositoryImplementationGroup(parent, repository, new ModifyListener() { - public void modifyText(ModifyEvent event) { - verifyComplete(); - } - }, false, null, null); // these don't matter since repo already - } -} diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryPropertyPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryPropertyPage.java index 0e782b459..efa775282 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryPropertyPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/RepositoryPropertyPage.java @@ -13,7 +13,6 @@ package org.eclipse.equinox.p2.ui.dialogs; import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.p2.core.repository.IRepository; -import org.eclipse.equinox.p2.ui.operations.ProvisioningUtil; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; @@ -51,21 +50,10 @@ public class RepositoryPropertyPage extends PropertyPage { public void modifyText(ModifyEvent event) { verifyComplete(); } - }, false, null, null); // these don't matter since repo already + }); } - public boolean performOk() { - String nameValue = repoGroup.getRepositoryName(); - if (repository != null && nameValue != null && !nameValue.equals(repository.getName())) { - // TODO HACK - if I could get event notification from core, I - // wouldn't have to call the - // util class - ProvisioningUtil.setRepositoryName(repository, nameValue); - } - return true; - } - - void verifyComplete() { + protected void verifyComplete() { if (repoGroup == null) { return; } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/UpdateAndInstallGroup.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/UpdateAndInstallGroup.java index db9eefcff..b23dbc562 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/UpdateAndInstallGroup.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/dialogs/UpdateAndInstallGroup.java @@ -258,14 +258,6 @@ public class UpdateAndInstallGroup { uninstallButton.setData(BUTTONACTION, new UninstallAction(installedIUViewer, profile, null, parent.getShell())); updateButton = createVerticalButton(composite, ProvUIMessages.UpdateIUCommandLabel, false); updateButton.setData(BUTTONACTION, new UpdateAction(installedIUViewer, profile, null, parent.getShell())); - if (repositoryManipulator != null) { - Button repoButton = createVerticalButton(composite, repositoryManipulator.getLabel(), false); - repoButton.setData(BUTTONACTION, new Action() { - public void runWithEvent(Event event) { - repositoryManipulator.manipulateRepositories(getControl().getShell()); - } - }); - } if (profileChooser != null) { Button profileButton = createVerticalButton(composite, profileChooser.getLabel(), false); profileButton.setData(BUTTONACTION, new Action() { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddArtifactRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddArtifactRepositoryOperation.java index c84a292f0..721001cef 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddArtifactRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddArtifactRepositoryOperation.java @@ -24,8 +24,8 @@ public class AddArtifactRepositoryOperation extends RepositoryOperation { boolean added = false; - public AddArtifactRepositoryOperation(String label, URL url, String name) { - super(label, new URL[] {url}, new String[] {name}); + public AddArtifactRepositoryOperation(String label, URL url) { + super(label, new URL[] {url}); } protected IStatus doExecute(IProgressMonitor monitor, IAdaptable uiInfo) throws ProvisionException { @@ -34,9 +34,6 @@ public class AddArtifactRepositoryOperation extends RepositoryOperation { if (repo == null) { return failureStatus(); } - if (names[i] != null) { - ProvisioningUtil.setRepositoryName(repo, names[i]); - } } added = true; return okStatus(); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddColocatedRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddColocatedRepositoryOperation.java index 1c5f4d243..eeec342ce 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddColocatedRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddColocatedRepositoryOperation.java @@ -26,8 +26,8 @@ public class AddColocatedRepositoryOperation extends RepositoryOperation { boolean added = false; - public AddColocatedRepositoryOperation(String label, URL url, String name) { - super(label, new URL[] {url}, new String[] {name}); + public AddColocatedRepositoryOperation(String label, URL url) { + super(label, new URL[] {url}); } protected IStatus doExecute(IProgressMonitor monitor, IAdaptable uiInfo) throws ProvisionException { @@ -37,9 +37,6 @@ public class AddColocatedRepositoryOperation extends RepositoryOperation { if (repo == null) { return failureStatus(); } - if (names[i] != null) { - ProvisioningUtil.setRepositoryName(repo, names[i]); - } repo = ProvisioningUtil.addArtifactRepository(ColocatedRepositoryUtil.makeArtifactRepositoryURL(urls[i]), monitor); if (repo == null) { // remove the metadata repo we just added diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddMetadataRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddMetadataRepositoryOperation.java index 745ea29a0..9f46428ff 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddMetadataRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/AddMetadataRepositoryOperation.java @@ -24,8 +24,8 @@ public class AddMetadataRepositoryOperation extends RepositoryOperation { boolean added = false; - public AddMetadataRepositoryOperation(String label, URL url, String name) { - super(label, new URL[] {url}, new String[] {name}); + public AddMetadataRepositoryOperation(String label, URL url) { + super(label, new URL[] {url}); } protected IStatus doExecute(IProgressMonitor monitor, IAdaptable uiInfo) throws ProvisionException { @@ -34,9 +34,6 @@ public class AddMetadataRepositoryOperation extends RepositoryOperation { if (repo == null) { return failureStatus(); } - if (names[i] != null) { - ProvisioningUtil.setRepositoryName(repo, names[i]); - } } added = true; return okStatus(); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/ProvisioningUtil.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/ProvisioningUtil.java index b59d73c19..033f6a86b 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/ProvisioningUtil.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/ProvisioningUtil.java @@ -12,15 +12,13 @@ package org.eclipse.equinox.p2.ui.operations; import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; +import java.util.*; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.p2.artifact.repository.IArtifactRepository; import org.eclipse.equinox.p2.artifact.repository.IArtifactRepositoryManager; import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.core.helpers.ServiceHelper; -import org.eclipse.equinox.p2.core.repository.IRepository; import org.eclipse.equinox.p2.director.IPlanner; import org.eclipse.equinox.p2.director.ProvisioningPlan; import org.eclipse.equinox.p2.engine.*; @@ -31,7 +29,7 @@ import org.eclipse.equinox.p2.metadata.repository.IMetadataRepository; import org.eclipse.equinox.p2.metadata.repository.IMetadataRepositoryManager; import org.eclipse.equinox.p2.query.CompoundIterator; import org.eclipse.equinox.p2.query.Query; -import org.eclipse.equinox.p2.ui.IProvisioningProperties; +import org.eclipse.equinox.p2.ui.IProvisioningListener; import org.eclipse.equinox.p2.ui.ProvUIActivator; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.osgi.service.resolver.VersionRange; @@ -60,22 +58,26 @@ public class ProvisioningUtil { IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IMetadataRepositoryManager.class.getName()); if (manager == null) throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); - IMetadataRepository repo = null; - repo = manager.loadRepository(location, monitor); + IMetadataRepository repo = manager.loadRepository(location, monitor); if (repo == null) { throw new ProvisionException(NLS.bind(ProvUIMessages.ProvisioningUtil_AddRepositoryFailure, location.toExternalForm())); } - PropertyChangeEvent event = new PropertyChangeEvent(repo, IProvisioningProperties.REPO_ADDED, null, null); + EventObject event = new EventObject(IProvisioningListener.REPO_ADDED); ProvUIActivator.getDefault().notifyListeners(event); return repo; } - public static IMetadataRepository getMetadataRepository(URL location, IProgressMonitor monitor) throws ProvisionException { + public static IMetadataRepository createMetadataRepository(String name, String type, URL location, IProgressMonitor monitor) throws ProvisionException { IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IMetadataRepositoryManager.class.getName()); - if (manager == null) { + if (manager == null) throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); + IMetadataRepository repo = manager.createRepository(location, name, type); + if (repo == null) { + throw new ProvisionException(NLS.bind(ProvUIMessages.ProvisioningUtil_CreateRepositoryFailure, location.toExternalForm())); } - return manager.getRepository(location); + EventObject event = new EventObject(IProvisioningListener.REPO_ADDED); + ProvUIActivator.getDefault().notifyListeners(event); + return repo; } public static void removeMetadataRepository(URL location, IProgressMonitor monitor) throws ProvisionException { @@ -86,7 +88,7 @@ public class ProvisioningUtil { IMetadataRepository repo = manager.getRepository(location); if (repo != null) manager.removeRepository(repo); - PropertyChangeEvent event = new PropertyChangeEvent(repo, IProvisioningProperties.REPO_REMOVED, null, null); + PropertyChangeEvent event = new PropertyChangeEvent(repo, IProvisioningListener.REPO_REMOVED, null, null); ProvUIActivator.getDefault().notifyListeners(event); } @@ -96,16 +98,29 @@ public class ProvisioningUtil { if (manager == null) { throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); } - // TODO need to get rid of this string constant. see bug #196862 - String repositoryName = location + " - artifacts"; //$NON-NLS-1$ - IArtifactRepository repository = manager.createRepository(location, repositoryName, "org.eclipse.equinox.p2.artifact.repository.simpleRepository"); //$NON-NLS-1$ - if (repository == null) { + IArtifactRepository repo = manager.loadRepository(location, monitor); + if (repo == null) { throw new ProvisionException(NLS.bind(ProvUIMessages.ProvisioningUtil_AddRepositoryFailure, location)); } - PropertyChangeEvent event = new PropertyChangeEvent(repository, IProvisioningProperties.REPO_ADDED, null, null); + EventObject event = new EventObject(IProvisioningListener.REPO_ADDED); ProvUIActivator.getDefault().notifyListeners(event); - return repository; + return repo; + } + + public static IArtifactRepository createArtifactRepository(String name, String type, URL location, IProgressMonitor monitor) throws ProvisionException { + IArtifactRepositoryManager manager = (IArtifactRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IArtifactRepositoryManager.class.getName()); + if (manager == null) { + throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); + } + IArtifactRepository repo = manager.createRepository(location, name, type); + if (repo == null) { + throw new ProvisionException(NLS.bind(ProvUIMessages.ProvisioningUtil_CreateRepositoryFailure, location)); + } + EventObject event = new EventObject(IProvisioningListener.REPO_ADDED); + ProvUIActivator.getDefault().notifyListeners(event); + + return repo; } public static void removeArtifactRepository(URL location, IProgressMonitor monitor) throws ProvisionException { @@ -118,7 +133,7 @@ public class ProvisioningUtil { IArtifactRepository repo = repos[i]; if (repo.getLocation().equals(location)) { manager.removeRepository(repo); - PropertyChangeEvent event = new PropertyChangeEvent(repo, IProvisioningProperties.REPO_REMOVED, null, null); + PropertyChangeEvent event = new PropertyChangeEvent(repo, IProvisioningListener.REPO_REMOVED, null, null); ProvUIActivator.getDefault().notifyListeners(event); return; @@ -137,17 +152,6 @@ public class ProvisioningUtil { return new IArtifactRepository[0]; } - public static IArtifactRepository getArtifactRepository(URL repoURL, IProgressMonitor monitor) throws ProvisionException { - IArtifactRepository[] repositories = getArtifactRepositories(monitor); - if (repositories == null) - return null; - for (int i = 0; i < repositories.length; i++) { - if (repoURL.equals(repositories[i].getLocation())) - return repositories[i]; - } - return null; - } - public static void addProfile(Profile profile, IProgressMonitor monitor) throws ProvisionException { IProfileRegistry profileRegistry = (IProfileRegistry) ServiceHelper.getService(ProvUIActivator.getContext(), IProfileRegistry.class.getName()); if (profileRegistry == null) { @@ -308,19 +312,6 @@ public class ProvisioningUtil { return null; } - // TODO This method is only in the util class so that I can generate an - // event. If the setName API generated this event, callers could just do - // it directly (and I could make this class/package truly internal....) - public static IStatus setRepositoryName(IRepository repository, String name) { - if (repository.isModifiable()) { - repository.setName(name); - PropertyChangeEvent event = new PropertyChangeEvent(repository, IProvisioningProperties.REPO_NAME, null, name); - ProvUIActivator.getDefault().notifyListeners(event); - return Status.OK_STATUS; - } - return error(ProvUIMessages.ProvisioningUtil_RepoNotWritable); - } - public static IStatus performInstall(ProvisioningPlan plan, Profile profile, IInstallableUnit[] installRoots, IProgressMonitor monitor) throws ProvisionException { IStatus engineResult = performProvisioningPlan(plan, profile, monitor); if (engineResult.isOK()) { @@ -335,8 +326,12 @@ public class ProvisioningUtil { return getEngine().perform(profile, new DefaultPhaseSet(), plan.getOperands(), monitor); } - private static IStatus error(String message) { - return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, message); + private static IMetadataRepository getMetadataRepository(URL location, IProgressMonitor monitor) throws ProvisionException { + IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IMetadataRepositoryManager.class.getName()); + if (manager == null) { + throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); + } + return manager.getRepository(location); } private static Engine getEngine() throws ProvisionException { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveArtifactRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveArtifactRepositoryOperation.java index d89fce0d2..8e216fd5c 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveArtifactRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveArtifactRepositoryOperation.java @@ -25,10 +25,9 @@ public class RemoveArtifactRepositoryOperation extends RepositoryOperation { private boolean removed = false; public RemoveArtifactRepositoryOperation(String label, IArtifactRepository[] repos) { - super(label, new URL[repos.length], new String[repos.length]); + super(label, new URL[repos.length]); for (int i = 0; i < repos.length; i++) { urls[i] = repos[i].getLocation(); - names[i] = repos[i].getName(); } } @@ -64,9 +63,6 @@ public class RemoveArtifactRepositoryOperation extends RepositoryOperation { if (repo == null) { return failureStatus(); } - if (names[i] != null) { - ProvisioningUtil.setRepositoryName(repo, names[i]); - } } removed = false; return okStatus(); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveColocatedRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveColocatedRepositoryOperation.java index 39d44ea98..01a01b677 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveColocatedRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveColocatedRepositoryOperation.java @@ -27,10 +27,9 @@ public class RemoveColocatedRepositoryOperation extends RepositoryOperation { private boolean removed = false; public RemoveColocatedRepositoryOperation(String label, IMetadataRepository[] repos) { - super(label, new URL[repos.length], new String[repos.length]); + super(label, new URL[repos.length]); for (int i = 0; i < repos.length; i++) { urls[i] = ColocatedRepositoryUtil.makeColocatedRepositoryURL(repos[i].getLocation()); - names[i] = repos[i].getName(); } } @@ -68,10 +67,6 @@ public class RemoveColocatedRepositoryOperation extends RepositoryOperation { if (repo == null) { return failureStatus(); } - if (names[i] != null) { - ProvisioningUtil.setRepositoryName(repo, names[i]); - } - repo = ProvisioningUtil.addArtifactRepository(ColocatedRepositoryUtil.makeArtifactRepositoryURL(urls[i]), monitor); if (repo == null) { // remove the metadata repo we just added diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveMetadataRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveMetadataRepositoryOperation.java index cae6d91e7..9b9bda0ad 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveMetadataRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RemoveMetadataRepositoryOperation.java @@ -25,10 +25,9 @@ public class RemoveMetadataRepositoryOperation extends RepositoryOperation { private boolean removed = false; public RemoveMetadataRepositoryOperation(String label, IMetadataRepository[] repos) { - super(label, new URL[repos.length], new String[repos.length]); + super(label, new URL[repos.length]); for (int i = 0; i < repos.length; i++) { urls[i] = repos[i].getLocation(); - names[i] = repos[i].getName(); } } @@ -64,9 +63,6 @@ public class RemoveMetadataRepositoryOperation extends RepositoryOperation { if (repo == null) { return failureStatus(); } - if (names[i] != null) { - ProvisioningUtil.setRepositoryName(repo, names[i]); - } } removed = false; return okStatus(); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RepositoryOperation.java index 109a80c01..c4e460ccb 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/operations/RepositoryOperation.java @@ -20,12 +20,10 @@ import java.net.URL; abstract class RepositoryOperation extends UndoableProvisioningOperation { URL[] urls; - String[] names; - RepositoryOperation(String label, URL[] urls, String[] names) { + RepositoryOperation(String label, URL[] urls) { super(label); this.urls = urls; - this.names = names; } public boolean canExecute() { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/viewers/StructuredViewerProvisioningListener.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/viewers/StructuredViewerProvisioningListener.java index b9f02b168..0cb7d2390 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/viewers/StructuredViewerProvisioningListener.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/viewers/StructuredViewerProvisioningListener.java @@ -14,9 +14,7 @@ package org.eclipse.equinox.p2.ui.viewers; import java.util.EventObject; import org.eclipse.equinox.p2.core.eventbus.SynchronousProvisioningListener; import org.eclipse.equinox.p2.engine.*; -import org.eclipse.equinox.p2.ui.IProvisioningProperties; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.equinox.p2.ui.IProvisioningListener; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.swt.widgets.Display; @@ -26,7 +24,7 @@ import org.eclipse.swt.widgets.Display; * * @since 3.4 */ -public class StructuredViewerProvisioningListener implements SynchronousProvisioningListener, IPropertyChangeListener { +public class StructuredViewerProvisioningListener implements SynchronousProvisioningListener, IProvisioningListener { // TODO this should be replaced with actual event topic ids from the event API once they are defined // TODO the IPropertyChangeListener implementation should also disappear once repo events are supported @@ -65,20 +63,9 @@ public class StructuredViewerProvisioningListener implements SynchronousProvisio viewer.refresh(); } }); - } - } - - public void propertyChange(final PropertyChangeEvent event) { - // Currently we only support repo events - if ((eventTypes & PROV_EVENT_REPOSITORY) == PROV_EVENT_REPOSITORY) { - String property = event.getProperty(); - if (property.equals(IProvisioningProperties.REPO_NAME)) { - display.asyncExec(new Runnable() { - public void run() { - viewer.update(event.getSource(), null); - } - }); - } else if (property.equals(IProvisioningProperties.REPO_ADDED) || (property.equals(IProvisioningProperties.REPO_REMOVED))) { + } else if ((o.getSource() instanceof String) && (eventTypes & PROV_EVENT_REPOSITORY) == PROV_EVENT_REPOSITORY) { + String name = (String) o.getSource(); + if (name.equals(IProvisioningListener.REPO_ADDED) || (name.equals(IProvisioningListener.REPO_REMOVED))) { display.asyncExec(new Runnable() { public void run() { viewer.refresh(); |