Skip to content

Commit

Permalink
Merge pull request TouK#131 from mirkosertic/master
Browse files Browse the repository at this point in the history
Implementation of TouK#113 Plugin Facility for Sputnik Processors
  • Loading branch information
SpOOnman committed Feb 23, 2016
2 parents da14d26 + 999e843 commit bb50165
Show file tree
Hide file tree
Showing 23 changed files with 450 additions and 42 deletions.
3 changes: 1 addition & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ dependencies {
compile 'ch.qos.logback:logback-classic:1.0.13'
compile 'org.projectlombok:lombok:1.12.6'
compile 'commons-cli:commons-cli:1.2'
compile 'org.codehaus.sonar.runner:sonar-runner-api:2.4'
compile 'org.codehaus.sonar-plugins:sonar-issues-report-plugin:1.3'
compile 'org.sonarsource.sonar-runner:sonar-runner-api:2.5.1'
compile 'com.jayway.jsonpath:json-path:0.9.1'

compile 'com.urswolfer.gerrit.client.rest:gerrit-rest-java-client:0.8.5'
Expand Down
43 changes: 11 additions & 32 deletions src/main/java/pl/touk/sputnik/engine/ProcessorBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,27 @@

import org.jetbrains.annotations.NotNull;
import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.checkstyle.CheckstyleProcessor;
import pl.touk.sputnik.processor.codenarc.CodeNarcProcessor;
import pl.touk.sputnik.processor.findbugs.FindBugsProcessor;
import pl.touk.sputnik.processor.jshint.JsHintProcessor;
import pl.touk.sputnik.processor.jslint.JsLintProcessor;
import pl.touk.sputnik.processor.pmd.PmdProcessor;
import pl.touk.sputnik.processor.scalastyle.ScalastyleProcessor;
import pl.touk.sputnik.processor.sonar.SonarProcessor;
import pl.touk.sputnik.processor.ReviewProcessorFactory;
import pl.touk.sputnik.review.ReviewProcessor;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;

public class ProcessorBuilder {

@NotNull
public static List<ReviewProcessor> buildProcessors(Configuration configuration) {
List<ReviewProcessor> processors = new ArrayList<>();
if (Boolean.valueOf(configuration.getProperty(GeneralOption.CHECKSTYLE_ENABLED))) {
processors.add(new CheckstyleProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.PMD_ENABLED))) {
processors.add(new PmdProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.FINDBUGS_ENABLED))) {
processors.add(new FindBugsProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.SCALASTYLE_ENABLED))) {
processors.add(new ScalastyleProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.CODE_NARC_ENABLED))) {
processors.add(new CodeNarcProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.JSLINT_ENABLED))) {
processors.add(new JsLintProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.JSHINT_ENABLED))) {
processors.add(new JsHintProcessor(configuration));
}
if (Boolean.valueOf(configuration.getProperty(GeneralOption.SONAR_ENABLED))) {
processors.add(new SonarProcessor(configuration));

ServiceLoader<ReviewProcessorFactory> loader = ServiceLoader.load(ReviewProcessorFactory.class);
Iterator<ReviewProcessorFactory> iterator = loader.iterator();
while (iterator.hasNext()) {
ReviewProcessorFactory factory = iterator.next();
if (factory.isEnabled(configuration)) {
processors.add(factory.create(configuration));
}
}
return processors;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package pl.touk.sputnik.processor;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.review.ReviewProcessor;

public interface ReviewProcessorFactory<T extends ReviewProcessor> {

boolean isEnabled(Configuration configuration);

T create(Configuration configuration);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.checkstyle;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class CheckstyleReviewProcessorFactory implements ReviewProcessorFactory<CheckstyleProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.CHECKSTYLE_ENABLED));
}

@Override
public CheckstyleProcessor create(Configuration configuration) {
return new CheckstyleProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.codenarc;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class NodeCardReviewProcessorFactory implements ReviewProcessorFactory<CodeNarcProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.CODE_NARC_ENABLED));
}

@Override
public CodeNarcProcessor create(Configuration configuration) {
return new CodeNarcProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.findbugs;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class FindbugsReviewProcessorFactory implements ReviewProcessorFactory<FindBugsProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.FINDBUGS_ENABLED));
}

@Override
public FindBugsProcessor create(Configuration configuration) {
return new FindBugsProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.jshint;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class JsHintReviewProcessorFactory implements ReviewProcessorFactory<JsHintProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.JSHINT_ENABLED));
}

@Override
public JsHintProcessor create(Configuration configuration) {
return new JsHintProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.jslint;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class JsLintReviewProcessorFactory implements ReviewProcessorFactory<JsLintProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.JSLINT_ENABLED));
}

@Override
public JsLintProcessor create(Configuration configuration) {
return new JsLintProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.pmd;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class PmdReviewProcessorFactory implements ReviewProcessorFactory<PmdProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.PMD_ENABLED));
}

@Override
public PmdProcessor create(Configuration configuration) {
return new PmdProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.scalastyle;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class ScalastyleReviewProcessorFactory implements ReviewProcessorFactory<ScalastyleProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.SCALASTYLE_ENABLED));
}

@Override
public ScalastyleProcessor create(Configuration configuration) {
return new ScalastyleProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pl.touk.sputnik.processor.sonar;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

public class SonarReviewProcessorFactory implements ReviewProcessorFactory<SonarProcessor> {

@Override
public boolean isEnabled(Configuration configuration) {
return Boolean.valueOf(configuration.getProperty(GeneralOption.SONAR_ENABLED));
}

@Override
public SonarProcessor create(Configuration configuration) {
return new SonarProcessor(configuration);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,11 @@ Properties loadBaseProperties() throws IOException {
public File run() throws IOException {
Properties props = loadBaseProperties();
setAdditionalProperties(props);

sonarEmbeddedRunner.globalProperties().putAll(props);

log.info("Sonar configuration: {}", props.toString());
sonarEmbeddedRunner.addProperties(props);

sonarEmbeddedRunner.execute();
return new File(OUTPUT_DIR, OUTPUT_FILE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import org.sonar.runner.api.EmbeddedRunner;

import org.sonar.runner.api.StdOutLogOutput;
import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.review.Review;
import pl.touk.sputnik.review.ReviewFile;
Expand All @@ -31,7 +32,7 @@ public SonarRunner prepareRunner(Review review, Configuration configuration) {
for (ReviewFile file : review.getFiles()) {
files.add("**/" + new File(file.getReviewFilename()).getName());
}
SonarRunner sonarRunner = new SonarRunner(files, EmbeddedRunner.create(), configuration);
SonarRunner sonarRunner = new SonarRunner(files, EmbeddedRunner.create(new StdOutLogOutput()), configuration);
return sonarRunner;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pl.touk.sputnik.processor.checkstyle.CheckstyleReviewProcessorFactory
pl.touk.sputnik.processor.pmd.PmdReviewProcessorFactory
pl.touk.sputnik.processor.findbugs.FindbugsReviewProcessorFactory
pl.touk.sputnik.processor.scalastyle.ScalastyleReviewProcessorFactory
pl.touk.sputnik.processor.codenarc.NodeCardReviewProcessorFactory
pl.touk.sputnik.processor.jslint.JsLintReviewProcessorFactory
pl.touk.sputnik.processor.jshint.JsHintReviewProcessorFactory
pl.touk.sputnik.processor.sonar.SonarReviewProcessorFactory
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package pl.touk.sputnik.processor.checkstyle;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

import org.junit.Test;

import static org.junit.Assert.*;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class CheckstyleReviewProcessorFactoryTest {

@Test
public void testIsEnabled() throws Exception {
Configuration configuration = mock(Configuration.class);
when(configuration.getProperty(eq(GeneralOption.CHECKSTYLE_ENABLED))).thenReturn("true");

ReviewProcessorFactory factory = new CheckstyleReviewProcessorFactory();
assertTrue(factory.isEnabled(configuration));
}

@Test
public void testCreate() throws Exception {
Configuration configuration = mock(Configuration.class);
when(configuration.getProperty(eq(GeneralOption.CHECKSTYLE_ENABLED))).thenReturn("true");

ReviewProcessorFactory factory = new CheckstyleReviewProcessorFactory();
assertNotNull(factory.create(configuration));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package pl.touk.sputnik.processor.codenarc;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

import org.junit.Test;

import static org.junit.Assert.*;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class NodeCardReviewProcessorFactoryTest {

@Test
public void testIsEnabled() throws Exception {
Configuration configuration = mock(Configuration.class);
when(configuration.getProperty(eq(GeneralOption.CODE_NARC_ENABLED))).thenReturn("true");

ReviewProcessorFactory factory = new NodeCardReviewProcessorFactory();
assertTrue(factory.isEnabled(configuration));
}

@Test
public void testCreate() throws Exception {
Configuration configuration = mock(Configuration.class);
when(configuration.getProperty(eq(GeneralOption.CODE_NARC_ENABLED))).thenReturn("true");

ReviewProcessorFactory factory = new NodeCardReviewProcessorFactory();
assertNotNull(factory.create(configuration));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package pl.touk.sputnik.processor.findbugs;

import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.processor.ReviewProcessorFactory;

import org.junit.Test;

import static org.junit.Assert.*;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class FindbugsReviewProcessorFactoryTest {

@Test
public void testIsEnabled() throws Exception {
Configuration configuration = mock(Configuration.class);
when(configuration.getProperty(eq(GeneralOption.FINDBUGS_ENABLED))).thenReturn("true");

ReviewProcessorFactory factory = new FindbugsReviewProcessorFactory();
assertTrue(factory.isEnabled(configuration));
}

@Test
public void testCreate() throws Exception {
Configuration configuration = mock(Configuration.class);
when(configuration.getProperty(eq(GeneralOption.FINDBUGS_ENABLED))).thenReturn("true");

ReviewProcessorFactory factory = new FindbugsReviewProcessorFactory();
assertNotNull(factory.create(configuration));
}
}

0 comments on commit bb50165

Please sign in to comment.