Skip to content

Commit

Permalink
Merge pull request #50 from lequal/dev
Browse files Browse the repository at this point in the history
Merge Dev to Master
  • Loading branch information
louisjdmartin authored Sep 11, 2019
2 parents 427f261 + f124ae2 commit 32ca26c
Show file tree
Hide file tree
Showing 10 changed files with 2,737 additions and 20 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<groupId>fr.cnes.sonarqube.plugins</groupId>
<artifactId>sonaricode</artifactId>
<packaging>sonar-plugin</packaging>
<version>1.2.0</version>
<version>1.3.0</version>
<name>Sonar i-Code CNES plugin</name>

<description>i-Code CNES plugin for SonarQube</description>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package fr.cnes.sonar.plugins.icode.converter;

import com.thoughtworks.xstream.converters.ConverterLookup;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.mapper.Mapper;
import fr.cnes.sonar.plugins.icode.model.AnalysisRule;
import fr.cnes.sonar.plugins.icode.model.Result;

public class AnalysisConverter extends ToAttributedValueConverter {

public AnalysisConverter(Class type, Mapper mapper, ReflectionProvider reflectionProvider, ConverterLookup lookup) {
super(type, mapper, reflectionProvider, lookup);
}

public AnalysisConverter(Class type, Mapper mapper, ReflectionProvider reflectionProvider, ConverterLookup lookup, String valueFieldName) {
super(type, mapper, reflectionProvider, lookup, valueFieldName);
}

public AnalysisConverter(Class type, Mapper mapper, ReflectionProvider reflectionProvider, ConverterLookup lookup, String valueFieldName, Class valueDefinedIn) {
super(type, mapper, reflectionProvider, lookup, valueFieldName, valueDefinedIn);
}

@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext unmarshallingContext) {
Object r = super.unmarshal(reader, unmarshallingContext);
if (r.getClass() == AnalysisRule.class) {
Result result = new Result();
reader.moveDown();
result.setFileName(reader.getAttribute("fileName"));
result.setResultLine(reader.getAttribute("resultLine"));
result.setResultTypePlace(reader.getAttribute("resultTypePlace"));
result.setResultValue(reader.getAttribute("resultValue"));
if(reader.hasMoreChildren()) {
reader.moveDown();
result.setResultMessage(reader.getValue());
reader.moveUp();
}
reader.moveUp();
((AnalysisRule) r).setResult(result);
}
return r;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,17 @@
package fr.cnes.sonar.plugins.icode.model;


import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;

/**
* Class used to unmarshal i-Code xml file.
*
* It contains an analyzed file.
*
* @author lequal
*/
@XStreamConverter(value = ToAttributedValueConverter.class)
public class AnalysisFile {
private String language;
private String fileName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,17 @@
package fr.cnes.sonar.plugins.icode.model;


import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;

/**
* Class used to unmarshal i-Code xml file.
*
* It contains meta data about the i-Code analysis.
*
* @author lequal
*/
@XStreamConverter(ToAttributedValueConverter.class)
public class AnalysisInformations {
private String author;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
*/
package fr.cnes.sonar.plugins.icode.model;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamInclude;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand All @@ -27,10 +31,14 @@
*
* @author lequal
*/
@XStreamAlias("analysisProject")
@XStreamInclude({AnalysisFile.class, AnalysisRule.class, AnalysisInformations.class})
public class AnalysisProject {
private AnalysisInformations analysisInformations;
private AnalysisFile[] analysisFile;
private AnalysisRule[] analysisRule;
@XStreamImplicit(itemFieldName = "analysisFile")
private List<AnalysisFile> analysisFile;
@XStreamImplicit(itemFieldName = "analysisRule")
private List<AnalysisRule> analysisRule;

/**
* Getter for accessing analysis rules (issues).
Expand All @@ -39,8 +47,8 @@ public class AnalysisProject {
public List<AnalysisRule> getAnalysisRules() {
// Retrieve issues (called rules)
List<AnalysisRule> rules;
if(getAnalysisRule() !=null) {
rules = Arrays.asList(getAnalysisRule());
if(analysisRule !=null) {
rules = this.analysisRule;
} else {
rules = new ArrayList<>();
}
Expand All @@ -54,8 +62,8 @@ public List<AnalysisRule> getAnalysisRules() {
public List<AnalysisFile> getAnalysisFiles() {
// Retrieve files
List<AnalysisFile> files;
if(getAnalysisFile() !=null) {
files = Arrays.asList(getAnalysisFile());
if(analysisFile !=null) {
files = this.analysisFile;
} else {
files = new ArrayList<>();
}
Expand All @@ -71,19 +79,11 @@ public void setAnalysisInformations(AnalysisInformations analysisInformations) {
this.analysisInformations = analysisInformations;
}

public AnalysisFile[] getAnalysisFile() {
return analysisFile;
}

public void setAnalysisFile(AnalysisFile[] analysisFile) {
this.analysisFile = analysisFile;
}

public AnalysisRule[] getAnalysisRule() {
return analysisRule;
this.analysisFile = Arrays.asList(analysisFile);
}

public void setAnalysisRule(AnalysisRule[] analysisRule) {
this.analysisRule = analysisRule;
this.analysisRule = Arrays.asList(analysisRule);
}
}
13 changes: 11 additions & 2 deletions src/main/java/fr/cnes/sonar/plugins/icode/model/AnalysisRule.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,24 @@
package fr.cnes.sonar.plugins.icode.model;


import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamInclude;
import fr.cnes.sonar.plugins.icode.converter.AnalysisConverter;

/**
* Class used to unmarshal i-Code xml file.
*
* It contains an issue and a violated rule.
*
* @author lequal
*/
@XStreamInclude(Result.class)
@XStreamConverter(value = AnalysisConverter.class, strings = {"result"})
public class AnalysisRule {

private String analysisRuleId;
private Result result;

public String getAnalysisRuleId() {
return analysisRuleId;
}
Expand All @@ -34,7 +43,6 @@ public Result getResult() {
return result;
}

private String analysisRuleId;

public void setAnalysisRuleId(String analysisRuleId) {
this.analysisRuleId = analysisRuleId;
Expand All @@ -44,6 +52,7 @@ public void setResult(Result result) {
this.result = result;
}

private Result result;

}


4 changes: 4 additions & 0 deletions src/main/java/fr/cnes/sonar/plugins/icode/model/Result.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,17 @@
*/
package fr.cnes.sonar.plugins.icode.model;

import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;

/**
* Class used to unmarshal i-Code xml file.
*
* It contains an issue or a metric.
*
* @author lequal
*/
@XStreamConverter(value = ToAttributedValueConverter.class)
public class Result {

private String fileName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class ICodePluginProperties {
/**
* i-Code CNES default location's path value.
*/
public static final String ICODE_PATH_DEFAULT = "${HOME}/icode-cnes/icode.exe";
public static final String ICODE_PATH_DEFAULT = "/usr/bin/icodegit";

/**
* Prefix used by all properties of this plugin.
Expand Down
41 changes: 41 additions & 0 deletions src/test/java/fr/cnes/sonar/plugins/icode/ParseResultTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package fr.cnes.sonar.plugins.icode;

import fr.cnes.sonar.plugins.icode.model.AnalysisProject;
import fr.cnes.sonar.plugins.icode.model.XmlHandler;
import org.junit.Assert;
import org.junit.Test;

import java.io.InputStream;

public class ParseResultTest {
@Test
public void parseIcodeOutputTest() {
InputStream icodeOutput = getClass().getResourceAsStream("/result.res");
AnalysisProject analysisProject = (AnalysisProject) XmlHandler.unmarshal(icodeOutput, AnalysisProject.class);


Assert.assertNotNull(analysisProject);
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0));

// Try to get Analysis informations
Assert.assertNotNull(analysisProject.getAnalysisInformations().getAuthor());

// Try to get files informations
Assert.assertEquals(7, analysisProject.getAnalysisFiles().size());
Assert.assertNotNull(analysisProject.getAnalysisFiles().get(0).getFileName());
Assert.assertNotNull(analysisProject.getAnalysisFiles().get(0).getLanguage());

// Try to get rules analyzed
Assert.assertEquals(574, analysisProject.getAnalysisRules().size());
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult());
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getAnalysisRuleId());

// Try to get results
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getResultTypePlace());
Assert.assertNotNull(analysisProject.getAnalysisRules().get(58).getResult().getResultMessage());
Assert.assertNull(analysisProject.getAnalysisRules().get(0).getResult().getResultMessage());
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getFileName());
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getResultValue());
Assert.assertNotNull(analysisProject.getAnalysisRules().get(0).getResult().getResultLine());
}
}
Loading

0 comments on commit 32ca26c

Please sign in to comment.