/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cxf.maven_plugin.javatowadl;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Locale;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.javadoc.AbstractJavadocMojo;
import org.apache.maven.plugin.javadoc.JavadocReport;
import org.apache.maven.plugin.javadoc.options.DocletArtifact;
import org.apache.maven.project.MavenProject;
import org.apache.maven.toolchain.ToolchainManager;
import org.codehaus.plexus.archiver.manager.ArchiverManager;
/**
* @goal parsejavadoc
* @description CXF Java To WADL Tool
* @requiresDependencyResolution compile
* @threadSafe
*/
public class ParseJavaDocMojo extends AbstractMojo {
/**
* The source encoding.
*
* @parameter defaultValue = "${project.build.sourceEncoding}"
*/
private String encoding;
/**
* @parameter expression="${project}"
* @required
*/
private MavenProject mavenProject;
/**
* @component
*/
private ArchiverManager archiverManager;
/**
* @component
*/
@SuppressWarnings("deprecation")
private org.apache.maven.artifact.factory.ArtifactFactory mavenArtifactFactory;
/**
* @component
*/
private ArtifactResolver artifactResolver;
/**
* @component
*/
@SuppressWarnings("deprecation")
private org.apache.maven.project.MavenProjectBuilder mavenProjectBuilder;
/**
* @component
*/
@SuppressWarnings("deprecation")
private org.apache.maven.artifact.metadata.ArtifactMetadataSource artifactMetadataSource;
/**
* @component
*/
private ToolchainManager toolchainManager;
/**
* @parameter default-value = "${project.reporting.outputDirectory}/apidocs"
* @required
*/
private File dumpFileOutputDirectory;
/**
* The local maven repository.
*
* @parameter expression="${localRepository}"
* @required
* @readonly
*/
private ArtifactRepository localRepository;
/**
* The remote repositories where artifacts are located.
*
* @parameter expression="${project.remoteArtifactRepositories}"
* @required
* @readonly
*/
private List<ArtifactRepository> remoteRepositories;
/**
* Directory into which assembled {@link JavadocOptions} instances will be written before they
* are added to javadoc resources bundles.
* @parameter expression="${project.build.directory}/javadoc-bundle-options"
* @required
* @readonly
*/
private File javadocOptionsDir;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
AbstractJavadocMojo mojo = new JavadocReport();
Locale locale = Locale.getDefault();
try {
Field f = AbstractJavadocMojo.class.getDeclaredField("doclet");
f.setAccessible(true);
f.set(mojo, "org.apache.cxf.maven_plugin.javatowadl.DumpJavaDoc");
f = AbstractJavadocMojo.class.getDeclaredField("encoding");
f.setAccessible(true);
f.set(mojo, encoding);
f = AbstractJavadocMojo.class.getDeclaredField("stylesheet");
f.setAccessible(true);
f.set(mojo, "stylesheet");
f = AbstractJavadocMojo.class.getDeclaredField("javadocOptionsDir");
f.setAccessible(true);
f.set(mojo, javadocOptionsDir);
f = AbstractJavadocMojo.class.getDeclaredField("docletArtifact");
f.setAccessible(true);
DocletArtifact docletArtifact = new DocletArtifact();
for (Object o : this.mavenProject.getPluginArtifacts()) {
if (o instanceof Artifact) {
Artifact artifact = (Artifact)o;
if (artifact.getArtifactId().equals("cxf-java2wadl-plugin")) {
docletArtifact.setGroupId(artifact.getGroupId());
docletArtifact.setArtifactId(artifact.getArtifactId());
docletArtifact.setVersion(artifact.getVersion());
}
}
}
f.set(mojo, docletArtifact);
f = AbstractJavadocMojo.class.getDeclaredField("factory");
f.setAccessible(true);
f.set(mojo, this.mavenArtifactFactory);
f = AbstractJavadocMojo.class.getDeclaredField("mavenProjectBuilder");
f.setAccessible(true);
f.set(mojo, this.mavenProjectBuilder);
f = AbstractJavadocMojo.class.getDeclaredField("resolver");
f.setAccessible(true);
f.set(mojo, this.artifactResolver);
f = AbstractJavadocMojo.class.getDeclaredField("archiverManager");
f.setAccessible(true);
f.set(mojo, this.archiverManager);
f = AbstractJavadocMojo.class.getDeclaredField("artifactMetadataSource");
f.setAccessible(true);
f.set(mojo, this.artifactMetadataSource);
f = AbstractJavadocMojo.class.getDeclaredField("toolchainManager");
f.setAccessible(true);
f.set(mojo, this.toolchainManager);
f = AbstractJavadocMojo.class.getDeclaredField("localRepository");
f.setAccessible(true);
f.set(mojo, this.localRepository);
f = AbstractJavadocMojo.class.getDeclaredField("remoteRepositories");
f.setAccessible(true);
f.set(mojo, this.remoteRepositories);
f = AbstractJavadocMojo.class.getDeclaredField("applyJavadocSecurityFix");
f.setAccessible(true);
f.set(mojo, false);
f = AbstractJavadocMojo.class.getDeclaredField("additionalparam");
f.setAccessible(true);
f.set(mojo, "-dumpJavaDocFile " + this.dumpFileOutputDirectory.getAbsolutePath()
+ File.separator + "dumpFile.properties");
f = AbstractJavadocMojo.class.getDeclaredField("useStandardDocletOptions");
f.setAccessible(true);
f.set(mojo, false);
f = AbstractJavadocMojo.class.getDeclaredField("project");
f.setAccessible(true);
f.set(mojo, mavenProject);
if (dumpFileOutputDirectory != null) {
f = AbstractJavadocMojo.class.getDeclaredField("outputDirectory");
f.setAccessible(true);
f.set(mojo, dumpFileOutputDirectory);
}
Method m = AbstractJavadocMojo.class.getDeclaredMethod("executeReport", Locale.class);
m.setAccessible(true);
m.invoke(mojo, locale);
} catch (Exception e) {
throw new MojoExecutionException("Failed to generate javadoc", e);
}
}
}