Skip to content

Commit 32ca26c

Browse files
Merge pull request #50 from lequal/dev
Merge Dev to Master
2 parents 427f261 + f124ae2 commit 32ca26c

File tree

10 files changed

+2737
-20
lines changed

10 files changed

+2737
-20
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<groupId>fr.cnes.sonarqube.plugins</groupId>
66
<artifactId>sonaricode</artifactId>
77
<packaging>sonar-plugin</packaging>
8-
<version>1.2.0</version>
8+
<version>1.3.0</version>
99
<name>Sonar i-Code CNES plugin</name>
1010

1111
<description>i-Code CNES plugin for SonarQube</description>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package fr.cnes.sonar.plugins.icode.converter;
2+
3+
import com.thoughtworks.xstream.converters.ConverterLookup;
4+
import com.thoughtworks.xstream.converters.UnmarshallingContext;
5+
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
6+
import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
7+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
8+
import com.thoughtworks.xstream.mapper.Mapper;
9+
import fr.cnes.sonar.plugins.icode.model.AnalysisRule;
10+
import fr.cnes.sonar.plugins.icode.model.Result;
11+
12+
public class AnalysisConverter extends ToAttributedValueConverter {
13+
14+
public AnalysisConverter(Class type, Mapper mapper, ReflectionProvider reflectionProvider, ConverterLookup lookup) {
15+
super(type, mapper, reflectionProvider, lookup);
16+
}
17+
18+
public AnalysisConverter(Class type, Mapper mapper, ReflectionProvider reflectionProvider, ConverterLookup lookup, String valueFieldName) {
19+
super(type, mapper, reflectionProvider, lookup, valueFieldName);
20+
}
21+
22+
public AnalysisConverter(Class type, Mapper mapper, ReflectionProvider reflectionProvider, ConverterLookup lookup, String valueFieldName, Class valueDefinedIn) {
23+
super(type, mapper, reflectionProvider, lookup, valueFieldName, valueDefinedIn);
24+
}
25+
26+
@Override
27+
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext unmarshallingContext) {
28+
Object r = super.unmarshal(reader, unmarshallingContext);
29+
if (r.getClass() == AnalysisRule.class) {
30+
Result result = new Result();
31+
reader.moveDown();
32+
result.setFileName(reader.getAttribute("fileName"));
33+
result.setResultLine(reader.getAttribute("resultLine"));
34+
result.setResultTypePlace(reader.getAttribute("resultTypePlace"));
35+
result.setResultValue(reader.getAttribute("resultValue"));
36+
if(reader.hasMoreChildren()) {
37+
reader.moveDown();
38+
result.setResultMessage(reader.getValue());
39+
reader.moveUp();
40+
}
41+
reader.moveUp();
42+
((AnalysisRule) r).setResult(result);
43+
}
44+
return r;
45+
}
46+
}

src/main/java/fr/cnes/sonar/plugins/icode/model/AnalysisFile.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717
package fr.cnes.sonar.plugins.icode.model;
1818

1919

20+
import com.thoughtworks.xstream.annotations.XStreamConverter;
21+
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
22+
2023
/**
2124
* Class used to unmarshal i-Code xml file.
2225
*
2326
* It contains an analyzed file.
2427
*
2528
* @author lequal
2629
*/
30+
@XStreamConverter(value = ToAttributedValueConverter.class)
2731
public class AnalysisFile {
2832
private String language;
2933
private String fileName;

src/main/java/fr/cnes/sonar/plugins/icode/model/AnalysisInformations.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717
package fr.cnes.sonar.plugins.icode.model;
1818

1919

20+
import com.thoughtworks.xstream.annotations.XStreamConverter;
21+
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
22+
2023
/**
2124
* Class used to unmarshal i-Code xml file.
2225
*
2326
* It contains meta data about the i-Code analysis.
2427
*
2528
* @author lequal
2629
*/
30+
@XStreamConverter(ToAttributedValueConverter.class)
2731
public class AnalysisInformations {
2832
private String author;
2933

src/main/java/fr/cnes/sonar/plugins/icode/model/AnalysisProject.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
*/
1717
package fr.cnes.sonar.plugins.icode.model;
1818

19+
import com.thoughtworks.xstream.annotations.XStreamAlias;
20+
import com.thoughtworks.xstream.annotations.XStreamImplicit;
21+
import com.thoughtworks.xstream.annotations.XStreamInclude;
22+
1923
import java.util.ArrayList;
2024
import java.util.Arrays;
2125
import java.util.List;
@@ -27,10 +31,14 @@
2731
*
2832
* @author lequal
2933
*/
34+
@XStreamAlias("analysisProject")
35+
@XStreamInclude({AnalysisFile.class, AnalysisRule.class, AnalysisInformations.class})
3036
public class AnalysisProject {
3137
private AnalysisInformations analysisInformations;
32-
private AnalysisFile[] analysisFile;
33-
private AnalysisRule[] analysisRule;
38+
@XStreamImplicit(itemFieldName = "analysisFile")
39+
private List<AnalysisFile> analysisFile;
40+
@XStreamImplicit(itemFieldName = "analysisRule")
41+
private List<AnalysisRule> analysisRule;
3442

3543
/**
3644
* Getter for accessing analysis rules (issues).
@@ -39,8 +47,8 @@ public class AnalysisProject {
3947
public List<AnalysisRule> getAnalysisRules() {
4048
// Retrieve issues (called rules)
4149
List<AnalysisRule> rules;
42-
if(getAnalysisRule() !=null) {
43-
rules = Arrays.asList(getAnalysisRule());
50+
if(analysisRule !=null) {
51+
rules = this.analysisRule;
4452
} else {
4553
rules = new ArrayList<>();
4654
}
@@ -54,8 +62,8 @@ public List<AnalysisRule> getAnalysisRules() {
5462
public List<AnalysisFile> getAnalysisFiles() {
5563
// Retrieve files
5664
List<AnalysisFile> files;
57-
if(getAnalysisFile() !=null) {
58-
files = Arrays.asList(getAnalysisFile());
65+
if(analysisFile !=null) {
66+
files = this.analysisFile;
5967
} else {
6068
files = new ArrayList<>();
6169
}
@@ -71,19 +79,11 @@ public void setAnalysisInformations(AnalysisInformations analysisInformations) {
7179
this.analysisInformations = analysisInformations;
7280
}
7381

74-
public AnalysisFile[] getAnalysisFile() {
75-
return analysisFile;
76-
}
77-
7882
public void setAnalysisFile(AnalysisFile[] analysisFile) {
79-
this.analysisFile = analysisFile;
80-
}
81-
82-
public AnalysisRule[] getAnalysisRule() {
83-
return analysisRule;
83+
this.analysisFile = Arrays.asList(analysisFile);
8484
}
8585

8686
public void setAnalysisRule(AnalysisRule[] analysisRule) {
87-
this.analysisRule = analysisRule;
87+
this.analysisRule = Arrays.asList(analysisRule);
8888
}
8989
}

src/main/java/fr/cnes/sonar/plugins/icode/model/AnalysisRule.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,24 @@
1717
package fr.cnes.sonar.plugins.icode.model;
1818

1919

20+
import com.thoughtworks.xstream.annotations.XStreamConverter;
21+
import com.thoughtworks.xstream.annotations.XStreamInclude;
22+
import fr.cnes.sonar.plugins.icode.converter.AnalysisConverter;
23+
2024
/**
2125
* Class used to unmarshal i-Code xml file.
2226
*
2327
* It contains an issue and a violated rule.
2428
*
2529
* @author lequal
2630
*/
31+
@XStreamInclude(Result.class)
32+
@XStreamConverter(value = AnalysisConverter.class, strings = {"result"})
2733
public class AnalysisRule {
2834

35+
private String analysisRuleId;
36+
private Result result;
37+
2938
public String getAnalysisRuleId() {
3039
return analysisRuleId;
3140
}
@@ -34,7 +43,6 @@ public Result getResult() {
3443
return result;
3544
}
3645

37-
private String analysisRuleId;
3846

3947
public void setAnalysisRuleId(String analysisRuleId) {
4048
this.analysisRuleId = analysisRuleId;
@@ -44,6 +52,7 @@ public void setResult(Result result) {
4452
this.result = result;
4553
}
4654

47-
private Result result;
4855

4956
}
57+
58+

src/main/java/fr/cnes/sonar/plugins/icode/model/Result.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616
*/
1717
package fr.cnes.sonar.plugins.icode.model;
1818

19+
import com.thoughtworks.xstream.annotations.XStreamConverter;
20+
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
21+
1922
/**
2023
* Class used to unmarshal i-Code xml file.
2124
*
2225
* It contains an issue or a metric.
2326
*
2427
* @author lequal
2528
*/
29+
@XStreamConverter(value = ToAttributedValueConverter.class)
2630
public class Result {
2731

2832
private String fileName;

src/main/java/fr/cnes/sonar/plugins/icode/settings/ICodePluginProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class ICodePluginProperties {
3232
/**
3333
* i-Code CNES default location's path value.
3434
*/
35-
public static final String ICODE_PATH_DEFAULT = "${HOME}/icode-cnes/icode.exe";
35+
public static final String ICODE_PATH_DEFAULT = "/usr/bin/icodegit";
3636

3737
/**
3838
* Prefix used by all properties of this plugin.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package fr.cnes.sonar.plugins.icode;
2+
3+
import fr.cnes.sonar.plugins.icode.model.AnalysisProject;
4+
import fr.cnes.sonar.plugins.icode.model.XmlHandler;
5+
import org.junit.Assert;
6+
import org.junit.Test;
7+
8+
import java.io.InputStream;
9+
10+
public class ParseResultTest {
11+
@Test
12+
public void parseIcodeOutputTest() {
13+
InputStream icodeOutput = getClass().getResourceAsStream("/result.res");
14+
AnalysisProject analysisProject = (AnalysisProject) XmlHandler.unmarshal(icodeOutput, AnalysisProject.class);
15+
16+
17+
Assert.assertNotNull(analysisProject);
18+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0));
19+
20+
// Try to get Analysis informations
21+
Assert.assertNotNull(analysisProject.getAnalysisInformations().getAuthor());
22+
23+
// Try to get files informations
24+
Assert.assertEquals(7, analysisProject.getAnalysisFiles().size());
25+
Assert.assertNotNull(analysisProject.getAnalysisFiles().get(0).getFileName());
26+
Assert.assertNotNull(analysisProject.getAnalysisFiles().get(0).getLanguage());
27+
28+
// Try to get rules analyzed
29+
Assert.assertEquals(574, analysisProject.getAnalysisRules().size());
30+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult());
31+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getAnalysisRuleId());
32+
33+
// Try to get results
34+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getResultTypePlace());
35+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(58).getResult().getResultMessage());
36+
Assert.assertNull(analysisProject.getAnalysisRules().get(0).getResult().getResultMessage());
37+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getFileName());
38+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getResultValue());
39+
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getResultLine());
40+
}
41+
}

0 commit comments

Comments
 (0)