From 62ee32b7f9ee3dbac306f14620e8f2c88c130d26 Mon Sep 17 00:00:00 2001 From: Evgeny Zakrevsky Date: Tue, 9 Oct 2012 07:04:20 +0400 Subject: [PATCH] IDEA-68253 Issue trackers integration. Added possibility to login anonymously. --- .../intellij/tasks/TaskRepositoryType.java | 3 +- .../tasks/config/BaseRepositoryEditor.form | 96 ++++++++++--------- .../tasks/config/BaseRepositoryEditor.java | 20 ++++ .../intellij/tasks/impl/BaseRepository.java | 22 ++++- .../tasks/connector/WebRepository.java | 3 +- .../tasks/connector/WebRepositoryEditor.java | 15 +++ .../tasks/connector/WebRepositoryType.java | 5 + 7 files changed, 114 insertions(+), 50 deletions(-) diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskRepositoryType.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskRepositoryType.java index 3c552bfd211d..c8a99d393f5f 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskRepositoryType.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskRepositoryType.java @@ -36,6 +36,7 @@ public abstract class TaskRepositoryType { protected static final int NO_FEATURES = 0; public static final int BASIC_HTTP_AUTHORIZATION = 0x0001; + public static final int LOGIN_ANONYMOUSLY = 0x0002; @NotNull public abstract String getName(); @@ -50,7 +51,7 @@ public abstract class TaskRepositoryType { public abstract Class getRepositoryClass(); - public boolean isSupported(int feature) { + public final boolean isSupported(int feature) { return (getFeatures() & feature) != 0; } diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.form b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.form index 074ebcfa1acd..da29b06faae5 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.form +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.form @@ -15,7 +15,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -46,45 +46,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -92,7 +56,7 @@ - + @@ -101,7 +65,7 @@ - + @@ -109,7 +73,7 @@ - + @@ -117,12 +81,12 @@ - + - + @@ -136,6 +100,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java index 94e67421b8f0..e68deba29fb8 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java @@ -64,6 +64,7 @@ public class BaseRepositoryEditor extends TaskReposito private JBCheckBox myAddCommitMessage; private JBLabel myComment; private JPanel myEditorPanel; + protected JBCheckBox myLoginAnonymouslyJBCheckBox; private boolean myApplying; protected final T myRepository; @@ -98,6 +99,15 @@ public class BaseRepositoryEditor extends TaskReposito myUseHTTPAuthentication.setSelected(repository.isUseHttpAuthentication()); myUseHTTPAuthentication.setVisible(repository.getRepositoryType().isSupported(TaskRepositoryType.BASIC_HTTP_AUTHORIZATION)); + myLoginAnonymouslyJBCheckBox.setVisible(repository.getRepositoryType().isSupported(TaskRepositoryType.LOGIN_ANONYMOUSLY)); + myLoginAnonymouslyJBCheckBox.setSelected(repository.isLoginAnonymously()); + myLoginAnonymouslyJBCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + loginAnonymouslyChanged(!myLoginAnonymouslyJBCheckBox.isSelected()); + } + }); + myAddCommitMessage.setSelected(repository.isShouldFormatCommitMessage()); myDocument = EditorFactory.getInstance().createDocument(repository.getCommitMessageFormat()); myEditor = EditorFactory.getInstance().createEditor(myDocument); @@ -119,6 +129,7 @@ public class BaseRepositoryEditor extends TaskReposito installListener(myShareURL); installListener(myUseProxy); installListener(myUseHTTPAuthentication); + installListener(myLoginAnonymouslyJBCheckBox); enableButtons(); @@ -128,6 +139,14 @@ public class BaseRepositoryEditor extends TaskReposito } setAnchor(myUseProxy); + loginAnonymouslyChanged(!myLoginAnonymouslyJBCheckBox.isSelected()); + } + + protected void loginAnonymouslyChanged(boolean enabled) { + myUsernameLabel.setEnabled(enabled); + myUserNameText.setEnabled(enabled); + myPasswordLabel.setEnabled(enabled); + myPasswordText.setEnabled(enabled); } @Nullable @@ -210,6 +229,7 @@ public class BaseRepositoryEditor extends TaskReposito myRepository.setShared(myShareURL.isSelected()); myRepository.setUseProxy(myUseProxy.isSelected()); myRepository.setUseHttpAuthentication(myUseHTTPAuthentication.isSelected()); + myRepository.setLoginAnonymously(myLoginAnonymouslyJBCheckBox.isSelected()); myRepository.setShouldFormatCommitMessage(myAddCommitMessage.isSelected()); myRepository.setCommitMessageFormat(myDocument.getText()); diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/impl/BaseRepository.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/impl/BaseRepository.java index a438ce266dd5..9a2ab7070bec 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/impl/BaseRepository.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/impl/BaseRepository.java @@ -15,6 +15,7 @@ */ package com.intellij.tasks.impl; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.PasswordUtil; import com.intellij.tasks.TaskRepository; import com.intellij.tasks.TaskRepositoryType; @@ -34,6 +35,7 @@ public abstract class BaseRepository extends TaskRepository { protected String myPassword = ""; protected boolean myUseProxy; protected boolean myUseHttpAuthentication; + protected boolean myLoginAnonymously; public BaseRepository(TaskRepositoryType type) { super(type); @@ -45,6 +47,7 @@ public abstract class BaseRepository extends TaskRepository { myUsername = other.getUsername(); myUseProxy = other.myUseProxy; myUseHttpAuthentication = other.myUseHttpAuthentication; + myLoginAnonymously = other.myLoginAnonymously; } public BaseRepository() { @@ -93,11 +96,14 @@ public abstract class BaseRepository extends TaskRepository { BaseRepository that = (BaseRepository)o; - if (getUrl() != null ? !getUrl().equals(that.getUrl()) : that.getUrl() != null) return false; - if (getPassword() != null ? !getPassword().equals(that.getPassword()) : that.getPassword() != null) return false; - if (getUsername() != null ? !getUsername().equals(that.getUsername()) : that.getUsername() != null) return false; + if (!Comparing.equal(getUrl(), that.getUrl())) return false; + if (!Comparing.equal(getPassword(), that.getPassword())) return false; + if (!Comparing.equal(getUsername(), that.getUsername())) return false; + if (!Comparing.equal(isLoginAnonymously(), that.isLoginAnonymously())) return false; + if (!Comparing.equal(isUseProxy(), that.isUseProxy())) return false; + if (!Comparing.equal(isUseHttpAuthentication(), that.isUseHttpAuthentication())) return false; - return myUseProxy == that.myUseProxy && myUseHttpAuthentication == that.myUseHttpAuthentication; + return true; } public boolean isUseProxy() { @@ -116,6 +122,14 @@ public abstract class BaseRepository extends TaskRepository { myUseHttpAuthentication = useHttpAuthentication; } + public boolean isLoginAnonymously() { + return myLoginAnonymously; + } + + public void setLoginAnonymously(final boolean loginAnonymously) { + myLoginAnonymously = loginAnonymously; + } + @Nullable public String extractId(String taskName) { Matcher matcher = PATTERN.matcher(taskName); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepository.java index bc2b0115b8fd..27ba880ebc6c 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepository.java @@ -61,7 +61,8 @@ public class WebRepository extends BaseRepositoryImpl { @Override public Task[] getIssues(@Nullable final String query, final int max, final long since) throws Exception { final HttpClient httpClient = getHttpClient(); - login(httpClient); + + if (!isLoginAnonymously()) login(httpClient); final GetMethod getMethod = new GetMethod(getFullTasksUrl()); httpClient.executeMethod(getMethod); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryEditor.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryEditor.java index e489c7cf6111..5d0b44ea4d26 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryEditor.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryEditor.java @@ -8,6 +8,8 @@ import com.intellij.util.ui.FormBuilder; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; /** * User: Evgeny.Zakrevsky @@ -27,9 +29,22 @@ public class WebRepositoryEditor extends BaseRepositoryEditor { myUsernameLabel.setText("{username}:"); myPasswordLabel.setText("{password}:"); + myLoginAnonymouslyJBCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + } + }); + //setAnchor(myUsernameLabel); } + @Override + protected void loginAnonymouslyChanged(boolean enabled) { + super.loginAnonymouslyChanged(enabled); + myLoginURLLabel.setEnabled(enabled); + myLoginURLText.setEnabled(enabled); + } + @Override public void apply() { myRepository.setTasksListURL(myTasksListURLText.getText()); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryType.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryType.java index 21251bee3f02..d2d437c361d5 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryType.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/connector/WebRepositoryType.java @@ -44,4 +44,9 @@ public class WebRepositoryType extends BaseRepositoryType { final Consumer changeListener) { return new WebRepositoryEditor(project, repository, changeListener); } + + @Override + protected int getFeatures() { + return LOGIN_ANONYMOUSLY; + } }