diff --git a/plugins/github/src/org/jetbrains/plugins/github/tasks/GitHubRepository.java b/plugins/github/src/org/jetbrains/plugins/github/tasks/GitHubRepository.java index 6feefea3c957..4095358e3a5b 100644 --- a/plugins/github/src/org/jetbrains/plugins/github/tasks/GitHubRepository.java +++ b/plugins/github/src/org/jetbrains/plugins/github/tasks/GitHubRepository.java @@ -319,6 +319,7 @@ public class GitHubRepository extends BaseRepositoryImpl { return matcher.find() ? matcher.group(1) : null; } + @Nullable @Override public Task findTask(String id) throws Exception { String path = "/repos/" + getRepoAuthor() + "/" + getRepoName() + "/issues/" + id; diff --git a/plugins/tasks/jira-connector/src/main/java/com/intellij/tasks/jira/JiraRepository.java b/plugins/tasks/jira-connector/src/main/java/com/intellij/tasks/jira/JiraRepository.java index 3bfb79ca56fb..01f8c0cbd6a4 100644 --- a/plugins/tasks/jira-connector/src/main/java/com/intellij/tasks/jira/JiraRepository.java +++ b/plugins/tasks/jira-connector/src/main/java/com/intellij/tasks/jira/JiraRepository.java @@ -173,6 +173,7 @@ public class JiraRepository extends BaseRepositoryImpl { return postMethod; } + @Nullable @Override public CancellableConnection createCancellableConnection() { PostMethod method = getLoginMethodFor4x(); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java index 0e028d5f42ab..88d99d5d757c 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/generic/GenericWebRepository.java @@ -10,7 +10,6 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xmlb.annotations.Tag; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -24,9 +23,9 @@ import java.util.regex.Pattern; */ @Tag("Generic") public class GenericWebRepository extends BaseRepositoryImpl { - private String myTasksListURL; - private String myTaskPattern; - private String myLoginURL; + private String myTasksListURL = ""; + private String myTaskPattern = ""; + private String myLoginURL = ""; final static String SERVER_URL_PLACEHOLDER = "{serverUrl}"; final static String USERNAME_PLACEHOLDER = "{username}"; @@ -132,18 +131,16 @@ public class GenericWebRepository extends BaseRepositoryImpl { return new GenericWebRepository(this); } - @NotNull public String getTasksListURL() { - return myTasksListURL == null ? "" : myTasksListURL; + return myTasksListURL; } public void setTasksListURL(final String tasksListURL) { myTasksListURL = tasksListURL; } - @NotNull public String getTaskPattern() { - return myTaskPattern == null ? "" : myTaskPattern; + return myTaskPattern; } public void setTaskPattern(final String taskPattern) { @@ -178,9 +175,8 @@ public class GenericWebRepository extends BaseRepositoryImpl { }; } - @NotNull public String getLoginURL() { - return myLoginURL == null ? "" : myLoginURL; + return myLoginURL; } public void setLoginURL(final String loginURL) { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/lighthouse/LighthouseRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/lighthouse/LighthouseRepository.java index fe8437749d59..835fc3ccf554 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/lighthouse/LighthouseRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/lighthouse/LighthouseRepository.java @@ -254,6 +254,7 @@ public class LighthouseRepository extends BaseRepositoryImpl { method.addRequestHeader("X-LighthouseToken", myAPIKey); } + @Nullable @Override public Task findTask(String id) throws Exception { final String[] split = id.split("\\-"); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisProject.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisProject.java index be024c2b8233..865f0313cd72 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisProject.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisProject.java @@ -1,5 +1,7 @@ package com.intellij.tasks.mantis; +import java.util.List; + /** * User: evgeny.zakrevsky * Date: 9/24/12 @@ -7,6 +9,8 @@ package com.intellij.tasks.mantis; public class MantisProject { public final static MantisProject ALL_PROJECTS = new MantisProject(0, "All Projects"); + private List myFilters; + private int id; private String name; @@ -35,6 +39,14 @@ public class MantisProject { this.name = name; } + public List getFilters() { + return myFilters; + } + + public void setFilters(final List filters) { + myFilters = filters; + } + @Override public boolean equals(final Object obj) { return obj != null && obj instanceof MantisProject && ((MantisProject)obj).getId() == getId(); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepository.java index 5169111293f9..f27af15a6ba8 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepository.java @@ -10,7 +10,6 @@ import com.intellij.tasks.mantis.model.*; import com.intellij.util.Function; import com.intellij.util.NullableFunction; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.HashMap; import com.intellij.util.xmlb.annotations.Tag; import org.apache.axis.utils.StringUtils; import org.jetbrains.annotations.Nullable; @@ -21,8 +20,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Set; /** * @author Dmitry Avdeev @@ -31,7 +28,7 @@ import java.util.Set; public class MantisRepository extends BaseRepositoryImpl { private final static String SOAP_API_LOCATION = "/api/soap/mantisconnect.php"; - private Map> myProject2FiltersCachedData; + private List myProjects; private MantisProject myProject; private MantisFilter myFilter; @@ -93,6 +90,7 @@ public class MantisRepository extends BaseRepositoryImpl { }); } + @Nullable @Override public Task findTask(String id) throws Exception { IssueData data = createSoap().mc_issue_get(getUsername(), getPassword(), BigInteger.valueOf(Integer.valueOf(id))); @@ -145,23 +143,23 @@ public class MantisRepository extends BaseRepositoryImpl { return task; } - public Set getProjects() throws Exception { - if (myProject2FiltersCachedData == null) { + public List getProjects() throws Exception { + if (myProjects == null) { refreshProjectAndFiltersData(); } - return myProject2FiltersCachedData.keySet(); + return myProjects; } public List getFilters(MantisProject project) throws Exception { - if (myProject2FiltersCachedData == null) { + if (myProjects == null) { refreshProjectAndFiltersData(); } - return myProject2FiltersCachedData.get(project); + return project.getFilters(); } public void refreshProjectAndFiltersData() throws Exception { final MantisConnectPortType soap = createSoap(); - myProject2FiltersCachedData = new HashMap>(); + myProjects = new ArrayList(); ProjectData[] projectDatas = soap.mc_projects_get_user_accessible(getUsername(), getPassword()); List projects = ContainerUtil.map(projectDatas, new Function() { @Override @@ -169,7 +167,7 @@ public class MantisRepository extends BaseRepositoryImpl { return new MantisProject(data.getId().intValue(), data.getName()); } }); - projects.add(MantisProject.ALL_PROJECTS); + projects.add(0, MantisProject.ALL_PROJECTS); String version = soap.mc_version(); for (MantisProject project : projects) { FilterData[] filterDatas = soap.mc_filter_get(getUsername(), getPassword(), BigInteger.valueOf(project.getId())); @@ -183,7 +181,8 @@ public class MantisRepository extends BaseRepositoryImpl { return new MantisFilter(data.getId().intValue(), data.getName()); } })); - myProject2FiltersCachedData.put(project, filters); + project.setFilters(filters); + myProjects.add(project); } } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepositoryEditor.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepositoryEditor.java index 2ef2bc809ca5..3871c1f3d7ac 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepositoryEditor.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisRepositoryEditor.java @@ -3,6 +3,7 @@ package com.intellij.tasks.mantis; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.tasks.config.BaseRepositoryEditor; import com.intellij.ui.components.JBLabel; import com.intellij.util.Consumer; @@ -34,7 +35,7 @@ public class MantisRepositoryEditor extends BaseRepositoryEditor() { diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/MantisIntegrationTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/MantisIntegrationTest.java new file mode 100644 index 000000000000..147efb34cc31 --- /dev/null +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/MantisIntegrationTest.java @@ -0,0 +1,57 @@ +package com.intellij.tasks.integration; + +import com.intellij.tasks.Task; +import com.intellij.tasks.TaskManagerTestCase; +import com.intellij.tasks.mantis.MantisFilter; +import com.intellij.tasks.mantis.MantisProject; +import com.intellij.tasks.mantis.MantisRepository; +import com.intellij.tasks.mantis.MantisRepositoryType; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.GetMethod; + +import java.util.List; + +/** + * User: evgeny.zakrevsky + * Date: 10/12/12 + */ +public class MantisIntegrationTest extends TaskManagerTestCase { + public void testMantis12() throws Exception { + MantisRepository mantisRepository = new MantisRepository(new MantisRepositoryType()); + mantisRepository.setUrl("http://trackers-tests.labs.intellij.net:8142/"); + mantisRepository.setUsername("guest"); + mantisRepository.setPassword("guest"); + myManager.testConnection(mantisRepository); + + assertTrue(mantisRepository.getProjects().size() >= 2); + final MantisProject mantisProject = mantisRepository.getProjects().get(1); + assertEquals(mantisProject.getName(), "Mantis 1.2 project 1"); + mantisRepository.setProject(mantisProject); + + assertTrue(mantisProject.getFilters().size() >= 2); + final MantisFilter mantisFilter = mantisProject.getFilters().get(1); + assertEquals(mantisFilter.getName(), "Mantis 1.2 Filter 1"); + mantisRepository.setFilter(mantisFilter); + + final List issues = mantisRepository.getIssues("", 1, 0); + assertTrue(issues.size() >= 1); + final Task task = issues.get(0); + assertEquals(task.getId(), "1"); + assertEquals(task.getProject(), "Mantis 1.2 project 1"); + assertEquals(task.getNumber(), "1"); + assertEquals(task.getSummary(), "M12P1I1"); + + final Task task1 = mantisRepository.findTask("1"); + assertNotNull(task1); + assertEquals(task1.getId(), "1"); + assertEquals(task1.getProject(), "Mantis 1.2 project 1"); + assertEquals(task1.getNumber(), "1"); + assertEquals(task1.getSummary(), "M12P1I1"); + assertEquals(task1.getDescription(), "."); + + HttpClient client = new HttpClient(); + final GetMethod method = new GetMethod(task1.getIssueUrl()); + client.executeMethod(method); + assertEquals(method.getStatusCode(), 200); + } +}