Coverage Report - org.apache.maven.plugin.ide.JeeUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
JeeUtils
0%
0/114
0%
0/82
4.846
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *   http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied.  See the License for the
 16  
  * specific language governing permissions and limitations
 17  
  * under the License.
 18  
  */
 19  
 package org.apache.maven.plugin.ide;
 20  
 
 21  
 import java.util.HashMap;
 22  
 import java.util.Iterator;
 23  
 import java.util.Map;
 24  
 
 25  
 import org.apache.maven.project.MavenProject;
 26  
 
 27  0
 public class JeeUtils
 28  
 {
 29  
     public static final String ARTIFACT_MAVEN_EAR_PLUGIN = "org.apache.maven.plugins:maven-ear-plugin"; //$NON-NLS-1$
 30  
 
 31  
     public static final String ARTIFACT_MAVEN_WAR_PLUGIN = "org.apache.maven.plugins:maven-war-plugin"; //$NON-NLS-1$
 32  
 
 33  0
     private static final Map ejbMap = new HashMap();
 34  
 
 35  0
     private static final Map jeeMap = new HashMap();
 36  
 
 37  0
     private static final Map jspMap = new HashMap();
 38  
 
 39  0
     private static final Map servletMap = new HashMap();
 40  
 
 41  
     /** Names of artifacts of ejb APIs. */
 42  
     // private static final String[] EJB_API_ARTIFACTS = new String[] { "ejb", "ejb-api", "geronimo-spec-ejb" };
 43  
     // //$NON-NLS-1$
 44  
     static
 45  
     {
 46  0
             addJEE( JeeDescriptor.JEE_6_0, JeeDescriptor.EJB_3_1, JeeDescriptor.SERVLET_3_0, JeeDescriptor.JSP_2_2 );
 47  0
         addJEE( JeeDescriptor.JEE_5_0, JeeDescriptor.EJB_3_0, JeeDescriptor.SERVLET_2_5, JeeDescriptor.JSP_2_1 );
 48  0
         addJEE( JeeDescriptor.JEE_1_4, JeeDescriptor.EJB_2_1, JeeDescriptor.SERVLET_2_4, JeeDescriptor.JSP_2_0 );
 49  0
         addJEE( JeeDescriptor.JEE_1_3, JeeDescriptor.EJB_2_0, JeeDescriptor.SERVLET_2_3, JeeDescriptor.JSP_1_2 );
 50  0
         addJEE( JeeDescriptor.JEE_1_2, JeeDescriptor.EJB_1_1, JeeDescriptor.SERVLET_2_2, JeeDescriptor.JSP_1_1 );
 51  
 
 52  0
     }
 53  
 
 54  
     /**
 55  
      * Returns the JEEDescriptor associated to an EJB specifications version.
 56  
      * 
 57  
      * @param ejbVersion An EJB version as defined by constants JeeDescriptor.EJB_x_x
 58  
      * @return a JEEDescriptor
 59  
      */
 60  
     public final static JeeDescriptor getJeeDescriptorFromEjbVersion( String ejbVersion )
 61  
     {
 62  0
         if ( ejbMap.containsKey( ejbVersion ) )
 63  0
             return (JeeDescriptor) ejbMap.get( ejbVersion );
 64  
         else
 65  0
             return null;
 66  
     }
 67  
 
 68  
     /**
 69  
      * Returns the JEEDescriptor associated to a JEE specifications version.
 70  
      * 
 71  
      * @param jeeVersion A JEE version as defined by constants JeeDescriptor.JEE_x_x
 72  
      * @return a JEEDescriptor
 73  
      */
 74  
     public final static JeeDescriptor getJeeDescriptorFromJeeVersion( String jeeVersion )
 75  
     {
 76  0
         if ( jeeMap.containsKey( jeeVersion ) )
 77  0
             return (JeeDescriptor) jeeMap.get( jeeVersion );
 78  
         else
 79  0
             return null;
 80  
     }
 81  
 
 82  
     /**
 83  
      * Returns the JEEDescriptor associated to a JSP specifications version.
 84  
      * 
 85  
      * @param jspVersion A JSP version as defined by constants JeeDescriptor.JSP_x_x
 86  
      * @return a JEEDescriptor
 87  
      */
 88  
     public final static JeeDescriptor getJeeDescriptorFromJspVersion( String jspVersion )
 89  
     {
 90  0
         if ( jspMap.containsKey( jspVersion ) )
 91  0
             return (JeeDescriptor) jspMap.get( jspVersion );
 92  
         else
 93  0
             return null;
 94  
     }
 95  
 
 96  
     /**
 97  
      * Returns the JEEDescriptor associated to a Servlet specifications version.
 98  
      * 
 99  
      * @param servletVersion A Servlet version as defined by constants JeeDescriptor.SERVLET_x_x
 100  
      * @return a JEEDescriptor
 101  
      */
 102  
     public final static JeeDescriptor getJeeDescriptorFromServletVersion( String servletVersion )
 103  
     {
 104  0
         if ( servletMap.containsKey( servletVersion ) )
 105  0
             return (JeeDescriptor) servletMap.get( servletVersion );
 106  
         else
 107  0
             return null;
 108  
     }
 109  
 
 110  
     /**
 111  
      * Search in dependencies a version of EJB APIs (or of JEE APIs).
 112  
      * 
 113  
      * @param artifacts The list of dependencies where we search the information
 114  
      * @return An EJB version as defined by constants JeeDescriptor.EJB_x_x. By default, if nothing is found, returns
 115  
      *         JeeDescriptor.EJB_2_1.
 116  
      */
 117  
     public static String resolveEjbVersion( MavenProject project )
 118  
     {
 119  0
         String version = findEjbVersionInDependencies( project );
 120  
 
 121  0
         if ( version == null )
 122  
         {
 123  
             // No ejb dependency detected. Try to resolve the ejb
 124  
             // version from J2EE/JEE.
 125  0
             JeeDescriptor descriptor = getJeeDescriptorFromJeeVersion( findJeeVersionInDependencies( project ) );
 126  0
             if ( descriptor != null )
 127  0
                 version = descriptor.getEjbVersion();
 128  
         }
 129  0
         return version == null ? JeeDescriptor.EJB_2_1 : version; //$NON-NLS-1$
 130  
     }
 131  
 
 132  
     /**
 133  
      * Search in dependencies a version of JEE APIs.
 134  
      * 
 135  
      * @param artifacts The list of dependencies where we search the information
 136  
      * @return A JEE version as defined by constants JeeDescriptor.JEE_x_x. By default, if nothing is found, returns
 137  
      *         JeeDescriptor.JEE_1_4.
 138  
      */
 139  
     public static String resolveJeeVersion( MavenProject project )
 140  
     {
 141  
         // try to find version in dependencies
 142  0
         String version = findJeeVersionInDependencies( project );
 143  0
         if ( version == null )
 144  
         {
 145  
             // No JEE dependency detected. Try to resolve the JEE
 146  
             // version from EJB.
 147  0
             JeeDescriptor descriptor = getJeeDescriptorFromEjbVersion( findEjbVersionInDependencies( project ) );
 148  0
             if ( descriptor != null )
 149  0
                 version = descriptor.getJeeVersion();
 150  
         }
 151  0
         if ( version == null )
 152  
         {
 153  
             // No JEE dependency detected. Try to resolve the JEE
 154  
             // version from SERVLET.
 155  0
             JeeDescriptor descriptor = getJeeDescriptorFromServletVersion( findServletVersionInDependencies( project ) );
 156  0
             if ( descriptor != null )
 157  0
                 version = descriptor.getJeeVersion();
 158  
         }
 159  0
         if ( version == null )
 160  
         {
 161  
             // No JEE dependency detected. Try to resolve the JEE
 162  
             // version from JSP.
 163  0
             JeeDescriptor descriptor = getJeeDescriptorFromJspVersion( findJspVersionInDependencies( project ) );
 164  0
             if ( descriptor != null )
 165  0
                 version = descriptor.getJeeVersion();
 166  
         }
 167  0
         return version == null ? JeeDescriptor.JEE_1_4 : version; //$NON-NLS-1$
 168  
     }
 169  
 
 170  
     /**
 171  
      * Search in dependencies a version of JSP APIs (or from JEE APIs, or from Servlet APIs).
 172  
      * 
 173  
      * @param artifacts The list of dependencies where we search the information
 174  
      * @return A JSP version as defined by constants JeeDescriptor.JSP_x_x. By default, if nothing is found, returns
 175  
      *         JeeDescriptor.JSP_2_0.
 176  
      */
 177  
 
 178  
     public static String resolveJspVersion( MavenProject project )
 179  
     {
 180  0
         String version = findJspVersionInDependencies( project );
 181  
 
 182  0
         if ( version == null )
 183  
         {
 184  
             // No jsp dependency detected. Try to resolve the jsp
 185  
             // version from J2EE/JEE.
 186  0
             JeeDescriptor descriptor = getJeeDescriptorFromJeeVersion( findJeeVersionInDependencies( project ) );
 187  0
             if ( descriptor != null )
 188  0
                 version = descriptor.getJspVersion();
 189  
         }
 190  0
         if ( version == null )
 191  
         {
 192  
             // No jsp dependency detected. Try to resolve the jsp
 193  
             // version from Servlet.
 194  0
             JeeDescriptor descriptor = getJeeDescriptorFromServletVersion( findServletVersionInDependencies( project ) );
 195  0
             if ( descriptor != null )
 196  0
                 version = descriptor.getJspVersion();
 197  
         }
 198  0
         return version == null ? JeeDescriptor.JSP_2_0 : version; //$NON-NLS-1$
 199  
     }
 200  
 
 201  
     /**
 202  
      * Search in dependencies a version of Servlet APIs (or of JEE APIs).
 203  
      * 
 204  
      * @param artifacts The list of dependencies where we search the information
 205  
      * @return A SERVLET version as defined by constants JeeDescriptor.SERLVET_x_x. By default, if nothing is found,
 206  
      *         returns JeeDescriptor.SERVLET_2_4.
 207  
      */
 208  
     public static String resolveServletVersion( MavenProject project )
 209  
     {
 210  0
         String version = findServletVersionInDependencies( project );
 211  
 
 212  0
         if ( version == null )
 213  
         {
 214  
             // No servlet dependency detected. Try to resolve the servlet
 215  
             // version from J2EE/JEE.
 216  0
             JeeDescriptor descriptor = getJeeDescriptorFromJeeVersion( findJeeVersionInDependencies( project ) );
 217  0
             if ( descriptor != null )
 218  0
                 version = descriptor.getServletVersion();
 219  
         }
 220  0
         return version == null ? JeeDescriptor.SERVLET_2_4 : version; //$NON-NLS-1$
 221  
     }
 222  
 
 223  
     private static void addJEE( String jeeVersion, String ejbVersion, String servletVersion, String jspVersion )
 224  
     {
 225  0
         JeeDescriptor descriptor = new JeeDescriptor( jeeVersion, ejbVersion, servletVersion, jspVersion );
 226  0
         jeeMap.put( jeeVersion, descriptor );
 227  0
         ejbMap.put( ejbVersion, descriptor );
 228  0
         servletMap.put( servletVersion, descriptor );
 229  0
         jspMap.put( jspVersion, descriptor );
 230  0
     }
 231  
 
 232  
     private static String findEjbVersionInDependencies( MavenProject project )
 233  
     {
 234  
 
 235  0
         String version =
 236  
             IdeUtils.getArtifactVersion( new String[] { "ejb", "ejb-api", "geronimo-spec-ejb" },
 237  
                                          project.getDependencies(), 3 );
 238  
         // For new Geronimo APIs, the version of the artifact isn't the one of the spec
 239  0
         if ( version == null )
 240  
         {
 241  0
             if ( IdeUtils.getArtifactVersion( new String[] { "geronimo-ejb_2.1_spec" }, project.getDependencies(), 3 ) != null )
 242  0
                 return JeeDescriptor.EJB_2_1;
 243  
         }
 244  0
         if ( version == null )
 245  
         {
 246  0
             if ( IdeUtils.getArtifactVersion( new String[] { "geronimo-ejb_3.0_spec" }, project.getDependencies(), 3 ) != null )
 247  0
                 return JeeDescriptor.EJB_3_0;
 248  
         }
 249  
 
 250  
         // if no version found try dependencies of referenced projects
 251  0
         if ( version == null )
 252  
         {
 253  0
             Iterator it = project.getProjectReferences().keySet().iterator();
 254  0
             while ( it.hasNext() )
 255  
             {
 256  0
                 Object key = it.next();
 257  0
                 MavenProject refProject = (MavenProject) project.getProjectReferences().get( key );
 258  0
                 version = findEjbVersionInDependencies( refProject );
 259  0
                 if ( version != null ) // version found in dependencies
 260  
                 {
 261  0
                     break;
 262  
                 }
 263  0
             }
 264  
         }
 265  0
         return version;
 266  
     }
 267  
 
 268  
     private static String findJeeVersionInDependencies( MavenProject project )
 269  
     {
 270  0
         String version =
 271  
             IdeUtils.getArtifactVersion( new String[] { "javaee-api", "j2ee", "geronimo-spec-j2ee" },
 272  
                                          project.getDependencies(), 3 );
 273  
 
 274  
         // For new Geronimo APIs, the version of the artifact isn't the one of the spec
 275  0
         if ( version == null )
 276  
         {
 277  0
             if ( IdeUtils.getArtifactVersion( new String[] { "geronimo-j2ee_1.4_spec" }, project.getDependencies(), 3 ) != null )
 278  0
                 return JeeDescriptor.JEE_1_4;
 279  
         }
 280  
 
 281  
         // if no version found try dependencies of referenced projects
 282  0
         if ( version == null )
 283  
         {
 284  0
             Iterator it = project.getProjectReferences().keySet().iterator();
 285  0
             while ( it.hasNext() )
 286  
             {
 287  0
                 Object key = it.next();
 288  0
                 MavenProject refProject = (MavenProject) project.getProjectReferences().get( key );
 289  0
                 version = findJeeVersionInDependencies( refProject );
 290  0
                 if ( version != null ) // version found in dependencies
 291  
                 {
 292  0
                     break;
 293  
                 }
 294  0
             }
 295  
         }
 296  
 
 297  0
         return version;
 298  
     }
 299  
 
 300  
     private static String findJspVersionInDependencies( MavenProject project )
 301  
     {
 302  0
         return null;
 303  
     }
 304  
 
 305  
     private static String findServletVersionInDependencies( MavenProject project )
 306  
     {
 307  0
         String version =
 308  
             IdeUtils.getArtifactVersion( new String[] { "servlet-api", "servletapi", "geronimo-spec-servlet" },
 309  
                                          project.getDependencies(), 3 );
 310  
 
 311  
         // For new Geronimo APIs, the version of the artifact isn't the one of the spec
 312  0
         if ( version == null )
 313  
         {
 314  0
             if ( IdeUtils.getArtifactVersion( new String[] { "geronimo-servlet_2.4_spec" }, project.getDependencies(),
 315  
                                               3 ) != null )
 316  0
                 return JeeDescriptor.SERVLET_2_4;
 317  
         }
 318  0
         if ( version == null )
 319  
         {
 320  0
             if ( IdeUtils.getArtifactVersion( new String[] { "geronimo-servlet_2.5_spec" }, project.getDependencies(),
 321  
                                               3 ) != null )
 322  0
                 return JeeDescriptor.SERVLET_2_5;
 323  
         }
 324  
 
 325  
         // if no version found try dependencies of referenced projects
 326  0
         if ( version == null )
 327  
         {
 328  0
             Iterator it = project.getProjectReferences().keySet().iterator();
 329  0
             while ( it.hasNext() )
 330  
             {
 331  0
                 Object key = it.next();
 332  0
                 MavenProject refProject = (MavenProject) project.getProjectReferences().get( key );
 333  0
                 version = findServletVersionInDependencies( refProject );
 334  0
                 if ( version != null ) // version found in dependencies
 335  
                 {
 336  0
                     break;
 337  
                 }
 338  0
             }
 339  
         }
 340  0
         return version;
 341  
     }
 342  
 }