SONAR-2797 end of support of maven archetypes

This commit is contained in:
Simon Brandhof 2011-09-30 13:30:22 +02:00
parent 3d4da0c8c9
commit dc30e55e56
75 changed files with 1 additions and 2374 deletions

View File

@ -1,8 +0,0 @@
To update the archetype project :
1. update sources of the initial project (/project directory)
2. /project$ mvn install -DsonarTargetVersion=<version>
3. copy the content of /project/target/generated-sources/archetype/src/main/resources to src/main/resources. Be careful with .svn files !
To execute the archetype :
mvn archetype:generate -B -DarchetypeGroupId=org.codehaus.sonar.archetypes -DarchetypeArtifactId=sonar-basic-plugin-archetype -DarchetypeVersion=<SONAR VERSION> -DgroupId=com.mycompany.sonar -DartifactId=sonar-basic-sample-plugin -Dversion=0.1-SNAPSHOT

View File

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar</artifactId>
<version>2.12-SNAPSHOT</version>
<relativePath>../..</relativePath>
</parent>
<groupId>org.codehaus.sonar.archetypes</groupId>
<artifactId>sonar-basic-plugin-archetype</artifactId>
<packaging>maven-archetype</packaging>
<name>Sonar :: Archetypes :: Basic</name>
<description>Maven archetype to create a basic Sonar plugin</description>
<properties>
<sonarTargetVersion>${project.version}</sonarTargetVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.0-alpha-4</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.0-alpha-4</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.sonar.archetypes</groupId>
<artifactId>sonar-basic-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Sonar plugin</name>
<description>plugin description</description>
<!-- optional -->
<organization>
<name>My company</name>
<url>http://www.mycompany.com</url>
</organization>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonarTargetVersion}</version>
</dependency>
<!-- add your dependencies here -->
<!-- unit tests -->
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonarTargetVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.0</version>
<extensions>true</extensions>
<configuration>
<pluginClass>${package}.SamplePlugin</pluginClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,38 +0,0 @@
package org.sonar.plugins.sample;
import org.sonar.api.web.*;
@UserRole(UserRole.USER)
@Description("Show how to use Ruby Widget API")
@WidgetProperties({
@WidgetProperty(key="param1",
description="This is a mandatory parameter",
optional=false
),
@WidgetProperty(key="max",
description="max threshold",
type=WidgetPropertyType.INTEGER,
defaultValue="80"
),
@WidgetProperty(key="param2",
description="This is an optional parameter"
),
@WidgetProperty(key="floatprop",
description="test description"
)
})
public class SampleDashboardWidget extends AbstractRubyTemplate implements RubyRailsWidget {
public String getId() {
return "sample";
}
public String getTitle() {
return "Sample";
}
@Override
protected String getTemplatePath() {
return "/sample_dashboard_widget.html.erb";
}
}

View File

@ -1,26 +0,0 @@
package org.sonar.plugins.sample;
import org.sonar.api.measures.Metrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.CoreMetrics;
import java.util.List;
import java.util.Arrays;
public class SampleMetrics implements Metrics {
public static final Metric MESSAGE = new Metric("message_key", "Message",
"This is a metric to store a well known message", Metric.ValueType.STRING, -1, false,
CoreMetrics.DOMAIN_GENERAL);
public static final Metric RANDOM = new Metric("random", "Random",
"Random value", Metric.ValueType.FLOAT, Metric.DIRECTION_BETTER, false,
CoreMetrics.DOMAIN_GENERAL);
// getMetrics() method is defined in the Metrics interface and is used by
// Sonar to retrieve the list of new Metric
public List<Metric> getMetrics() {
return Arrays.asList(MESSAGE, RANDOM);
}
}

View File

@ -1,43 +0,0 @@
package org.sonar.plugins.sample;
import org.sonar.api.Plugin;
import java.util.ArrayList;
import java.util.List;
/**
* This class is the entry point for all extensions
*/
public class SamplePlugin implements Plugin {
/**
* @deprecated this is not used anymore
*/
public String getKey() {
return "sample";
}
/**
* @deprecated this is not used anymore
*/
public String getName() {
return "My Sonar plugin";
}
/**
* @deprecated this is not used anymore
*/
public String getDescription() {
return "You shouldn't expect too much from this plugin except displaying the Hello World message.";
}
// This is where you're going to declare all your Sonar extensions
public List getExtensions() {
return Arrays.asList(SampleMetrics.class, SampleSensor.class, SampleDashboardWidget.class);
}
@Override
public String toString() {
return getClass().getSimpleName();
}
}

View File

@ -1,30 +0,0 @@
package org.sonar.plugins.sample;
import org.apache.commons.lang.math.RandomUtils;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.measures.Measure;
import org.sonar.api.resources.Project;
public class SampleSensor implements Sensor {
public boolean shouldExecuteOnProject(Project project) {
// this sensor is executed on any type of project
return true;
}
public void analyse(Project project, SensorContext sensorContext) {
saveLabelMeasure(sensorContext);
saveNumericMeasure(sensorContext);
}
private void saveNumericMeasure(SensorContext context) {
// Sonar API includes many libraries like commons-lang and google-collections
context.saveMeasure(SampleMetrics.RANDOM, RandomUtils.nextDouble());
}
private void saveLabelMeasure(SensorContext context) {
Measure measure = new Measure(SampleMetrics.MESSAGE, "Hello World!");
context.saveMeasure(measure);
}
}

View File

@ -1,40 +0,0 @@
<div class="dashbox">
<h3><span title="<%= metric('random').description -%>"></span></h3>
<p>
<span class="big">
<%= format_measure('random') -%> <%= tendency_icon(measure('random')) %>
</span>
</p>
<p><%= format_measure('message') -%></p>
<p>
<%= format_measure('ncloc', :suffix => ' lines', :url => url_for_drilldown('ncloc')) -%>
</p>
</div>
<div class="dashbox">
<h3>Help</h3>
<p>
Read configuration : <%= configuration('sonar.jdbc.username') -%>
</p>
<p>
Sample of Jfree Eastwood chart : <br/>
<%= gchart('cht=bhs&chco=FF0000,00FF00,0000FF&chs=200x125&chd=s:FOE,THE,Bar&chxt=x,y&chxl=1:|Dec|Nov|Oct|0:||20K||60K||100K|') -%>
</p>
<p>
Widget properties:
<table>
<tr>
<td>max:</td>
<td><%= widget_properties['max'] -%></td>
</tr>
<tr>
<td>param1:</td>
<td><%= widget_properties['param1'] -%></td>
</tr>
<tr>
<td>param2:</td>
<td><%= widget_properties['param2'] -%></td>
</tr>
</table>
</p>
</div>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><archetype-descriptor name="sonar-basic-plugin">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.erb</include>
</includes>
</fileSet>
</fileSets>
</archetype-descriptor>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><archetype>
<id>sonar-basic-plugin</id>
<sources>
<source>src/main/java/SampleDashboardWidget.java</source>
<source>src/main/java/SampleMetrics.java</source>
<source>src/main/java/SamplePlugin.java</source>
<source>src/main/java/SampleSensor.java</source>
</sources>
<resources>
<resource>src/main/resources/sample_dashboard_widget.html.erb</resource>
</resources>
</archetype>

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>$groupId</groupId>
<artifactId>$artifactId</artifactId>
<packaging>sonar-plugin</packaging>
<version>$version</version>
<name>My Sonar plugin</name>
<description>plugin description</description>
<!-- optional -->
<organization>
<name>My company</name>
<url>http://www.mycompany.com</url>
</organization>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonarTargetVersion}</version>
</dependency>
<!-- add your dependencies here -->
<!-- unit tests -->
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonarTargetVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.0</version>
<extensions>true</extensions>
<configuration>
<pluginClass>${package}.SamplePlugin</pluginClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,41 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package};
import org.sonar.api.web.*;
@UserRole(UserRole.USER)
@Description("Show how to use Ruby Widget API")
@WidgetProperties({
@WidgetProperty(key="param1",
description="This is a mandatory parameter",
optional=false
),
@WidgetProperty(key="max",
description="max threshold",
type=WidgetPropertyType.INTEGER,
defaultValue="80"
),
@WidgetProperty(key="param2",
description="This is an optional parameter"
),
@WidgetProperty(key="floatprop",
description="test description"
)
})
public class SampleDashboardWidget extends AbstractRubyTemplate implements RubyRailsWidget {
public String getId() {
return "sample";
}
public String getTitle() {
return "Sample";
}
@Override
protected String getTemplatePath() {
return "/sample_dashboard_widget.html.erb";
}
}

View File

@ -1,29 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package};
import org.sonar.api.measures.Metrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.CoreMetrics;
import java.util.List;
import java.util.Arrays;
public class SampleMetrics implements Metrics {
public static final Metric MESSAGE = new Metric("message_key", "Message",
"This is a metric to store a well known message", Metric.ValueType.STRING, -1, false,
CoreMetrics.DOMAIN_GENERAL);
public static final Metric RANDOM = new Metric("random", "Random",
"Random value", Metric.ValueType.FLOAT, Metric.DIRECTION_BETTER, false,
CoreMetrics.DOMAIN_GENERAL);
// getMetrics() method is defined in the Metrics interface and is used by
// Sonar to retrieve the list of new Metric
public List<Metric> getMetrics() {
return Arrays.asList(MESSAGE, RANDOM);
}
}

View File

@ -1,46 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package};
import org.sonar.api.Plugin;
import java.util.Arrays;
import java.util.List;
/**
* This class is the entry point for all extensions
*/
public class SamplePlugin implements Plugin {
/**
* @deprecated this is not used anymore
*/
public String getKey() {
return "sample";
}
/**
* @deprecated this is not used anymore
*/
public String getName() {
return "My Sonar plugin";
}
/**
* @deprecated this is not used anymore
*/
public String getDescription() {
return "You shouldn't expect too much from this plugin except displaying the Hello World message.";
}
// This is where you're going to declare all your Sonar extensions
public List getExtensions() {
return Arrays.asList(SampleMetrics.class, SampleSensor.class, SampleDashboardWidget.class);
}
@Override
public String toString() {
return getClass().getSimpleName();
}
}

View File

@ -1,33 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package};
import org.apache.commons.lang.math.RandomUtils;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.measures.Measure;
import org.sonar.api.resources.Project;
public class SampleSensor implements Sensor {
public boolean shouldExecuteOnProject(Project project) {
// this sensor is executed on any type of project
return true;
}
public void analyse(Project project, SensorContext sensorContext) {
saveLabelMeasure(sensorContext);
saveNumericMeasure(sensorContext);
}
private void saveNumericMeasure(SensorContext context) {
// Sonar API includes many libraries like commons-lang and google-collections
context.saveMeasure(SampleMetrics.RANDOM, RandomUtils.nextDouble());
}
private void saveLabelMeasure(SensorContext context) {
Measure measure = new Measure(SampleMetrics.MESSAGE, "Hello World!");
context.saveMeasure(measure);
}
}

View File

@ -1,40 +0,0 @@
<div class="dashbox">
<h3><span title="<%= metric('random').description -%>"></span></h3>
<p>
<span class="big">
<%= format_measure('random') -%> <%= tendency_icon(measure('random')) %>
</span>
</p>
<p><%= format_measure('message') -%></p>
<p>
<%= format_measure('ncloc', :suffix => ' lines', :url => url_for_drilldown('ncloc')) -%>
</p>
</div>
<div class="dashbox">
<h3>Help</h3>
<p>
Read configuration : <%= configuration('sonar.jdbc.username') -%>
</p>
<p>
Sample of Jfree Eastwood chart : <br/>
<%= gchart('cht=bhs&chco=FF0000,00FF00,0000FF&chs=200x125&chd=s:FOE,THE,Bar&chxt=x,y&chxl=1:|Dec|Nov|Oct|0:||20K||60K||100K|') -%>
</p>
<p>
Widget properties:
<table>
<tr>
<td>max:</td>
<td><%= widget_properties['max'] -%></td>
</tr>
<tr>
<td>param1:</td>
<td><%= widget_properties['param1'] -%></td>
</tr>
<tr>
<td>param2:</td>
<td><%= widget_properties['param2'] -%></td>
</tr>
</table>
</p>
</div>

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar</artifactId>
<version>2.12-SNAPSHOT</version>
<relativePath>../..</relativePath>
</parent>
<groupId>org.codehaus.sonar.archetypes</groupId>
<artifactId>sonar-gwt-plugin-archetype</artifactId>
<packaging>maven-archetype</packaging>
<name>Sonar :: Archetypes :: GWT</name>
<description>Maven archetype to create a Sonar plugin including GWT pages</description>
<properties>
<sonarTargetVersion>${project.version}</sonarTargetVersion>
<dollar>$</dollar>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-gwt-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.0-alpha-4</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.0-alpha-4</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,123 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.sonar.archetypes</groupId>
<artifactId>sonar-gwt-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Sonar GWT plugin</name>
<description>GWT Sample description</description>
<!-- optional -->
<organization>
<name>My company</name>
<url>http://www.mycompany.com</url>
</organization>
<repositories>
<repository>
<!-- for gwt-incubator -->
<id>sonar</id>
<name>Sonar</name>
<url>http://repository.sonarsource.org/content/repositories/sonar</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonarTargetVersion}</version>
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-gwt-api</artifactId>
<version>${sonarTargetVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.0.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-incubator</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
<!-- unit tests -->
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonarTargetVersion}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.0</version>
<extensions>true</extensions>
<configuration>
<pluginClass>${package}.GwtSamplePlugin</pluginClass>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<configuration>
<modules>
<module>${package}.resourcetab.SampleResourceTab</module>
<module>${package}.page.SamplePage</module>
</modules>
<webappDirectory>${project.build.directory}/classes</webappDirectory>
<!-- do not break the following property on two lines -->
<extraJvmArgs>-Xmx512m -Dgwt.jjs.permutationWorkerFactory=com.google.gwt.dev.ThreadedPermutationWorkerFactory</extraJvmArgs>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,40 +0,0 @@
package org.sonar.plugins.gwtsample;
import org.sonar.api.Plugin;
import org.sonar.plugins.gwtsample.page.GwtSamplePage;
import org.sonar.plugins.gwtsample.resourcetab.GwtSampleResourceTab;
import java.util.Arrays;
import java.util.List;
public class GwtSamplePlugin implements Plugin {
/**
* @deprecated this is not used anymore
*/
public String getKey() {
return "gwt-sample";
}
/**
* @deprecated this is not used anymore
*/
public String getName() {
return "GWT Sample";
}
/**
* @deprecated this is not used anymore
*/
public String getDescription() {
return "GWT Sample description";
}
public List getExtensions() {
return Arrays.asList(GwtSampleResourceTab.class, GwtSamplePage.class);
}
public String toString() {
return getKey();
}
}

View File

@ -1,18 +0,0 @@
package org.sonar.plugins.gwtsample.page;
import org.sonar.api.web.GwtPage;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.UserRole;
@NavigationSection(NavigationSection.RESOURCE)
@UserRole(UserRole.USER)
public class GwtSamplePage extends GwtPage {
public String getGwtId() {
return "org.sonar.plugins.gwtsample.page.SamplePage";
}
public String getTitle() {
return "Sample";
}
}

View File

@ -1,13 +0,0 @@
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
<inherits name="org.sonar.Sonar"/>
<entry-point class='org.sonar.plugins.gwtsample.page.client.SamplePage'/>
<extend-property name="locale" values="en"/>
<extend-property name="locale" values="fr"/>
</module>

View File

@ -1,11 +0,0 @@
package org.sonar.plugins.gwtsample.page.client;
import com.google.gwt.core.client.GWT;
public interface I18nConstants extends com.google.gwt.i18n.client.Constants {
static I18nConstants INSTANCE = GWT.create(I18nConstants.class);
@DefaultStringValue("This is a sample")
String sample();
}

View File

@ -1,2 +0,0 @@
# This file must use UTF-8 encoding
sample=Ceci est un exemple

View File

@ -1,18 +0,0 @@
package org.sonar.plugins.gwtsample.page.client;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import org.sonar.gwt.ui.Page;
import org.sonar.wsclient.services.Resource;
public class SamplePage extends Page {
@Override
protected Widget doOnResourceLoad(Resource resource) {
VerticalPanel panel = new VerticalPanel();
panel.add(new Label(resource.getName(true)));
panel.add(new Label(I18nConstants.INSTANCE.sample()));
return panel;
}
}

View File

@ -1,32 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>GWT Smaple</title>
<link href="http://localhost:9000/dev/stylesheets/yui-2.6.0.css" media="all" rel="Stylesheet" type="text/css" />
<link href="http://localhost:9000/dev/stylesheets/style.css" media="all" rel="Stylesheet" type="text/css" />
<script src="http://localhost:9000/dev/javascripts/application.js" type="text/javascript"></script>
<script src="http://localhost:9000/dev/javascripts/prototype.js" type="text/javascript"></script>
<script src="http://localhost:9000/dev/javascripts/scriptaculous.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
var config = {
"sonar_url": "http://localhost:9000/dev",
"resource_key" : "org.codehaus.sonar:sonar",
};
</script>
<div class="error" id="error" style="display:none"><span id="errormsg"></span> &nbsp;&nbsp;[<a href="#" onclick="javascript:$('error').hide();return false;">hide</a>]</div>
<div class="warning" id="warning" style="display:none"><span id="warningmsg"></span> &nbsp;&nbsp;[<a href="#" onclick="javascript:$('warning').hide();return false;">hide</a>]</div>
<div class="notice" id="info" style="display:none"><span id="infomsg"></span> &nbsp;&nbsp;[<a href="#" onclick="javascript:$('info').hide();return false;">hide</a>]</div>
<div id="gwtpage">
</div>
<script type="text/javascript" language="javascript" src="org.sonar.plugins.gwtsample.page.GwtSamplePage.nocache.js"></script>
</body>
</html>

View File

@ -1,17 +0,0 @@
package org.sonar.plugins.gwtsample.resourcetab;
import org.sonar.api.web.GwtPage;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.UserRole;
@NavigationSection(NavigationSection.RESOURCE_TAB)
@UserRole(UserRole.USER)
public class GwtSampleResourceTab extends GwtPage {
public String getTitle() {
return "Sample";
}
public String getGwtId() {
return "org.sonar.plugins.gwtsample.resourcetab.SampleResourceTab";
}
}

View File

@ -1,10 +0,0 @@
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
<inherits name="org.sonar.Sonar"/>
<entry-point class='org.sonar.plugins.gwtsample.resourcetab.client.SampleResourceTab'/>
</module>

View File

@ -1,14 +0,0 @@
package org.sonar.plugins.gwtsample.resourcetab.client;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import org.sonar.gwt.ui.Page;
import org.sonar.wsclient.services.Resource;
public class SampleResourceTab extends Page {
@Override
protected Widget doOnResourceLoad(Resource resource) {
return new Label("This is a sample");
}
}

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><archetype-descriptor name="sonar-gwt-plugin-archetype">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.html</include>
<include>**/*.java</include>
<include>**/*.properties</include>
</includes>
</fileSet>
</fileSets>
</archetype-descriptor>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><archetype>
<id>sonar-gwt-plugin</id>
<sources>
<source>src/main/java/GwtSamplePlugin.java</source>
<source>src/main/java/page/client/I18nConstants.java</source>
<source>src/main/java/page/client/I18nConstants_fr.properties</source>
<source>src/main/java/page/client/SamplePage.java</source>
<source>src/main/java/page/GwtSamplePage.java</source>
<source>src/main/java/page/public/test.html</source>
<source>src/main/java/page/SamplePage.gwt.xml</source>
<source>src/main/java/resourcetab/client/SampleResourceTab.java</source>
<source>src/main/java/resourcetab/GwtSampleResourceTab.java</source>
<source>src/main/java/resourcetab/SampleResourceTab.gwt.xml</source>
</sources>
</archetype>

View File

@ -1,121 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>$groupId</groupId>
<artifactId>$artifactId</artifactId>
<packaging>sonar-plugin</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Sonar GWT plugin</name>
<description>GWT Sample description</description>
<!-- optional -->
<organization>
<name>My company</name>
<url>http://www.mycompany.com</url>
</organization>
<repositories>
<repository>
<!-- for gwt-incubator -->
<id>sonar</id>
<name>Sonar</name>
<url>http://repository.sonarsource.org/content/repositories/sonar</url>
<releases>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonarTargetVersion}</version>
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-gwt-api</artifactId>
<version>${sonarTargetVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.0.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-incubator</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
<!-- unit tests -->
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonarTargetVersion}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.0</version>
<extensions>true</extensions>
<configuration>
<pluginClass>${package}.GwtSamplePlugin</pluginClass>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<configuration>
<modules>
<module>${package}.resourcetab.SampleResourceTab</module>
<module>${package}.page.SamplePage</module>
</modules>
<webappDirectory>target/classes</webappDirectory>
<!-- do not break the following property on two lines -->
<extraJvmArgs>-Xmx512m -Dgwt.jjs.permutationWorkerFactory=com.google.gwt.dev.ThreadedPermutationWorkerFactory</extraJvmArgs>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,43 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package};
import org.sonar.api.Plugin;
import ${package}.page.GwtSamplePage;
import ${package}.resourcetab.GwtSampleResourceTab;
import java.util.Arrays;
import java.util.List;
public class GwtSamplePlugin implements Plugin {
/**
* @deprecated this is not used anymore
*/
public String getKey() {
return "gwt-sample";
}
/**
* @deprecated this is not used anymore
*/
public String getName() {
return "GWT Sample";
}
/**
* @deprecated this is not used anymore
*/
public String getDescription() {
return "GWT Sample description";
}
public List getExtensions() {
return Arrays.asList(GwtSampleResourceTab.class, GwtSamplePage.class);
}
public String toString() {
return getKey();
}
}

View File

@ -1,21 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.page;
import org.sonar.api.web.GwtPage;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.UserRole;
@NavigationSection(NavigationSection.RESOURCE)
@UserRole(UserRole.USER)
public class GwtSamplePage extends GwtPage {
public String getGwtId() {
return "${package}.page.SamplePage";
}
public String getTitle() {
return "Sample";
}
}

View File

@ -1,16 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
<inherits name="org.sonar.Sonar"/>
<entry-point class='${package}.page.client.SamplePage'/>
<extend-property name="locale" values="en"/>
<extend-property name="locale" values="fr"/>
</module>

View File

@ -1,14 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.page.client;
import com.google.gwt.core.client.GWT;
public interface I18nConstants extends com.google.gwt.i18n.client.Constants {
static I18nConstants INSTANCE = GWT.create(I18nConstants.class);
@DefaultStringValue("This is a sample")
String sample();
}

View File

@ -1,5 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
${symbol_pound} This file must use UTF-8 encoding
sample=Ceci est un exemple

View File

@ -1,21 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.page.client;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import org.sonar.gwt.ui.Page;
import org.sonar.wsclient.services.Resource;
public class SamplePage extends Page {
@Override
protected Widget doOnResourceLoad(Resource resource) {
VerticalPanel panel = new VerticalPanel();
panel.add(new Label(resource.getName(true)));
panel.add(new Label(I18nConstants.INSTANCE.sample()));
return panel;
}
}

View File

@ -1,35 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>GWT Smaple</title>
<link href="http://localhost:9000/dev/stylesheets/yui-2.6.0.css" media="all" rel="Stylesheet" type="text/css" />
<link href="http://localhost:9000/dev/stylesheets/style.css" media="all" rel="Stylesheet" type="text/css" />
<script src="http://localhost:9000/dev/javascripts/application.js" type="text/javascript"></script>
<script src="http://localhost:9000/dev/javascripts/prototype.js" type="text/javascript"></script>
<script src="http://localhost:9000/dev/javascripts/scriptaculous.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
var config = {
"sonar_url": "http://localhost:9000/dev",
"resource_key" : "org.codehaus.sonar:sonar",
};
</script>
<div class="error" id="error" style="display:none"><span id="errormsg"></span> &nbsp;&nbsp;[<a href="${symbol_pound}" onclick="javascript:${symbol_dollar}('error').hide();return false;">hide</a>]</div>
<div class="warning" id="warning" style="display:none"><span id="warningmsg"></span> &nbsp;&nbsp;[<a href="${symbol_pound}" onclick="javascript:${symbol_dollar}('warning').hide();return false;">hide</a>]</div>
<div class="notice" id="info" style="display:none"><span id="infomsg"></span> &nbsp;&nbsp;[<a href="${symbol_pound}" onclick="javascript:${symbol_dollar}('info').hide();return false;">hide</a>]</div>
<div id="gwtpage">
</div>
<script type="text/javascript" language="javascript" src="${package}.page.GwtSamplePage.nocache.js"></script>
</body>
</html>

View File

@ -1,20 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.resourcetab;
import org.sonar.api.web.GwtPage;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.UserRole;
@NavigationSection(NavigationSection.RESOURCE_TAB)
@UserRole(UserRole.USER)
public class GwtSampleResourceTab extends GwtPage {
public String getTitle() {
return "Sample";
}
public String getGwtId() {
return "${package}.resourcetab.SampleResourceTab";
}
}

View File

@ -1,13 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
<inherits name="org.sonar.Sonar"/>
<entry-point class='${package}.resourcetab.client.SampleResourceTab'/>
</module>

View File

@ -1,17 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.resourcetab.client;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import org.sonar.gwt.ui.Page;
import org.sonar.wsclient.services.Resource;
public class SampleResourceTab extends Page {
@Override
protected Widget doOnResourceLoad(Resource resource) {
return new Label("This is a sample");
}
}

19
pom.xml
View File

@ -12,8 +12,6 @@
<modules>
<!-- public artifacts to be deployed to central repository -->
<module>archetypes/sonar-basic-plugin</module>
<module>archetypes/sonar-gwt-plugin</module>
<module>sonar-application</module>
<module>sonar-batch</module>
<module>sonar-batch-bootstrapper</module>
@ -120,7 +118,7 @@
</extensions>
<pluginManagement>
<!-- Plugins ordered by shortname (archetype, assembly ...) -->
<!-- Plugins ordered by shortname (assembly, antrun ...) -->
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
@ -132,12 +130,6 @@
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
</plugin>
<plugin>
<!-- not thread safe -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.0-alpha-4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
@ -1046,15 +1038,6 @@
</developers>
<profiles>
<profile>
<id>all</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>samples</module>
</modules>
</profile>
<profile>
<id>dev</id>

View File

@ -1,15 +0,0 @@
=== How to install a plugin
1. Build plugin with Maven : mvn clean install
2. Copy the JAR file generated into target/ to the directory extensions/plugins/ of the Sonar server
3. Restart the Sonar server
=== How to activate Checkstyle extensions
Install the plugin "checkstyle-extensions-plugin" then search for the rule "Methods count" in the administration console of Quality profiles.
=== How to activate PMD extensions
Install the plugin "pmd-extensions-plugin" then search for the rules "MaximumMethodsCountCheck", "AvoidIfWithoutBrace" and "PreventUseOfEmptyClass" in the administration console of Quality profiles.

View File

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>standard-plugin</directory>
<outputDirectory>standard-plugin</outputDirectory>
<includes>
<include>src/**/*</include>
<include>pom.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>gwt-plugin</directory>
<outputDirectory>gwt-plugin</outputDirectory>
<includes>
<include>src/**/*</include>
<include>pom.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>checkstyle-extensions-plugin</directory>
<outputDirectory>checkstyle-extensions-plugin</outputDirectory>
<includes>
<include>src/**/*</include>
<include>pom.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>pmd-extensions-plugin</directory>
<outputDirectory>pmd-extensions-plugin</outputDirectory>
<includes>
<include>src/**/*</include>
<include>pom.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.txt</include>
</includes>
</fileSet>
</fileSets>
</assembly>

View File

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.sonar</groupId>
<artifactId>sonar-checkstyle-extensions-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<version>0.1-SNAPSHOT</version>
<name>Sonar :: Samples :: Checkstyle extensions</name>
<description>Checkstyle extensions for Sonar</description>
<properties>
<sonar.buildVersion>2.8</sonar.buildVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.buildVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>checkstyle</groupId>
<artifactId>checkstyle</artifactId>
<version>5.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.1</version>
<extensions>true</extensions>
<configuration>
<pluginClass>com.mycompany.sonar.checkstyle.CheckstyleExtensionsPlugin</pluginClass>
<basePlugin>checkstyle</basePlugin>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<!-- for checkstyle 5.1-->
<id>sonarsource</id>
<name>SonarSource</name>
<url>http://repository.sonarsource.org/content/repositories/sonar</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>

View File

@ -1,35 +0,0 @@
package com.mycompany.sonar.checkstyle;
import org.apache.commons.io.IOUtils;
import org.sonar.api.resources.Java;
import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleRepository;
import org.sonar.api.rules.XMLRuleParser;
import java.io.InputStream;
import java.util.List;
public class CheckstyleExtensionRepository extends RuleRepository {
// Must be the same than the Checkstyle plugin
private static final String REPOSITORY_KEY = "checkstyle";
private XMLRuleParser ruleParser;
public CheckstyleExtensionRepository(XMLRuleParser ruleParser) {
super(REPOSITORY_KEY, Java.KEY);
this.ruleParser = ruleParser;
}
@Override
public List<Rule> createRules() {
// In this example, new rules are declared in a XML file
InputStream input = getClass().getResourceAsStream("/com/mycompany/sonar/checkstyle/extensions.xml");
try {
return ruleParser.parse(input);
} finally {
IOUtils.closeQuietly(input);
}
}
}

View File

@ -1,14 +0,0 @@
package com.mycompany.sonar.checkstyle;
import org.sonar.api.SonarPlugin;
import java.util.Arrays;
import java.util.List;
public class CheckstyleExtensionsPlugin extends SonarPlugin {
public List getExtensions() {
return Arrays.asList(CheckstyleExtensionRepository.class);
}
}

View File

@ -1,43 +0,0 @@
package com.mycompany.sonar.checkstyle;
import com.puppycrawl.tools.checkstyle.api.Check;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;
public class MethodsCountCheck extends Check {
private int minMethodsCount = 1;
private int methodsCount = 0;
private DetailAST classAST = null;
public void setMinMethodsCount(int minMethodsCount) {
this.minMethodsCount = minMethodsCount;
}
public int[] getDefaultTokens() {
return new int[]{TokenTypes.CLASS_DEF, TokenTypes.METHOD_DEF};
}
public void beginTree(DetailAST rootAST) {
methodsCount = 0;
classAST = null;
}
public void visitToken(DetailAST ast) {
//ensure this is an unit test.
if ( ast.getType() == TokenTypes.CLASS_DEF ) {
classAST = ast;
} else if ( ast.getType() == TokenTypes.METHOD_DEF ) {
methodsCount++;
}
}
public void finishTree(DetailAST rootAST) {
super.finishTree(rootAST);
if (classAST != null && methodsCount < minMethodsCount) {
log(classAST.getLineNo(), classAST.getColumnNo(), "Too few methods (" + methodsCount + ") in class" );
}
}
}

View File

@ -1,13 +0,0 @@
<rules>
<rule>
<key>com.mycompany.sonar.checkstyle.MethodsCountCheck</key>
<name>Methods Count</name>
<configKey>Checker/TreeWalker/com.mycompany.sonar.checkstyle.MethodsCountCheck</configKey>
<description>Count methods</description>
<param>
<key>minMethodsCount</key>
<description>Mimimun threshold</description>
<defaultValue>10</defaultValue>
</param>
</rule>
</rules>

View File

@ -1,101 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.sonar</groupId>
<artifactId>sonar-gwt-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<version>0.1-SNAPSHOT</version>
<name>Sonar :: Samples :: GWT plugin</name>
<description>Description of plugin with GWT extensions</description>
<properties>
<sonar.buildVersion>2.8</sonar.buildVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.buildVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-gwt-api</artifactId>
<version>${sonar.buildVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.0.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-incubator</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
<!-- unit tests -->
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonar.buildVersion}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.1</version>
<extensions>true</extensions>
<configuration>
<pluginClass>com.mycompany.sonar.gwt.GwtPlugin</pluginClass>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<configuration>
<modules>
<module>com.mycompany.sonar.gwt.viewer.SampleViewer</module>
<module>com.mycompany.sonar.gwt.page.SamplePage</module>
</modules>
<webappDirectory>${project.build.directory}/classes</webappDirectory>
<extraJvmArgs>-Xmx512m</extraJvmArgs>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,19 +0,0 @@
package com.mycompany.sonar.gwt;
import com.mycompany.sonar.gwt.page.SamplePage;
import com.mycompany.sonar.gwt.viewer.SampleViewer;
import org.sonar.api.SonarPlugin;
import java.util.Arrays;
import java.util.List;
public final class GwtPlugin extends SonarPlugin {
public List getExtensions() {
return Arrays.asList(SampleViewer.class, SamplePage.class);
}
public String toString() {
return getKey();
}
}

View File

@ -1,18 +0,0 @@
package com.mycompany.sonar.gwt.page;
import org.sonar.api.web.GwtPage;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.UserRole;
@NavigationSection(NavigationSection.RESOURCE)
@UserRole(UserRole.USER)
public class SamplePage extends GwtPage {
public String getGwtId() {
return "com.mycompany.sonar.gwt.page.SamplePage";
}
public String getTitle() {
return "Sample";
}
}

View File

@ -1,11 +0,0 @@
package com.mycompany.sonar.gwt.page.client;
import com.google.gwt.core.client.GWT;
public interface I18nConstants extends com.google.gwt.i18n.client.Constants {
static I18nConstants INSTANCE = GWT.create(I18nConstants.class);
@DefaultStringValue("This is a sample")
String sample();
}

View File

@ -1,18 +0,0 @@
package com.mycompany.sonar.gwt.page.client;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import org.sonar.gwt.ui.Page;
import org.sonar.wsclient.services.Resource;
public class SamplePagePanel extends Page {
@Override
protected Widget doOnResourceLoad(Resource resource) {
VerticalPanel panel = new VerticalPanel();
panel.add(new Label(resource.getName(true)));
panel.add(new Label(I18nConstants.INSTANCE.sample()));
return panel;
}
}

View File

@ -1,17 +0,0 @@
package com.mycompany.sonar.gwt.viewer;
import org.sonar.api.web.GwtPage;
import org.sonar.api.web.NavigationSection;
import org.sonar.api.web.UserRole;
@NavigationSection(NavigationSection.RESOURCE_TAB)
@UserRole(UserRole.USER)
public class SampleViewer extends GwtPage {
public String getTitle() {
return "Sample";
}
public String getGwtId() {
return "com.mycompany.sonar.gwt.viewer.SampleViewer";
}
}

View File

@ -1,38 +0,0 @@
package com.mycompany.sonar.gwt.viewer.client;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import org.sonar.gwt.ui.Page;
import org.sonar.wsclient.gwt.AbstractCallback;
import org.sonar.wsclient.gwt.Sonar;
import org.sonar.wsclient.services.Measure;
import org.sonar.wsclient.services.Resource;
import org.sonar.wsclient.services.ResourceQuery;
public class SampleViewerPanel extends Page {
private Label label;
@Override
protected Widget doOnResourceLoad(Resource resource) {
label = new Label("Loading value");
loadMeasureFromServer(resource);
return label;
}
// Ajax call to web service
private void loadMeasureFromServer(Resource resource) {
ResourceQuery query = ResourceQuery.createForResource(resource, "random");
Sonar.getInstance().find(query, new AbstractCallback<Resource>() {
@Override
protected void doOnResponse(Resource result) {
Measure measure = result.getMeasure("random");
if (measure==null || measure.getValue()==null) {
label.setText("No random value");
} else {
label.setText("Random value inserted during analysis: " + measure.getValue());
}
}
});
}
}

View File

@ -1,13 +0,0 @@
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
<inherits name="org.sonar.Sonar"/>
<entry-point class='com.mycompany.sonar.gwt.page.client.SamplePagePanel'/>
<extend-property name="locale" values="en"/>
<extend-property name="locale" values="fr"/>
</module>

View File

@ -1,2 +0,0 @@
# This file must use UTF-8 encoding
sample=Ceci est un exemple

View File

@ -1,32 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>GWT Smaple</title>
<link href="http://localhost:9000/dev/stylesheets/yui-2.6.0.css" media="all" rel="Stylesheet" type="text/css" />
<link href="http://localhost:9000/dev/stylesheets/style.css" media="all" rel="Stylesheet" type="text/css" />
<script src="http://localhost:9000/dev/javascripts/application.js" type="text/javascript"></script>
<script src="http://localhost:9000/dev/javascripts/prototype.js" type="text/javascript"></script>
<script src="http://localhost:9000/dev/javascripts/scriptaculous.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
var config = {
"sonar_url": "http://localhost:9000/dev",
"resource_key" : "org.codehaus.sonar:sonar",
};
</script>
<div class="error" id="error" style="display:none"><span id="errormsg"></span> &nbsp;&nbsp;[<a href="#" onclick="javascript:$('error').hide();return false;">hide</a>]</div>
<div class="warning" id="warning" style="display:none"><span id="warningmsg"></span> &nbsp;&nbsp;[<a href="#" onclick="javascript:$('warning').hide();return false;">hide</a>]</div>
<div class="notice" id="info" style="display:none"><span id="infomsg"></span> &nbsp;&nbsp;[<a href="#" onclick="javascript:$('info').hide();return false;">hide</a>]</div>
<div id="gwtpage">
</div>
<script type="text/javascript" language="javascript" src="org.sonar.plugins.gwtsample.page.GwtSamplePage.nocache.js"></script>
</body>
</html>

View File

@ -1,10 +0,0 @@
<module>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
<inherits name="org.sonar.Sonar"/>
<entry-point class='com.mycompany.sonar.gwt.viewer.client.SampleViewerPanel'/>
</module>

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.sonar</groupId>
<artifactId>sonar-pmd-extensions-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<version>0.1-SNAPSHOT</version>
<name>Sonar :: Samples :: PMD extensions</name>
<description>PMD extensions for Sonar</description>
<properties>
<sonar.buildVersion>2.8</sonar.buildVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.buildVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>pmd</groupId>
<artifactId>pmd</artifactId>
<version>4.2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.1</version>
<extensions>true</extensions>
<configuration>
<pluginClass>com.mycompany.sonar.pmd.PmdExtensionsPlugin</pluginClass>
<!-- This is important. It means that this plugin extends the PMD plugin -->
<basePlugin>pmd</basePlugin>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,25 +0,0 @@
package com.mycompany.sonar.pmd;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.pmd.AbstractRule;
import net.sourceforge.pmd.ast.ASTClassOrInterfaceBody;
import net.sourceforge.pmd.ast.ASTMethodDeclaration;
import net.sourceforge.pmd.properties.IntegerProperty;
public class MaximumMethodsCountCheck extends AbstractRule {
private static final IntegerProperty propertyDescriptor = new IntegerProperty(
"maxAuthorisedMethodsCount", "Maximum number of methods authorised", 2, 1.0f);
public Object visit(ASTClassOrInterfaceBody node, Object data) {
List<ASTMethodDeclaration> methods = new ArrayList<ASTMethodDeclaration>();
methods = (List<ASTMethodDeclaration>)node.findChildrenOfType(ASTMethodDeclaration.class);
if (methods.size() > getIntProperty(propertyDescriptor)) {
addViolation(data, node);
}
return super.visit(node,data);
}
}

View File

@ -1,35 +0,0 @@
package com.mycompany.sonar.pmd;
import org.apache.commons.io.IOUtils;
import org.sonar.api.resources.Java;
import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleRepository;
import org.sonar.api.rules.XMLRuleParser;
import java.io.InputStream;
import java.util.List;
public class PmdExtensionRepository extends RuleRepository {
// Must be the same than the PMD plugin
private static final String REPOSITORY_KEY = "pmd";
private XMLRuleParser ruleParser;
public PmdExtensionRepository(XMLRuleParser ruleParser) {
super(REPOSITORY_KEY, Java.KEY);
this.ruleParser = ruleParser;
}
@Override
public List<Rule> createRules() {
// In this example, new rules are declared in a XML file
InputStream input = getClass().getResourceAsStream("/com/mycompany/sonar/pmd/extensions.xml");
try {
return ruleParser.parse(input);
} finally {
IOUtils.closeQuietly(input);
}
}
}

View File

@ -1,14 +0,0 @@
package com.mycompany.sonar.pmd;
import org.sonar.api.SonarPlugin;
import java.util.Arrays;
import java.util.List;
public class PmdExtensionsPlugin extends SonarPlugin {
public List getExtensions() {
return Arrays.asList(PmdExtensionRepository.class);
}
}

View File

@ -1,56 +0,0 @@
<rules>
<!-- Extension written in Java -->
<rule>
<key>MaximumMethodsCountCheck</key>
<name>Maximum Methods Count Check</name>
<description>Maximum number of methods authorised</description>
<!-- path to definition -->
<configKey>com/mycompany/sonar/pmd/rulesets.xml/MaximumMethodsCountCheck</configKey>
<!-- Default priority ("severity"). It can be changed while activating the rule in Quality profile -->
<!-- Possible values are: INFO, MINOR, MAJOR, CRITICAL, BLOCKER. Default value is MAJOR -->
<!--<priority>MAJOR</priority>-->
<!-- parameters available in administration console of Quality profiles -->
<param>
<key>maxAuthorisedMethodsCount</key>
<description>Maximum number of methods authorised</description>
<!-- default value is optional -->
<defaultValue>2</defaultValue>
</param>
</rule>
<!-- Extension written in XPath, first solution -->
<rule>
<key>AvoidIfWithoutBrace</key>
<name>Avoid if without using brace</name>
<configKey>com/mycompany/sonar/pmd/rulesets.xml/AvoidIfWithoutBrace</configKey>
<priority>CRITICAL</priority>
</rule>
<!--
Extension written in XPath, second solution.
Difference is that the XPath expression can be configured by users from administration console of Quality profiles
-->
<rule>
<key>PreventUseOfEmptyClass</key>
<priority>MAJOR</priority>
<name><![CDATA[Prevent use of EmptyClass]]></name>
<configKey><![CDATA[net.sourceforge.pmd.rules.XPathRule]]></configKey>
<priority>MINOR</priority>
<param>
<key>xpath</key>
<description><![CDATA[XPath expressions.]]></description>
<defaultValue>//VariableDeclarator[../Type/ReferenceType/ClassOrInterfaceType[@Image='EmptyClass']]</defaultValue>
</param>
<param>
<key>message</key>
<description><![CDATA[Message to display when a violation occurs.]]></description>
<defaultValue>Prevent use of EmptyClass class</defaultValue>
</param>
</rule>
</rules>

View File

@ -1,53 +0,0 @@
<?xml version="1.0"?>
<ruleset name="PMD extensions"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<rule name="MaximumMethodsCountCheck"
message="Avoid too many methods"
class="com.mycompany.sonar.pmd.MaximumMethodsCountCheck">
<description>
Avoid too many methods
</description>
<priority>3</priority>
<properties>
<property name="maxAuthorisedMethodsCount" description="Maximum number of methods authorised" value="3"/>
</properties>
<example>
<![CDATA[
// too many methods!
public void doSomething() {}
public void doSomething2() {}
public void doSomething3() {}
public void doSomething4() {}
]]>
</example>
</rule>
<rule name="AvoidIfWithoutBrace"
message="Avoid if without using brace"
class="net.sourceforge.pmd.rules.XPathRule">
<description>
Avoid if without using brace
</description>
<properties>
<property name="xpath">
<value>
<![CDATA[
//IfStatement[not(Statement/Block)]
]]>
</value>
</property>
</properties>
<example>
<![CDATA[
// don't do this!
if (true)
test = "test";
]]>
</example>
</rule>
</ruleset>

View File

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar</artifactId>
<version>2.12-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<groupId>org.codehaus.sonar.samples</groupId>
<artifactId>sonar-samples</artifactId>
<packaging>pom</packaging>
<name>Sonar :: Samples</name>
<modules>
<module>standard-plugin</module>
<module>gwt-plugin</module>
<module>checkstyle-extensions-plugin</module>
<module>pmd-extensions-plugin</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>sonar-samples-${project.version}</finalName>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.sonar</groupId>
<artifactId>sonar-standard-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<version>0.1-SNAPSHOT</version>
<name>Sonar :: Samples :: Standard plugin</name>
<description>Description of standard plugin</description>
<properties>
<sonar.buildVersion>2.8</sonar.buildVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonar.buildVersion}</version>
<scope>provided</scope>
</dependency>
<!-- unit tests -->
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-testing-harness</artifactId>
<version>${sonar.buildVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.1</version>
<extensions>true</extensions>
<configuration>
<pluginClass>com.mycompany.sonar.standard.SamplePlugin</pluginClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,31 +0,0 @@
package com.mycompany.sonar.standard;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.Metrics;
import java.util.Arrays;
import java.util.List;
public final class SampleMetrics implements Metrics {
public static final Metric MESSAGE = new Metric.Builder("message_key", "Message", Metric.ValueType.STRING)
.setDescription("This is a metric to store a well known message")
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(CoreMetrics.DOMAIN_GENERAL)
.create();
public static final Metric RANDOM = new Metric.Builder("random", "Random", Metric.ValueType.FLOAT)
.setDescription("Random value")
.setDirection(Metric.DIRECTION_BETTER)
.setQualitative(false)
.setDomain(CoreMetrics.DOMAIN_GENERAL)
.create();
// getMetrics() method is defined in the Metrics interface and is used by
// Sonar to retrieve the list of new Metric
public List<Metric> getMetrics() {
return Arrays.asList(MESSAGE, RANDOM);
}
}

View File

@ -1,29 +0,0 @@
package com.mycompany.sonar.standard;
import com.mycompany.sonar.standard.batch.RandomDecorator;
import com.mycompany.sonar.standard.batch.SampleSensor;
import com.mycompany.sonar.standard.ui.SampleFooter;
import com.mycompany.sonar.standard.ui.SampleRubyWidget;
import org.sonar.api.SonarPlugin;
import java.util.Arrays;
import java.util.List;
/**
* This class is the entry point for all extensions
*/
public final class SamplePlugin extends SonarPlugin {
// This is where you're going to declare all your Sonar extensions
public List getExtensions() {
return Arrays.asList(
// Definitions
SampleMetrics.class,
// Batch
SampleSensor.class, RandomDecorator.class,
// UI
SampleFooter.class, SampleRubyWidget.class);
}
}

View File

@ -1,36 +0,0 @@
package com.mycompany.sonar.standard.batch;
import com.mycompany.sonar.standard.SampleMetrics;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.RandomUtils;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.measures.MeasureUtils;
import org.sonar.api.resources.Java;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.api.resources.Scopes;
public class RandomDecorator implements Decorator {
public boolean shouldExecuteOnProject(Project project) {
// Execute only on Java projects
return StringUtils.equals(project.getLanguageKey(), Java.KEY);
}
public void decorate(Resource resource, DecoratorContext context) {
// This method is executed on the whole tree of resources.
// Bottom-up navigation : Java methods -> Java classes -> files -> packages -> modules -> project
if (Scopes.isBlockUnit(resource)) {
// Sonar API includes many libraries like commons-lang and google-collections
double value = RandomUtils.nextDouble();
// Add a measure to the current Java method
context.saveMeasure(SampleMetrics.RANDOM, value);
} else {
// we sum random values on resources different than method
context.saveMeasure(SampleMetrics.RANDOM, MeasureUtils.sum(true, context.getChildrenMeasures(SampleMetrics.RANDOM)));
}
}
}

View File

@ -1,20 +0,0 @@
package com.mycompany.sonar.standard.batch;
import com.mycompany.sonar.standard.SampleMetrics;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.measures.Measure;
import org.sonar.api.resources.Project;
public class SampleSensor implements Sensor {
public boolean shouldExecuteOnProject(Project project) {
// This sensor is executed on any type of projects
return true;
}
public void analyse(Project project, SensorContext sensorContext) {
Measure measure = new Measure(SampleMetrics.MESSAGE, "Hello World!");
sensorContext.saveMeasure(measure);
}
}

View File

@ -1,9 +0,0 @@
package com.mycompany.sonar.standard.ui;
import org.sonar.api.web.Footer;
public final class SampleFooter implements Footer {
public String getHtml() {
return "<p>Sample footer - <em>This is static HTML</em></p>";
}
}

View File

@ -1,39 +0,0 @@
package com.mycompany.sonar.standard.ui;
import org.sonar.api.web.*;
@UserRole(UserRole.USER)
@Description("Show how to use Ruby Widget API")
@WidgetCategory("Sample")
@WidgetProperties({
@WidgetProperty(key="param1",
description="This is a mandatory parameter",
optional=false
),
@WidgetProperty(key="max",
description="max threshold",
type=WidgetPropertyType.INTEGER,
defaultValue="80"
),
@WidgetProperty(key="param2",
description="This is an optional parameter"
),
@WidgetProperty(key="floatprop",
description="test description"
)
})
public class SampleRubyWidget extends AbstractRubyTemplate implements RubyRailsWidget {
public String getId() {
return "sample";
}
public String getTitle() {
return "Sample";
}
@Override
protected String getTemplatePath() {
return "/sample_ruby_widget.html.erb";
}
}

View File

@ -1,40 +0,0 @@
<div class="dashbox">
<h3><span title="<%= metric('random').description -%>"></span></h3>
<p>
<span class="big">
<%= format_measure('random') -%> <%= trend_icon(measure('random')) %>
</span>
</p>
<p><%= format_measure('message') -%></p>
<p>
<%= format_measure('ncloc', :suffix => ' lines', :url => url_for_drilldown('ncloc')) -%>
</p>
</div>
<div class="dashbox">
<h3>Help</h3>
<p>
Read configuration : <%= configuration('sonar.jdbc.username') -%>
</p>
<p>
Sample of Jfree Eastwood chart : <br/>
<%= gchart('cht=bhs&chco=FF0000,00FF00,0000FF&chs=200x125&chd=s:FOE,THE,Bar&chxt=x,y&chxl=1:|Dec|Nov|Oct|0:||20K||60K||100K|') -%>
</p>
<p>
Widget properties:
<table>
<tr>
<td>max:</td>
<td><%= widget_properties['max'] -%></td>
</tr>
<tr>
<td>param1:</td>
<td><%= widget_properties['param1'] -%></td>
</tr>
<tr>
<td>param2:</td>
<td><%= widget_properties['param2'] -%></td>
</tr>
</table>
</p>
</div>