From 730951b976a8929fc0c07b9cb4bef7b03ebc1254 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 20 Mar 2014 19:23:11 +0400 Subject: [PATCH] IDEA-105413 Remove filter from serialized form of Mantis project in settings --- .../intellij/tasks/mantis/MantisFilter.java | 8 +++--- .../intellij/tasks/mantis/MantisProject.java | 21 +++++++++----- .../tasks/mantis/MantisRepository.java | 28 ++++++++++--------- .../tasks/mantis/MantisRepositoryEditor.java | 21 +++++++++----- .../integration/MantisIntegrationTest.java | 4 +-- 5 files changed, 49 insertions(+), 33 deletions(-) diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisFilter.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisFilter.java index f413591f23b7..69058e2df1d2 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisFilter.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/mantis/MantisFilter.java @@ -9,10 +9,10 @@ import org.jetbrains.annotations.NotNull; */ public final class MantisFilter implements Comparable { // Used for "[Last task] filter" - public static final int UNDEFINED_FILTER_ID = 0; + public static final int UNSPECIFIED_FILTER_ID = 0; public static MantisFilter newUndefined() { - return new MantisFilter(0, "[Last tasks]"); + return new MantisFilter(0, "-- all issues --"); } private int id; @@ -45,8 +45,8 @@ public final class MantisFilter implements Comparable { this.name = name; } - public final boolean isUndefined() { - return getId() == UNDEFINED_FILTER_ID; + public final boolean isUnspecified() { + return getId() == UNSPECIFIED_FILTER_ID; } @Override 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 2f3d85a1aaa4..34bd3e199478 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,9 +1,10 @@ package com.intellij.tasks.mantis; -import com.intellij.util.xmlb.annotations.AbstractCollection; import com.intellij.util.xmlb.annotations.Attribute; +import com.intellij.util.xmlb.annotations.Transient; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -13,13 +14,13 @@ import java.util.List; */ public final class MantisProject { // Used for "All projects" option in settings - public static final int UNDEFINED_PROJECT_ID = 0; + public static final int UNSPECIFIED_PROJECT_ID = 0; public static MantisProject newUndefined() { - return new MantisProject(0, "All Projects"); + return new MantisProject(0, "-- from all projects --"); } - private List myFilters; + private List myFilters = new ArrayList(); private int id; private String name; @@ -54,12 +55,18 @@ public final class MantisProject { } - public final boolean isUndefined() { - return getId() == UNDEFINED_PROJECT_ID; + public final boolean isUnspecified() { + return getId() == UNSPECIFIED_PROJECT_ID; } //@OptionTag(tag = "filters", nameAttribute = "") - @AbstractCollection(surroundWithTag = false) + //@AbstractCollection(surroundWithTag = false) + + /** + * Filters here are used only to simplify combo boxes management and are refreshed every time when settings + * are opened or user hit "Login" button. Thus they are not persisted in settings. + */ + @Transient @NotNull public List getFilters() { return myFilters == null? Collections.emptyList() : myFilters; 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 a0fbb7c67b34..54e976e5631c 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 @@ -102,17 +102,17 @@ public class MantisRepository extends BaseRepositoryImpl { private List getIssuesFromPage(@NotNull MantisConnectPortType soap, int page, int pageSize) throws Exception { List collectedHeaders = new ArrayList(); - boolean isWorkaround = myCurrentProject.isUndefined() && !myAllProjectsAvailable; + boolean isWorkaround = myCurrentProject.isUnspecified() && !myAllProjectsAvailable; // Projects to iterate over, actually needed only when "All Projects" pseudo-project is selected // and is unsupported on server side. List projects = isWorkaround? myProjects : Collections.singletonList(myCurrentProject); for (MantisProject project : projects) { - if (isWorkaround && project.isUndefined()) { + if (isWorkaround && project.isUnspecified()) { continue; } - assert !project.isUndefined() || myAllProjectsAvailable; + assert !project.isUnspecified() || myAllProjectsAvailable; IssueHeaderData[] headers; - if (myCurrentFilter.isUndefined()) { + if (myCurrentFilter.isUnspecified()) { headers = soap.mc_project_get_issue_headers(getUsername(), getPassword(), bigInteger(project.getId()), bigInteger(page), bigInteger(pageSize)); } @@ -143,7 +143,7 @@ public class MantisRepository extends BaseRepositoryImpl { return new CancellableConnection() { @Override protected void doTest() throws Exception { - //refreshProjectsAndFilters(); + //refreshProjects(); createSoap(); } @@ -169,21 +169,22 @@ public class MantisRepository extends BaseRepositoryImpl { return new MantisTask(data, this); } - public List fetchProjects() throws Exception { + @NotNull + public List getProjects() throws Exception { ensureProjectsRefreshed(); - return myProjects; + return myProjects == null ? Collections.emptyList() : myProjects; } private void ensureProjectsRefreshed() throws Exception { if (myProjects == null) { - refreshProjectsAndFilters(); + refreshProjects(); } } - public void refreshProjectsAndFilters() throws Exception { + public void refreshProjects() throws Exception { MantisConnectPortType soap = createSoap(); myAllProjectsAvailable = checkAllProjectsAvailable(soap); - myProjects = new ArrayList(); + ProjectData[] projectDatas = soap.mc_projects_get_user_accessible(getUsername(), getPassword()); List projects = new ArrayList(ContainerUtil.map(projectDatas, new Function() { @@ -206,18 +207,19 @@ public class MantisRepository extends BaseRepositoryImpl { projectFilters.add(0, MantisFilter.newUndefined()); project.setFilters(projectFilters); - myProjects.add(project); } - // Explicitly add undefined project Collections.sort(commonFilters); commonFilters.add(0, MantisFilter.newUndefined()); MantisProject undefined = MantisProject.newUndefined(); undefined.setFilters(commonFilters); - myProjects.add(0, undefined); + projects.add(0, undefined); + + myProjects = projects; } + @NotNull private MantisConnectPortType createSoap() throws Exception { return new MantisConnectLocator().getMantisConnectPort(new URL(getUrl() + SOAP_API_LOCATION)); } 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 d8e8f9ce499a..4eb4237d646e 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 @@ -51,12 +51,12 @@ public class MantisRepositoryEditor extends BaseRepositoryEditor fetch(@NotNull ProgressIndicator indicator) throws Exception { - return myRepository.fetchProjects(); + myRepository.refreshProjects(); + return myRepository.getProjects(); } @Nullable 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 index 96624ede160c..13d9fb13f76a 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/MantisIntegrationTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/MantisIntegrationTest.java @@ -20,8 +20,8 @@ public class MantisIntegrationTest extends TaskManagerTestCase { mantisRepository.setUsername("deva"); mantisRepository.setPassword("deva"); - assertTrue(mantisRepository.fetchProjects().size() >= 2); - final MantisProject mantisProject = mantisRepository.fetchProjects().get(1); + assertTrue(mantisRepository.getProjects().size() >= 2); + final MantisProject mantisProject = mantisRepository.getProjects().get(1); assertEquals(mantisProject.getName(), "Mantis 1.2 project 1"); mantisRepository.setCurrentProject(mantisProject);