]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5901 Refactor issue bulk change tags actions
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 16 Dec 2014 14:26:14 +0000 (15:26 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 16 Dec 2014 14:56:03 +0000 (15:56 +0100)
server/sonar-server/src/main/java/org/sonar/server/issue/AbstractChangeTagsAction.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/issue/AddTagsAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/RemoveTagsAction.java

diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/AbstractChangeTagsAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/AbstractChangeTagsAction.java
new file mode 100644 (file)
index 0000000..d5a0c62
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+package org.sonar.server.issue;
+
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import com.google.common.collect.Sets;
+import org.sonar.api.ServerComponent;
+import org.sonar.api.issue.Issue;
+import org.sonar.api.issue.condition.IsUnResolved;
+import org.sonar.api.issue.internal.DefaultIssue;
+import org.sonar.api.server.rule.RuleTagFormat;
+import org.sonar.core.issue.IssueUpdater;
+import org.sonar.server.user.UserSession;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+public abstract class AbstractChangeTagsAction extends Action implements ServerComponent {
+
+  private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
+
+  private final IssueUpdater issueUpdater;
+
+  protected AbstractChangeTagsAction(String key, IssueUpdater issueUpdater) {
+    super(key);
+    this.issueUpdater = issueUpdater;
+    super.setConditions(new IsUnResolved());
+  }
+
+  @Override
+  public boolean verify(Map<String, Object> properties, List<Issue> issues, UserSession userSession){
+    parseTags(properties);
+    return true;
+  }
+
+  @Override
+  public boolean execute(Map<String, Object> properties, Context context) {
+    Collection<String> tags = getTagsToSet(context, parseTags(properties));
+    return issueUpdater.setTags((DefaultIssue) context.issue(), tags, context.issueChangeContext());
+  }
+
+  protected abstract Collection<String> getTagsToSet(Context context, Collection<String> tagsFromParams);
+
+  private Set<String> parseTags(Map<String, Object> properties) {
+    Set<String> result = Sets.newHashSet();
+    String tagsString = (String) properties.get("tags");
+    if (!Strings.isNullOrEmpty(tagsString)) {
+      for(String tag: TAGS_SPLITTER.split(tagsString)) {
+        RuleTagFormat.validate(tag);
+        result.add(tag);
+      }
+    }
+    return result;
+  }
+}
index ec10eaecdab57bf02cecb48b39a58e168e294c69..40114339c23043accae52a0dcda941a2f543b538 100644 (file)
 
 package org.sonar.server.issue;
 
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.Sets;
 import org.apache.commons.collections.CollectionUtils;
 import org.sonar.api.ServerComponent;
-import org.sonar.api.issue.Issue;
-import org.sonar.api.issue.condition.IsUnResolved;
-import org.sonar.api.issue.internal.DefaultIssue;
-import org.sonar.api.server.rule.RuleTagFormat;
 import org.sonar.core.issue.IssueUpdater;
-import org.sonar.server.user.UserSession;
 
 import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 
-public class AddTagsAction extends Action implements ServerComponent {
+public class AddTagsAction extends AbstractChangeTagsAction implements ServerComponent {
 
   public static final String KEY = "add_tags";
 
-  private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
-
-  private final IssueUpdater issueUpdater;
-
   public AddTagsAction(IssueUpdater issueUpdater) {
-    super(KEY);
-    this.issueUpdater = issueUpdater;
-    super.setConditions(new IsUnResolved());
-  }
-
-  @Override
-  public boolean verify(Map<String, Object> properties, List<Issue> issues, UserSession userSession){
-    parseTags(properties);
-    return true;
+    super(KEY, issueUpdater);
   }
 
   @Override
   @SuppressWarnings("unchecked")
-  public boolean execute(Map<String, Object> properties, Context context) {
-    Collection<String> tags = CollectionUtils.union(context.issue().tags(), parseTags(properties));
-    return issueUpdater.setTags((DefaultIssue) context.issue(), tags, context.issueChangeContext());
-  }
-
-  private Set<String> parseTags(Map<String, Object> properties) {
-    Set<String> result = Sets.newHashSet();
-    String tagsString = (String) properties.get("tags");
-    if (!Strings.isNullOrEmpty(tagsString)) {
-      for(String tag: TAGS_SPLITTER.split(tagsString)) {
-        RuleTagFormat.validate(tag);
-        result.add(tag);
-      }
-    }
-    return result;
+  protected Collection<String> getTagsToSet(Context context, Collection<String> tagsFromParams) {
+    return CollectionUtils.union(context.issue().tags(), tagsFromParams);
   }
 }
index b8d0f635624810fb4e05d62c803e2400351b8bde..3a0c917eff11454a10fefc60a09b8f2e7b5998b5 100644 (file)
 
 package org.sonar.server.issue;
 
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.Sets;
 import org.apache.commons.collections.CollectionUtils;
 import org.sonar.api.ServerComponent;
-import org.sonar.api.issue.Issue;
-import org.sonar.api.issue.condition.IsUnResolved;
-import org.sonar.api.issue.internal.DefaultIssue;
-import org.sonar.api.server.rule.RuleTagFormat;
 import org.sonar.core.issue.IssueUpdater;
-import org.sonar.server.user.UserSession;
 
 import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 
-public class RemoveTagsAction extends Action implements ServerComponent {
+public class RemoveTagsAction extends AbstractChangeTagsAction implements ServerComponent {
 
   public static final String KEY = "remove_tags";
 
-  private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
-
-  private final IssueUpdater issueUpdater;
-
   public RemoveTagsAction(IssueUpdater issueUpdater) {
-    super(KEY);
-    this.issueUpdater = issueUpdater;
-    super.setConditions(new IsUnResolved());
-  }
-
-  @Override
-  public boolean verify(Map<String, Object> properties, List<Issue> issues, UserSession userSession){
-    parseTags(properties);
-    return true;
+    super(KEY, issueUpdater);
   }
 
   @Override
   @SuppressWarnings("unchecked")
-  public boolean execute(Map<String, Object> properties, Context context) {
-    Collection<String> tags = CollectionUtils.subtract(context.issue().tags(), parseTags(properties));
-    return issueUpdater.setTags((DefaultIssue) context.issue(), tags, context.issueChangeContext());
-  }
-
-  private Set<String> parseTags(Map<String, Object> properties) {
-    Set<String> result = Sets.newHashSet();
-    String tagsString = (String) properties.get("tags");
-    if (!Strings.isNullOrEmpty(tagsString)) {
-      for(String tag: TAGS_SPLITTER.split(tagsString)) {
-        RuleTagFormat.validate(tag);
-        result.add(tag);
-      }
-    }
-    return result;
+  protected Collection<String> getTagsToSet(Context context, Collection<String> tagsFromParams) {
+    return CollectionUtils.subtract(context.issue().tags(), tagsFromParams);
   }
 }