Re: WOBootstrap with Transitive Dependencies

From: Ulrich Köster (ulric..bjectstyle.org)
Date: Fri Nov 24 2006 - 04:17:54 EST

  • Next message: Ulrich Köster: "Re: WOProject Dependencies with Version Range"

    Moin Henrique,

    thank you for the patch. Seems to work just fine. No need to worry
    about time, we're all volunteers.

    uli
    Am 23.11.2006 um 19:43 schrieb Henrique Prange:

    > Hi Ulrich,
    >
    > I have implemented the generation of POMs with transitive
    > dependencies for each JAR of WebObjects. The file with the patch
    > for the entire project of maven-wobootstrap-plugin is attached.
    >
    > I also made some enhancements in tests. I have just made tests in
    > Windows environment. Please, tell me if any problem raise in Mac.
    >
    > I apologize for the long time taken to finish this job.
    >
    > Cheers,
    >
    > Henrique
    > --
    >
    > \o/ Henrique Prange, Moleque de Idéias Educaçăo e Tecnologia Ltda
    > | Phone: 55-21-2710-0178 E-mail: hprang..oleque.com.br
    > / \ http://www.moleque.com.br
    > Index: .classpath
    > ===================================================================
    > --- .classpath (revision 3666)
    > +++ .classpath (working copy)
    >.. -1,10 +1,10 @@
    > -<?xml version="1.0" encoding="UTF-8"?>
    > -<classpath>
    > - <classpathentry kind="src" path="src/main/java"/>
    > - <classpathentry kind="src" path="src/test/java"/>
    > - <classpathentry kind="src" path="src/main/resources"/>
    > - <classpathentry kind="src" path="src/test/resources"/>
    > - <classpathentry kind="con"
    > path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    > - <classpathentry kind="con"
    > path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    > - <classpathentry kind="output" path="bin"/>
    > -</classpath>
    > +<?xml version="1.0" encoding="UTF-8"?>
    > +<classpath>
    > + <classpathentry kind="src" path="src/main/java"/>
    > + <classpathentry kind="src" path="src/test/java"/>
    > + <classpathentry excluding="**" kind="src" output="src/main/
    > resources" path="src/main/resources"/>
    > + <classpathentry excluding="**" kind="src" output="src/test/
    > resources" path="src/test/resources"/>
    > + <classpathentry kind="con"
    > path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    > + <classpathentry kind="con"
    > path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    > + <classpathentry kind="output" path="bin"/>
    > +</classpath>
    > Index: pom.xml
    > ===================================================================
    > --- pom.xml (revision 3666)
    > +++ pom.xml (working copy)
    >.. -4,8 +4,8 @@
    > <artifactId>maven2</artifactId>
    > <groupId>org.objectstyle.woproject.maven2</groupId>
    > <version>2.0-SNAPSHOT</version>
    > - </parent>
    > -
    > + </parent>
    > +
    > <modelVersion>4.0.0</modelVersion>
    > <artifactId>maven-wobootstrap-plugin</artifactId>
    > <packaging>maven-plugin</packaging>
    >.. -10,15 +10,19 @@
    > <artifactId>maven-wobootstrap-plugin</artifactId>
    > <packaging>maven-plugin</packaging>
    > <name>Maven WOBootstrap Plugin</name>
    > -
    > - <dependencies>
    > - <dependency>
    > - <groupId>org.apache.maven</groupId>
    > - <artifactId>maven-plugin-api</artifactId>
    > +
    > + <build>
    > + <defaultGoal>package</defaultGoal>
    > + </build>
    > +
    > + <dependencies>
    > + <dependency>
    > + <groupId>org.apache.maven</groupId>
    > + <artifactId>maven-plugin-api</artifactId>
    > </dependency>
    > - <dependency>
    > - <groupId>org.apache.maven</groupId>
    > - <artifactId>maven-embedder</artifactId>
    > + <dependency>
    > + <groupId>org.apache.maven</groupId>
    > + <artifactId>maven-embedder</artifactId>
    > </dependency>
    > <dependency>
    > <groupId>ant</groupId>
    >.. -45,9 +49,11 @@
    > <artifactId>easymock</artifactId>
    > <scope>test</scope>
    > </dependency>
    > + <dependency>
    > + <groupId>xmlunit</groupId>
    > + <artifactId>xmlunit</artifactId>
    > + <version>1.0</version>
    > + <scope>test</scope>
    > + </dependency>
    > </dependencies>
    > -
    > - <build>
    > - <defaultGoal>package</defaultGoal>
    > - </build>
    > </project>
    > \ No newline at end of file
    > Index: src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > BootstrapMojo.java
    > ===================================================================
    > --- src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > BootstrapMojo.java (revision 3666)
    > +++ src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > BootstrapMojo.java (working copy)
    >.. -83,6 +83,7 @@
    > import org.apache.maven.project.ProjectBuildingException;
    > import org.codehaus.plexus.util.dag.CycleDetectedException;
    > import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.MacOsWebobjectsLoca
    > tor;
    > +import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.PomGenerator;
    > import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.UnixWebobjectsLocat
    > or;
    > import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator;
    > import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsUtils;
    >.. -96,8 +97,8 @@
    > *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > *..ince 2.0
    > */
    > -public class BootstrapMojo extends AbstractMojo
    > -{
    > +public class BootstrapMojo extends AbstractMojo {
    > +
    > /**
    > * Maven embedder used to call maven plug-ins functions
    > */
    >.. -143,48 +144,38 @@
    > /**
    > * Creates a new BootstrapMojo. Verify the OS platform and load the
    > * properties of this plug-ing.
    > - *..hrows MojoExecutionException
    > + *
    > + *..hrows MojoExecutionException
    > + * if any problem occurs during bootstrap execution
    > */
    > - public BootstrapMojo() throws MojoExecutionException
    > - {
    > + public BootstrapMojo() throws MojoExecutionException {
    > super();
    >
    > -
    > - if( SystemUtils.IS_OS_MAC_OSX )
    > - {
    > + if (SystemUtils.IS_OS_MAC_OSX) {
    > locator = new MacOsWebobjectsLocator();
    > - }
    > - else if( SystemUtils.IS_OS_WINDOWS )
    > - {
    > + } else if (SystemUtils.IS_OS_WINDOWS) {
    > locator = new WindowsWebobjectsLocator();
    > - }
    > - else if( SystemUtils.IS_OS_UNIX )
    > - {
    > + } else if (SystemUtils.IS_OS_UNIX) {
    > locator = new UnixWebobjectsLocator();
    > + } else {
    > + throw new MojoExecutionException("Unsupported OS platform.");
    > }
    > - else
    > - {
    > - throw new MojoExecutionException( "Unsupported OS platform." );
    > - }
    > -
    > - InputStream propertiesInputStream =
    > BootstrapMojo.class.getResourceAsStream( "/bootstrap.properties" );
    >
    > - try
    > - {
    > - pluginProperties.load( propertiesInputStream );
    > - }
    > - catch( IOException exception )
    > - {
    > - throw new MojoExecutionException( "Cannot load plug-in
    > properties." );
    > - }
    > + initialize();
    > + }
    >
    > - installFileProperties = new Properties();
    > + /**
    > + * This constructor is only for testing purpose.
    > + *
    > + *..aram locator
    > + * A locator for WebObjects resources
    > + *..hrows MojoExecutionException
    > + * if any problem occurs during bootstrap execution
    > + */
    > + BootstrapMojo(WebobjectsLocator locator) throws
    > MojoExecutionException {
    > + this.locator = locator;
    >
    > - installFileProperties.setProperty( "groupId",
    > pluginProperties.getProperty( "woproject.convention.group" ) );
    > - installFileProperties.setProperty( "version",
    > WebobjectsUtils.getWebobjectsVersion( locator ) );
    > - installFileProperties.setProperty( "packaging", "jar" );
    > -
    > - installFileProperties.setProperty( "generatePom", "true" );
    > + initialize();
    > }
    >
    > /*
    >.. -192,23 +183,19 @@
    > *
    > *..ee org.apache.maven.plugin.Mojo#execute()
    > */
    > - public void execute() throws MojoExecutionException,
    > MojoFailureException
    > - {
    > + public void execute() throws MojoExecutionException,
    > MojoFailureException {
    > initializeEmbedder();
    > - File[] jars = WebobjectsUtils.getWebobjectsJars( locator );
    > + File[] jars = WebobjectsUtils.getWebobjectsJars(locator);
    >
    > - if( jars == null )
    > - {
    > - throw new MojoExecutionException( "WebObjects lib folder is
    > missing. Maybe WebObjects isn't installed." );
    > + if (jars == null) {
    > + throw new MojoExecutionException("WebObjects lib folder is
    > missing. Maybe WebObjects isn't installed.");
    > }
    >
    > - for( int i = 0; i < jars.length; i++ )
    > - {
    > - Properties properties = fillProperties( jars[i] );
    > + for (int i = 0; i < jars.length; i++) {
    > + Properties properties = fillProperties(jars[i]);
    >
    > - if( !executeInstallFile( properties ) )
    > - {
    > - getLog().warn( "Cannot import the following jar: " + jars
    > [i].getName() );
    > + if (!executeInstallFile(properties)) {
    > + getLog().warn("Cannot import the following jar: " + jars
    > [i].getName());
    > }
    > }
    > }
    >.. -225,36 +212,26 @@
    > * <li>artifactId</li>
    > * </ul>
    > *
    > - *..aram properties The defined properties
    > - *..hrows MojoExecutionException If any exception occur during
    > embedder
    > - * execution.
    > + *..aram properties
    > + * The defined properties
    > + *..hrows MojoExecutionException
    > + * If any exception occur during embedder execution.
    > */
    > - protected boolean executeInstallFile( Properties properties )
    > throws MojoExecutionException
    > - {
    > - if( properties == null )
    > - {
    > + protected boolean executeInstallFile(Properties properties)
    > throws MojoExecutionException {
    > + if (properties == null) {
    > return false;
    > }
    >
    > - try
    > - {
    > - embedder.execute( pom, Collections.singletonList
    > ( "install:install-file" ), eventMonitor, new ConsoleDownloadMonitor
    > (), properties, targetDirectory );
    > - }
    > - catch( CycleDetectedException exception )
    > - {
    > - throw new MojoExecutionException( "Error: cycle detected." );
    > - }
    > - catch( LifecycleExecutionException exception )
    > - {
    > - throw new MojoExecutionException( "Error in lifecycle
    > execution." );
    > - }
    > - catch( BuildFailureException exception )
    > - {
    > - throw new MojoExecutionException( "Error: build failure." );
    > - }
    > - catch( DuplicateProjectException exception )
    > - {
    > - throw new MojoExecutionException( "Error: duplicate project." );
    > + try {
    > + embedder.execute(pom, Collections.singletonList
    > ("install:install-file"), eventMonitor, new ConsoleDownloadMonitor
    > (), properties, targetDirectory);
    > + } catch (CycleDetectedException exception) {
    > + throw new MojoExecutionException("Error: cycle detected.");
    > + } catch (LifecycleExecutionException exception) {
    > + throw new MojoExecutionException("Error in lifecycle execution.");
    > + } catch (BuildFailureException exception) {
    > + throw new MojoExecutionException("Error: build failure.");
    > + } catch (DuplicateProjectException exception) {
    > + throw new MojoExecutionException("Error: duplicate project.");
    > }
    >
    > return true;
    >.. -263,21 +240,34 @@
    > /**
    > * Fill the contents of a properties based on a JAR file.
    > *
    > - *..aram jar The JAR file
    > + *..aram jar
    > + * The JAR file
    > *..eturn Returns the populated properties or <code>null</code>
    > if cannot
    > * map the JAR file
    > */
    > - protected Properties fillProperties( File jar )
    > - {
    > - String artifactId = getArtifactIdForJar( jar );
    > + protected Properties fillProperties(File jar) {
    > + String artifactId = getArtifactIdForJar(jar);
    >
    > - if( artifactId == null )
    > - {
    > + if (artifactId == null) {
    > return null;
    > }
    >
    > - installFileProperties.setProperty( "file", jar.getAbsolutePath() );
    > - installFileProperties.setProperty( "artifactId", artifactId );
    > + installFileProperties.setProperty("file", jar.getAbsolutePath());
    > + installFileProperties.setProperty("artifactId", artifactId);
    > +
    > + try {
    > + File tempPom = File.createTempFile("pom-", ".xml");
    > +
    > + tempPom.deleteOnExit();
    > +
    > + PomGenerator generator = new PomGenerator(installFileProperties);
    > +
    > + generator.writeModel(tempPom);
    > +
    > + installFileProperties.setProperty("pomFile",
    > tempPom.getAbsolutePath());
    > + } catch (IOException exception) {
    > + getLog().info("Cannot create a pom file for " + artifactId);
    > + }
    >
    > return installFileProperties;
    > }
    >.. -285,14 +275,13 @@
    > /**
    > * Resolve the artifactId for a specific JAR file.
    > *
    > - *..aram jar The JAR file
    > + *..aram jar
    > + * The JAR file
    > *..eturn Returns the artifatId or <code>null</code> if cannot
    > find a key
    > * that match the JAR file
    > */
    > - protected String getArtifactIdForJar( File jar )
    > - {
    > - if( jar == null )
    > - {
    > + protected String getArtifactIdForJar(File jar) {
    > + if (jar == null) {
    > return null;
    > }
    >
    >.. -298,13 +287,28 @@
    >
    > loadNamesMap();
    >
    > - String jarName = FilenameUtils.getBaseName( jar.getAbsolutePath
    > () );
    > + String jarName = FilenameUtils.getBaseName(jar.getAbsolutePath());
    >
    > - return (String) namesMap.get( jarName.toLowerCase() );
    > + return (String) namesMap.get(jarName.toLowerCase());
    > }
    >
    > - private void initializeEmbedder() throws MojoExecutionException
    > - {
    > + private void initialize() throws MojoExecutionException {
    > + InputStream propertiesInputStream =
    > BootstrapMojo.class.getResourceAsStream("/bootstrap.properties");
    > +
    > + try {
    > + pluginProperties.load(propertiesInputStream);
    > + } catch (IOException exception) {
    > + throw new MojoExecutionException("Cannot load plug-in
    > properties.");
    > + }
    > +
    > + installFileProperties = new Properties();
    > +
    > + installFileProperties.setProperty("groupId",
    > pluginProperties.getProperty("woproject.convention.group"));
    > + installFileProperties.setProperty("version",
    > WebobjectsUtils.getWebobjectsVersion(locator));
    > + installFileProperties.setProperty("packaging", "jar");
    > + }
    > +
    > + private void initializeEmbedder() throws MojoExecutionException {
    > embedder = new MavenEmbedder();
    >
    > ClassLoader classLoader = Thread.currentThread
    > ().getContextClassLoader();
    >.. -309,16 +313,13 @@
    >
    > ClassLoader classLoader = Thread.currentThread
    > ().getContextClassLoader();
    >
    > - embedder.setClassLoader( classLoader );
    > - embedder.setLogger( new MavenEmbedderConsoleLogger() );
    > + embedder.setClassLoader(classLoader);
    > + embedder.setLogger(new MavenEmbedderConsoleLogger());
    >
    > - try
    > - {
    > + try {
    > embedder.start();
    > - }
    > - catch( MavenEmbedderException exception )
    > - {
    > - throw new MojoExecutionException( "Cannot start maven
    > embedder." );
    > + } catch (MavenEmbedderException exception) {
    > + throw new MojoExecutionException("Cannot start maven embedder.");
    > }
    >
    > targetDirectory = SystemUtils.getUserDir();
    >.. -323,40 +324,34 @@
    >
    > targetDirectory = SystemUtils.getUserDir();
    >
    > - File pomFile = new File( targetDirectory, "pom.xml" );
    > + File pomFile = new File(targetDirectory, "pom.xml");
    >
    > - try
    > - {
    > - pom = embedder.readProject( pomFile );
    > - }
    > - catch( ProjectBuildingException exception )
    > - {
    > - throw new MojoExecutionException( "Cannot read project POM." );
    > + try {
    > + pom = embedder.readProject(pomFile);
    > + } catch (ProjectBuildingException exception) {
    > + throw new MojoExecutionException("Cannot read project POM.");
    > }
    >
    > - eventMonitor = new DefaultEventMonitor( new PlexusLoggerAdapter
    > ( new MavenEmbedderConsoleLogger() ) );
    > + eventMonitor = new DefaultEventMonitor(new PlexusLoggerAdapter
    > (new MavenEmbedderConsoleLogger()));
    > }
    > -
    > - private void loadNamesMap()
    > - {
    > - if( namesMap != null )
    > - {
    > +
    > + private void loadNamesMap() {
    > + if (namesMap != null) {
    > return;
    > }
    >
    > - String defaultNames = pluginProperties.getProperty
    > ( "webobjects.default.names" );
    > + String defaultNames = pluginProperties.getProperty
    > ("webobjects.default.names");
    >
    > - String originalNames[] = StringUtils.split( defaultNames, "," );
    > + String originalNames[] = StringUtils.split(defaultNames, ",");
    >
    > - String conventionedNames = pluginProperties.getProperty
    > ( "woproject.convention.names" );
    > + String conventionedNames = pluginProperties.getProperty
    > ("woproject.convention.names");
    >
    > - String artifactIds[] = StringUtils.split( conventionedNames, "," );
    > + String artifactIds[] = StringUtils.split(conventionedNames, ",");
    >
    > namesMap = new HashMap();
    >
    > - for( int i = 0; i < originalNames.length; i++ )
    > - {
    > - namesMap.put( originalNames[i].toLowerCase(), artifactIds[i] );
    > + for (int i = 0; i < originalNames.length; i++) {
    > + namesMap.put(originalNames[i].toLowerCase(), artifactIds[i]);
    > }
    > }
    > }
    > Index: src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/WindowsWebobjectsLocator.java
    > ===================================================================
    > --- src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/WindowsWebobjectsLocator.java (revision 3666)
    > +++ src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/WindowsWebobjectsLocator.java (working copy)
    >.. -64,19 +64,16 @@
    > *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > *..ince 2.0
    > */
    > -public class WindowsWebobjectsLocator extends
    > AbstractWebobjectsLocator
    > -{
    > +public class WindowsWebobjectsLocator extends
    > AbstractWebobjectsLocator {
    > /**
    > - * The deafult WebObjects root variable on Windows
    > - *..eprecated New versions of JDK throw Exceptions about getenv
    > not more supported. Please use
    > - * the <code>next.root</code> property instead
    > + * The deafult WebObjects root property on Windows
    > */
    > - protected static final String DEFAULT_WO_ROOT_VARIABLE =
    > "NEXT_ROOT";
    > + protected static final String DEFAULT_WO_ROOT_PROPERTY =
    > "next.root";
    >
    > /**
    > - * The deafult WebObjects root property on Windows
    > + * The deafult WebObjects root variable on Windows
    > */
    > - protected static final String DEFAULT_WO_ROOT_PROPERTY =
    > "next.root";
    > + protected static final String DEFAULT_WO_ROOT_VARIABLE =
    > "NEXT_ROOT";
    >
    > /**
    > * The name of the environment that contains the path for
    > WebObjects folder
    >.. -81,26 +78,23 @@
    > /**
    > * The name of the environment that contains the path for
    > WebObjects folder
    > */
    > - protected final String woRootVariable;
    > + protected String woRootVariable;
    >
    > /**
    > * Creates a new <code>WindowsWebobjectsLocator</code> using the
    > default
    > - * WebObjects root variable.
    > + * WebObjects root property. If this property doesn't exists or
    > is equals to
    > + * <code>null</code>, try to find the value using system
    > environment.
    > + *
    > + *..hrows SecurityException
    > + * if a security manager exists and its
    > checkPermission method
    > + * doesn't allow access to the environment variable name
    > */
    > - public WindowsWebobjectsLocator()
    > - {
    > + public WindowsWebobjectsLocator() {
    > woRootVariable = System.getProperty(DEFAULT_WO_ROOT_PROPERTY);
    > - }
    >
    > - /**
    > - * Creates a new <code>WindowsWebobjectsLocator</code> using the
    > variable
    > - * passed by parameter.
    > - *
    > - *..aram woRootVariable The WebObjects root variable
    > - */
    > - public WindowsWebobjectsLocator( String woRootVariable )
    > - {
    > - this.woRootVariable = woRootVariable;
    > + if (woRootVariable == null) {
    > + woRootVariable = System.getenv(DEFAULT_WO_ROOT_VARIABLE);
    > + }
    > }
    >
    > /*
    >.. -106,18 +100,16 @@
    > /*
    > * (non-Javadoc)
    > *
    > - *..ee
    > org.objectstyle.woproject.maven2.utils.WebobjectsLocator#webobjectsRoo
    > tDirectory()
    > + *..ee
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator#w
    > ebobjectsRootDirectory()
    > */
    > - public File getWebobjectsRootFolder()
    > - {
    > + public File getWebobjectsRootFolder() {
    > String nextRoot = woRootVariable;
    >
    > - if( nextRoot == null )
    > - {
    > + if (nextRoot == null) {
    > return null;
    > }
    >
    > - return new File( nextRoot );
    > + return new File(nextRoot);
    > }
    >
    > }
    > Index: src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/PomGenerator.java
    > ===================================================================
    > --- src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/PomGenerator.java
    > +++ src/main/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/PomGenerator.java
    >.. -0,0 +1,153 @@
    > +/**
    > + * Criado em 22/11/2006
    > + */
    > +package org.objectstyle.woproject.maven2.wobootstrap.utils;
    > +
    > +import java.io.File;
    > +import java.io.FileWriter;
    > +import java.io.IOException;
    > +import java.util.Properties;
    > +
    > +import org.apache.commons.lang.StringUtils;
    > +import org.apache.maven.model.Dependency;
    > +import org.apache.maven.model.Model;
    > +import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
    > +import org.codehaus.plexus.util.IOUtil;
    > +
    > +/**
    > + * This class generates maven project description (POM) for an
    > artifact. The
    > + * generated model includes the transitive dependencies configured
    > into
    > + * bootstrap.properties file.
    > + *
    > + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > + *..ince 2.0
    > + */
    > +public class PomGenerator {
    > +
    > + /**
    > + * Properties that contains the transitive dependencies.
    > + */
    > + protected static Properties dependencyProperties;
    > +
    > + /**
    > + * The version of the pom model.
    > + */
    > + private static final String MODEL_VERSION = "4.0.0";
    > +
    > + /**
    > + * Lazy initialization for <code>dependencieProperties</code>.
    > + */
    > + private static void loadDependecyProperties() {
    > +
    > + if (dependencyProperties != null) {
    > + return;
    > + }
    > +
    > + dependencyProperties = new Properties();
    > +
    > + try {
    > + dependencyProperties.load(PomGenerator.class.getResourceAsStream
    > ("/bootstrap.properties"));
    > + } catch (IOException exception) {
    > + // TODO: hprange, write an info to log instead
    > + exception.printStackTrace();
    > + }
    > + }
    > +
    > + /**
    > + * The artifact id.
    > + */
    > + protected final String artifactId;
    > +
    > + /**
    > + * The group id.
    > + */
    > + protected final String groupId;
    > +
    > + /**
    > + * The version of the artifact.
    > + */
    > + protected final String version;
    > +
    > + /**
    > + * Creates a new model generator based on some artifact properties.
    > + *
    > + *..aram properties
    > + * The artifact properties
    > + */
    > + public PomGenerator(Properties properties) {
    > +
    > + if (properties == null) {
    > + throw new IllegalArgumentException("The properties must not be
    > null");
    > + }
    > +
    > + groupId = properties.getProperty("groupId");
    > + artifactId = properties.getProperty("artifactId");
    > + version = properties.getProperty("version");
    > + }
    > +
    > + /**
    > + * Generates the model (POM) for the defined artifact including its
    > + * transitive dependencies.
    > + *
    > + *..eturn Returns a <code>Model</code> object
    > + */
    > + public Model generateModel() {
    > +
    > + Model model = new Model();
    > +
    > + model.setGroupId(groupId);
    > + model.setArtifactId(artifactId);
    > + model.setVersion(version);
    > + model.setModelVersion(MODEL_VERSION);
    > +
    > + loadDependecyProperties();
    > +
    > + String dependenciesList = dependencyProperties.getProperty
    > ("transitive.dependencies." + model.getArtifactId());
    > +
    > + if (dependenciesList == null) {
    > + return model;
    > + }
    > +
    > + String[] dependencies = StringUtils.split(dependenciesList, ",");
    > +
    > + for (int i = 0; i < dependencies.length; i++) {
    > + String dependencyArtifactId = dependencies[i];
    > +
    > + Dependency dependency = new Dependency();
    > +
    > + dependency.setGroupId(model.getGroupId());
    > + dependency.setArtifactId(StringUtils.trim(dependencyArtifactId));
    > + dependency.setVersion(model.getVersion());
    > +
    > + model.addDependency(dependency);
    > + }
    > +
    > + return model;
    > + }
    > +
    > + /**
    > + * Writes the model (POM) into the specified file.
    > + *
    > + *..aram file
    > + * The file
    > + */
    > + public void writeModel(File file) {
    > +
    > + if (file == null) {
    > + throw new NullPointerException("Cannot write to a null file.");
    > + }
    > +
    > + FileWriter writer = null;
    > +
    > + try {
    > + writer = new FileWriter(file);
    > +
    > + new MavenXpp3Writer().write(writer, generateModel());
    > + } catch (IOException exception) {
    > + // TODO: hprange, write an info to log instead
    > + exception.printStackTrace();
    > + } finally {
    > + IOUtil.close(writer);
    > + }
    > + }
    > +}
    > Index: src/main/resources/bootstrap.properties
    > ===================================================================
    > --- src/main/resources/bootstrap.properties (revision 3666)
    > +++ src/main/resources/bootstrap.properties (working copy)
    >.. -58,3 +58,13 @@
    > java-wo-jsp-servlet,\
    > java-wo-smil,\
    > java-xml
    > +
    > +#Transitive dependencies for WebObjects jars
    > +transitive.dependencies.java-dtw = java-webobjects, java-
    > foundation, java-eo-control, java-eo-access, java-eo-project, java-
    > dtw-generation
    > +transitive.dependencies.java-dtw-generation = java-foundation,
    > java-webobjects, java-eo-control
    > +transitive.dependencies.java-wo-extensions = java-webobjects, java-
    > foundation
    > +transitive.dependencies.java-webobjects = java-foundation, java-
    > xml, java-eo-control
    > +transitive.dependencies.java-eo-access = java-foundation, java-eo-
    > control
    > +transitive.dependencies.java-eo-control = java-foundation
    > +transitive.dependencies.java-eo-project = java-foundation, java-eo-
    > access, java-webobjects
    > +transitive.dependencies.java-jdbc-adaptor = java-foundation, java-
    > eo-access, java-eo-control
    > Index: src/test/java/org/objectstyle/woproject/maven2/utils/
    > TestWebObjectsUtils.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/utils/
    > TestWebObjectsUtils.java (revision 3671)
    > +++ src/test/java/org/objectstyle/woproject/maven2/utils/
    > TestWebObjectsUtils.java (working copy)
    >.. -1,148 +0,0 @@
    > -/*
    > ====================================================================
    > - *
    > - * The ObjectStyle Group Software License, Version 1.0
    > - *
    > - * Copyright (c) 2006 The ObjectStyle Group,
    > - * and individual authors of the software. All rights reserved.
    > - *
    > - * Redistribution and use in source and binary forms, with or without
    > - * modification, are permitted provided that the following conditions
    > - * are met:
    > - *
    > - * 1. Redistributions of source code must retain the above copyright
    > - * notice, this list of conditions and the following disclaimer.
    > - *
    > - * 2. Redistributions in binary form must reproduce the above
    > copyright
    > - * notice, this list of conditions and the following disclaimer in
    > - * the documentation and/or other materials provided with the
    > - * distribution.
    > - *
    > - * 3. The end-user documentation included with the redistribution, if
    > - * any, must include the following acknowlegement:
    > - * "This product includes software developed by the
    > - * ObjectStyle Group (http://objectstyle.org/)."
    > - * Alternately, this acknowlegement may appear in the software
    > itself,
    > - * if and wherever such third-party acknowlegements normally
    > appear.
    > - *
    > - * 4. The names "ObjectStyle Group" and "Cayenne"
    > - * must not be used to endorse or promote products derived
    > - * from this software without prior written permission. For
    > written
    > - * permission, please contact andru..bjectstyle.org.
    > - *
    > - * 5. Products derived from this software may not be called
    > "ObjectStyle"
    > - * nor may "ObjectStyle" appear in their names without prior
    > written
    > - * permission of the ObjectStyle Group.
    > - *
    > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    > - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    > - * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
    > - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    > - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    > - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    > AND
    > - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    > - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    > - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    > - * SUCH DAMAGE.
    > - *
    > ====================================================================
    > - *
    > - * This software consists of voluntary contributions made by many
    > - * individuals on behalf of the ObjectStyle Group. For more
    > - * information on the ObjectStyle Group, please see
    > - * <http://objectstyle.org/>.
    > - *
    > - */
    > -package org.objectstyle.woproject.maven2.utils;
    > -
    > -import java.io.File;
    > -
    > -import junit.framework.TestCase;
    > -
    > -import org.apache.commons.io.FileUtils;
    > -import org.easymock.EasyMock;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsUtils;
    > -
    > -/**
    > - *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > - */
    > -public class TestWebObjectsUtils extends TestCase
    > -{
    > - protected WebobjectsLocator mockLocator;
    > -
    > - /*
    > - * (non-Javadoc)
    > - *
    > - *..ee junit.framework.TestCase#setUp()
    > - */
    > - protected void setUp() throws Exception
    > - {
    > - super.setUp();
    > -
    > - mockLocator = (WebobjectsLocator) EasyMock.createMock
    > ( WebobjectsLocator.class );
    > - }
    > -
    > - public void testCheckWebObjectsVersion() throws Exception
    > - {
    > - File versionFile = FileUtils.toFile( getClass().getResource( "/
    > version.plist" ) );
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsVersionFile
    > () ).andReturn( versionFile );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertEquals( "5.2.4", WebobjectsUtils.getWebobjectsVersion
    > ( mockLocator ) );
    > - }
    > -
    > - public void testFileCannotBeFound() throws Exception
    > - {
    > - File versionFile = new File( FileUtils.toFile( getClass
    > ().getResource( "/" ) ), "inexistent.txt" );
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsVersionFile
    > () ).andReturn( versionFile );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertNull( WebobjectsUtils.getWebobjectsVersion( mockLocator ) );
    > - }
    > -
    > - public void testNullVersionFile() throws Exception
    > - {
    > - EasyMock.expect( mockLocator.getWebobjectsVersionFile
    > () ).andReturn( null );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertNull( WebobjectsUtils.getWebobjectsVersion( mockLocator ) );
    > - }
    > -
    > - public void testNullWebObjectsLocator() throws Exception
    > - {
    > - assertNull( WebobjectsUtils.getWebobjectsVersion( null ) );
    > - }
    > -
    > - public void testObtainWebObjectsLibs() throws Exception
    > - {
    > - File jarsFolder = FileUtils.toFile( getClass().getResource( "/
    > mock-jar1.jar" ) ).getParentFile();
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsLibFolder() ).andReturn
    > ( jarsFolder );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - File[] foundLibs = WebobjectsUtils.getWebobjectsJars
    > ( mockLocator );
    > -
    > - assertEquals( 2, foundLibs.length );
    > - }
    > -
    > - public void testWebObjectsJarsWithNullLocator() throws Exception
    > - {
    > - assertNull( WebobjectsUtils.getWebobjectsJars( null ) );
    > - }
    > -
    > - public void testWebObjectsJarsWithNullLibFolder() throws Exception
    > - {
    > - EasyMock.expect( mockLocator.getWebobjectsLibFolder() ).andReturn
    > ( null );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertNull( WebobjectsUtils.getWebobjectsJars( mockLocator ) );
    > - }
    > -}
    > Index: src/test/java/org/objectstyle/woproject/maven2/utils/
    > TestWebobjectsLocator.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/utils/
    > TestWebobjectsLocator.java (revision 3666)
    > +++ src/test/java/org/objectstyle/woproject/maven2/utils/
    > TestWebobjectsLocator.java (working copy)
    >.. -1,130 +0,0 @@
    > -/*
    > ====================================================================
    > - *
    > - * The ObjectStyle Group Software License, Version 1.0
    > - *
    > - * Copyright (c) 2006 The ObjectStyle Group,
    > - * and individual authors of the software. All rights reserved.
    > - *
    > - * Redistribution and use in source and binary forms, with or without
    > - * modification, are permitted provided that the following conditions
    > - * are met:
    > - *
    > - * 1. Redistributions of source code must retain the above copyright
    > - * notice, this list of conditions and the following disclaimer.
    > - *
    > - * 2. Redistributions in binary form must reproduce the above
    > copyright
    > - * notice, this list of conditions and the following disclaimer in
    > - * the documentation and/or other materials provided with the
    > - * distribution.
    > - *
    > - * 3. The end-user documentation included with the redistribution, if
    > - * any, must include the following acknowlegement:
    > - * "This product includes software developed by the
    > - * ObjectStyle Group (http://objectstyle.org/)."
    > - * Alternately, this acknowlegement may appear in the software
    > itself,
    > - * if and wherever such third-party acknowlegements normally
    > appear.
    > - *
    > - * 4. The names "ObjectStyle Group" and "Cayenne"
    > - * must not be used to endorse or promote products derived
    > - * from this software without prior written permission. For
    > written
    > - * permission, please contact andru..bjectstyle.org.
    > - *
    > - * 5. Products derived from this software may not be called
    > "ObjectStyle"
    > - * nor may "ObjectStyle" appear in their names without prior
    > written
    > - * permission of the ObjectStyle Group.
    > - *
    > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    > - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    > - * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
    > - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    > - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    > - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    > AND
    > - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    > - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    > - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    > - * SUCH DAMAGE.
    > - *
    > ====================================================================
    > - *
    > - * This software consists of voluntary contributions made by many
    > - * individuals on behalf of the ObjectStyle Group. For more
    > - * information on the ObjectStyle Group, please see
    > - * <http://objectstyle.org/>.
    > - *
    > - */
    > -package org.objectstyle.woproject.maven2.utils;
    > -
    > -import junit.framework.TestCase;
    > -
    > -import org.apache.commons.lang.SystemUtils;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.MacOsWebobjectsLoca
    > tor;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WindowsWebobjectsLo
    > cator;
    > -
    > -/**
    > - *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > - */
    > -public class TestWebobjectsLocator extends TestCase
    > -{
    > - protected WebobjectsLocator locator;
    > -
    > - /*
    > - * (non-Javadoc)
    > - *
    > - *..ee junit.framework.TestCase#setUp()
    > - */
    > - protected void setUp() throws Exception
    > - {
    > - super.setUp();
    > -
    > - if( SystemUtils.IS_OS_WINDOWS )
    > - {
    > - locator = new WindowsWebobjectsLocator();
    > - }
    > -
    > - if( SystemUtils.IS_OS_MAC_OSX )
    > - {
    > - locator = new MacOsWebobjectsLocator();
    > - }
    > - }
    > -
    > - /**
    > - * I know it's not good, but if you don't have WebObjects
    > installed, forget.
    > - * This test will fail.
    > - *
    > - *..hrows Exception
    > - */
    > - public void testCheckWebObjectsVersionFile() throws Exception
    > - {
    > - assertNotNull( locator.getWebobjectsVersionFile() );
    > - }
    > -
    > - public void testFindWebObjectsRootFolder() throws Exception
    > - {
    > - assertNotNull( locator.getWebobjectsRootFolder() );
    > - }
    > -
    > - /**
    > - * I know it's not good, but if you don't have WebObjects
    > installed, forget.
    > - * This test will fail.
    > - *
    > - *..hrows Exception
    > - */
    > - public void testWebObjectsLibsFolder() throws Exception
    > - {
    > - assertNotNull( locator.getWebobjectsLibFolder() );
    > - }
    > -
    > - public void testWebObjectsRootFolderCannotBeFoundOnWindows()
    > throws Exception
    > - {
    > - if( SystemUtils.IS_OS_WINDOWS )
    > - {
    > - locator = new WindowsWebobjectsLocator
    > ( "an_inexistent_evnvar_for_test" );
    > -
    > - assertNull( locator.getWebobjectsRootFolder() );
    > - assertNull( locator.getWebobjectsLibFolder() );
    > - assertNull( locator.getWebobjectsVersionFile() );
    > - }
    > - }
    > -}
    > Index: src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > TestBootstrapMojo.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > TestBootstrapMojo.java (revision 3666)
    > +++ src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > TestBootstrapMojo.java (working copy)
    >.. -53,137 +53,130 @@
    > * <http://objectstyle.org/>.
    > *
    > */
    > -package org.objectstyle.woproject.maven2.wobootstrap;
    > -
    > -import java.io.File;
    > -import java.util.Properties;
    > -
    > -import junit.framework.TestCase;
    > -
    > -import org.apache.commons.io.FileUtils;
    > -import org.apache.maven.plugin.MojoExecutionException;
    > -import org.easymock.EasyMock;
    > +package org.objectstyle.woproject.maven2.wobootstrap;
    > +
    > +import java.io.File;
    > +import java.util.Properties;
    > +
    > +import junit.framework.TestCase;
    > +
    > +import org.apache.commons.io.FileUtils;
    > +import org.apache.maven.plugin.MojoExecutionException;
    > +import org.easymock.EasyMock;
    > import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator;
    > -
    > -/**
    > - * Criado em 30/09/2006
    > - */
    > -
    > -/**
    > - *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > - */
    > -public class TestBootstrapMojo extends TestCase
    > -{
    > - protected String input[];
    > -
    > - protected BootstrapMojo mojo;
    > -
    > - protected String output[];
    > -
    > - /*
    > - * (non-Javadoc)
    > - *
    > - *..ee junit.framework.TestCase#setUp()
    > - */
    > - protected void setUp() throws Exception
    > - {
    > - super.setUp();
    > -
    > - input = new String[] { "c:/JavaDirectToWeb.jar", "c:/
    > JavaFoundation.jar", "c:/javaeoutil.jar", "c:/JavaXML.jar" };
    > -
    > - output = new String[] { "java-dtw", "java-foundation", "java-eo-
    > util", "java-xml" };
    > -
    > - mojo = new BootstrapMojo();
    > - }
    > -
    > - public void testArtifatIdConvention() throws Exception
    > - {
    > - for( int i = 0; i < input.length; i++ )
    > - {
    > - File jar = new File( input[i] );
    > -
    > - assertEquals( output[i], mojo.getArtifactIdForJar( jar ) );
    > - }
    > - }
    > -
    > - public void testCaseInsensitiveNameMapping() throws Exception
    > - {
    > - for( int i = 0; i < input.length; i++ )
    > - {
    > - input[i] = input[i].toLowerCase();
    > - }
    > -
    > - for( int i = 0; i < input.length; i++ )
    > - {
    > - File jar = new File( input[i] );
    > -
    > - assertEquals( output[i], mojo.getArtifactIdForJar( jar ) );
    > - }
    > - }
    > -
    > - public void testExecuteEmbedderWithNullProperties() throws Exception
    > - {
    > - assertFalse( mojo.executeInstallFile( null ) );
    > - }
    > -
    > - public void testFillValidProperties() throws Exception
    > - {
    > - File resourcesPath = FileUtils.toFile( getClass().getResource
    > ( "/" ) );
    > -
    > - String filePath = "JavaWOExtensions.jar";
    > -
    > - File mockJar = new File( resourcesPath, filePath );
    > -
    > - Properties properties = mojo.fillProperties( mockJar );
    > -
    > - assertEquals( "webobjects.apple", properties.getProperty
    > ( "groupId" ) );
    > - assertNotNull( properties.getProperty( "version" ) );
    > - assertEquals( "jar", properties.getProperty( "packaging" ) );
    > - assertEquals( mockJar.getAbsolutePath(), properties.getProperty
    > ( "file" ) );
    > - assertEquals( "java-wo-extensions", properties.getProperty
    > ( "artifactId" ) );
    > - }
    > -
    > - public void testNoJarMapping() throws Exception
    > - {
    > - String filePath = "c:\\JavaWOExtensionsXXX.jar";
    > -
    > - File invalidJar = new File( filePath );
    > -
    > - Properties properties = mojo.fillProperties( invalidJar );
    > -
    > - assertNull( properties );
    > - }
    > -
    > - public void testNullJarFile() throws Exception
    > - {
    > - assertNull( mojo.getArtifactIdForJar( null ) );
    > - assertNull( mojo.fillProperties( null ) );
    > - }
    > -
    > - public void testWebObjectsNotInstalled() throws Exception
    > - {
    > - //TODO: fix me
    > - //problem with sure fire and classpath (maven stuff used for
    > tests is 2.0.0 maven embedder requires 2.0.4)
    > - if(5 == 5) {
    > - return;
    > - }
    > - WebobjectsLocator mockLocator = (WebobjectsLocator)
    > EasyMock.createMock( WebobjectsLocator.class );
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsLibFolder() ).andReturn
    > ( null );
    > -
    > - mojo.locator = mockLocator;
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - try
    > - {
    > - mojo.execute();
    > -
    > - fail( "WebOjects not installed, must throws an exception." );
    > - }
    > - catch( MojoExecutionException exception )
    > - {
    > - assertEquals( "WebObjects lib folder is missing. Maybe
    > WebObjects isn't installed.", exception.getMessage() );
    > - }
    > - }
    > -}
    > +
    > +/**
    > + * Criado em 30/09/2006
    > + */
    > +
    > +/**
    > + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > + */
    > +public class TestBootstrapMojo extends TestCase {
    > + protected String input[];
    > +
    > + protected BootstrapMojo mojo;
    > +
    > + protected String output[];
    > +
    > + public void notTestWebObjectsNotInstalled() throws Exception {
    > + // TODO: fix me
    > + // problem with sure fire and classpath (maven stuff used for
    > tests is
    > + // 2.0.0 maven embedder requires 2.0.4)
    > +
    > + WebobjectsLocator mockLocator = (WebobjectsLocator)
    > EasyMock.createMock(WebobjectsLocator.class);
    > +
    > + EasyMock.expect(mockLocator.getWebobjectsLibFolder()).andReturn
    > (null);
    > +
    > + mojo.locator = mockLocator;
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + try {
    > + mojo.execute();
    > +
    > + fail("WebOjects not installed, must throws an exception.");
    > + } catch (MojoExecutionException exception) {
    > + assertEquals("WebObjects lib folder is missing. Maybe
    > WebObjects isn't installed.", exception.getMessage());
    > + }
    > + }
    > +
    > + /*
    > + * (non-Javadoc)
    > + *
    > + *..ee junit.framework.TestCase#setUp()
    > + */
    > + protected void setUp() throws Exception {
    > + super.setUp();
    > +
    > + input = new String[] { "c:/JavaDirectToWeb.jar", "c:/
    > JavaFoundation.jar", "c:/javaeoutil.jar", "c:/JavaXML.jar" };
    > +
    > + output = new String[] { "java-dtw", "java-foundation", "java-eo-
    > util", "java-xml" };
    > +
    > + File versionFile = FileUtils.toFile(getClass().getResource("/
    > version.plist"));
    > +
    > + WebobjectsLocator mockLocator = (WebobjectsLocator)
    > EasyMock.createMock(WebobjectsLocator.class);
    > +
    > + EasyMock.expect(mockLocator.getWebobjectsVersionFile()).andReturn
    > (versionFile);
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + mojo = new BootstrapMojo(mockLocator);
    > + }
    > +
    > + public void testArtifatIdConvention() throws Exception {
    > + for (int i = 0; i < input.length; i++) {
    > + File jar = new File(input[i]);
    > +
    > + assertEquals(output[i], mojo.getArtifactIdForJar(jar));
    > + }
    > + }
    > +
    > + public void testCaseInsensitiveNameMapping() throws Exception {
    > + for (int i = 0; i < input.length; i++) {
    > + input[i] = input[i].toLowerCase();
    > + }
    > +
    > + for (int i = 0; i < input.length; i++) {
    > + File jar = new File(input[i]);
    > +
    > + assertEquals(output[i], mojo.getArtifactIdForJar(jar));
    > + }
    > + }
    > +
    > + public void testExecuteEmbedderWithNullProperties() throws
    > Exception {
    > + assertFalse(mojo.executeInstallFile(null));
    > + }
    > +
    > + public void testFillValidProperties() throws Exception {
    > + File resourcesPath = FileUtils.toFile(getClass().getResource("/"));
    > +
    > + String filePath = "JavaWOExtensions.jar";
    > +
    > + File mockJar = new File(resourcesPath, filePath);
    > +
    > + Properties properties = mojo.fillProperties(mockJar);
    > +
    > + assertEquals("webobjects.apple", properties.getProperty
    > ("groupId"));
    > + assertNotNull(properties.getProperty("version"));
    > + assertEquals("jar", properties.getProperty("packaging"));
    > + assertEquals(mockJar.getAbsolutePath(), properties.getProperty
    > ("file"));
    > + assertEquals("java-wo-extensions", properties.getProperty
    > ("artifactId"));
    > + assertNotNull(properties.getProperty("pomFile"));
    > + }
    > +
    > + public void testNoJarMapping() throws Exception {
    > + String filePath = "c:\\JavaWOExtensionsXXX.jar";
    > +
    > + File invalidJar = new File(filePath);
    > +
    > + Properties properties = mojo.fillProperties(invalidJar);
    > +
    > + assertNull(properties);
    > + }
    > +
    > + public void testNullJarFile() throws Exception {
    > + assertNull(mojo.getArtifactIdForJar(null));
    > + assertNull(mojo.fillProperties(null));
    > + }
    > +}
    > Index: src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestWebObjectsUtils.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestWebObjectsUtils.java (revision 3671)
    > +++ src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestWebObjectsUtils.java (working copy)
    >.. -52,97 +52,86 @@
    > * information on the ObjectStyle Group, please see
    > * <http://objectstyle.org/>.
    > *
    > - */
    > -package org.objectstyle.woproject.maven2.utils;
    > -
    > -import java.io.File;
    > -
    > -import junit.framework.TestCase;
    > -
    > -import org.apache.commons.io.FileUtils;
    > -import org.easymock.EasyMock;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsUtils;
    > -
    > -/**
    > - *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > - */
    > -public class TestWebObjectsUtils extends TestCase
    > -{
    > - protected WebobjectsLocator mockLocator;
    > -
    > - /*
    > - * (non-Javadoc)
    > - *
    > - *..ee junit.framework.TestCase#setUp()
    > - */
    > - protected void setUp() throws Exception
    > - {
    > - super.setUp();
    > -
    > - mockLocator = (WebobjectsLocator) EasyMock.createMock
    > ( WebobjectsLocator.class );
    > - }
    > -
    > - public void testCheckWebObjectsVersion() throws Exception
    > - {
    > - File versionFile = FileUtils.toFile( getClass().getResource( "/
    > version.plist" ) );
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsVersionFile
    > () ).andReturn( versionFile );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertEquals( "5.2.4", WebobjectsUtils.getWebobjectsVersion
    > ( mockLocator ) );
    > - }
    > -
    > - public void testFileCannotBeFound() throws Exception
    > - {
    > - File versionFile = new File( FileUtils.toFile( getClass
    > ().getResource( "/" ) ), "inexistent.txt" );
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsVersionFile
    > () ).andReturn( versionFile );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertNull( WebobjectsUtils.getWebobjectsVersion( mockLocator ) );
    > - }
    > -
    > - public void testNullVersionFile() throws Exception
    > - {
    > - EasyMock.expect( mockLocator.getWebobjectsVersionFile
    > () ).andReturn( null );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertNull( WebobjectsUtils.getWebobjectsVersion( mockLocator ) );
    > - }
    > -
    > - public void testNullWebObjectsLocator() throws Exception
    > - {
    > - assertNull( WebobjectsUtils.getWebobjectsVersion( null ) );
    > - }
    > -
    > - public void testObtainWebObjectsLibs() throws Exception
    > - {
    > - File jarsFolder = FileUtils.toFile( getClass().getResource( "/
    > mock-jar1.jar" ) ).getParentFile();
    > -
    > - EasyMock.expect( mockLocator.getWebobjectsLibFolder() ).andReturn
    > ( jarsFolder );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - File[] foundLibs = WebobjectsUtils.getWebobjectsJars
    > ( mockLocator );
    > -
    > - assertEquals( 2, foundLibs.length );
    > - }
    > -
    > - public void testWebObjectsJarsWithNullLocator() throws Exception
    > - {
    > - assertNull( WebobjectsUtils.getWebobjectsJars( null ) );
    > - }
    > -
    > - public void testWebObjectsJarsWithNullLibFolder() throws Exception
    > - {
    > - EasyMock.expect( mockLocator.getWebobjectsLibFolder() ).andReturn
    > ( null );
    > -
    > - EasyMock.replay( new Object[] { mockLocator } );
    > -
    > - assertNull( WebobjectsUtils.getWebobjectsJars( mockLocator ) );
    > - }
    > -}
    > + */
    > +package org.objectstyle.woproject.maven2.wobootstrap.utils;
    > +
    > +import java.io.File;
    > +
    > +import junit.framework.TestCase;
    > +
    > +import org.apache.commons.io.FileUtils;
    > +import org.easymock.EasyMock;
    > +
    > +/**
    > + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > + */
    > +public class TestWebObjectsUtils extends TestCase {
    > + protected WebobjectsLocator mockLocator;
    > +
    > + /*
    > + * (non-Javadoc)
    > + *
    > + *..ee junit.framework.TestCase#setUp()
    > + */
    > + protected void setUp() throws Exception {
    > + super.setUp();
    > +
    > + mockLocator = (WebobjectsLocator) EasyMock.createMock
    > (WebobjectsLocator.class);
    > + }
    > +
    > + public void testCheckWebObjectsVersion() throws Exception {
    > + File versionFile = FileUtils.toFile(getClass().getResource("/
    > version.plist"));
    > +
    > + EasyMock.expect(mockLocator.getWebobjectsVersionFile()).andReturn
    > (versionFile);
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + assertEquals("5.2.4", WebobjectsUtils.getWebobjectsVersion
    > (mockLocator));
    > + }
    > +
    > + public void testFileCannotBeFound() throws Exception {
    > + File versionFile = new File(FileUtils.toFile(getClass
    > ().getResource("/")), "inexistent.txt");
    > +
    > + EasyMock.expect(mockLocator.getWebobjectsVersionFile()).andReturn
    > (versionFile);
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + assertNull(WebobjectsUtils.getWebobjectsVersion(mockLocator));
    > + }
    > +
    > + public void testNullVersionFile() throws Exception {
    > + EasyMock.expect(mockLocator.getWebobjectsVersionFile()).andReturn
    > (null);
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + assertNull(WebobjectsUtils.getWebobjectsVersion(mockLocator));
    > + }
    > +
    > + public void testNullWebObjectsLocator() throws Exception {
    > + assertNull(WebobjectsUtils.getWebobjectsVersion(null));
    > + }
    > +
    > + public void testObtainWebObjectsLibs() throws Exception {
    > + File jarsFolder = FileUtils.toFile(getClass().getResource("/mock-
    > jar1.jar")).getParentFile();
    > +
    > + EasyMock.expect(mockLocator.getWebobjectsLibFolder()).andReturn
    > (jarsFolder);
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + File[] foundLibs = WebobjectsUtils.getWebobjectsJars(mockLocator);
    > +
    > + assertEquals(2, foundLibs.length);
    > + }
    > +
    > + public void testWebObjectsJarsWithNullLibFolder() throws Exception {
    > + EasyMock.expect(mockLocator.getWebobjectsLibFolder()).andReturn
    > (null);
    > +
    > + EasyMock.replay(new Object[] { mockLocator });
    > +
    > + assertNull(WebobjectsUtils.getWebobjectsJars(mockLocator));
    > + }
    > +
    > + public void testWebObjectsJarsWithNullLocator() throws Exception {
    > + assertNull(WebobjectsUtils.getWebobjectsJars(null));
    > + }
    > +}
    > Index: src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestWebobjectsLocator.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestWebobjectsLocator.java (revision 3666)
    > +++ src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestWebobjectsLocator.java (working copy)
    >.. -52,79 +52,69 @@
    > * information on the ObjectStyle Group, please see
    > * <http://objectstyle.org/>.
    > *
    > - */
    > -package org.objectstyle.woproject.maven2.utils;
    > -
    > -import junit.framework.TestCase;
    > -
    > -import org.apache.commons.lang.SystemUtils;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.MacOsWebobjectsLoca
    > tor;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WebobjectsLocator;
    > -import
    > org.objectstyle.woproject.maven2.wobootstrap.utils.WindowsWebobjectsLo
    > cator;
    > -
    > -/**
    > - *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > - */
    > -public class TestWebobjectsLocator extends TestCase
    > -{
    > - protected WebobjectsLocator locator;
    > -
    > - /*
    > - * (non-Javadoc)
    > - *
    > - *..ee junit.framework.TestCase#setUp()
    > - */
    > - protected void setUp() throws Exception
    > - {
    > - super.setUp();
    > -
    > - if( SystemUtils.IS_OS_WINDOWS )
    > - {
    > - locator = new WindowsWebobjectsLocator();
    > - }
    > -
    > - if( SystemUtils.IS_OS_MAC_OSX )
    > - {
    > - locator = new MacOsWebobjectsLocator();
    > - }
    > - }
    > -
    > - /**
    > - * I know it's not good, but if you don't have WebObjects
    > installed, forget.
    > - * This test will fail.
    > - *
    > - *..hrows Exception
    > - */
    > - public void testCheckWebObjectsVersionFile() throws Exception
    > - {
    > - assertNotNull( locator.getWebobjectsVersionFile() );
    > - }
    > -
    > - public void testFindWebObjectsRootFolder() throws Exception
    > - {
    > - assertNotNull( locator.getWebobjectsRootFolder() );
    > - }
    > -
    > - /**
    > - * I know it's not good, but if you don't have WebObjects
    > installed, forget.
    > - * This test will fail.
    > - *
    > - *..hrows Exception
    > - */
    > - public void testWebObjectsLibsFolder() throws Exception
    > - {
    > - assertNotNull( locator.getWebobjectsLibFolder() );
    > - }
    > -
    > - public void testWebObjectsRootFolderCannotBeFoundOnWindows()
    > throws Exception
    > - {
    > - if( SystemUtils.IS_OS_WINDOWS )
    > - {
    > - locator = new WindowsWebobjectsLocator
    > ( "an_inexistent_evnvar_for_test" );
    > -
    > - assertNull( locator.getWebobjectsRootFolder() );
    > - assertNull( locator.getWebobjectsLibFolder() );
    > - assertNull( locator.getWebobjectsVersionFile() );
    > - }
    > - }
    > -}
    > + */
    > +package org.objectstyle.woproject.maven2.wobootstrap.utils;
    > +
    > +import junit.framework.TestCase;
    > +
    > +import org.apache.commons.lang.SystemUtils;
    > +
    > +/**
    > + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > + */
    > +public class TestWebobjectsLocator extends TestCase {
    > + protected WebobjectsLocator locator;
    > +
    > + /*
    > + * (non-Javadoc)
    > + *
    > + *..ee junit.framework.TestCase#setUp()
    > + */
    > + protected void setUp() throws Exception {
    > + super.setUp();
    > +
    > + if (SystemUtils.IS_OS_WINDOWS) {
    > + locator = new WindowsWebobjectsLocator();
    > + }
    > +
    > + if (SystemUtils.IS_OS_MAC_OSX) {
    > + locator = new MacOsWebobjectsLocator();
    > + }
    > + }
    > +
    > + /**
    > + * I know it's not good, but if you don't have WebObjects
    > installed, forget.
    > + * This test will fail.
    > + *
    > + *..hrows Exception
    > + */
    > + public void testCheckWebObjectsVersionFile() throws Exception {
    > + assertNotNull(locator.getWebobjectsVersionFile());
    > + }
    > +
    > + public void testFindWebObjectsRootFolder() throws Exception {
    > + assertNotNull(locator.getWebobjectsRootFolder());
    > + }
    > +
    > + /**
    > + * I know it's not good, but if you don't have WebObjects
    > installed, forget.
    > + * This test will fail.
    > + *
    > + *..hrows Exception
    > + */
    > + public void testWebObjectsLibsFolder() throws Exception {
    > + assertNotNull(locator.getWebobjectsLibFolder());
    > + }
    > +
    > + public void testWoRootFolderNullOnWindows() throws Exception {
    > + if (!SystemUtils.IS_OS_WINDOWS) {
    > + return;
    > + }
    > +
    > + ((WindowsWebobjectsLocator) locator).woRootVariable = null;
    > +
    > + assertNull(locator.getWebobjectsLibFolder());
    > + assertNull(locator.getWebobjectsRootFolder());
    > + assertNull(locator.getWebobjectsVersionFile());
    > + }
    > +}
    > Index: src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestPomGenerator.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestPomGenerator.java
    > +++ src/test/java/org/objectstyle/woproject/maven2/wobootstrap/
    > utils/TestPomGenerator.java
    >.. -0,0 +1,104 @@
    > +/**
    > + * Criado em 22/11/2006
    > + */
    > +package org.objectstyle.woproject.maven2.wobootstrap.utils;
    > +
    > +import java.io.File;
    > +import java.util.List;
    > +import java.util.Properties;
    > +
    > +import org.apache.commons.io.FileUtils;
    > +import org.apache.maven.model.Dependency;
    > +import org.apache.maven.model.Model;
    > +import org.custommonkey.xmlunit.XMLTestCase;
    > +
    > +/**
    > + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > + */
    > +public class TestPomGenerator extends XMLTestCase {
    > + protected PomGenerator generator;
    > +
    > + protected static final String ARTIFACT_ID = "java-eo-access";
    > +
    > + protected static final String GROUP_ID = "webobjects.apple";
    > +
    > + protected static final String VERSION = "5.3";
    > +
    > + /*
    > + * (non-Javadoc)
    > + *
    > + *..ee junit.framework.TestCase#setUp()
    > + */
    > + protected void setUp() throws Exception {
    > + super.setUp();
    > +
    > + Properties properties = new Properties();
    > +
    > + properties.setProperty("artifactId", ARTIFACT_ID);
    > + properties.setProperty("groupId", GROUP_ID);
    > + properties.setProperty("version", VERSION);
    > +
    > + generator = new PomGenerator(properties);
    > + }
    > +
    > + public void testModelGeneration() throws Exception {
    > + Model model = generator.generateModel();
    > +
    > + assertEquals(ARTIFACT_ID, model.getArtifactId());
    > + assertEquals(GROUP_ID, model.getGroupId());
    > + assertEquals(VERSION, model.getVersion());
    > + assertEquals("4.0.0", model.getModelVersion());
    > + }
    > +
    > + public void testModelWithDependencies() throws Exception {
    > + Model model = generator.generateModel();
    > +
    > + List dependencies = model.getDependencies();
    > +
    > + assertEquals(2, dependencies.size());
    > +
    > + String[] expectedDependencies = { "java-foundation", "java-eo-
    > control" };
    > +
    > + for (int i = 0; i < expectedDependencies.length; i++) {
    > + Dependency dependency = (Dependency) dependencies.get(i);
    > +
    > + assertEquals(GROUP_ID, dependency.getGroupId());
    > + assertEquals(expectedDependencies[i], dependency.getArtifactId());
    > + assertEquals(VERSION, dependency.getVersion());
    > + }
    > + }
    > +
    > + public void testNullProperties() throws Exception {
    > +
    > + try {
    > + generator = new PomGenerator(null);
    > +
    > + fail("Must throw an IllegalArgumentException");
    > + } catch (IllegalArgumentException exception) {
    > + assertEquals("The properties must not be null",
    > exception.getMessage());
    > + }
    > + }
    > +
    > + public void testWriteToFile() throws Exception {
    > +
    > + File expectedFile = FileUtils.toFile(getClass().getResource("/
    > example.pom"));
    > +
    > + File createdFile = File.createTempFile("pom-", "xml");
    > +
    > + createdFile.deleteOnExit();
    > +
    > + generator.writeModel(createdFile);
    > +
    > + assertXMLEqual(FileUtils.readFileToString(expectedFile, null),
    > FileUtils.readFileToString(createdFile, null));
    > + }
    > +
    > + public void testWriteToNullFile() throws Exception {
    > + try {
    > + generator.writeModel(null);
    > +
    > + fail("Writing to a null file. Must throw an exception.");
    > + } catch (NullPointerException exception) {
    > + assertEquals("Cannot write to a null file.",
    > exception.getMessage());
    > + }
    > + }
    > +}
    > Index: src/test/resources/example.pom
    > ===================================================================
    > --- src/test/resources/example.pom
    > +++ src/test/resources/example.pom
    >.. -0,0 +1,18 @@
    > +<?xml version="1.0" encoding="UTF-8"?><project>
    > + <modelVersion>4.0.0</modelVersion>
    > + <groupId>webobjects.apple</groupId>
    > + <artifactId>java-eo-access</artifactId>
    > + <version>5.3</version>
    > + <dependencies>
    > + <dependency>
    > + <groupId>webobjects.apple</groupId>
    > + <artifactId>java-foundation</artifactId>
    > + <version>5.3</version>
    > + </dependency>
    > + <dependency>
    > + <groupId>webobjects.apple</groupId>
    > + <artifactId>java-eo-control</artifactId>
    > + <version>5.3</version>
    > + </dependency>
    > + </dependencies>
    > +</project>
    > \ No newline at end of file



    This archive was generated by hypermail 2.0.0 : Fri Nov 24 2006 - 04:18:34 EST