/** * License Agreement. * * Rich Faces - Natural Ajax for Java Server Faces (JSF) * * Copyright (C) 2007 Exadel, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.richfaces.builder.mojo; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.Iterator; import java.util.List; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.DirectoryScanner; /** * @author shura * */ public abstract class AbstractGenerateMojo extends AbstractMojo { /** * Project classpath. * * @parameter expression="${project.compileClasspathElements}" * @required * @readonly */ protected List<String> classpathElements; /** * The source directories containing the sources to be compiled. * * @parameter expression="${project.compileSourceRoots}" * @required * @readonly */ protected List<String> compileSourceRoots; /** * Place for component configuration XML files. All '*.xml' files wil be parsed as components config. All '*.ent' files will * be processed as include configurations. * * @parameter expression="src/main/config/component" */ protected File componentConfigDirectory; /** * Place for converter configuration XML files. All '*.xml' files wil be parsed as components config. All '*.ent' files will * be processed as include configurations. * * @parameter expression="src/main/config/converter" */ protected File converterConfigDirectory; /** * Place for faces configuration XML files * * @parameter expression="src/main/config/faces" */ protected File facesConfigInclude; /** * * @parameter */ protected String key; /** * @parameter */ protected Library library; /** * The directory for compiled classes. * * @parameter expression="${project.build.outputDirectory}" * @required * @readonly */ protected File outputDirectory; /** * Directory where the output Java Files will be located. * * @parameter expression="${project.build.directory}/generated-component/java" */ protected File outputJavaDirectory; /** * Directory where the output Java Files will be located. * * @parameter expression="${project.build.directory}/generated-component/resources" */ protected File outputResourcesDirectory; /** * @parameter expression="${project.build.directory}/generated-component/test" */ protected File outputTestsDirectory; /** * @parameter expression="${project.build.directory}/generated-component/test-resources" */ protected File outputTestsResourcesDirectory; /** * Top maven project. * * @parameter expression="${project}" * @readonly */ protected MavenProject project; /** * Place for component configuration XML files * * @parameter expression="src/main/config/resources" */ protected File resourcesInclude; /** * Place for component configuration XML files * * @parameter expression="src/main/config/taglib" */ protected File taglibInclude; /** * * @parameter expression="src/main/templates" */ protected File templatesDirectory; /** * Place for validator configuration XML files. All '*.xml' files wil be parsed as component config. All '*.ent' files will * be processed as include configurations. * * @parameter expression="src/main/config/validator" */ protected File validatorConfigDirectory; protected ClassLoader createProjectClassLoader(MavenProject project, boolean useCCL) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try { URL[] urls = new URL[classpathElements.size() + 1]; int i = 0; urls[i++] = outputDirectory.toURI().toURL(); for (Iterator<?> iter = classpathElements.iterator(); iter.hasNext();) { String element = (String) iter.next(); urls[i++] = new File(element).toURI().toURL(); } if (useCCL) { classLoader = new URLClassLoader(urls, classLoader); } else { classLoader = new URLClassLoader(urls); } } catch (MalformedURLException e) { getLog().error("Bad URL in classpath", e); } return classLoader; } protected ClassLoader createProjectClassLoader(MavenProject project) { return createProjectClassLoader(project, true); } protected String[] doScan(String[] includes, String[] excludes, File rootFolder) throws MojoExecutionException { try { DirectoryScanner directoryScanner = new DirectoryScanner(); directoryScanner.setFollowSymlinks(true); directoryScanner.setBasedir(rootFolder); directoryScanner.setExcludes(excludes); directoryScanner.setIncludes(includes); directoryScanner.addDefaultExcludes(); directoryScanner.scan(); return directoryScanner.getIncludedFiles(); } catch (IllegalStateException e) { throw new MojoExecutionException("Error scanning source root: \'" + rootFolder + "\'", e); } } }