thank you. I'd been looking for that and couldn't find it...

- Stephen

---
Sent from my Android phone, so random spelling mistakes, random nonsense
words and other nonsense are a direct result of using swype to type on the
screen
On 19 May 2011 22:26, "Robert Scholte" <[email protected]> wrote:
>
> Stephen,
>
> The order of the project-elements differs from the maven-convention[1].
Any reason?
>
> -Robert
>
> [1] http://maven.apache.org/developers/conventions/code.html
>
>
>
> From: [email protected]
> To: [email protected]
> Date: Tue, 17 May 2011 10:51:49 -0500
> Subject: [mojo-scm] [14065] trunk/sandbox/tidy-maven-plugin: initial
commit
>
>
>
>
>
>
>
> Revision
> 14065
> Author
> stephenconnolly
> Date
> 2011-05-17 10:51:48 -0500 (Tue, 17 May 2011)
> Log Messageinitial commit
> Added Paths
>
> trunk/sandbox/tidy-maven-plugin/pom.xml
> trunk/sandbox/tidy-maven-plugin/src/
> trunk/sandbox/tidy-maven-plugin/src/main/
> trunk/sandbox/tidy-maven-plugin/src/main/java/
> trunk/sandbox/tidy-maven-plugin/src/main/java/org/
> trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/
> trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/mojo/
> trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/mojo/tidy/
>
trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/mojo/tidy/PomMojo.java
> Property Changed
>
> trunk/sandbox/tidy-maven-plugin/
>
> Diff
>
> Property changes: trunk/sandbox/tidy-maven-pluginName: svn:ignore
> + *.ipr
> *.iml
> *.iws
> target
> .project
> .classpath
> .settings
>
>
> Added: trunk/sandbox/tidy-maven-plugin/pom.xml (0 => 14065)---
trunk/sandbox/tidy-maven-plugin/pom.xml (rev 0)
> +++ trunk/sandbox/tidy-maven-plugin/pom.xml 2011-05-17 15:51:48 UTC (rev
14065)
> @@ -0,0 +1,208 @@
> +<?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.mojo</groupId>
> + <artifactId>mojo-sandbox-parent</artifactId>
> + <version>9</version>
> + <relativePath/>
> + </parent>
> + <groupId>org.codehaus.mojo</groupId>
> + <artifactId>tidy-maven-plugin</artifactId>
> + <version>1.0-alpha-1-SNAPSHOT</version>
> + <packaging>maven-plugin</packaging>
> +
> + <dependencies>
> + <dependency>
> + <groupId>org.apache.maven</groupId>
> + <artifactId>maven-plugin-api</artifactId>
> + <version>2.0</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.maven</groupId>
> + <artifactId>maven-repository-metadata</artifactId>
> + <version>2.0.6</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.maven</groupId>
> + <artifactId>maven-artifact</artifactId>
> + <version>2.0.6</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.maven</groupId>
> + <artifactId>maven-model</artifactId>
> + <version>2.0.6</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.maven.shared</groupId>
> + <artifactId>maven-common-artifact-filters</artifactId>
> + <version>1.2</version>
> + </dependency>
> + <dependency>
> + <groupId>org.codehaus.plexus</groupId>
> + <artifactId>plexus-utils</artifactId>
> + <version>1.5.9</version>
> + </dependency>
> + <dependency>
> + <groupId>backport-util-concurrent</groupId>
> + <artifactId>backport-util-concurrent</artifactId>
> + <version>3.1</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.maven</groupId>
> + <artifactId>maven-project</artifactId>
> + <version>2.0.9</version>
> + </dependency>
> + <dependency>
> + <groupId>org.codehaus.woodstox</groupId>
> + <artifactId>wstx-asl</artifactId>
> + <version>3.2.7</version>
> + </dependency>
> + <dependency>
> + <groupId>stax</groupId>
> + <artifactId>stax-api</artifactId>
> + <version>1.0.1</version>
> + </dependency>
> + </dependencies>
> +
> + <name>Tidy Maven Plugin</name>
> + <description>
> + Tidy Plugin for Maven. The Tidy plugin provides goals for tidying up
> + your source code.
> + </description>
> + <inceptionYear>2011</inceptionYear>
> +
> + <developers>
> + <developer>
> + <name>Stephen Connolly</name>
> + <email>[email protected]</email>
> + <roles>
> + <role>Lead Developer</role>
> + </roles>
> + <timezone>0</timezone>
> + </developer>
> + </developers>
> +
> + <licenses>
> + <license>
> + <name>The Apache Software License, Version 2.0</name>
> + <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
> + <distribution>repo</distribution>
> + </license>
> + </licenses>
> +
> + <build>
> + <plugins>
> + <plugin>
> + <groupId>org.apache.maven.plugins</groupId>
> + <artifactId>maven-enforcer-plugin</artifactId>
> + <version>1.0</version>
> + <executions>
> + <execution>
> + <id>enforce-java</id>
> + <goals>
> + <goal>enforce</goal>
> + </goals>
> + <configuration>
> + <rules>
> + <requireJavaVersion>
> + <version>1.4.2</version>
> + </requireJavaVersion>
> + </rules>
> + </configuration>
> + </execution>
> + </executions>
> + </plugin>
> + <plugin>
> + <artifactId>maven-compiler-plugin</artifactId>
> + <configuration>
> + <source>1.4</source>
> + <target>1.4</target>
> + </configuration>
> + </plugin>
> + <plugin>
> + <groupId>org.apache.maven.plugins</groupId>
> + <artifactId>maven-invoker-plugin</artifactId>
> + <version>1.5</version>
> + <configuration>
> + <projectsDirectory>src/it</projectsDirectory>
> + <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
> + <showErrors>true</showErrors>
> + <streamLogs>true</streamLogs>
> + <settingsFile>src/it/settings.xml</settingsFile>
> + <pomIncludes>
> + <pomInclude>*/pom.xml</pomInclude>
> + </pomIncludes>
> + <postBuildHookScript>verify.bsh</postBuildHookScript>
> + </configuration>
> + </plugin>
> + </plugins>
> + </build>
> +
> + <reporting>
> + <plugins>
> + <plugin>
> + <groupId>org.apache.maven.plugins</groupId>
> + <artifactId>maven-plugin-plugin</artifactId>
> + <version>2.4.3</version>
> + <configuration>
> + <requirements>
> + <maven>2.0.6</maven>
> + <jdk>1.4.2</jdk>
> + <memory>256m</memory>
> + </requirements>
> + </configuration>
> + </plugin>
> + </plugins>
> + </reporting>
> +
> + <issueManagement>
> + <system>jira</system>
> + <url>http://jira.codehaus.org/browse/MOJO</url>
> + </issueManagement>
> +
> + <scm>
> + <connection>scm:svn:
https://svn.codehaus.org/mojo/trunk/sandbox/tidy-maven-plugin</connection>
> + <developerConnection>scm:svn:
https://svn.codehaus.org/mojo/trunk/sandbox/tidy-maven-plugin
</developerConnection>
> + <url>
http://fisheye.codehaus.org/browse/mojo/trunk/sandbox/tidy-maven-plugin
</url>
> + </scm>
> +
> + <prerequisites>
> + <maven>2.0.6</maven>
> + </prerequisites>
> +
> + <profiles>
> + <profile>
> + <!-- run integration tests
> + to use this profile:
> + or run integration tests: mvn -Prun-its
> + -->
> + <id>run-its</id>
> + <build>
> + <defaultGoal>verify</defaultGoal>
> + <plugins>
> + <plugin>
> + <groupId>org.apache.maven.plugins</groupId>
> + <artifactId>maven-invoker-plugin</artifactId>
> + <executions>
> + <execution>
> + <id>integration-test</id>
> + <goals>
> + <goal>install</goal>
> + <goal>run</goal>
> + </goals>
> + <configuration>
> + <streamLogs>true</streamLogs>
> + <debug>false</debug>
> + </configuration>
> + </execution>
> + </executions>
> + </plugin>
> + </plugins>
> + </build>
> + </profile>
> + </profiles>
> +
> +</project>
>
>
> Added:
trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/mojo/tidy/PomMojo.java
(0 => 14065)---
trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/mojo/tidy/PomMojo.java
(rev 0)
> +++
trunk/sandbox/tidy-maven-plugin/src/main/java/org/codehaus/mojo/tidy/PomMojo.java
2011-05-17 15:51:48 UTC (rev 14065)
> @@ -0,0 +1,196 @@
> +package org.codehaus.mojo.tidy;
> +
> +import org.apache.maven.plugin.AbstractMojo;
> +import org.apache.maven.plugin.MojoExecutionException;
> +import org.apache.maven.plugin.MojoFailureException;
> +import org.apache.maven.project.MavenProject;
> +import org.codehaus.plexus.util.IOUtil;
> +import org.codehaus.plexus.util.ReaderFactory;
> +import org.codehaus.plexus.util.StringUtils;
> +import org.codehaus.plexus.util.WriterFactory;
> +import org.codehaus.stax2.XMLInputFactory2;
> +
> +import javax.xml.stream.XMLEventReader;
> +import javax.xml.stream.XMLInputFactory;
> +import javax.xml.stream.XMLStreamException;
> +import javax.xml.stream.events.XMLEvent;
> +import java.io.File;
> +import java.io.IOException;
> +import java.io.Reader;
> +import java.io.StringReader;
> +import java.io.Writer;
> +import java.util.Stack;
> +import java.util.regex.Pattern;
> +
> +/**
> + * Tidy up the <code>pom.xml</code> into the canonical order.
> + *
> + * @goal pom
> + */
> +public class PomMojo extends AbstractMojo {
> +
> + /**
> + * The Maven Project.
> + *
> + * @parameter expression="${project}"
> + * @required
> + * @readonly
> + */
> + private MavenProject project;
> +
> + private static final String[][] sequence = {
> + {"modelVersion", ""},
> + {"parent", "\n"},
> + {"groupId", ""},
> + {"artifactId", ""},
> + {"version", ""},
> + {"packaging", ""},
> + {"modules", ""},
> + {"properties", ""},
> + {"dependencyManagement", "\n"},
> + {"dependencies", ""},
> + {"name", "\n"},
> + {"description", ""},
> + {"url", ""},
> + {"inceptionYear", ""},
> + {"developers", "\n"},
> + {"contributors", ""},
> + {"licenses", "\n"},
> + {"organization", "\n"},
> + {"build", "\n"},
> + {"reporting", "\n"},
> + {"issueManagement", "\n"},
> + {"ciManagement", "\n"},
> + {"mailingLists", "\n"},
> + {"scm", "\n"},
> + {"prerequisites", "\n"},
> + {"repositories", "\n"},
> + {"pluginRepositories", "\n"},
> + {"distributionManagement", "\n"},
> + {"profiles", "\n"},
> + };
> +
> + public void execute() throws MojoExecutionException,
MojoFailureException {
> + try {
> + XMLInputFactory inputFactory = XMLInputFactory2.newInstance();
> + inputFactory.setProperty(XMLInputFactory2.P_PRESERVE_LOCATION,
Boolean.TRUE);
> +
> + StringBuffer input = readXmlFile(project.getFile());
> + String inputStr = input.toString();
> + int first = Integer.MAX_VALUE, last = Integer.MIN_VALUE;
> + int[] starts = new int[sequence.length];
> + int[] ends = new int[sequence.length];
> + for (int i = 0; i < sequence.length; i++) {
> + Pattern matchScopeRegex = Pattern.compile("/project");
> + Pattern matchTargetRegex = Pattern.compile("/project/\\Q" +
sequence[i][0] + "\\E");
> +
> + Stack stack = new Stack();
> + String path = "";
> + boolean inMatchScope = false;
> + int start = -1;
> + starts[i] = ends[i] = -1;
> +
> + XMLEventReader pom = inputFactory.createXMLEventReader(new
StringReader(inputStr));
> +
> + while (pom.hasNext()) {
> + XMLEvent event = pom.nextEvent();
> + if (event.isStartElement()) {
> + stack.push(path);
> + final String elementName =
event.asStartElement().getName().getLocalPart();
> + path = new
StringBuffer().append(path).append("/").append(elementName).toString();
> +
> + if (matchScopeRegex.matcher(path).matches()) {
> + // we're in a new match scope
> + // reset any previous partial matches
> + inMatchScope = true;
> + start = -1;
> + } else if (inMatchScope && matchTargetRegex.matcher(path).matches()) {
> + start = event.getLocation().getCharacterOffset();
> + }
> + }
> + if (event.isEndElement()) {
> + if (matchTargetRegex.matcher(path).matches() && start != -1) {
> + starts[i] = start;
> + ends[i] = pom.peek().getLocation().getCharacterOffset();
> + first = Math.min(first, starts[i]);
> + last = Math.max(last, ends[i]);
> + break;
> + } else if (matchScopeRegex.matcher(path).matches()) {
> + inMatchScope = false;
> + start = -1;
> + }
> + path = (String) stack.pop();
> + }
> + }
> +
> + }
> + input = new StringBuffer(input.length() + 1024);
> + input.append(inputStr.substring(0, first).trim());
> + String lastSep = null;
> + for (int i = 0; i < sequence.length; i++) {
> + if (lastSep == null || !StringUtils.isWhitespace(sequence[i][1]) ||
lastSep.length() < sequence[i][1].length()) {
> + input.append(lastSep = sequence[i][1]);
> + }
> + if (starts[i] != -1) {
> + int l = -1;
> + for (int k = 0; k < sequence.length; k++) {
> + if (ends[k] != -1 && (l == -1 || ends[l] < ends[k]) && ends[k] <
starts[i]) {
> + l = k;
> + }
> + }
> + if (l != -1) {
> + input.append(inputStr.substring(ends[l], starts[i]).trim());
> + lastSep = null;
> + }
> + input.append("\n ");
> + input.append(inputStr.substring(starts[i], ends[i]).trim());
> + }
> + }
> + input.append(inputStr.substring(last));
> +
> + writeFile( project.getFile(), input );
> + } catch (IOException e) {
> + getLog().error(e);
> + } catch (XMLStreamException e) {
> + getLog().error(e);
> + }
> + }
> +
> +
> + /**
> + * Reads a file into a String.
> + *
> + * @param outFile The file to read.
> + * @return String The content of the file.
> + * @throws java.io.IOException when things go wrong.
> + */
> + public static StringBuffer readXmlFile(File outFile)
> + throws IOException {
> + Reader reader = ReaderFactory.newXmlReader(outFile);
> +
> + try {
> + return new StringBuffer(IOUtil.toString(reader));
> + } finally {
> + IOUtil.close(reader);
> + }
> + }
> +
> + /**
> + * Writes a StringBuffer into a file.
> + *
> + * @param outFile The file to read.
> + * @param input The contents of the file.
> + * @throws IOException when things go wrong.
> + */
> + protected final void writeFile(File outFile, StringBuffer input)
> + throws IOException {
> + Writer writer = WriterFactory.newXmlWriter(outFile);
> + try {
> + IOUtil.copy(input.toString(), writer);
> + } finally {
> + IOUtil.close(writer);
> + }
> + }
> +
> +
> +}
>
>
>
>
> To unsubscribe from this list please visit:
> http://xircles.codehaus.org/manage_email

Reply via email to