Re: maven-wolifecycle-patch

From: Ulrich Köster (ulric..bjectstyle.org)
Date: Mon Apr 09 2007 - 06:23:57 EDT

  • Next message: John Huss: "Re: WO profiling w/Eclipse? -> TPTP"

    Moin Henrique,

    thank you for the patch. Just applied it.

    Merci

    Uli
    Am 05.04.2007 um 16:27 schrieb Henrique Prange:

    > Hi Ulrich,
    >
    > Sorry. The zipped source files are attached. I've created another
    > patch using Subversive too.
    >
    > Cheers,
    >
    > Henrique
    >
    > Ulrich Köster wrote:
    >> Moin Henrique,
    >> I'm having problems applying the patch. Please send me the
    >> modified files.
    >> Uli
    >> Am 27.03.2007 um 03:57 schrieb Henrique Prange:
    >>> Hi Andrus and Ulrich,
    >>>
    >>> I have corrected the following problems on maven-wolifecycle-plugin:
    >>>
    >>> -webobjects\apple is not considered a webobjects group (only on
    >>> Windows)
    >>> -Incorrect localRepository (only on Windows)
    >>> -Dependencies with scope = provided is added to the final WOA
    >>> (WOL-394)
    >>> -Problem with localized resources (reported by Fabian)
    >>>
    >>> The patch is attached.
    >>>
    >>> I've created some tests. It would be interesting to execute them
    >>> to verify if they work on Mac.
    >>>
    >>> 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 3898)
    >>> +++ .classpath (working copy)
    >>>.. -1,9 +1,10 @@
    >>> -<?xml version="1.0" encoding="UTF-8"?>
    >>> -<classpath>
    >>> - <classpathentry kind="src" path="src/main/java"/>
    >>> - <classpathentry kind="src" path="src/main/scripts"/>
    >>> - <classpathentry kind="src" path="src/main/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 kind="src" path="src/main/scripts"/>
    >>> + <classpathentry kind="src" path="src/main/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: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> DefineResourcesMojo.java
    >>> ===================================================================
    >>> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> DefineResourcesMojo.java (revision 3898)
    >>> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> DefineResourcesMojo.java (working copy)
    >>>.. -189,7 +189,7 @@
    >>> if (fileName.equalsIgnoreCase
    >>> ("Nonlocalized.lproj")) {
    >>> resource.setTargetPath(fullTargetPath);
    >>> } else {
    >>> - resource.setTargetPath(fullTargetPath +
    >>> File.separator + fileName.substring(0, fileName.length() - 6));
    >>> + resource.setTargetPath(fullTargetPath +
    >>> File.separator + fileName);
    >>> }
    >>> resources.add(resource);
    >>> }
    >>> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> DefineWOApplicationResourcesMojo.java
    >>> ===================================================================
    >>> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> DefineWOApplicationResourcesMojo.java (revision 3898)
    >>> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> DefineWOApplicationResourcesMojo.java (working copy)
    >>>.. -18,6 +18,7 @@
    >>> import java.util.jar.JarFile;
    >>> import java.util.jar.JarInputStream;
    >>>
    >>> +import org.apache.commons.io.FilenameUtils;
    >>> import org.apache.maven.artifact.Artifact;
    >>> import org.apache.maven.artifact.factory.ArtifactFactory;
    >>> import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
    >>>.. -43,27 +44,21 @@
    >>> public class DefineWOApplicationResourcesMojo extends
    >>> DefineResourcesMojo {
    >>>
    >>> /**
    >>> - * The maven project.
    >>> + * Changes back slashes '\' on Windows to '/'.
    >>> *
    >>> - *..arameter expression="${project}"
    >>> - *..equired
    >>> - *..eadonly
    >>> + *..aram path
    >>> + * Any file path
    >>> + *..eturn Returns a file path without back slashes
    >>> */
    >>> - private MavenProject project;
    >>> -
    >>> - /**
    >>> - *..arameter expression="${localRepository}"
    >>> - *..equired
    >>> - *..eadonly
    >>> - */
    >>> - private ArtifactRepository localRepository;
    >>> + public static String normalizedPath(String path) {
    >>> + return FilenameUtils.separatorsToUnix(path);
    >>> + }
    >>>
    >>> /**
    >>> - * Read patternsets.
    >>> *
    >>> - *..arameter expression="readPatternsets"
    >>> + *..omponent
    >>> */
    >>> - private Boolean readPatternsets;
    >>> + private ArtifactFactory artifactFactory;
    >>>
    >>> /**
    >>> *..omponent
    >>>.. -70,11 +65,21 @@
    >>> */
    >>> private ArtifactResolver artifactResolver;
    >>>
    >>> + private String[][] dependencyPaths;
    >>> +
    >>> /**
    >>> + * include JavaClientClasses in WebServerResources.
    >>> *
    >>> - *..omponent
    >>> + *..arameter
    >>> expression="includeJavaClientClassesInWebServerResources"
    >>> */
    >>> - private ArtifactFactory artifactFactory;
    >>> + private Boolean includeJavaClientClassesInWebServerResources;
    >>> +
    >>> + /**
    >>> + *..arameter expression="${localRepository}"
    >>> + *..equired
    >>> + *..eadonly
    >>> + */
    >>> + private ArtifactRepository localRepository;
    >>>
    >>> /**
    >>> *
    >>>.. -83,19 +88,26 @@
    >>> private ArtifactMetadataSource metadataSource;
    >>>
    >>> /**
    >>> + * The maven project.
    >>> *
    >>> - *..arameter expression="$
    >>> {project.remoteArtifactRepositories}"
    >>> + *..arameter expression="${project}"
    >>> + *..equired
    >>> + *..eadonly
    >>> */
    >>> - private List remoteRepositories;
    >>> + private MavenProject project;
    >>>
    >>> - private String[][] dependencyPaths;
    >>> + /**
    >>> + * Read patternsets.
    >>> + *
    >>> + *..arameter expression="readPatternsets"
    >>> + */
    >>> + private Boolean readPatternsets;
    >>>
    >>> /**
    >>> - * include JavaClientClasses in WebServerResources.
    >>> *
    >>> - *..arameter
    >>> expression="includeJavaClientClassesInWebServerResources"
    >>> + *..arameter expression="$
    >>> {project.remoteArtifactRepositories}"
    >>> */
    >>> - private Boolean includeJavaClientClassesInWebServerResources;
    >>> + private List remoteRepositories;
    >>>
    >>> /**
    >>> * skip webobjects frameworks from apple.
    >>>.. -108,54 +120,6 @@
    >>> super();
    >>> }
    >>>
    >>> - public void execute() throws MojoExecutionException,
    >>> MojoFailureException {
    >>> - super.execute();
    >>> - try {
    >>> - this.defineProperties();
    >>> - this.defineClasspath();
    >>> - this.executeCopyWebServerResources();
    >>> - } finally {
    >>> - dependencyPaths = null;
    >>> - }
    >>> - }
    >>> -
    >>> - private void executeCopyWebServerResources() throws
    >>> MojoExecutionException {
    >>> - getLog().info("Copy webserverresources");
    >>> - String[][] classpathEntries = this.getDependencyPaths();
    >>> - for (int i = 0; i < classpathEntries[1].length; i++) {
    >>> - if (skipAppleProvidedFrameworks != null &&
    >>> skipAppleProvidedFrameworks.booleanValue() &&
    >>> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    >>> - getLog().debug("Defining wo classpath:
    >>> dependencyPath: " + classpathEntries[0][i] + "is in the apple
    >>> group skipping");
    >>> - continue;
    >>> - }
    >>> - FileInputStream fileInputStream;
    >>> - try {
    >>> - String jarFileName = localRepository.getBasedir
    >>> () + File.separator + classpathEntries[0][i];
    >>> - getLog().debug("Copy webserverresources: looking
    >>> into jar named " + jarFileName);
    >>> - fileInputStream = new FileInputStream(jarFileName);
    >>> - JarInputStream jarInputStream = new
    >>> JarInputStream(fileInputStream);
    >>> - int counter = 0;
    >>> - JarEntry jarEntry = null;
    >>> - while ((jarEntry = jarInputStream.getNextJarEntry
    >>> ()) != null) {
    >>> - if (!jarEntry.isDirectory()) {
    >>> - String jarEntryName = jarEntry.getName();
    >>> - String prefix = "WebServerResources";
    >>> - String frameworksFolderName =
    >>> this.getProjectFolder() + "target" + File.separator +
    >>> this.getProject().getArtifactId() + "-" + this.getProject
    >>> ().getVersion() + ".woa" + File.separator + "Contents" +
    >>> File.separator + "Frameworks" + File.separator;
    >>> - if (jarEntryName != null &&
    >>> jarEntryName.length() > prefix.length() && jarEntryName.startsWith
    >>> (prefix)) {
    >>> - File destinationFolder = new File
    >>> (frameworksFolderName + classpathEntries[1][i] + ".framework");
    >>> - this.copyJarEntryToFile(jarFileName,
    >>> destinationFolder, jarEntry);
    >>> - counter++;
    >>> - }
    >>> - }
    >>> - }
    >>> - getLog().debug("Copy webserverresources:
    >>> extracted " + counter + " webserverresources from jar named " +
    >>> jarFileName);
    >>> - } catch (FileNotFoundException e) {
    >>> - throw new MojoExecutionException("Could not open
    >>> file input stream", e);
    >>> - } catch (IOException e) {
    >>> - throw new MojoExecutionException("Could not open
    >>> jar input stream", e);
    >>> - }
    >>> - }
    >>> - }
    >>> -
    >>> private void copyJarEntryToFile(String jarFileName, File
    >>> destinationFolder, JarEntry jarEntry) throws IOException,
    >>> FileNotFoundException {
    >>> // getLog().info("Copy webserverresources: jarFileName "
    >>> + jarFileName +
    >>> // " destinationFolder " + destinationFolder);
    >>>.. -203,21 +167,6 @@
    >>> }
    >>> }
    >>>
    >>> - private void defineProperties() throws MojoExecutionException {
    >>> - String fileName = this.getProjectFolder() + "target" +
    >>> File.separator + "wobuild.properties";
    >>> - getLog().debug("Defining wo properties: writing to file:
    >>> " + fileName);
    >>> - File file = new File(fileName);
    >>> - FileWriter fileWriter;
    >>> - try {
    >>> - fileWriter = new FileWriter(file);
    >>> - fileWriter.write("maven.localRepository.baseDir = "
    >>> + localRepository.getBasedir());
    >>> - fileWriter.flush();
    >>> - fileWriter.close();
    >>> - } catch (IOException e) {
    >>> - throw new MojoExecutionException("Could not write wo
    >>> properties", e);
    >>> - }
    >>> - }
    >>> -
    >>> private void defineClasspath() throws MojoExecutionException {
    >>> getLog().debug("Defining wo classpath: dependencies from
    >>> parameter");
    >>> String[][] classpathEntries = this.getDependencyPaths();
    >>>.. -225,10 +174,10 @@
    >>> for (int k = 0; k < 2; k++) {
    >>> for (int i = 0; i < classpathEntries[0].length; i++) {
    >>> getLog().debug("Defining wo classpath:
    >>> dependencyPath: " + classpathEntries[0][i]);
    >>> - if(k== 0 && this.isWebobjectAppleGroup
    >>> (classpathEntries[2][i])) {
    >>> + if (k == 0 && this.isWebobjectAppleGroup
    >>> (classpathEntries[2][i])) {
    >>> continue;
    >>> }
    >>> - if(k== 1 && !this.isWebobjectAppleGroup
    >>> (classpathEntries[2][i])) {
    >>> + if (k == 1 && !this.isWebobjectAppleGroup
    >>> (classpathEntries[2][i])) {
    >>> continue;
    >>> }
    >>> if (skipAppleProvidedFrameworks != null &&
    >>> skipAppleProvidedFrameworks.booleanValue() &&
    >>> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    >>>.. -252,20 +201,67 @@
    >>> }
    >>> }
    >>>
    >>> - public MavenProject getProject() {
    >>> - return project;
    >>> + private void defineProperties() throws MojoExecutionException {
    >>> + String fileName = this.getProjectFolder() + "target" +
    >>> File.separator + "wobuild.properties";
    >>> + getLog().debug("Defining wo properties: writing to file:
    >>> " + fileName);
    >>> + File file = new File(fileName);
    >>> + FileWriter fileWriter;
    >>> + try {
    >>> + fileWriter = new FileWriter(file);
    >>> + fileWriter.write("maven.localRepository.baseDir = "
    >>> + normalizedPath(localRepository.getBasedir()));
    >>> + fileWriter.flush();
    >>> + fileWriter.close();
    >>> + } catch (IOException e) {
    >>> + throw new MojoExecutionException("Could not write wo
    >>> properties", e);
    >>> + }
    >>> }
    >>>
    >>> - public String getProductExtension() {
    >>> - return "woa";
    >>> + public void execute() throws MojoExecutionException,
    >>> MojoFailureException {
    >>> + super.execute();
    >>> + try {
    >>> + this.defineProperties();
    >>> + this.defineClasspath();
    >>> + this.executeCopyWebServerResources();
    >>> + } finally {
    >>> + dependencyPaths = null;
    >>> + }
    >>> }
    >>>
    >>> - public boolean hasContentsFolder() {
    >>> - return true;
    >>> - }
    >>> -
    >>> - protected Boolean readPatternsets() {
    >>> - return readPatternsets;
    >>> + private void executeCopyWebServerResources() throws
    >>> MojoExecutionException {
    >>> + getLog().info("Copy webserverresources");
    >>> + String[][] classpathEntries = this.getDependencyPaths();
    >>> + for (int i = 0; i < classpathEntries[1].length; i++) {
    >>> + if (skipAppleProvidedFrameworks != null &&
    >>> skipAppleProvidedFrameworks.booleanValue() &&
    >>> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    >>> + getLog().debug("Defining wo classpath:
    >>> dependencyPath: " + classpathEntries[0][i] + "is in the apple
    >>> group skipping");
    >>> + continue;
    >>> + }
    >>> + FileInputStream fileInputStream;
    >>> + try {
    >>> + String jarFileName = localRepository.getBasedir
    >>> () + File.separator + classpathEntries[0][i];
    >>> + getLog().debug("Copy webserverresources: looking
    >>> into jar named " + jarFileName);
    >>> + fileInputStream = new FileInputStream(jarFileName);
    >>> + JarInputStream jarInputStream = new
    >>> JarInputStream(fileInputStream);
    >>> + int counter = 0;
    >>> + JarEntry jarEntry = null;
    >>> + while ((jarEntry = jarInputStream.getNextJarEntry
    >>> ()) != null) {
    >>> + if (!jarEntry.isDirectory()) {
    >>> + String jarEntryName = jarEntry.getName();
    >>> + String prefix = "WebServerResources";
    >>> + String frameworksFolderName =
    >>> this.getProjectFolder() + "target" + File.separator +
    >>> this.getProject().getArtifactId() + "-" + this.getProject
    >>> ().getVersion() + ".woa" + File.separator + "Contents" +
    >>> File.separator + "Frameworks" + File.separator;
    >>> + if (jarEntryName != null &&
    >>> jarEntryName.length() > prefix.length() && jarEntryName.startsWith
    >>> (prefix)) {
    >>> + File destinationFolder = new File
    >>> (frameworksFolderName + classpathEntries[1][i] + ".framework");
    >>> + this.copyJarEntryToFile(jarFileName,
    >>> destinationFolder, jarEntry);
    >>> + counter++;
    >>> + }
    >>> + }
    >>> + }
    >>> + getLog().debug("Copy webserverresources:
    >>> extracted " + counter + " webserverresources from jar named " +
    >>> jarFileName);
    >>> + } catch (FileNotFoundException e) {
    >>> + throw new MojoExecutionException("Could not open
    >>> file input stream", e);
    >>> + } catch (IOException e) {
    >>> + throw new MojoExecutionException("Could not open
    >>> jar input stream", e);
    >>> + }
    >>> + }
    >>> }
    >>>
    >>> private String[][] getDependencyPaths() throws
    >>> MojoExecutionException {
    >>>.. -291,6 +287,11 @@
    >>> Iterator dependenciesIterator = artifacts.iterator();
    >>> while (dependenciesIterator.hasNext()) {
    >>> Artifact artifact = (Artifact)
    >>> dependenciesIterator.next();
    >>> +
    >>> + if (Artifact.SCOPE_PROVIDED.equals
    >>> (artifact.getScope())) {
    >>> + continue;
    >>> + }
    >>> +
    >>> String depenendencyGroup = artifact.getGroupId();
    >>> if (depenendencyGroup != null) {
    >>> depenendencyGroup = depenendencyGroup.replace
    >>> ('.', File.separatorChar);
    >>>.. -314,7 +315,23 @@
    >>> return dependencyPaths;
    >>> }
    >>>
    >>> + public String getProductExtension() {
    >>> + return "woa";
    >>> + }
    >>> +
    >>> + public MavenProject getProject() {
    >>> + return project;
    >>> + }
    >>> +
    >>> + public boolean hasContentsFolder() {
    >>> + return true;
    >>> + }
    >>> +
    >>> public boolean includesVersionInArtifactName() {
    >>> return true;
    >>> }
    >>> +
    >>> + protected Boolean readPatternsets() {
    >>> + return readPatternsets;
    >>> + }
    >>> }
    >>> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> WOMojo.java
    >>> ===================================================================
    >>> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> WOMojo.java (revision 3898)
    >>> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> WOMojo.java (working copy)
    >>>.. -3,6 +3,7 @@
    >>> //org.apache.maven.plugins:maven-compiler-plugin:compile
    >>> import java.io.File;
    >>>
    >>> +import org.apache.commons.io.FilenameUtils;
    >>> import org.apache.maven.plugin.AbstractMojo;
    >>> import org.apache.maven.project.MavenProject;
    >>>
    >>>.. -14,18 +15,14 @@
    >>> super();
    >>> }
    >>>
    >>> - protected boolean isWebobjectAppleGroup(String
    >>> dependencyGroup) {
    >>> - boolean returnValue = false;
    >>> - if (dependencyGroup != null) {
    >>> - if(dependencyGroup.indexOf('.') >= 0) {
    >>> - throw new IllegalStateException();
    >>> - }
    >>> - returnValue = dependencyGroup.equals
    >>> (MAVEN_WEBOBJECTS_GROUP_ID);
    >>> - }
    >>> - getLog().debug("WOMojo: isWebobjectAppleGroup: " +
    >>> dependencyGroup + " return value " + returnValue);
    >>> - return returnValue;
    >>> + private boolean containsDot(String text) {
    >>> + return text.indexOf('.') >= 0;
    >>> }
    >>>
    >>> + public abstract String getProductExtension();
    >>> +
    >>> + public abstract MavenProject getProject();
    >>> +
    >>> protected String getProjectFolder() {
    >>> String projectFolder = this.getProject().getFile
    >>> ().getPath().substring(0, this.getProject().getFile().getPath
    >>> ().length() - 7);
    >>> return projectFolder;
    >>>.. -39,7 +36,21 @@
    >>> return null;
    >>> }
    >>>
    >>> - public abstract String getProductExtension();
    >>> + protected boolean isWebobjectAppleGroup(String
    >>> dependencyGroup) {
    >>> + if (dependencyGroup == null) {
    >>> + return false;
    >>> + }
    >>>
    >>> - public abstract MavenProject getProject();
    >>> + if (containsDot(dependencyGroup)) {
    >>> + throw new IllegalArgumentException("Dependency group
    >>> cannot contains '.' (dot).");
    >>> + }
    >>> +
    >>> + String normalizedGroup = FilenameUtils.separatorsToUnix
    >>> (dependencyGroup);
    >>> +
    >>> + boolean returnValue = MAVEN_WEBOBJECTS_GROUP_ID.equals
    >>> (normalizedGroup);
    >>> +
    >>> + getLog().debug("WOMojo: isWebobjectAppleGroup: " +
    >>> normalizedGroup + " return value " + returnValue);
    >>> +
    >>> + return returnValue;
    >>> + }
    >>> }
    >>> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> MockWOMojo.java
    >>> ===================================================================
    >>> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> MockWOMojo.java
    >>> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> MockWOMojo.java
    >>>.. -0,0 +1,25 @@
    >>> +package org.objectstyle.woproject.maven2.wolifecycle;
    >>> +
    >>> +import org.apache.maven.plugin.MojoExecutionException;
    >>> +import org.apache.maven.plugin.MojoFailureException;
    >>> +import org.apache.maven.project.MavenProject;
    >>> +
    >>> +/**
    >>> + * Only to test methods on abstract class
    >>> + *
    >>> + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    >>> Prange</a>
    >>> + */
    >>> +public class MockWOMojo extends WOMojo {
    >>> +
    >>> + public String getProductExtension() {
    >>> + return null;
    >>> + }
    >>> +
    >>> + public MavenProject getProject() {
    >>> + return null;
    >>> + }
    >>> +
    >>> + public void execute() throws MojoExecutionException,
    >>> MojoFailureException {
    >>> + // Do nothing
    >>> + }
    >>> +}
    >>> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> TestDefineWOApplicationResourcesMojo.java
    >>> ===================================================================
    >>> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> TestDefineWOApplicationResourcesMojo.java
    >>> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> TestDefineWOApplicationResourcesMojo.java
    >>>.. -0,0 +1,13 @@
    >>> +package org.objectstyle.woproject.maven2.wolifecycle;
    >>> +
    >>> +import junit.framework.TestCase;
    >>> +
    >>> +public class TestDefineWOApplicationResourcesMojo extends
    >>> TestCase {
    >>> + public void testNormalizedFilePath() throws Exception {
    >>> + String path = "C:\\Documents and Settings\\User\\.m2\
    >>> \repository";
    >>> +
    >>> + String result =
    >>> DefineWOApplicationResourcesMojo.normalizedPath(path);
    >>> +
    >>> + assertEquals("C:/Documents and Settings/User/.m2/
    >>> repository", result);
    >>> + }
    >>> +}
    >>> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> TestWOMojo.java
    >>> ===================================================================
    >>> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> TestWOMojo.java
    >>> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    >>> TestWOMojo.java
    >>>.. -0,0 +1,49 @@
    >>> +package org.objectstyle.woproject.maven2.wolifecycle;
    >>> +
    >>> +import junit.framework.TestCase;
    >>> +
    >>> +public class TestWOMojo extends TestCase {
    >>> +
    >>> + protected WOMojo mojo;
    >>> +
    >>> + protected void setUp() throws Exception {
    >>> + super.setUp();
    >>> +
    >>> + mojo = new MockWOMojo();
    >>> + }
    >>> +
    >>> + public void testIsInvalidGroup() throws Exception {
    >>> + String groups[] = { ".invalidgroup", "invalid.group",
    >>> "invalidgroup." };
    >>> +
    >>> + for (int i = 0; i < groups.length; i++) {
    >>> + try {
    >>> + mojo.isWebobjectAppleGroup(groups[i]);
    >>> +
    >>> + fail("Invalid group. Should throw an
    >>> IllegalArgumentException.");
    >>> + } catch (IllegalArgumentException exception) {
    >>> + assertEquals("Dependency group cannot contains
    >>> '.' (dot).", exception.getMessage());
    >>> + }
    >>> + }
    >>> + }
    >>> +
    >>> + public void testIsNotWebObjectsGroup() throws Exception {
    >>> + String group = "another/group";
    >>> +
    >>> + assertFalse(mojo.isWebobjectAppleGroup(group));
    >>> + }
    >>> +
    >>> + public void testIsNullGroup() throws Exception {
    >>> + assertFalse(mojo.isWebobjectAppleGroup(null));
    >>> + }
    >>> +
    >>> + public void testWebObjectsGroupIsOsIndependent() throws
    >>> Exception {
    >>> + String group = "webobjects/apple";
    >>> +
    >>> + assertTrue(mojo.isWebobjectAppleGroup(group));
    >>> +
    >>> + group = "webobjects\\apple";
    >>> +
    >>> + assertTrue(mojo.isWebobjectAppleGroup(group));
    >>> + }
    >>> +
    >>> +}
    >
    > --
    >
    > \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: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > DefineResourcesMojo.java
    > ===================================================================
    > --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > DefineResourcesMojo.java (revision 3898)
    > +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > DefineResourcesMojo.java (working copy)
    >.. -189,7 +189,7 @@
    > if (fileName.equalsIgnoreCase("Nonlocalized.lproj")) {
    > resource.setTargetPath(fullTargetPath);
    > } else {
    > - resource.setTargetPath(fullTargetPath + File.separator +
    > fileName.substring(0, fileName.length() - 6));
    > + resource.setTargetPath(fullTargetPath + File.separator +
    > fileName);
    > }
    > resources.add(resource);
    > }
    > Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > DefineWOApplicationResourcesMojo.java
    > ===================================================================
    > --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > DefineWOApplicationResourcesMojo.java (revision 3898)
    > +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > DefineWOApplicationResourcesMojo.java (working copy)
    >.. -18,6 +18,7 @@
    > import java.util.jar.JarFile;
    > import java.util.jar.JarInputStream;
    >
    > +import org.apache.commons.io.FilenameUtils;
    > import org.apache.maven.artifact.Artifact;
    > import org.apache.maven.artifact.factory.ArtifactFactory;
    > import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
    >.. -43,27 +44,21 @@
    > public class DefineWOApplicationResourcesMojo extends
    > DefineResourcesMojo {
    >
    > /**
    > - * The maven project.
    > + * Changes back slashes '\' on Windows to '/'.
    > *
    > - *..arameter expression="${project}"
    > - *..equired
    > - *..eadonly
    > + *..aram path
    > + * Any file path
    > + *..eturn Returns a file path without back slashes
    > */
    > - private MavenProject project;
    > -
    > - /**
    > - *..arameter expression="${localRepository}"
    > - *..equired
    > - *..eadonly
    > - */
    > - private ArtifactRepository localRepository;
    > + public static String normalizedPath(String path) {
    > + return FilenameUtils.separatorsToUnix(path);
    > + }
    >
    > /**
    > - * Read patternsets.
    > *
    > - *..arameter expression="readPatternsets"
    > + *..omponent
    > */
    > - private Boolean readPatternsets;
    > + private ArtifactFactory artifactFactory;
    >
    > /**
    > *..omponent
    >.. -70,11 +65,21 @@
    > */
    > private ArtifactResolver artifactResolver;
    >
    > + private String[][] dependencyPaths;
    > +
    > /**
    > + * include JavaClientClasses in WebServerResources.
    > *
    > - *..omponent
    > + *..arameter
    > expression="includeJavaClientClassesInWebServerResources"
    > */
    > - private ArtifactFactory artifactFactory;
    > + private Boolean includeJavaClientClassesInWebServerResources;
    > +
    > + /**
    > + *..arameter expression="${localRepository}"
    > + *..equired
    > + *..eadonly
    > + */
    > + private ArtifactRepository localRepository;
    >
    > /**
    > *
    >.. -83,19 +88,26 @@
    > private ArtifactMetadataSource metadataSource;
    >
    > /**
    > + * The maven project.
    > *
    > - *..arameter expression="${project.remoteArtifactRepositories}"
    > + *..arameter expression="${project}"
    > + *..equired
    > + *..eadonly
    > */
    > - private List remoteRepositories;
    > + private MavenProject project;
    >
    > - private String[][] dependencyPaths;
    > + /**
    > + * Read patternsets.
    > + *
    > + *..arameter expression="readPatternsets"
    > + */
    > + private Boolean readPatternsets;
    >
    > /**
    > - * include JavaClientClasses in WebServerResources.
    > *
    > - *..arameter
    > expression="includeJavaClientClassesInWebServerResources"
    > + *..arameter expression="${project.remoteArtifactRepositories}"
    > */
    > - private Boolean includeJavaClientClassesInWebServerResources;
    > + private List remoteRepositories;
    >
    > /**
    > * skip webobjects frameworks from apple.
    >.. -108,54 +120,6 @@
    > super();
    > }
    >
    > - public void execute() throws MojoExecutionException,
    > MojoFailureException {
    > - super.execute();
    > - try {
    > - this.defineProperties();
    > - this.defineClasspath();
    > - this.executeCopyWebServerResources();
    > - } finally {
    > - dependencyPaths = null;
    > - }
    > - }
    > -
    > - private void executeCopyWebServerResources() throws
    > MojoExecutionException {
    > - getLog().info("Copy webserverresources");
    > - String[][] classpathEntries = this.getDependencyPaths();
    > - for (int i = 0; i < classpathEntries[1].length; i++) {
    > - if (skipAppleProvidedFrameworks != null &&
    > skipAppleProvidedFrameworks.booleanValue() &&
    > this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    > - getLog().debug("Defining wo classpath: dependencyPath: " +
    > classpathEntries[0][i] + "is in the apple group skipping");
    > - continue;
    > - }
    > - FileInputStream fileInputStream;
    > - try {
    > - String jarFileName = localRepository.getBasedir() +
    > File.separator + classpathEntries[0][i];
    > - getLog().debug("Copy webserverresources: looking into jar
    > named " + jarFileName);
    > - fileInputStream = new FileInputStream(jarFileName);
    > - JarInputStream jarInputStream = new JarInputStream
    > (fileInputStream);
    > - int counter = 0;
    > - JarEntry jarEntry = null;
    > - while ((jarEntry = jarInputStream.getNextJarEntry()) != null) {
    > - if (!jarEntry.isDirectory()) {
    > - String jarEntryName = jarEntry.getName();
    > - String prefix = "WebServerResources";
    > - String frameworksFolderName = this.getProjectFolder() +
    > "target" + File.separator + this.getProject().getArtifactId() + "-"
    > + this.getProject().getVersion() + ".woa" + File.separator +
    > "Contents" + File.separator + "Frameworks" + File.separator;
    > - if (jarEntryName != null && jarEntryName.length() >
    > prefix.length() && jarEntryName.startsWith(prefix)) {
    > - File destinationFolder = new File(frameworksFolderName +
    > classpathEntries[1][i] + ".framework");
    > - this.copyJarEntryToFile(jarFileName, destinationFolder,
    > jarEntry);
    > - counter++;
    > - }
    > - }
    > - }
    > - getLog().debug("Copy webserverresources: extracted " + counter
    > + " webserverresources from jar named " + jarFileName);
    > - } catch (FileNotFoundException e) {
    > - throw new MojoExecutionException("Could not open file input
    > stream", e);
    > - } catch (IOException e) {
    > - throw new MojoExecutionException("Could not open jar input
    > stream", e);
    > - }
    > - }
    > - }
    > -
    > private void copyJarEntryToFile(String jarFileName, File
    > destinationFolder, JarEntry jarEntry) throws IOException,
    > FileNotFoundException {
    > // getLog().info("Copy webserverresources: jarFileName " +
    > jarFileName +
    > // " destinationFolder " + destinationFolder);
    >.. -203,21 +167,6 @@
    > }
    > }
    >
    > - private void defineProperties() throws MojoExecutionException {
    > - String fileName = this.getProjectFolder() + "target" +
    > File.separator + "wobuild.properties";
    > - getLog().debug("Defining wo properties: writing to file: " +
    > fileName);
    > - File file = new File(fileName);
    > - FileWriter fileWriter;
    > - try {
    > - fileWriter = new FileWriter(file);
    > - fileWriter.write("maven.localRepository.baseDir = " +
    > localRepository.getBasedir());
    > - fileWriter.flush();
    > - fileWriter.close();
    > - } catch (IOException e) {
    > - throw new MojoExecutionException("Could not write wo
    > properties", e);
    > - }
    > - }
    > -
    > private void defineClasspath() throws MojoExecutionException {
    > getLog().debug("Defining wo classpath: dependencies from
    > parameter");
    > String[][] classpathEntries = this.getDependencyPaths();
    >.. -225,10 +174,10 @@
    > for (int k = 0; k < 2; k++) {
    > for (int i = 0; i < classpathEntries[0].length; i++) {
    > getLog().debug("Defining wo classpath: dependencyPath: " +
    > classpathEntries[0][i]);
    > - if(k== 0 && this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    > + if (k == 0 && this.isWebobjectAppleGroup(classpathEntries[2]
    > [i])) {
    > continue;
    > }
    > - if(k== 1 && !this.isWebobjectAppleGroup(classpathEntries[2]
    > [i])) {
    > + if (k == 1 && !this.isWebobjectAppleGroup(classpathEntries[2]
    > [i])) {
    > continue;
    > }
    > if (skipAppleProvidedFrameworks != null &&
    > skipAppleProvidedFrameworks.booleanValue() &&
    > this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    >.. -252,20 +201,67 @@
    > }
    > }
    >
    > - public MavenProject getProject() {
    > - return project;
    > + private void defineProperties() throws MojoExecutionException {
    > + String fileName = this.getProjectFolder() + "target" +
    > File.separator + "wobuild.properties";
    > + getLog().debug("Defining wo properties: writing to file: " +
    > fileName);
    > + File file = new File(fileName);
    > + FileWriter fileWriter;
    > + try {
    > + fileWriter = new FileWriter(file);
    > + fileWriter.write("maven.localRepository.baseDir = " +
    > normalizedPath(localRepository.getBasedir()));
    > + fileWriter.flush();
    > + fileWriter.close();
    > + } catch (IOException e) {
    > + throw new MojoExecutionException("Could not write wo
    > properties", e);
    > + }
    > }
    >
    > - public String getProductExtension() {
    > - return "woa";
    > + public void execute() throws MojoExecutionException,
    > MojoFailureException {
    > + super.execute();
    > + try {
    > + this.defineProperties();
    > + this.defineClasspath();
    > + this.executeCopyWebServerResources();
    > + } finally {
    > + dependencyPaths = null;
    > + }
    > }
    >
    > - public boolean hasContentsFolder() {
    > - return true;
    > - }
    > -
    > - protected Boolean readPatternsets() {
    > - return readPatternsets;
    > + private void executeCopyWebServerResources() throws
    > MojoExecutionException {
    > + getLog().info("Copy webserverresources");
    > + String[][] classpathEntries = this.getDependencyPaths();
    > + for (int i = 0; i < classpathEntries[1].length; i++) {
    > + if (skipAppleProvidedFrameworks != null &&
    > skipAppleProvidedFrameworks.booleanValue() &&
    > this.isWebobjectAppleGroup(classpathEntries[2][i])) {
    > + getLog().debug("Defining wo classpath: dependencyPath: " +
    > classpathEntries[0][i] + "is in the apple group skipping");
    > + continue;
    > + }
    > + FileInputStream fileInputStream;
    > + try {
    > + String jarFileName = localRepository.getBasedir() +
    > File.separator + classpathEntries[0][i];
    > + getLog().debug("Copy webserverresources: looking into jar
    > named " + jarFileName);
    > + fileInputStream = new FileInputStream(jarFileName);
    > + JarInputStream jarInputStream = new JarInputStream
    > (fileInputStream);
    > + int counter = 0;
    > + JarEntry jarEntry = null;
    > + while ((jarEntry = jarInputStream.getNextJarEntry()) != null) {
    > + if (!jarEntry.isDirectory()) {
    > + String jarEntryName = jarEntry.getName();
    > + String prefix = "WebServerResources";
    > + String frameworksFolderName = this.getProjectFolder() +
    > "target" + File.separator + this.getProject().getArtifactId() + "-"
    > + this.getProject().getVersion() + ".woa" + File.separator +
    > "Contents" + File.separator + "Frameworks" + File.separator;
    > + if (jarEntryName != null && jarEntryName.length() >
    > prefix.length() && jarEntryName.startsWith(prefix)) {
    > + File destinationFolder = new File(frameworksFolderName +
    > classpathEntries[1][i] + ".framework");
    > + this.copyJarEntryToFile(jarFileName, destinationFolder,
    > jarEntry);
    > + counter++;
    > + }
    > + }
    > + }
    > + getLog().debug("Copy webserverresources: extracted " + counter
    > + " webserverresources from jar named " + jarFileName);
    > + } catch (FileNotFoundException e) {
    > + throw new MojoExecutionException("Could not open file input
    > stream", e);
    > + } catch (IOException e) {
    > + throw new MojoExecutionException("Could not open jar input
    > stream", e);
    > + }
    > + }
    > }
    >
    > private String[][] getDependencyPaths() throws
    > MojoExecutionException {
    >.. -291,6 +287,11 @@
    > Iterator dependenciesIterator = artifacts.iterator();
    > while (dependenciesIterator.hasNext()) {
    > Artifact artifact = (Artifact) dependenciesIterator.next();
    > +
    > + if (Artifact.SCOPE_PROVIDED.equals(artifact.getScope())) {
    > + continue;
    > + }
    > +
    > String depenendencyGroup = artifact.getGroupId();
    > if (depenendencyGroup != null) {
    > depenendencyGroup = depenendencyGroup.replace('.',
    > File.separatorChar);
    >.. -314,7 +315,23 @@
    > return dependencyPaths;
    > }
    >
    > + public String getProductExtension() {
    > + return "woa";
    > + }
    > +
    > + public MavenProject getProject() {
    > + return project;
    > + }
    > +
    > + public boolean hasContentsFolder() {
    > + return true;
    > + }
    > +
    > public boolean includesVersionInArtifactName() {
    > return true;
    > }
    > +
    > + protected Boolean readPatternsets() {
    > + return readPatternsets;
    > + }
    > }
    > Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > WOMojo.java
    > ===================================================================
    > --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > WOMojo.java (revision 3898)
    > +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
    > WOMojo.java (working copy)
    >.. -3,6 +3,7 @@
    > //org.apache.maven.plugins:maven-compiler-plugin:compile
    > import java.io.File;
    >
    > +import org.apache.commons.io.FilenameUtils;
    > import org.apache.maven.plugin.AbstractMojo;
    > import org.apache.maven.project.MavenProject;
    >
    >.. -14,18 +15,14 @@
    > super();
    > }
    >
    > - protected boolean isWebobjectAppleGroup(String dependencyGroup) {
    > - boolean returnValue = false;
    > - if (dependencyGroup != null) {
    > - if(dependencyGroup.indexOf('.') >= 0) {
    > - throw new IllegalStateException();
    > - }
    > - returnValue = dependencyGroup.equals(MAVEN_WEBOBJECTS_GROUP_ID);
    > - }
    > - getLog().debug("WOMojo: isWebobjectAppleGroup: " +
    > dependencyGroup + " return value " + returnValue);
    > - return returnValue;
    > + private boolean containsDot(String text) {
    > + return text.indexOf('.') >= 0;
    > }
    >
    > + public abstract String getProductExtension();
    > +
    > + public abstract MavenProject getProject();
    > +
    > protected String getProjectFolder() {
    > String projectFolder = this.getProject().getFile().getPath
    > ().substring(0, this.getProject().getFile().getPath().length() - 7);
    > return projectFolder;
    >.. -39,7 +36,21 @@
    > return null;
    > }
    >
    > - public abstract String getProductExtension();
    > + protected boolean isWebobjectAppleGroup(String dependencyGroup) {
    > + if (dependencyGroup == null) {
    > + return false;
    > + }
    >
    > - public abstract MavenProject getProject();
    > + if (containsDot(dependencyGroup)) {
    > + throw new IllegalArgumentException("Dependency group cannot
    > contains '.' (dot).");
    > + }
    > +
    > + String normalizedGroup = FilenameUtils.separatorsToUnix
    > (dependencyGroup);
    > +
    > + boolean returnValue = MAVEN_WEBOBJECTS_GROUP_ID.equals
    > (normalizedGroup);
    > +
    > + getLog().debug("WOMojo: isWebobjectAppleGroup: " +
    > normalizedGroup + " return value " + returnValue);
    > +
    > + return returnValue;
    > + }
    > }
    > Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > MockWOMojo.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > MockWOMojo.java
    > +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > MockWOMojo.java
    >.. -0,0 +1,25 @@
    > +package org.objectstyle.woproject.maven2.wolifecycle;
    > +
    > +import org.apache.maven.plugin.MojoExecutionException;
    > +import org.apache.maven.plugin.MojoFailureException;
    > +import org.apache.maven.project.MavenProject;
    > +
    > +/**
    > + * Only to test methods on abstract class
    > + *
    > + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
    > Prange</a>
    > + */
    > +public class MockWOMojo extends WOMojo {
    > +
    > + public String getProductExtension() {
    > + return null;
    > + }
    > +
    > + public MavenProject getProject() {
    > + return null;
    > + }
    > +
    > + public void execute() throws MojoExecutionException,
    > MojoFailureException {
    > + // Do nothing
    > + }
    > +}
    > Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > TestDefineWOApplicationResourcesMojo.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > TestDefineWOApplicationResourcesMojo.java
    > +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > TestDefineWOApplicationResourcesMojo.java
    >.. -0,0 +1,13 @@
    > +package org.objectstyle.woproject.maven2.wolifecycle;
    > +
    > +import junit.framework.TestCase;
    > +
    > +public class TestDefineWOApplicationResourcesMojo extends TestCase {
    > + public void testNormalizedFilePath() throws Exception {
    > + String path = "C:\\Documents and Settings\\User\\.m2\\repository";
    > +
    > + String result = DefineWOApplicationResourcesMojo.normalizedPath
    > (path);
    > +
    > + assertEquals("C:/Documents and Settings/User/.m2/repository",
    > result);
    > + }
    > +}
    > Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > TestWOMojo.java
    > ===================================================================
    > --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > TestWOMojo.java
    > +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
    > TestWOMojo.java
    >.. -0,0 +1,49 @@
    > +package org.objectstyle.woproject.maven2.wolifecycle;
    > +
    > +import junit.framework.TestCase;
    > +
    > +public class TestWOMojo extends TestCase {
    > +
    > + protected WOMojo mojo;
    > +
    > + protected void setUp() throws Exception {
    > + super.setUp();
    > +
    > + mojo = new MockWOMojo();
    > + }
    > +
    > + public void testIsInvalidGroup() throws Exception {
    > + String groups[] = { ".invalidgroup", "invalid.group",
    > "invalidgroup." };
    > +
    > + for (int i = 0; i < groups.length; i++) {
    > + try {
    > + mojo.isWebobjectAppleGroup(groups[i]);
    > +
    > + fail("Invalid group. Should throw an IllegalArgumentException.");
    > + } catch (IllegalArgumentException exception) {
    > + assertEquals("Dependency group cannot contains '.' (dot).",
    > exception.getMessage());
    > + }
    > + }
    > + }
    > +
    > + public void testIsNotWebObjectsGroup() throws Exception {
    > + String group = "another/group";
    > +
    > + assertFalse(mojo.isWebobjectAppleGroup(group));
    > + }
    > +
    > + public void testIsNullGroup() throws Exception {
    > + assertFalse(mojo.isWebobjectAppleGroup(null));
    > + }
    > +
    > + public void testWebObjectsGroupIsOsIndependent() throws Exception {
    > + String group = "webobjects/apple";
    > +
    > + assertTrue(mojo.isWebobjectAppleGroup(group));
    > +
    > + group = "webobjects\\apple";
    > +
    > + assertTrue(mojo.isWebobjectAppleGroup(group));
    > + }
    > +
    > +}
    > <maven-wolifecycle-plugin-patch.zip>



    This archive was generated by hypermail 2.0.0 : Mon Apr 09 2007 - 06:23:17 EDT