]> source.dussan.org Git - sonarqube.git/commitdiff
Fix quality flaws
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 28 Apr 2015 09:40:41 +0000 (11:40 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 28 Apr 2015 09:40:41 +0000 (11:40 +0200)
server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java
server/sonar-server/src/main/java/org/sonar/server/issue/AddTagsAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/RemoveTagsAction.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileExportAction.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java
server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentNavigationAction.java
sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java

index c2a045f5d3709f7a49648598fc5833eae72a5b49..a08faf8977138c3b80fbd4303d525c9bed4093e8 100644 (file)
@@ -24,7 +24,6 @@ import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Sets;
-import org.apache.commons.collections.CollectionUtils;
 import org.sonar.api.ServerComponent;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.resources.Scopes;
@@ -45,7 +44,12 @@ import org.sonar.server.user.UserSession;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 
 import static com.google.common.collect.Lists.newArrayList;
 
@@ -202,8 +206,10 @@ public class ComponentService implements ServerComponent {
             return component.key();
           }
         });
+        Set<String> missingKeys = Sets.newHashSet(componentKeys);
+        missingKeys.removeAll(foundKeys);
         throw new NotFoundException("The following component keys do not match any component:\n" +
-          Joiner.on('\n').join(CollectionUtils.subtract(componentKeys, foundKeys)));
+          Joiner.on('\n').join(missingKeys));
       }
 
       for (ComponentDto component : components) {
index 40114339c23043accae52a0dcda941a2f543b538..1214af8df69302431f03bde4e565e601633adb3a 100644 (file)
 
 package org.sonar.server.issue;
 
-import org.apache.commons.collections.CollectionUtils;
+import com.google.common.collect.Sets;
 import org.sonar.api.ServerComponent;
 import org.sonar.core.issue.IssueUpdater;
 
 import java.util.Collection;
+import java.util.Set;
 
 
 public class AddTagsAction extends AbstractChangeTagsAction implements ServerComponent {
@@ -36,8 +37,9 @@ public class AddTagsAction extends AbstractChangeTagsAction implements ServerCom
   }
 
   @Override
-  @SuppressWarnings("unchecked")
   protected Collection<String> getTagsToSet(Context context, Collection<String> tagsFromParams) {
-    return CollectionUtils.union(context.issue().tags(), tagsFromParams);
+    Set<String> allTags = Sets.newHashSet(context.issue().tags());
+    allTags.addAll(tagsFromParams);
+    return allTags;
   }
 }
index 3a0c917eff11454a10fefc60a09b8f2e7b5998b5..2ab7d10986136a82d269758e597aef64f49d6511 100644 (file)
 
 package org.sonar.server.issue;
 
-import org.apache.commons.collections.CollectionUtils;
+import com.google.common.collect.Sets;
 import org.sonar.api.ServerComponent;
 import org.sonar.core.issue.IssueUpdater;
 
 import java.util.Collection;
+import java.util.Set;
 
 
 public class RemoveTagsAction extends AbstractChangeTagsAction implements ServerComponent {
@@ -36,8 +37,9 @@ public class RemoveTagsAction extends AbstractChangeTagsAction implements Server
   }
 
   @Override
-  @SuppressWarnings("unchecked")
   protected Collection<String> getTagsToSet(Context context, Collection<String> tagsFromParams) {
-    return CollectionUtils.subtract(context.issue().tags(), tagsFromParams);
+    Set<String> newTags = Sets.newHashSet(context.issue().tags());
+    newTags.removeAll(tagsFromParams);
+    return newTags;
   }
 }
index 5d357905b5959aed5ad762b6b5c0796e375461f8..992b9a8c5fbf7ceec9f8874623effdbe60d11d5b 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.qualityprofile.ws;
 
+import com.google.common.base.Charsets;
 import com.google.common.collect.Lists;
 import org.apache.commons.io.IOUtils;
 import org.sonar.api.profiles.ProfileExporter;
@@ -110,7 +111,7 @@ public class QProfileExportAction implements BaseQProfileWsAction {
     DbSession dbSession = dbClient.openSession(false);
     Stream stream = response.stream();
     OutputStream output = stream.output();
-    Writer writer = new OutputStreamWriter(output);
+    Writer writer = new OutputStreamWriter(output, Charsets.UTF_8);
 
     try {
       QualityProfileDto profile = null;
index 307f1c30b6dab0f11434898ac3b4ec3dcd6efb1e..d3bd0835ec9efce17fdc7c22ea05d6b59dc45b36 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.rule.ws;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
-import org.apache.commons.collections.ComparatorUtils;
+import org.apache.commons.lang.builder.CompareToBuilder;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.resources.Language;
 import org.sonar.api.resources.Languages;
@@ -161,7 +161,7 @@ public class AppAction implements RulesAction {
     Collections.sort(rootCharacs, new Comparator<DebtCharacteristic>() {
       @Override
       public int compare(DebtCharacteristic o1, DebtCharacteristic o2) {
-        return ComparatorUtils.nullHighComparator(ComparatorUtils.naturalComparator()).compare(o1.order(), o2.order());
+        return new CompareToBuilder().append(o1.order(), o2.order()).toComparison();
       }
     });
     return rootCharacs;
index 448da1e0a14bc80d7245cd470a608f32f68573d9..98affe47f98819f7d7ccae3c5b71c0b729c62ae0 100644 (file)
@@ -223,16 +223,16 @@ public class ComponentNavigationAction implements NavigationAction {
   private void writeConfigPageAccess(JsonWriter json, boolean isAdmin, ComponentDto component, UserSession userSession) {
     boolean isProject = Qualifiers.PROJECT.equals(component.qualifier());
 
-    json.prop("showSettings", isAdmin && componentTypeHasProperty(component, PROPERTY_CONFIGURABLE))
-      .prop("showQualityProfiles", isProject)
-      .prop("showQualityGates", isProject)
-      .prop("showManualMeasures", isAdmin)
-      .prop("showActionPlans", isAdmin && isProject)
-      .prop("showLinks", isAdmin && isProject)
-      .prop("showPermissions", isAdmin && componentTypeHasProperty(component, PROPERTY_HAS_ROLE_POLICY))
-      .prop("showHistory", isAdmin && componentTypeHasProperty(component, PROPERTY_MODIFIABLE_HISTORY))
-      .prop("showUpdateKey", isAdmin && componentTypeHasProperty(component, PROPERTY_UPDATABLE_KEY))
-      .prop("showDeletion", isAdmin && componentTypeHasProperty(component, PROPERTY_DELETABLE));
+    json.prop("showSettings", isAdmin && componentTypeHasProperty(component, PROPERTY_CONFIGURABLE));
+    json.prop("showQualityProfiles", isProject);
+    json.prop("showQualityGates", isProject);
+    json.prop("showManualMeasures", isAdmin);
+    json.prop("showActionPlans", isAdmin && isProject);
+    json.prop("showLinks", isAdmin && isProject);
+    json.prop("showPermissions", isAdmin && componentTypeHasProperty(component, PROPERTY_HAS_ROLE_POLICY));
+    json.prop("showHistory", isAdmin && componentTypeHasProperty(component, PROPERTY_MODIFIABLE_HISTORY));
+    json.prop("showUpdateKey", isAdmin && componentTypeHasProperty(component, PROPERTY_UPDATABLE_KEY));
+    json.prop("showDeletion", isAdmin && componentTypeHasProperty(component, PROPERTY_DELETABLE));
   }
 
   private boolean componentTypeHasProperty(ComponentDto component, String resourceTypeProperty) {
index 28ce4e2c26c4397c8af01e3c5567c9679c178f08..369abddfef59ed1e89751c206bce4ec501b25960 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
-import org.apache.commons.collections.CollectionUtils;
+import com.google.common.collect.Sets;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.sonar.api.BatchComponent;
@@ -42,6 +42,7 @@ import javax.annotation.Nullable;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
+import java.util.Set;
 
 /**
  * Updates issue fields and chooses if changes must be kept in history.
@@ -274,7 +275,7 @@ public class IssueUpdater implements BatchComponent, ServerComponent {
   }
 
   public boolean setTags(DefaultIssue issue, Collection<String> tags, IssueChangeContext context) {
-    Collection<String> newTags = Collections2.transform(
+    Set<String> newTags = Sets.newHashSet(Collections2.transform(
       Collections2.filter(tags, new Predicate<String>() {
         @Override
         public boolean apply(String tag) {
@@ -287,10 +288,11 @@ public class IssueUpdater implements BatchComponent, ServerComponent {
           RuleTagFormat.validate(lowerCaseTag);
           return lowerCaseTag;
         }
-      });
+      }));
 
-    Collection<String> oldTags = issue.tags();
-    if (!CollectionUtils.isEqualCollection(oldTags, newTags)) {
+    Set<String> oldTags = Sets.newHashSet(issue.tags());
+    
+    if (!oldTags.equals(newTags)) {
       issue.setFieldChange(context, TAGS,
         oldTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(oldTags),
         newTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(newTags));