Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.oslc.ui/src/org/eclipse/mylyn/internal/oslc/ui/OslcRepositorySettingsPage.java')
-rw-r--r--org.eclipse.mylyn.oslc.ui/src/org/eclipse/mylyn/internal/oslc/ui/OslcRepositorySettingsPage.java207
1 files changed, 207 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.oslc.ui/src/org/eclipse/mylyn/internal/oslc/ui/OslcRepositorySettingsPage.java b/org.eclipse.mylyn.oslc.ui/src/org/eclipse/mylyn/internal/oslc/ui/OslcRepositorySettingsPage.java
new file mode 100644
index 000000000..afffb804d
--- /dev/null
+++ b/org.eclipse.mylyn.oslc.ui/src/org/eclipse/mylyn/internal/oslc/ui/OslcRepositorySettingsPage.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.oslc.ui;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.window.Window;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.oslc.core.IOslcConnector;
+import org.eclipse.mylyn.internal.oslc.core.IOslcCoreConstants;
+import org.eclipse.mylyn.internal.oslc.core.OslcServiceDescriptor;
+import org.eclipse.mylyn.internal.oslc.core.OslcServiceProvider;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author Robert Elves
+ */
+public abstract class OslcRepositorySettingsPage extends AbstractRepositorySettingsPage {
+
+ private static final String OSLC_BASEURL = "oslc.baseurl"; //$NON-NLS-1$
+
+ private OslcServiceDescriptor descriptor;
+
+ protected Text baseText;
+
+ public OslcRepositorySettingsPage(String name, String desc, TaskRepository taskRepository) {
+ super(name, desc, taskRepository);
+ setNeedsAnonymousLogin(false);
+ setNeedsEncoding(false);
+ setNeedsTimeZone(false);
+ setNeedsHttpAuth(false);
+ }
+
+ public OslcServiceDescriptor getProvider() {
+ return descriptor;
+ }
+
+ public void setServiceDescriptor(OslcServiceDescriptor descriptor) {
+ this.descriptor = descriptor;
+ }
+
+ protected String getBaseUrl() {
+ return baseText.getText();
+ }
+
+ @Override
+ protected void createSettingControls(Composite parent) {
+
+ Label baseUrlLabel = new Label(parent, SWT.NONE);
+ baseUrlLabel.setText("Base URL:"); //$NON-NLS-1$
+ baseText = new Text(parent, SWT.BORDER);
+ if (repository != null) {
+ String base = repository.getProperty(OSLC_BASEURL);
+ if (base != null) {
+ baseText.setText(base);
+ }
+ }
+ baseText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ serverUrlCombo.setText(baseText.getText());
+ if (getWizard() != null) {
+ getWizard().getContainer().updateButtons();
+ }
+ }
+ });
+
+ GridDataFactory.fillDefaults().hint(300, SWT.DEFAULT).span(2, 1).grab(true, false).applyTo(baseText);
+
+ super.createSettingControls(parent);
+ if (serverUrlCombo.getText().length() == 0) {
+ serverUrlCombo.setText(Messages.OslcRepositorySettingsPage_Enter_Base_Url_Above);
+ }
+ serverUrlCombo.setEnabled(false);
+ }
+
+ @Override
+ public abstract String getConnectorKind();
+
+ @Override
+ protected Validator getValidator(TaskRepository repository) {
+ return new OslcValidator(createTaskRepository(), baseText.getText());
+ }
+
+ @Override
+ protected boolean isValidUrl(String url) {
+ if (url.startsWith(URL_PREFIX_HTTPS) || url.startsWith(URL_PREFIX_HTTP)) {
+ try {
+ new URL(url);
+ return true;
+ } catch (MalformedURLException e) {
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void applyTo(TaskRepository repository) {
+ repository.setProperty(OSLC_BASEURL, baseText.getText());
+ super.applyTo(repository);
+ };
+
+ @Override
+ protected void applyValidatorResult(Validator validator) {
+ OslcValidator cqValidator = (OslcValidator) validator;
+
+ if (!cqValidator.getProviders().isEmpty()) {
+ if (repository == null) {
+ repository = createTaskRepository();
+ }
+ OslcServiceDiscoveryWizard oslcWizard = new OslcServiceDiscoveryWizard(((IOslcConnector) connector),
+ cqValidator.getRepository(), cqValidator.getProviders());
+ OslcServiceDiscoveryWizardDialog dialog = new OslcServiceDiscoveryWizardDialog(getShell(), oslcWizard);
+ dialog.setBlockOnOpen(true);
+ dialog.create();
+ int result = dialog.open();
+
+ if (result == Window.OK && oslcWizard.getSelectedServiceDescriptor() != null) {
+ setUrl(oslcWizard.getSelectedServiceDescriptor().getAboutUrl());
+ setServiceDescriptor(oslcWizard.getSelectedServiceDescriptor());
+ } else {
+ cqValidator.setStatus(Status.CANCEL_STATUS);
+ }
+ }
+
+ super.applyValidatorResult(validator);
+ }
+
+ private class OslcValidator extends Validator {
+
+ final TaskRepository repository;
+
+ private List<OslcServiceProvider> providers = new ArrayList<OslcServiceProvider>();
+
+ private final String baseUrl;
+
+ public TaskRepository getRepository() {
+ return this.repository;
+ }
+
+ public OslcValidator(TaskRepository repository, String baseUrl) {
+ this.repository = repository;
+ this.baseUrl = baseUrl;
+ }
+
+ private String getBaseUrl() {
+ return baseUrl;
+ }
+
+ @Override
+ public void run(IProgressMonitor monitor) throws CoreException {
+ try {
+ new URL(getBaseUrl());
+
+ // TODO: if only one ServiceProviderCatalog/ServiceProvider found, use it
+ List<OslcServiceProvider> serviceProviders = ((IOslcConnector) connector).getAvailableServices(
+ repository, getBaseUrl(), monitor);
+ setProviders(serviceProviders);
+ } catch (MalformedURLException ex) {
+ throw new CoreException(new Status(IStatus.ERROR, IOslcCoreConstants.ID_PLUGIN, IStatus.OK,
+ INVALID_REPOSITORY_URL, null));
+ } catch (CoreException e) {
+ StatusHandler.log(new Status(IStatus.ERROR, IOslcCoreConstants.ID_PLUGIN,
+ "Error occurred during service discovery", e)); //$NON-NLS-1$
+ }
+
+ }
+
+ private void setProviders(List<OslcServiceProvider> providers) {
+ this.providers = providers;
+ }
+
+ public List<OslcServiceProvider> getProviders() {
+ return providers;
+ }
+
+ }
+
+ @Override
+ protected void createAdditionalControls(Composite parent) {
+ // ignore
+ }
+
+}

Back to the top