a493c5dd7db362d84375371cb4e78da34a59674c
[JavaForFun] /
1 package de.example.plugins.custom.java;
2
3 import java.io.IOException;
4 import java.net.URL;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import org.sonar.api.profiles.ProfileDefinition;
10 import org.sonar.api.profiles.RulesProfile;
11 import org.sonar.api.rules.RuleFinder;
12 import org.sonar.api.utils.AnnotationUtils;
13 import org.sonar.api.utils.ValidationMessages;
14 import org.sonar.java.checks.CheckList;
15 import org.sonar.plugins.java.Java;
16 import org.sonar.plugins.java.JavaRulesDefinition;
17
18 import com.google.common.base.Charsets;
19 import com.google.common.io.Resources;
20 import com.google.gson.Gson;
21
22 public class CustomProfile extends ProfileDefinition {
23
24           private final Gson gson = new Gson();
25           private final RuleFinder ruleFinder;
26           public CustomProfile(RuleFinder ruleFinder) {
27             this.ruleFinder = ruleFinder;
28           }
29
30           @Override
31           public RulesProfile createProfile(ValidationMessages messages) {
32             RulesProfile profile = RulesProfile.create("Sonar way", Java.KEY);
33             URL resource = JavaRulesDefinition.class.getResource("/org/sonar/l10n/java/rules/custom/Custom_profile.json");
34             Profile jsonProfile = gson.fromJson(readResource(resource), Profile.class);
35             Map<String, String> keys = legacyKeys();
36             for (String key : jsonProfile.ruleKeys) {
37               profile.activateRule(ruleFinder.findByKey(CheckList.REPOSITORY_KEY, keys.get(key)), null);
38             }
39             return profile;
40           }
41
42           private static String readResource(URL resource) {
43             try {
44               return Resources.toString(resource, Charsets.UTF_8);
45             } catch (IOException e) {
46               throw new IllegalStateException("Failed to read: " + resource, e);
47             }
48           }
49
50           private static Map<String, String> legacyKeys() {
51             Map<String, String> result = new HashMap<>();
52             for (Class checkClass : CheckList.getChecks()) {
53               org.sonar.check.Rule ruleAnnotation = AnnotationUtils.getAnnotation(checkClass, org.sonar.check.Rule.class);
54               String key = ruleAnnotation.key();
55               org.sonar.java.RspecKey rspecKeyAnnotation = AnnotationUtils.getAnnotation(checkClass, org.sonar.java.RspecKey.class);
56               String rspecKey = key;
57               if(rspecKeyAnnotation != null) {
58                 rspecKey = rspecKeyAnnotation.value();
59               }
60               result.put(rspecKey, key);
61             }
62             return result;
63           }
64
65           private static class Profile {
66             String name;
67             List<String> ruleKeys;
68           }
69
70         }