aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2010-09-10 12:27:33 +0000
committersimonbrandhof <simon.brandhof@gmail.com>2010-09-10 12:27:33 +0000
commit5cd839bbecd061d9463694d025788754bfca0f08 (patch)
tree6140b78f770fd0ab9654784e2068e80dadfb6345 /sonar-plugin-api
parent5c90df84c8d4c69c38868736bd28cb61f89d4b31 (diff)
downloadsonarqube-5cd839bbecd061d9463694d025788754bfca0f08.tar.gz
sonarqube-5cd839bbecd061d9463694d025788754bfca0f08.zip
simplify ValidationMessages and ProfileDefinition
Diffstat (limited to 'sonar-plugin-api')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/profiles/AnnotationProfileDefinition.java7
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileDefinition.java34
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java12
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfilePrototype.java48
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileDefinition.java11
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileImporter.java2
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java60
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java65
8 files changed, 168 insertions, 71 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/AnnotationProfileDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/AnnotationProfileDefinition.java
index b071a24df8e..c33c9bff795 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/AnnotationProfileDefinition.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/AnnotationProfileDefinition.java
@@ -30,18 +30,21 @@ import java.util.Collection;
*/
public abstract class AnnotationProfileDefinition extends ProfileDefinition {
+ private String name;
+ private String language;
private String repositoryKey;
private Collection<Class> annotatedClasses;
protected AnnotationProfileDefinition(String repositoryKey, String profileName, String language, Collection<Class> annotatedClasses) {
- super(profileName, language);
+ this.name = profileName;
+ this.language = language;
this.repositoryKey = repositoryKey;
this.annotatedClasses = annotatedClasses;
}
@Override
public ProfilePrototype createPrototype() {
- ProfilePrototype profile = ProfilePrototype.create();
+ ProfilePrototype profile = ProfilePrototype.create(name, language);
if (annotatedClasses != null) {
for (Class aClass : annotatedClasses) {
BelongsToProfile belongsToProfile = (BelongsToProfile) aClass.getAnnotation(BelongsToProfile.class);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileDefinition.java
index c722e5f7c5e..8a8043c720f 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileDefinition.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileDefinition.java
@@ -26,40 +26,6 @@ import org.sonar.api.ServerExtension;
*/
public abstract class ProfileDefinition implements ServerExtension {
- private String name;
- private String language;
-
- protected ProfileDefinition() {
- }
-
- protected ProfileDefinition(String profileName, String language) {
- this.name = profileName;
- this.language = language;
- }
-
- public final String getName() {
- return name;
- }
-
- public final ProfileDefinition setName(String s) {
- this.name = s;
- return this;
- }
-
- public final String getLanguage() {
- return language;
- }
-
- public final ProfileDefinition setLanguage(String s) {
- this.language = s;
- return this;
- }
-
public abstract ProfilePrototype createPrototype();
-
- @Override
- public final String toString() {
- return new StringBuilder().append("[name=").append(name).append(",language=").append(language).append("]").toString();
- }
} \ No newline at end of file
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java
index 58e9a6b0b0e..6a495bb508a 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java
@@ -20,6 +20,8 @@
package org.sonar.api.profiles;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
import org.sonar.api.BatchExtension;
import org.sonar.api.ServerExtension;
@@ -102,4 +104,14 @@ public abstract class ProfileExporter implements BatchExtension, ServerExtension
public final int hashCode() {
return key != null ? key.hashCode() : 0;
}
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
+ .append("key", key)
+ .append("name", name)
+ .append("mimeType", mimeType)
+ .append("languages", supportedLanguages)
+ .toString();
+ }
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfilePrototype.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfilePrototype.java
index 979981a85b8..cab5516bebe 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfilePrototype.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfilePrototype.java
@@ -20,6 +20,9 @@
package org.sonar.api.profiles;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+import org.sonar.api.BatchComponent;
import org.sonar.api.rules.RulePriority;
import java.util.ArrayList;
@@ -30,8 +33,10 @@ import java.util.Map;
/**
* @since 2.3
*/
-public final class ProfilePrototype {
+public final class ProfilePrototype implements BatchComponent {
+ private String name;
+ private String language;
private List<RulePrototype> rules = new ArrayList<RulePrototype>();
private ProfilePrototype() {
@@ -41,6 +46,28 @@ public final class ProfilePrototype {
return new ProfilePrototype();
}
+ public static ProfilePrototype create(String name, String language) {
+ return new ProfilePrototype().setName(name).setLanguage(language);
+ }
+
+ public final String getName() {
+ return name;
+ }
+
+ public final ProfilePrototype setName(String s) {
+ this.name = s;
+ return this;
+ }
+
+ public final String getLanguage() {
+ return language;
+ }
+
+ public final ProfilePrototype setLanguage(String s) {
+ this.language = s;
+ return this;
+ }
+
public List<RulePrototype> getRules() {
return rules;
}
@@ -57,7 +84,8 @@ public final class ProfilePrototype {
public RulePrototype getRule(String repositoryKey, String key) {
for (RulePrototype rule : rules) {
- if (StringUtils.equals(repositoryKey, rule.getRepositoryKey()) && StringUtils.equals(key, rule.getKey())) {
+ if (StringUtils.equals(repositoryKey, rule.getRepositoryKey()) &&
+ StringUtils.equals(key, rule.getKey())) {
return rule;
}
}
@@ -66,7 +94,8 @@ public final class ProfilePrototype {
public RulePrototype getRuleByConfigKey(String repositoryKey, String configKey) {
for (RulePrototype rule : rules) {
- if (StringUtils.equals(repositoryKey, rule.getRepositoryKey()) && StringUtils.equals(configKey, rule.getConfigKey())) {
+ if (StringUtils.equals(repositoryKey, rule.getRepositoryKey()) &&
+ StringUtils.equals(configKey, rule.getConfigKey())) {
return rule;
}
}
@@ -74,7 +103,6 @@ public final class ProfilePrototype {
}
/**
- *
* @param repositoryKey
* @param key
* @param nullablePriority if null, then the default rule priority is used.
@@ -92,11 +120,23 @@ public final class ProfilePrototype {
return rule;
}
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
+ .append("name", name)
+ .append("language", language)
+ .toString();
+ }
+
public static final class RulePrototype {
private String repositoryKey;
+
private String key;
+
private String configKey;
+
private RulePriority priority = null;
+
private Map<String, String> parameters = new HashMap<String, String>();
private RulePrototype() {
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileDefinition.java
index fec2423c0f9..24888c0086d 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileDefinition.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileDefinition.java
@@ -34,11 +34,14 @@ import java.util.List;
*/
public abstract class XMLProfileDefinition extends ProfileDefinition {
+ private String name;
+ private String language;
private ClassLoader classloader;
private String xmlClassPath;
protected XMLProfileDefinition(String name, String language, ClassLoader classloader, String xmlClassPath) {
- super(name, language);
+ this.name = name;
+ this.language = language;
this.classloader = classloader;
this.xmlClassPath = xmlClassPath;
}
@@ -49,6 +52,8 @@ public abstract class XMLProfileDefinition extends ProfileDefinition {
try {
ValidationMessages validation = ValidationMessages.create();
ProfilePrototype profile = XMLProfileImporter.create().importProfile(reader, validation);
+ profile.setName(name);
+ profile.setLanguage(language);
if (validation.hasErrors()) {
// TODO do not loose messages
throw new SonarException("Fail to parse the file: " + xmlClassPath);
@@ -59,8 +64,4 @@ public abstract class XMLProfileDefinition extends ProfileDefinition {
IOUtils.closeQuietly(reader);
}
}
-
-// public static XMLProfileDefinition create(String name, String language, ClassLoader classloader, String xmlClassloaderPath) {
-// return new XMLProfileDefinition(name, language).setClassloader(classloader).setXmlClassPath(xmlClassloaderPath);
-// }
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileImporter.java b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileImporter.java
index b00a1bb0ffc..92f3946b4a6 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileImporter.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileImporter.java
@@ -67,7 +67,7 @@ public final class XMLProfileImporter {
}
}
} catch (XMLStreamException e) {
- messages.addError("unvalidXml", "XML is not valid: " + e.getMessage());
+ messages.addErrorText("XML is not valid: " + e.getMessage());
}
return profile;
}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java
index 4813f447fd3..c76c0bfcaf9 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/ValidationMessages.java
@@ -19,15 +19,22 @@
*/
package org.sonar.api.utils;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+import org.slf4j.Logger;
+
import java.util.ArrayList;
import java.util.List;
public final class ValidationMessages {
- private List<Message> errors = new ArrayList<Message>();
- private List<Message> warnings = new ArrayList<Message>();
- private List<Message> infos = new ArrayList<Message>();
+ private List<String> errors = new ArrayList<String>();
+ private List<String> warnings = new ArrayList<String>();
+ private List<String> infos = new ArrayList<String>();
+ /**
+ * Use the factory method <code>create()</code>
+ */
ValidationMessages() {
}
@@ -39,16 +46,16 @@ public final class ValidationMessages {
return !errors.isEmpty();
}
- public List<Message> getErrors() {
+ public List<String> getErrors() {
return errors;
}
- public ValidationMessages addError(String key, String label) {
- errors.add(new Message(key, label));
+ public ValidationMessages addErrorText(String text) {
+ errors.add(text);
return this;
}
- public List<Message> getWarnings() {
+ public List<String> getWarnings() {
return warnings;
}
@@ -56,12 +63,12 @@ public final class ValidationMessages {
return !warnings.isEmpty();
}
- public ValidationMessages addWarning(String key, String label) {
- warnings.add(new Message(key, label));
+ public ValidationMessages addWarningText(String text) {
+ warnings.add(text);
return this;
}
- public List<Message> getInfos() {
+ public List<String> getInfos() {
return infos;
}
@@ -69,26 +76,29 @@ public final class ValidationMessages {
return !infos.isEmpty();
}
- public ValidationMessages addInfo(String key, String label) {
- infos.add(new Message(key, label));
+ public ValidationMessages addInfoText(String text) {
+ infos.add(text);
return this;
}
- public static final class Message {
- private String key;
- private String label;
-
- private Message(String key, String label) {
- this.key = key;
- this.label = label;
+ public void log(Logger logger) {
+ for (String error : getErrors()) {
+ logger.error(error);
}
-
- public String getKey() {
- return key;
+ for (String warning : getWarnings()) {
+ logger.warn(warning);
}
-
- public String getLabel() {
- return label;
+ for (String info : getInfos()) {
+ logger.info(info);
}
}
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
+ .append("errors", errors)
+ .append("warnings", warnings)
+ .append("infos", infos)
+ .toString();
+ }
}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java
new file mode 100644
index 00000000000..ea52c4c3c73
--- /dev/null
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/ValidationMessagesTest.java
@@ -0,0 +1,65 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2009 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar 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.
+ *
+ * Sonar 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 Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
+ */
+package org.sonar.api.utils;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.internal.matchers.IsCollectionContaining.hasItem;
+import static org.junit.internal.matchers.StringContains.containsString;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.*;
+
+public class ValidationMessagesTest {
+
+ @Test
+ public void emptyMessages() {
+ ValidationMessages messages = ValidationMessages.create();
+ assertThat(messages.hasErrors(), is(false));
+ assertThat(messages.hasWarnings(), is(false));
+ assertThat(messages.hasInfos(), is(false));
+
+ Logger logger = mock(Logger.class);
+ messages.log(logger);
+ verify(logger, never()).error(anyString());
+ verify(logger, never()).warn(anyString());
+ verify(logger, never()).info(anyString());
+ }
+
+ @Test
+ public void addError() {
+ ValidationMessages messages = ValidationMessages.create();
+ messages.addErrorText("my error");
+ assertThat(messages.hasErrors(), is(true));
+ assertThat(messages.hasWarnings(), is(false));
+ assertThat(messages.hasInfos(), is(false));
+ assertThat(messages.getErrors().size(), is(1));
+ assertThat(messages.getErrors(), hasItem("my error"));
+ assertThat(messages.toString(), containsString("my error"));
+
+ Logger logger = mock(Logger.class);
+ messages.log(logger);
+ verify(logger, times(1)).error("my error");
+ verify(logger, never()).warn(anyString());
+ verify(logger, never()).info(anyString());
+ }
+}