Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java')
-rw-r--r--bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java146
1 files changed, 146 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java
new file mode 100644
index 000000000..4f3fc876d
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.p2.ui.dialogs;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
+import org.eclipse.equinox.internal.p2.ui.IProvHelpContextIds;
+import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.equinox.p2.ui.Policy;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Abstract dialog class for adding repositories of different types. This class
+ * assumes the user view of a repository is a name and URI. Individual subclasses
+ * will dictate what kind of repository and how it's created.
+ *
+ * @since 3.4
+ *
+ */
+public abstract class AddRepositoryDialog extends RepositoryNameAndLocationDialog {
+
+ URI addedLocation;
+ static final String[] ARCHIVE_EXTENSIONS = new String[] {"*.jar;*.zip"}; //$NON-NLS-1$
+ static String lastLocalLocation = null;
+ static String lastArchiveLocation = null;
+ Policy policy;
+
+ public AddRepositoryDialog(Shell parentShell, ProvisioningUI ui) {
+ super(parentShell, ui);
+ setTitle(ProvUIMessages.AddRepositoryDialog_Title);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parentShell, IProvHelpContextIds.ADD_REPOSITORY_DIALOG);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite comp = new Composite(parent, SWT.NONE);
+ initializeDialogUnits(comp);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 3;
+ layout.marginTop = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+
+ comp.setLayout(layout);
+ GridData data = new GridData();
+ comp.setLayoutData(data);
+
+ // Name: []
+ nickname = createNameField(comp);
+
+ Button localButton = new Button(comp, SWT.PUSH);
+ localButton.setText(ProvUIMessages.RepositoryGroup_LocalRepoBrowseButton);
+ localButton.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(makeLocalURIString(path));
+ validateRepositoryURL(false);
+ }
+ }
+ });
+ setButtonLayoutData(localButton);
+
+ // Location: []
+ url = createLocationField(comp);
+
+ Button archiveButton = new Button(comp, SWT.PUSH);
+ archiveButton.setText(ProvUIMessages.RepositoryGroup_ArchivedRepoBrowseButton);
+ archiveButton.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(makeLocalURIString(path));
+ validateRepositoryURL(false);
+ }
+ }
+ });
+ setButtonLayoutData(archiveButton);
+ comp.setTabList(new Control[] {nickname, url, localButton, archiveButton});
+ Dialog.applyDialogFont(comp);
+ return comp;
+ }
+
+ String makeLocalURIString(String path) {
+ try {
+ URI localURI = URIUtil.fromString(path);
+ return URIUtil.toUnencodedString(RepositoryHelper.localRepoURIHelper(localURI));
+ } catch (URISyntaxException e) {
+ return path;
+ }
+ }
+
+ protected boolean handleOk() {
+ IStatus status = addRepository();
+ return status.isOK();
+ }
+
+ /**
+ * Get the location of the repository that was added by this dialog. Return <code>null</code>
+ * if the dialog has not yet added a repository location.
+ *
+ * @return the location of the repository that has been added by this dialog, or <code>null</code>
+ * if no repository has been added.
+ */
+ public URI getAddedLocation() {
+ return addedLocation;
+ }
+
+ protected IStatus addRepository() {
+ IStatus status = validateRepositoryURL(false);
+ if (status.isOK()) {
+ addedLocation = getUserLocation();
+ String nick = nickname.getText().trim();
+ if (nick.length() == 0)
+ nick = null;
+ getRepositoryTracker().addRepository(addedLocation, nick, getProvisioningUI().getSession());
+ }
+ return status;
+ }
+}

Back to the top