You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2015/12/27 00:13:59 UTC

svn commit: r1721772 - in /maven/plugins/trunk/maven-ejb-plugin/src: main/java/org/apache/maven/plugins/ejb/ test/java/org/apache/maven/plugins/ejb/

Author: khmarbaise
Date: Sat Dec 26 23:13:59 2015
New Revision: 1721772

URL: http://svn.apache.org/viewvc?rev=1721772&view=rev
Log:
Continued refactoring Mojo

Added:
    maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbHelper.java
    maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java
Modified:
    maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbMojo.java
    maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbMojoTest.java

Added: maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbHelper.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbHelper.java?rev=1721772&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbHelper.java (added)
+++ maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbHelper.java Sat Dec 26 23:13:59 2015
@@ -0,0 +1,91 @@
+package org.apache.maven.plugins.ejb;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * This class contains some helper methods which do not belong to {@link EjbMojo}.
+ * 
+ * @author Karl Heinz Marbaise <kh...@apache.org>
+ */
+public class EjbHelper
+{
+    /**
+     * Check if a <code>classifier</code> is valid or not.
+     * 
+     * @param classifier The classifier which should be checked.
+     * @return true in case of a valid classifier false otherwise.
+     */
+    public static boolean isClassifierValid( String classifier )
+    {
+        // @FIXME: Check classifier and clientClassifier for leading "-" ??
+        // What are the rules for a valid classifier? Somewhere documented? which can be used as a reference?
+        boolean result = false;
+
+        // The following check is only based on an educated guess ;-)
+        if ( classifier.matches( "^[a-zA-Z]+[0-9a-zA-Z\\-]*" ) )
+        {
+            result = true;
+        }
+
+        return result;
+    }
+
+    /**
+     * Check if the given classifier exists in the meaning of not being {@code null} and contain something else than
+     * only white spaces.
+     * 
+     * @param classifier The classifier to be used.
+     * @return true in case when the given classifier is not {@code null} and contains something else than white spaces.
+     */
+    public static boolean hasClassifier( String classifier )
+    {
+        boolean result = false;
+        if ( classifier != null && classifier.trim().length() > 0 )
+        {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * Returns the Jar file to generate, based on an optional classifier.
+     *
+     * @param basedir the output directory
+     * @param finalName the name of the ear file
+     * @param classifier an optional classifier
+     * @return the file to generate
+     */
+    public static File getJarFileName( File basedir, String finalName, String classifier )
+    {
+        StringBuilder fileName = new StringBuilder( finalName );
+
+        if ( hasClassifier( classifier ) )
+        {
+            fileName.append( "-" ).append( classifier );
+        }
+
+        fileName.append( ".jar" );
+
+        return new File( basedir, fileName.toString() );
+    }
+
+}

Modified: maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbMojo.java?rev=1721772&r1=1721771&r2=1721772&view=diff
==============================================================================
--- maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbMojo.java (original)
+++ maven/plugins/trunk/maven-ejb-plugin/src/main/java/org/apache/maven/plugins/ejb/EjbMojo.java Sat Dec 26 23:13:59 2015
@@ -67,6 +67,16 @@ public class EjbMojo
         new String[] { "**/*Bean.class", "**/*CMP.class", "**/*Session.class", "**/package.html" };
 
     /**
+     * Default value for {@link #clientClassifier}
+     */
+    public static final String DEFAULT_CLIENT_CLASSIFIER = "client";
+
+    /**
+     * Default value for {@link #ejbJar}.
+     */
+    public static final String DEFAULT_EJBJAR = "META-INF/ejb-jar.xml";
+
+    /**
      * The directory location for the generated EJB.
      */
     @Parameter( defaultValue = "${project.build.directory}", required = true, readonly = true )
@@ -91,19 +101,14 @@ public class EjbMojo
     private String classifier;
 
     /**
-     * Classifier to add to the client artifact generated.
+     * Classifier which is used for the client artifact.
      * 
      * @since 3.0.0
      */
-    @Parameter( property = "maven.ejb.clientClassifier" )
+    @Parameter( property = "maven.ejb.clientClassifier", defaultValue = DEFAULT_CLIENT_CLASSIFIER )
     private String clientClassifier;
 
     /**
-     * Default value for {@link #ejbJar}.
-     */
-    public static final String DEFAULT_EJBJAR = "META-INF/ejb-jar.xml";
-
-    /**
      * You can define the location of <code>ejb-jar.xml</code> file.
      */
     @Parameter( property = "maven.ejb.ejbJar", defaultValue = DEFAULT_EJBJAR )
@@ -271,15 +276,18 @@ public class EjbMojo
             sourceDirectory.mkdirs();
         }
 
-        getLog().info( "Building EJB " + jarName + " with EJB version " + ejbVersion );
-
         File jarFile = generateEjb();
 
-        // Handle the classifier if necessary
-        // TODO: For 3.0 this should be changed having a separate classifier for main artifact and ejb-client.
-        if ( classifier != null )
+        if ( hasClassifier() )
         {
-            projectHelper.attachArtifact( project, "ejb", classifier, jarFile );
+            if ( !isClassifierValid() )
+            {
+                String message = "The given classifier '" + getClassifier() + "' is not valid.";
+                getLog().error( message );
+                throw new MojoExecutionException( message );
+            }
+
+            projectHelper.attachArtifact( project, "ejb", getClassifier(), jarFile );
         }
         else
         {
@@ -289,15 +297,22 @@ public class EjbMojo
         if ( generateClient )
         {
             File clientJarFile = generateEjbClient();
-            // TODO: shouldn't need classifer
-            // TODO: For 3.0 this should be changed having a separate classifier for main artifact and ejb-client.
-            if ( classifier != null )
+            if ( hasClientClassifier() )
             {
-                projectHelper.attachArtifact( project, "ejb-client", classifier + "-client", clientJarFile );
+                if ( !isClientClassifierValid() )
+                {
+                    String message = "The given client classifier '" + getClientClassifier() + "' is not valid.";
+                    getLog().error( message );
+                    throw new MojoExecutionException( message );
+                }
+
+                projectHelper.attachArtifact( project, "ejb-client", getClientClassifier(), clientJarFile );
             }
             else
             {
-                projectHelper.attachArtifact( project, "ejb-client", "client", clientJarFile );
+                // FIXME: This does not make sense, cause a classifier for the client should always exist otherwise
+                // Failure!
+                projectHelper.attachArtifact( project, "ejb-client", getClientClassifier(), clientJarFile );
             }
 
         }
@@ -306,7 +321,9 @@ public class EjbMojo
     private File generateEjb()
         throws MojoExecutionException
     {
-        File jarFile = getEJBJarFile( outputDirectory, jarName, classifier );
+        File jarFile = EjbHelper.getJarFileName( outputDirectory, jarName, getClassifier() );
+
+        getLog().info( "Building EJB " + jarName + " with EJB version " + ejbVersion );
 
         MavenArchiver archiver = new MavenArchiver();
 
@@ -316,7 +333,6 @@ public class EjbMojo
 
         File deploymentDescriptor = new File( sourceDirectory, ejbJar );
 
-        /* test EJB version compliance */
         checkEJBVersionCompliance( deploymentDescriptor );
 
         try
@@ -332,6 +348,7 @@ public class EjbMojo
 
             archiver.getArchiver().addDirectory( sourceDirectory, DEFAULT_INCLUDES, mainJarExcludes );
 
+            // FIXME: We should be able to filter more than just the deployment descriptor?
             if ( deploymentDescriptor.exists() )
             {
                 // EJB-34 Filter ejb-jar.xml
@@ -374,14 +391,9 @@ public class EjbMojo
     private File generateEjbClient()
         throws MojoExecutionException
     {
-        String clientJarName = jarName;
-        if ( classifier != null )
-        {
-            clientJarName += "-" + classifier;
-        }
+        File clientJarFile = EjbHelper.getJarFileName( outputDirectory, jarName, getClientClassifier() );
 
-        String resultingClientJarNameWithClassifier = clientJarName + "-client";
-        getLog().info( "Building EJB client " + resultingClientJarNameWithClassifier );
+        getLog().info( "Building EJB client " + clientJarFile.getPath() );
 
         String[] excludes = DEFAULT_CLIENT_EXCLUDES;
         String[] includes = DEFAULT_INCLUDES;
@@ -396,8 +408,6 @@ public class EjbMojo
             excludes = (String[]) clientExcludes.toArray( new String[clientExcludes.size()] );
         }
 
-        File clientJarFile = new File( outputDirectory, resultingClientJarNameWithClassifier + ".jar" );
-
         MavenArchiver clientArchiver = new MavenArchiver();
 
         clientArchiver.setArchiver( clientJarArchiver );
@@ -471,33 +481,11 @@ public class EjbMojo
     }
 
     /**
-     * Returns the EJB Jar file to generate, based on an optional classifier.
-     *
-     * @param basedir the output directory
-     * @param finalName the name of the ear file
-     * @param classifier an optional classifier
-     * @return the EJB file to generate
-     */
-    private static File getEJBJarFile( File basedir, String finalName, String classifier )
-    {
-        if ( classifier == null )
-        {
-            classifier = "";
-        }
-        else if ( classifier.trim().length() > 0 && !classifier.startsWith( "-" ) )
-        {
-            classifier = "-" + classifier;
-        }
-
-        return new File( basedir, finalName + classifier + ".jar" );
-    }
-
-    /**
      * @return true in case where the classifier is not {@code null} and contains something else than white spaces.
      */
     private boolean hasClassifier()
     {
-        return hasClassifier( getClassifier() );
+        return EjbHelper.hasClassifier( getClassifier() );
     }
 
     /**
@@ -506,17 +494,17 @@ public class EjbMojo
      */
     private boolean hasClientClassifier()
     {
-        return hasClassifier( getClientClassifier() );
+        return EjbHelper.hasClassifier( getClientClassifier() );
     }
 
-    private boolean hasClassifier( String classfier )
+    private boolean isClassifierValid()
     {
-        boolean result = false;
-        if ( classfier != null && classfier.trim().length() > 0 )
-        {
-            result = true;
-        }
-        return result;
+        return EjbHelper.isClassifierValid( getClassifier() );
+    }
+
+    private boolean isClientClassifierValid()
+    {
+        return EjbHelper.isClassifierValid( getClientClassifier() );
     }
 
     /**

Added: maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java?rev=1721772&view=auto
==============================================================================
--- maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java (added)
+++ maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java Sat Dec 26 23:13:59 2015
@@ -0,0 +1,86 @@
+package org.apache.maven.plugins.ejb;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.io.File;
+
+import org.junit.Test;
+
+public class EjbHelperTest
+{
+
+    @Test
+    public void validClassifier()
+    {
+        assertThat( EjbHelper.isClassifierValid( "anton" ), is( Boolean.TRUE ) );
+    }
+
+    @Test
+    public void anOtherValidClassifier()
+    {
+        assertThat( EjbHelper.isClassifierValid( "jdk15" ), is( Boolean.TRUE ) );
+    }
+
+    @Test
+    public void moreValidClassifier()
+    {
+        assertThat( EjbHelper.isClassifierValid( "client-classifier" ), is( Boolean.TRUE ) );
+    }
+
+    @Test
+    public void invalidClassifier()
+    {
+        assertThat( EjbHelper.isClassifierValid( "-anton" ), is( Boolean.FALSE ) );
+    }
+
+    @Test
+    public void hasClassifierShouldReturnFalseForNull()
+    {
+        assertThat( EjbHelper.hasClassifier( null ), is( Boolean.FALSE ) );
+    }
+
+    @Test
+    public void hasClassifierShouldReturnFalseForEmptyString()
+    {
+        assertThat( EjbHelper.hasClassifier( "" ), is( Boolean.FALSE ) );
+    }
+
+    @Test
+    public void hasClassifierShouldReturnTrueForNonEmptyString()
+    {
+        assertThat( EjbHelper.hasClassifier( "x" ), is( Boolean.TRUE ) );
+    }
+
+    @Test
+    public void getJarFileNameShouldReturnFileNameWithoutClassifier()
+    {
+        assertThat( EjbHelper.getJarFileName( new File( "base" ), "test", null ).getPath(), is( "base/test.jar" ) );
+    }
+
+    @Test
+    public void getJarFileNameShouldReturnFileNameWithClassifier()
+    {
+        assertThat( EjbHelper.getJarFileName( new File( "base" ), "test", "alpha" ).getPath(),
+                    is( "base/test-alpha.jar" ) );
+    }
+}

Modified: maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbMojoTest.java?rev=1721772&r1=1721771&r2=1721772&view=diff
==============================================================================
--- maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbMojoTest.java (original)
+++ maven/plugins/trunk/maven-ejb-plugin/src/test/java/org/apache/maven/plugins/ejb/EjbMojoTest.java Sat Dec 26 23:13:59 2015
@@ -148,6 +148,7 @@ public class EjbMojoTest
         setVariableValueToObject( mojo, "generateClient", Boolean.TRUE );
         setVariableValueToObject( mojo, "ejbVersion", "2.1" );
         setVariableValueToObject( mojo, "classifier", "classified" );
+        setVariableValueToObject( mojo, "clientClassifier", "classified-client" );
 
         mojo.execute();
 
@@ -564,6 +565,7 @@ public class EjbMojoTest
         setVariableValueToObject( mojo, "clientExcludes", clientExcludes );
         setVariableValueToObject( mojo, "clientIncludes", clientIncludes );
         setVariableValueToObject( mojo, "excludes", excludes );
+        setVariableValueToObject( mojo, "clientClassifier", EjbMojo.DEFAULT_CLIENT_CLASSIFIER);
 
         return mojo;
     }