Re: maven-wolifecycle-patch

From: Henrique Prange (hprang..mail.com)
Date: Thu Apr 05 2007 - 10:27:25 EDT

  • Next message: André Koppany: "Re: Entity Modeler: wrong sql generation with frontbase"

    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)); + } + +}




    This archive was generated by hypermail 2.0.0 : Thu Apr 05 2007 - 10:28:53 EDT