diff options
18 files changed, 308 insertions, 81 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddArtifactRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddArtifactRepositoryOperation.java index cc0b4a4eb..3550215ef 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddArtifactRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddArtifactRepositoryOperation.java @@ -10,19 +10,19 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.admin; -import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil; -import org.eclipse.equinox.internal.provisional.p2.ui.operations.RepositoryOperation; - import java.net.URI; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.AddRepositoryOperation; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil; /** - * Operation which adds an artifact repository given its URL. + * Operation which adds an artifact repository given its URI. * * @since 3.4 */ -public class AddArtifactRepositoryOperation extends RepositoryOperation { +public class AddArtifactRepositoryOperation extends AddRepositoryOperation { public AddArtifactRepositoryOperation(String label, URI location) { super(label, new URI[] {location}); @@ -36,4 +36,10 @@ public class AddArtifactRepositoryOperation extends RepositoryOperation { } return okStatus(); } + + protected void setNickname(URI location, String nickname) throws ProvisionException { + for (int i = 0; i < locations.length; i++) { + ProvisioningUtil.setArtifactRepositoryProperty(location, IRepository.PROP_NICKNAME, nickname); + } + } } diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddMetadataRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddMetadataRepositoryOperation.java index 5e1f34008..3d41e5e38 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddMetadataRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddMetadataRepositoryOperation.java @@ -10,19 +10,19 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.ui.admin; -import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil; -import org.eclipse.equinox.internal.provisional.p2.ui.operations.RepositoryOperation; - import java.net.URI; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.AddRepositoryOperation; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil; /** * Operation that adds a metadata repository given its URL. * * @since 3.4 */ -public class AddMetadataRepositoryOperation extends RepositoryOperation { +public class AddMetadataRepositoryOperation extends AddRepositoryOperation { public AddMetadataRepositoryOperation(String label, URI location) { super(label, new URI[] {location}); @@ -36,4 +36,10 @@ public class AddMetadataRepositoryOperation extends RepositoryOperation { } return okStatus(); } + + protected void setNickname(URI location, String nickname) throws ProvisionException { + for (int i = 0; i < locations.length; i++) { + ProvisioningUtil.setMetadataRepositoryProperty(location, IRepository.PROP_NICKNAME, nickname); + } + } } diff --git a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java index 1fc376ef7..f8f1cafb0 100644 --- a/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java +++ b/bundles/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java @@ -12,6 +12,7 @@ package org.eclipse.equinox.internal.p2.ui.admin.dialogs; import java.util.Map; import org.eclipse.equinox.internal.p2.ui.admin.ProvAdminUIMessages; +import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; import org.eclipse.equinox.internal.provisional.p2.ui.model.IRepositoryElement; import org.eclipse.swt.SWT; @@ -29,7 +30,8 @@ public class RepositoryImplementationPropertyPage extends PropertyPage { private IRepositoryElement repositoryElement; private Composite composite; private Text name; - private Text url; + private Text location; + private Text nickname; private Text description; private Table propertiesTable; @@ -52,14 +54,19 @@ public class RepositoryImplementationPropertyPage extends PropertyPage { Label urlLabel = new Label(composite, SWT.NONE); urlLabel.setText(ProvAdminUIMessages.RepositoryImplementationPropertyPage_LocationLabel); - url = new Text(composite, SWT.WRAP | SWT.READ_ONLY); - url.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + location = new Text(composite, SWT.WRAP | SWT.READ_ONLY); + location.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label nameLabel = new Label(composite, SWT.NONE); nameLabel.setText(ProvAdminUIMessages.RepositoryImplementationPropertyPage_NameLabel); name = new Text(composite, SWT.WRAP | SWT.READ_ONLY); name.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + Label nicknameLabel = new Label(composite, SWT.NONE); + nicknameLabel.setText(ProvAdminUIMessages.RepositoryImplementationPropertyPage_NicknameLabel); + nickname = new Text(composite, SWT.WRAP | SWT.READ_ONLY); + nickname.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + Label descriptionLabel = new Label(composite, SWT.NONE); descriptionLabel.setText(ProvAdminUIMessages.RepositoryImplementationPropertyPage_DescriptionLabel); data = new GridData(); @@ -87,6 +94,7 @@ public class RepositoryImplementationPropertyPage extends PropertyPage { TableColumn valueColumn = new TableColumn(propertiesTable, SWT.NONE); valueColumn.setText(ProvAdminUIMessages.RepositoryImplementationPropertyPage_ValueColumnLabel); + initializeFields(); initializeTable(); nameColumn.pack(); @@ -96,6 +104,26 @@ public class RepositoryImplementationPropertyPage extends PropertyPage { } + private void initializeFields() { + IRepositoryElement element = getRepositoryElement(); + if (element != null) { + IRepository repo = getRepositoryElement().getRepository(null); + location.setText(repo.getLocation().toString()); + String value = repo.getName(); + if (value != null) + name.setText(value); + value = repo.getDescription(); + if (value != null) + description.setText(value); + String nick = element.getName(); + // Kind of a hack, to avoid figuring out which manager to go to get the + // nickname. Instead we are just assuming that any name stored in the element that + // is not location or provider name is the nickname. + if (!nick.equals(value) && !nick.equals(repo.getLocation().toString())) + nickname.setText(nick); + } + } + private void initializeTable() { if (getRepositoryElement() != null) { Map repoProperties = getRepositoryElement().getRepository(null).getProperties(); 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 e2b4bab83..5cf1f2706 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 @@ -156,6 +156,7 @@ public class ProvUIMessages extends NLS { public static String AddRepositoryDialog_DuplicateURL; public static String AddRepositoryDialog_InvalidURL; public static String AddRepositoryDialog_LocationLabel; + public static String AddRepositoryDialog_NameLabel; public static String AddRepositoryDialog_Title; public static String AvailableIUElement_ProfileNotFound; public static String AvailableIUGroup_LoadingRepository; 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 2dd899960..79d223996 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 @@ -126,7 +126,8 @@ AddColocatedRepositoryDialog_AddSiteTitle=Add Site AddRepositoryDialog_Title=Add Repository AddRepositoryDialog_DuplicateURL=Duplicate location AddRepositoryDialog_InvalidURL=The provided location is not valid -AddRepositoryDialog_LocationLabel=Location: +AddRepositoryDialog_LocationLabel=&Location: +AddRepositoryDialog_NameLabel=&Name: UpdateAction_UpdatesAvailableMessage=Check the updates that you wish to install. UpdateAction_UpdatesAvailableTitle=Available Updates diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java index 8af14ad12..66840e4aa 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java @@ -121,9 +121,11 @@ public class ArtifactRepositoryElement extends ProvElement implements IDeferredW */ public String getName() { try { - String name = ProvisioningUtil.getArtifactRepositoryProperty(location, IRepository.PROP_NAME); + String name = ProvisioningUtil.getArtifactRepositoryProperty(location, IRepository.PROP_NICKNAME); if (name == null) - return ""; //$NON-NLS-1$ + name = ProvisioningUtil.getArtifactRepositoryProperty(location, IRepository.PROP_NAME); + if (name == null) + name = ""; //$NON-NLS-1$ return name; } catch (ProvisionException e) { return ""; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java index 72f4ba19c..444028829 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java @@ -17,6 +17,7 @@ import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepositoryManager; import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; @@ -60,6 +61,8 @@ public class ElementUtils { ProvisioningUtil.setColocatedRepositoryEnablement(location, false); } } + ProvisioningUtil.setMetadataRepositoryProperty(location, IRepository.PROP_NICKNAME, elements[i].getName()); + ProvisioningUtil.setArtifactRepositoryProperty(location, IRepository.PROP_NICKNAME, elements[i].getName()); } // Are there any elements that need to be deleted? Go over the original state // and remove any elements that weren't in the elements we were given diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java index 6ecc8b4e8..a2d151015 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java @@ -42,6 +42,7 @@ public class MetadataRepositoryElement extends RootElement implements IRepositor URI location; boolean isEnabled; boolean alreadyReportedNotFound = false; + String name; public MetadataRepositoryElement(Object parent, URI location, boolean isEnabled) { this(parent, null, null, location, isEnabled); @@ -145,14 +146,22 @@ public class MetadataRepositoryElement extends RootElement implements IRepositor * @see org.eclipse.equinox.internal.provisional.p2.ui.model.RepositoryElement#getName() */ public String getName() { - try { - String name = ProvisioningUtil.getMetadataRepositoryProperty(location, IRepository.PROP_NAME); - if (name == null) - return ""; //$NON-NLS-1$ - return name; - } catch (ProvisionException e) { - return ""; //$NON-NLS-1$ + if (name == null) { + try { + name = ProvisioningUtil.getMetadataRepositoryProperty(location, IRepository.PROP_NICKNAME); + if (name == null) + name = ProvisioningUtil.getMetadataRepositoryProperty(location, IRepository.PROP_NAME); + if (name == null) + name = ""; //$NON-NLS-1$ + } catch (ProvisionException e) { + name = ""; //$NON-NLS-1$ + } } + return name; + } + + public void setNickname(String name) { + this.name = name; } /* diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementCollector.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementCollector.java index 71185903e..793356cdb 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementCollector.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementCollector.java @@ -13,6 +13,8 @@ package org.eclipse.equinox.internal.p2.ui.query; import java.net.URI; import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement; import org.eclipse.equinox.internal.p2.ui.model.QueriedElementCollector; +import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; import org.eclipse.equinox.internal.provisional.p2.query.IQueryable; import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil; @@ -38,6 +40,14 @@ public class MetadataRepositoryElementCollector extends QueriedElementCollector public boolean accept(Object match) { if (!(match instanceof URI)) return true; - return super.accept(new MetadataRepositoryElement(parent, (URI) match, ProvisioningUtil.getMetadataRepositoryEnablement((URI) match))); + MetadataRepositoryElement element = new MetadataRepositoryElement(parent, (URI) match, ProvisioningUtil.getMetadataRepositoryEnablement((URI) match)); + try { + String nickname = ProvisioningUtil.getMetadataRepositoryProperty((URI) match, IRepository.PROP_NICKNAME); + if (nickname != null && nickname.length() > 0) + element.setNickname(nickname); + } catch (ProvisionException e) { + // swallow + } + return super.accept(element); } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/UpdateManagerCompatibility.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/UpdateManagerCompatibility.java index 891a5191e..04bce0371 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/UpdateManagerCompatibility.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/UpdateManagerCompatibility.java @@ -104,7 +104,12 @@ public class UpdateManagerCompatibility { String sel = getAttribute(child, "selected"); //$NON-NLS-1$ boolean selected = (sel != null && sel.equals("true")); //$NON-NLS-1$ - bookmarks.add(new MetadataRepositoryElement(null, uri, selected)); + + MetadataRepositoryElement element = new MetadataRepositoryElement(null, uri, selected); + String nickname = getAttribute(child, "name"); //$NON-NLS-1$ + if (nickname != null && nickname.length() > 0) + element.setNickname(nickname); + bookmarks.add(element); } private static void createFolder(Node child, Vector bookmarks) { diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulationPage.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulationPage.java index 12a6af857..f31923f6f 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulationPage.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/dialogs/RepositoryManipulationPage.java @@ -238,6 +238,39 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb labelProvider = new RepositoryDetailsLabelProvider(); repositoryViewer.setLabelProvider(labelProvider); + // Edit the nickname + repositoryViewer.setCellModifier(new ICellModifier() { + public boolean canModify(Object element, String property) { + return true; + } + + public Object getValue(Object element, String property) { + return ((MetadataRepositoryElement) element).getName(); + } + + public void modify(Object element, String property, Object value) { + if (value != null && value.toString().length() > 0) { + MetadataRepositoryElement repo; + if (element instanceof Item) { + repo = (MetadataRepositoryElement) ((Item) element).getData(); + } else if (element instanceof MetadataRepositoryElement) { + repo = (MetadataRepositoryElement) element; + } else { + return; + } + changed = true; + repo.setNickname(value.toString()); + if (comparator.getSortKey() == RepositoryDetailsLabelProvider.COL_NAME) + repositoryViewer.refresh(true); + else + repositoryViewer.update(repo, null); + } + } + + }); + repositoryViewer.setColumnProperties(new String[] {"nickname"}); //$NON-NLS-1$ + repositoryViewer.setCellEditors(new CellEditor[] {new TextCellEditor(repositoryViewer.getTable())}); + repositoryViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { validateButtons(); @@ -463,15 +496,10 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb } void addRepository() { - AddRepositoryDialog dialog = new AddRepositoryDialog(getShell(), policy.getQueryContext().getMetadataRepositoryFlags()) { - protected ProvisioningOperation getOperation(URI repositoryLocation) { - return RepositoryManipulationPage.this.getRepoAddOperation(repositoryLocation); - } - - protected RepositoryLocationValidator getRepositoryLocationValidator() { - return RepositoryManipulationPage.this.getRepositoryLocationValidator(); + AddRepositoryDialog dialog = new AddRepositoryDialog(getShell(), policy) { + protected RepositoryManipulator getRepositoryManipulator() { + return RepositoryManipulationPage.this.getRepositoryManipulator(); } - }; dialog.setTitle(manipulator.getAddOperationLabel()); dialog.open(); @@ -647,17 +675,39 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb } } - // return a repo manipulator that only operates on the local cache + // Return a repo manipulator that only operates on the local cache. + // Labels and other presentation info are used from the original manipulator. RepositoryManipulator getRepositoryManipulator() { if (localCacheRepoManipulator == null) localCacheRepoManipulator = new RepositoryManipulator() { + public AddRepositoryOperation getAddOperation(URI location) { + return new AddRepositoryOperation("Cached add repo operation", new URI[] {location}) { //$NON-NLS-1$ + protected IStatus doExecute(IProgressMonitor monitor) { + for (int i = 0; i < locations.length; i++) { + MetadataRepositoryElement element = new MetadataRepositoryElement(getInput(), locations[i], true); + if (nicknames != null) + element.setNickname(nicknames[i]); + getInput().cachedElements.put(locations[i].toString(), element); - public RepositoryOperation getAddOperation(URI repoLocation) { - return RepositoryManipulationPage.this.getRepoAddOperation(repoLocation); + } + changed = true; + asyncRefresh(); + return Status.OK_STATUS; + } + + protected IStatus doBatchedExecute(IProgressMonitor monitor) throws ProvisionException { + // Not called due to override of doExecute + return null; + } + + protected void setNickname(URI location, String nickname) throws ProvisionException { + // Not called due to override of doExecute + } + }; } public String getAddOperationLabel() { - return ProvUIMessages.RepositoryManipulationPage_Add; + return manipulator.getAddOperationLabel(); } public URI[] getKnownRepositories() { @@ -665,15 +715,15 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb } public String getManipulatorButtonLabel() { - return ""; //$NON-NLS-1$ + return manipulator.getManipulatorButtonLabel(); } public String getManipulatorLinkLabel() { - return ""; //$NON-NLS-1$ + return manipulator.getManipulatorLinkLabel(); } - public RepositoryOperation getRemoveOperation(URI[] repoLocations) { - return new RepositoryOperation("Cached remove repo operation", repoLocations) { //$NON-NLS-1$ + public RemoveRepositoryOperation getRemoveOperation(URI[] repoLocations) { + return new RemoveRepositoryOperation("Cached remove repo operation", repoLocations) { //$NON-NLS-1$ protected IStatus doBatchedExecute(IProgressMonitor monitor) throws ProvisionException { removeRepositories(); return Status.OK_STATUS; @@ -682,11 +732,15 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb } public String getRemoveOperationLabel() { - return ProvUIMessages.RepositoryManipulationPage_Remove; + return manipulator.getRemoveOperationLabel(); } public RepositoryLocationValidator getRepositoryLocationValidator(Shell shell) { - return RepositoryManipulationPage.this.getRepositoryLocationValidator(); + return new DefaultMetadataURLValidator() { + protected URI[] getKnownLocations() { + return getKnownRepositories(); + } + }; } public boolean manipulateRepositories(Shell shell) { @@ -735,34 +789,4 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb locations[i] = elements[i].getLocation(); return locations; } - - RepositoryLocationValidator getRepositoryLocationValidator() { - DefaultMetadataURLValidator validator = new DefaultMetadataURLValidator() { - protected URI[] getKnownLocations() { - return getKnownRepositories(); - } - }; - return validator; - - } - - RepositoryOperation getRepoAddOperation(URI location) { - return new RepositoryOperation("Cached add repo operation", new URI[] {location}) { //$NON-NLS-1$ - protected IStatus doExecute(IProgressMonitor monitor) { - for (int i = 0; i < locations.length; i++) { - Hashtable elements = getInput().cachedElements; - elements.put(locations[i].toString(), new MetadataRepositoryElement(getInput(), locations[i], true)); - - } - changed = true; - asyncRefresh(); - return Status.OK_STATUS; - } - - protected IStatus doBatchedExecute(IProgressMonitor monitor) throws ProvisionException { - // TODO Auto-generated method stub - return null; - } - }; - } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddColocatedRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddColocatedRepositoryOperation.java index fdb40cfb5..ced8c0633 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddColocatedRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddColocatedRepositoryOperation.java @@ -13,6 +13,7 @@ package org.eclipse.equinox.internal.provisional.p2.ui.operations; import java.net.URI; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; /** * Operation that adds colocated artifact and metadata repositories @@ -20,7 +21,7 @@ import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; * * @since 3.4 */ -public class AddColocatedRepositoryOperation extends RepositoryOperation { +public class AddColocatedRepositoryOperation extends AddRepositoryOperation { public AddColocatedRepositoryOperation(String label, URI url) { super(label, new URI[] {url}); } @@ -40,4 +41,11 @@ public class AddColocatedRepositoryOperation extends RepositoryOperation { } return okStatus(); } + + protected void setNickname(URI location, String nickname) throws ProvisionException { + for (int i = 0; i < locations.length; i++) { + ProvisioningUtil.setMetadataRepositoryProperty(location, IRepository.PROP_NICKNAME, nickname); + ProvisioningUtil.setArtifactRepositoryProperty(location, IRepository.PROP_NICKNAME, nickname); + } + } } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddRepositoryOperation.java new file mode 100644 index 000000000..37c311261 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/AddRepositoryOperation.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2009 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.internal.provisional.p2.ui.operations; + +import java.net.URI; +import org.eclipse.core.runtime.*; +import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; + +/** + * Abstract class representing an operation that adds repositories, + * using an optional nickname. + * + * @since 3.5 + */ +public abstract class AddRepositoryOperation extends RepositoryOperation { + + protected String[] nicknames; + + public AddRepositoryOperation(String label, URI[] locations) { + super(label, locations); + } + + public void setNicknames(String[] nicknames) { + Assert.isLegal(nicknames != null && nicknames.length == locations.length); + this.nicknames = nicknames; + } + + public boolean runInBackground() { + return true; + } + + protected IStatus doExecute(IProgressMonitor monitor) throws ProvisionException { + boolean batched = false; + if (locations != null && locations.length > 1) { + ProvUI.startBatchOperation(); + batched = true; + } + IStatus status = doBatchedExecute(monitor); + if (nicknames != null) { + for (int i = 0; i < nicknames.length; i++) { + setNickname(locations[i], nicknames[i]); + } + } + if (batched && notify) + ProvUI.endBatchOperation(); + return status; + } + + protected abstract void setNickname(URI location, String nickname) throws ProvisionException; + + protected abstract IStatus doBatchedExecute(IProgressMonitor monitor) throws ProvisionException; + + public void setNotify(boolean notify) { + this.notify = notify; + } + +} diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java index a077c8a15..eca565b84 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningUtil.java @@ -57,6 +57,13 @@ public class ProvisioningUtil { return manager.getRepositoryProperty(location, key); } + public static void setMetadataRepositoryProperty(URI location, String key, String value) throws ProvisionException { + IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IMetadataRepositoryManager.class.getName()); + if (manager == null) + throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); + manager.setRepositoryProperty(location, key, value); + } + public static boolean getMetadataRepositoryEnablement(URI location) { IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IMetadataRepositoryManager.class.getName()); if (manager == null) @@ -75,7 +82,16 @@ public class ProvisioningUtil { IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IMetadataRepositoryManager.class.getName()); if (manager == null) throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); - return manager.loadRepository(location, monitor); + IMetadataRepository repo = manager.loadRepository(location, monitor); + // If there is no user nickname assigned to this repo but there is a provider name, then set the nickname. + // This will keep the name in the manager even when the repo is not loaded + String name = getMetadataRepositoryProperty(location, IRepository.PROP_NICKNAME); + if (name == null) { + name = getMetadataRepositoryProperty(location, IRepository.PROP_NAME); + if (name != null) + setMetadataRepositoryProperty(location, IRepository.PROP_NICKNAME, name); + } + return repo; } public static IStatus validateMetadataRepositoryLocation(URI location, IProgressMonitor monitor) { @@ -119,6 +135,13 @@ public class ProvisioningUtil { return manager.getRepositoryProperty(location, key); } + public static void setArtifactRepositoryProperty(URI location, String key, String value) throws ProvisionException { + IArtifactRepositoryManager manager = (IArtifactRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IArtifactRepositoryManager.class.getName()); + if (manager == null) + throw new ProvisionException(ProvUIMessages.ProvisioningUtil_NoRepositoryManager); + manager.setRepositoryProperty(location, key, value); + } + public static IArtifactRepository loadArtifactRepository(URI location, IProgressMonitor monitor) throws ProvisionException { IArtifactRepositoryManager manager = (IArtifactRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IArtifactRepositoryManager.class.getName()); if (manager == null) @@ -127,6 +150,14 @@ public class ProvisioningUtil { if (repo == null) { throw new ProvisionException(NLS.bind(ProvUIMessages.ProvisioningUtil_LoadRepositoryFailure, location)); } + // If there is no user nickname assigned to this repo but there is a provider name, then set the nickname. + // This will keep the name in the manager even when the repo is not loaded + String name = getArtifactRepositoryProperty(location, IRepository.PROP_NICKNAME); + if (name == null) { + name = getArtifactRepositoryProperty(location, IRepository.PROP_NAME); + if (name != null) + setArtifactRepositoryProperty(location, IRepository.PROP_NICKNAME, name); + } return repo; } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveColocatedRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveColocatedRepositoryOperation.java index daa8a2608..2cda09e85 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveColocatedRepositoryOperation.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveColocatedRepositoryOperation.java @@ -15,11 +15,11 @@ import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; /** - * Operation that removes the colocated repositories with the given URLs. * + * Operation that removes the colocated repositories with the given locations. * * * @since 3.4 */ -public class RemoveColocatedRepositoryOperation extends RepositoryOperation { +public class RemoveColocatedRepositoryOperation extends RemoveRepositoryOperation { public RemoveColocatedRepositoryOperation(String label, URI[] repoLocations) { super(label, repoLocations); diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveRepositoryOperation.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveRepositoryOperation.java new file mode 100644 index 000000000..b50015eab --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/operations/RemoveRepositoryOperation.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2009 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.internal.provisional.p2.ui.operations; + +import java.net.URI; + +/** + * Abstract class representing an operation that removes repositories. + * + * @since 3.5 + */ +public abstract class RemoveRepositoryOperation extends RepositoryOperation { + + public RemoveRepositoryOperation(String label, URI[] locations) { + super(label, locations); + } + +} diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/ColocatedRepositoryManipulator.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/ColocatedRepositoryManipulator.java index caf79bb09..ee1cd3690 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/ColocatedRepositoryManipulator.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/ColocatedRepositoryManipulator.java @@ -91,7 +91,7 @@ public class ColocatedRepositoryManipulator extends RepositoryManipulator { * (non-Javadoc) * @see org.eclipse.equinox.internal.provisional.p2.ui.policy.RepositoryManipulator#getAddOperation(java.net.URI) */ - public RepositoryOperation getAddOperation(URI repoLocation) { + public AddRepositoryOperation getAddOperation(URI repoLocation) { return new AddColocatedRepositoryOperation(getAddOperationLabel(), repoLocation); } @@ -119,7 +119,7 @@ public class ColocatedRepositoryManipulator extends RepositoryManipulator { * (non-Javadoc) * @see org.eclipse.equinox.internal.provisional.p2.ui.policy.RepositoryManipulator#getRemoveOperation(java.net.URI[]) */ - public RepositoryOperation getRemoveOperation(URI[] reposToRemove) { + public RemoveRepositoryOperation getRemoveOperation(URI[] reposToRemove) { return new RemoveColocatedRepositoryOperation(getRemoveOperationLabel(), reposToRemove); } diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/RepositoryManipulator.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/RepositoryManipulator.java index c7188e5c1..a00ee42c0 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/RepositoryManipulator.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/policy/RepositoryManipulator.java @@ -11,7 +11,8 @@ package org.eclipse.equinox.internal.provisional.p2.ui.policy; import java.net.URI; -import org.eclipse.equinox.internal.provisional.p2.ui.operations.RepositoryOperation; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.AddRepositoryOperation; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.RemoveRepositoryOperation; import org.eclipse.swt.widgets.Shell; /** @@ -51,7 +52,7 @@ public abstract class RepositoryManipulator { * Return an operation that could be used to add the specified URL as * a repository. */ - public abstract RepositoryOperation getAddOperation(URI repoLocation); + public abstract AddRepositoryOperation getAddOperation(URI repoLocation); /** * Return a String describing a possible add operation. This is used @@ -63,7 +64,7 @@ public abstract class RepositoryManipulator { * Return an operation that could be used to remove the specified URL as * a repositories. */ - public abstract RepositoryOperation getRemoveOperation(URI[] repoLocations); + public abstract RemoveRepositoryOperation getRemoveOperation(URI[] repoLocations); /** * Return a String describing a possible remove operation. This is used |