Skip to content

Commit

Permalink
unified scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
kohsuke committed Apr 15, 2011
1 parent 4191e15 commit 0425ae5
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 83 deletions.
@@ -1,8 +1,6 @@
package com.cloudbees.maven.license;

import groovy.lang.Binding;
import groovy.lang.Closure;
import groovy.lang.Script;
import org.apache.maven.model.License;
import org.apache.maven.project.MavenProject;

Expand All @@ -19,14 +17,12 @@
*
* @author Kohsuke Kawaguchi
*/
public abstract class CompleterScript extends Script {
public class CompleterDelegate {
public MavenProject dependency, project;

public CompleterScript() {
}

public CompleterScript(Binding binding) {
super(binding);
public CompleterDelegate(MavenProject dependency, MavenProject project) {
this.dependency = dependency;
this.project = project;
}

/**
Expand Down
@@ -1,7 +1,5 @@
package com.cloudbees.maven.license;

import groovy.lang.Binding;
import groovy.lang.Script;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;

Expand All @@ -10,17 +8,16 @@
/**
* @author Kohsuke Kawaguchi
*/
public abstract class ProcessorScript extends Script {
public class GeneratorDelegate {
protected ProcessMojo mojo;

protected MavenProject project;
protected List<MavenProject> dependencies;

public ProcessorScript() {
}

public ProcessorScript(Binding binding) {
super(binding);
protected GeneratorDelegate(ProcessMojo mojo, MavenProject project, List<MavenProject> dependencies) {
this.mojo = mojo;
this.project = project;
this.dependencies = dependencies;
}

public Log getLog() {
Expand Down
44 changes: 44 additions & 0 deletions src/main/java/com/cloudbees/maven/license/LicenseScript.java
@@ -0,0 +1,44 @@
package com.cloudbees.maven.license;

import groovy.lang.Binding;
import groovy.lang.Closure;
import groovy.lang.Script;
import org.apache.maven.project.MavenProject;

/**
* @author Kohsuke Kawaguchi
*/
public abstract class LicenseScript extends Script {
public MavenProject project;
Closure completer;
Closure generator;

public LicenseScript() {
}

public LicenseScript(Binding binding) {
super(binding);
}

public void complete(Closure closure) {
this.completer = closure;
}

public void generate(Closure closure) {
this.generator = closure;
}

public void runCompleter(CompleterDelegate delegate) {
if (completer!=null) {
completer.setDelegate(delegate);
completer.run();
}
}

public void runGenerator(GeneratorDelegate delegate) {
if (generator!=null) {
generator.setDelegate(delegate);
generator.run();
}
}
}
81 changes: 33 additions & 48 deletions src/main/java/com/cloudbees/maven/license/ProcessMojo.java
Expand Up @@ -29,7 +29,6 @@
import org.apache.maven.project.MavenProjectHelper;
import org.apache.maven.project.ProjectBuildingException;
import org.codehaus.groovy.control.CompilerConfiguration;
import sun.java2d.pipe.OutlineTextRenderer;

import java.io.File;
import java.io.IOException;
Expand Down Expand Up @@ -84,17 +83,7 @@ public class ProcessMojo extends AbstractMojo {
*
* @parameter
*/
public File completer;

/**
* Specifies a processor script to run after the licenses are fully determined.
*
* This can be either a file or a directory. If it's a directory
* all the files in it are assumed to be completer scripts.
*
* @parameter
*/
public File processor;
public File script;

/**
* If true, require all the dependencies to have license information after running
Expand All @@ -120,15 +109,33 @@ public class ProcessMojo extends AbstractMojo {
public File generateLicenseHtml;

public void execute() throws MojoExecutionException {
List<CompleterScript> comp = parseScripts(CompleterScript.class,completer);
List<LicenseScript> comp = parseScripts(script);

if (generateLicenseHtml!=null && generateLicenseXml==null) {// we need XML to be able to generate HTML
try {
generateLicenseXml = File.createTempFile("license","xml");
generateLicenseXml.deleteOnExit();
} catch (IOException e) {
throw new MojoExecutionException("Failed to generate a temporary file",e);
}
}

if (generateLicenseXml!=null)
comp.add((LicenseScript)createShell(LicenseScript.class).parse(getClass().getResourceAsStream("xmlgen.groovy")));

if (generateLicenseHtml!=null)
comp.add((LicenseScript)createShell(LicenseScript.class).parse(getClass().getResourceAsStream("htmlgen.groovy")));

for (LicenseScript s : comp) {
s.run(); // setup
}


List<MavenProject> dependencies = new ArrayList<MavenProject>();

// run against the project itself
for (CompleterScript s : comp) {
s.dependency = project;
s.project = project;
s.run();
for (LicenseScript s : comp) {
s.runCompleter(new CompleterDelegate(project, project));
}
dependencies.add(project);

Expand Down Expand Up @@ -165,10 +172,9 @@ public void execute() throws MojoExecutionException {
continue OUTER;
}

for (CompleterScript s : comp) {
// let the completion script intercept and process the licenses
s.dependency = model;
s.run();
for (LicenseScript s : comp) {
s.runCompleter(new CompleterDelegate(model, project));
}

dependencies.add(model);
Expand All @@ -191,42 +197,21 @@ public void execute() throws MojoExecutionException {
}
}

// run the processor scripts
List<ProcessorScript> procScripts = parseScripts(ProcessorScript.class, processor);

if (generateLicenseHtml!=null && generateLicenseXml==null) {// we need XML to be able to generate HTML
try {
generateLicenseXml = File.createTempFile("license","xml");
generateLicenseXml.deleteOnExit();
} catch (IOException e) {
throw new MojoExecutionException("Failed to generate a temporary file",e);
}
}

if (generateLicenseXml!=null)
procScripts.add((ProcessorScript)createShell(ProcessorScript.class).parse(getClass().getResourceAsStream("xmlgen.groovy")));

if (generateLicenseHtml!=null)
procScripts.add((ProcessorScript)createShell(ProcessorScript.class).parse(getClass().getResourceAsStream("htmlgen.groovy")));

for (ProcessorScript s : procScripts) {
s.project = project;
s.dependencies = dependencies;
s.mojo = this;
s.run();
for (LicenseScript s : comp) {
s.runGenerator(new GeneratorDelegate(this, project, dependencies));
}
}

private <T extends Script> List<T> parseScripts(Class<T> baseType, File src) throws MojoExecutionException {
List<T> comp = new ArrayList<T>();
private List<LicenseScript> parseScripts(File src) throws MojoExecutionException {
List<LicenseScript> comp = new ArrayList<LicenseScript>();
if (src !=null) {
try {
GroovyShell shell = createShell(baseType);
GroovyShell shell = createShell(LicenseScript.class);
if (src.isDirectory()) {
for (File script : src.listFiles())
comp.add(baseType.cast(shell.parse(script)));
comp.add((LicenseScript)shell.parse(script));
} else {
comp.add(baseType.cast(shell.parse(src)));
comp.add((LicenseScript)shell.parse(src));
}
} catch (IOException e) {
throw new MojoExecutionException("Failed to parse the script: "+ src,e);
Expand Down
14 changes: 6 additions & 8 deletions src/main/resources/com/cloudbees/maven/license/htmlgen.groovy
Expand Up @@ -4,12 +4,10 @@ import javax.xml.transform.stream.StreamSource
import javax.xml.transform.stream.StreamResult
import javax.xml.transform.Templates

mojo.generateLicenseHtml.parentFile?.mkdirs()
Templates t = TransformerFactory.newInstance().newTemplates(new StreamSource(mojo.class.getResource("licenses.xslt").toExternalForm()));

private Templates t;

if (t==null)
t = TransformerFactory.newInstance().newTemplates(new StreamSource(mojo.class.getResource("licenses.xslt").toExternalForm()));

t.newTransformer().transform(new StreamSource(mojo.generateLicenseXml), new StreamResult(mojo.generateLicenseHtml));
log.info("Generated ${mojo.generateLicenseHtml}")
generate {
mojo.generateLicenseHtml.parentFile?.mkdirs()
t.newTransformer().transform(new StreamSource(mojo.generateLicenseXml), new StreamResult(mojo.generateLicenseHtml));
log.info("Generated ${mojo.generateLicenseHtml}")
}
24 changes: 13 additions & 11 deletions src/main/resources/com/cloudbees/maven/license/xmlgen.groovy
@@ -1,19 +1,21 @@
import groovy.xml.MarkupBuilder;

mojo.generateLicenseXml.parentFile?.mkdirs()
mojo.generateLicenseXml.withWriter { w ->
def xml = new MarkupBuilder(w)
xml.omitNullAttributes = true;
generate {
mojo.generateLicenseXml.parentFile?.mkdirs()
mojo.generateLicenseXml.withWriter { w ->
def xml = new MarkupBuilder(w)
xml.omitNullAttributes = true;

xml.'l:dependencies'('xmlns:l':'licenses') {
dependencies.each { d ->
'l:dependency'(name:d.name, groupId:d.groupId, artifactId:d.artifactId, version:d.version, url:d.url) {
'l:description'(d.description)
d.licenses.each { l ->
'l:license'(name:l.name, url:l.url)
xml.'l:dependencies'('xmlns:l':'licenses') {
dependencies.each { d ->
'l:dependency'(name:d.name, groupId:d.groupId, artifactId:d.artifactId, version:d.version, url:d.url) {
'l:description'(d.description)
d.licenses.each { l ->
'l:license'(name:l.name, url:l.url)
}
}
}
}
log.info("Generated ${mojo.generateLicenseXml}")
}
log.info("Generated ${mojo.generateLicenseXml}")
}

0 comments on commit 0425ae5

Please sign in to comment.