FileDocCategorySizeDatePackage
ASSunCmpMappingTest.javaAPI DocGlassfish v2 API11033Fri May 04 22:35:16 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.ias.cmpmapping

ASSunCmpMappingTest.java

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 * 
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License. You can obtain
 * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
 * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 * 
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
 * Sun designates this particular file as subject to the "Classpath" exception
 * as provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code.  If applicable, add the following below the License
 * Header, with the fields enclosed by brackets [] replaced by your own
 * identifying information: "Portions Copyrighted [year]
 * [name of copyright owner]"
 * 
 * Contributor(s):
 * 
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

/*
 * ASSunCmpMappingTest.java
 *
 * //test class, to integrate JDOCodeGenerator validation framework
 */


package com.sun.enterprise.tools.verifier.tests.ejb.ias.cmpmapping;


import java.util.*;
import com.sun.enterprise.deployment.EjbDescriptor;
import com.sun.enterprise.deployment.EjbSessionDescriptor;
import com.sun.enterprise.tools.verifier.*;
import com.sun.enterprise.tools.verifier.tests.*;
import com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck;
import com.sun.enterprise.tools.common.dd.ejb.SunEjbJar;
import com.sun.enterprise.tools.common.dd.ejb.Ejb;
import com.sun.enterprise.tools.common.dd.ResourceRef;
import com.sun.enterprise.tools.common.dd.DefaultResourcePrincipal;
import com.sun.enterprise.deployment.ResourceReferenceDescriptor;
import com.sun.enterprise.tools.verifier.tests.ejb.*;
import com.sun.enterprise.tools.common.dd.cmpmapping.*;
import com.sun.jdo.spi.persistence.support.ejb.ejbc.*;
import com.sun.enterprise.deployment.DescriptorConstants;
import com.sun.enterprise.deployment.IASEjbBundleDescriptor;
import com.sun.enterprise.deployment.IASEjbCMPEntityDescriptor;
import com.sun.ejb.codegen.GeneratorException;
import com.sun.enterprise.util.JarClassLoader;
import java.io.*;
import java.util.jar.*;
import java.util.zip.*;
import com.sun.enterprise.deployment.*;
import com.sun.enterprise.deployment.*;

public class ASSunCmpMappingTest extends EjbTest implements EjbCheck {

    public Result check(EjbDescriptor descriptor)
    {
	Result result = getInitializedResult();
	ComponentNameConstructor compName = new ComponentNameConstructor(descriptor);
        boolean oneFailed = false;
        boolean notApp = false;
        boolean initFailed=false;
      
        if(descriptor.getEjbBundleDescriptor().getTestsDone().contains(getClass().getName()))
        {   
            result.setStatus(Result.NOT_RUN);
            result.addGoodDetails(smh.getLocalString("iasEjbJar.allReadyRun",
                "NOT RUN [AS-EJB ias-ejb-jar] cmp-mapping is a JAR Level Test. This test has already been run once"));
            return result;
        }
        descriptor.getEjbBundleDescriptor().setTestsDone(getClass().getName());
        
        IASEjbBundleDescriptor desc=(IASEjbBundleDescriptor)descriptor.getEjbBundleDescriptor();
        
        if(!mappingFileExist((EjbDescriptor)descriptor))//4703999
        {
            if(containsCMP(desc)){//4724249 additional check if the archive  contain a cmp
                result.warning(smh.getLocalString(getClass().getName()+".warning",
                "WARNING [JDO-GEN-CMP-Validation] : CMP mapping file [ {0} ] not present, in the ejb archive [ {1} ].",
                new Object[] {EjbBundleXmlReader.IAS_CMP_MAPPING_JAR_ENTRY, descriptor.getName()}));
                return result;
            }else{
                notApp = true;
                result.notApplicable(smh.getLocalString
                                 (getClass().getName() + ".notApplicable",
                                  "NOT APPLICABLE [JDO-GEN-CMP-Validation] : There is no cmp present, within the ejb archive [ {0} ].",
                                  new Object[] {descriptor.getName()}));
                return result;
                
            }    
            
            
        }    
        
        
        ClassLoader loader=getVerifierContext().getClassLoader();
        JDOCodeGenerator jdogen = new JDOCodeGenerator();
        
        Iterator ejbs=desc.getEjbs().iterator();
            //For each entity
        if(ejbs.hasNext())
        {
            try{
            jdogen.init(desc, loader);
        
            }catch(Exception re){
                oneFailed = true;
                initFailed=true;

                result.failed(smh.getLocalString(getClass().getName()+".failed2",
                            "FAILED [JDO-GEN-CMP-Validation] : Unexpected exception occured while initializing JDOCodeGenerator, for the mapping file [ {0} ], "+
                            "of the ejb archive [ {1} ] . "+
                            "Check stacktrace for details : \n [ {2} ]" ,
                            new Object[]{EjbBundleXmlReader.IAS_CMP_MAPPING_JAR_ENTRY,descriptor.getName(),re.getMessage()}));
            
            
            }
            
            while ( !initFailed && ejbs.hasNext() ) {
            EjbDescriptor ejbdesc = (EjbDescriptor) ejbs.next();
            
            if ( ejbdesc instanceof IASEjbCMPEntityDescriptor ) {
                  IASEjbCMPEntityDescriptor entd = (IASEjbCMPEntityDescriptor)ejbdesc;
                    try {
                         jdogen.validate(entd);
                         result.passed(smh.getLocalString(getClass().getName()+".passed",
                            "PASSED [JDO-GEN-CMP-Validation] : The descriptor entries, in the mapping file [ {0} ], "+
                            "for CMP [ {1} ]"+
                            "of the ejb archive [ {2} ] are valid. ",
                            new Object[]{EjbBundleXmlReader.IAS_CMP_MAPPING_JAR_ENTRY,ejbdesc.getEjbClassName(),descriptor.getName()}));
                    } catch (GeneratorException e) {
                        oneFailed = true;

                        result.failed(smh.getLocalString(getClass().getName()+".failed",
                            "FAILED [JDO-GEN-CMP-Validation] : Atleast one entry , in the mapping file [ {0} ], "+
                            "for CMP [ {1} ]"+
                            "of the ejb archive [ {2} ] is not valid. "+
                            "Check stacktrace for details : \n [ {3} ]" ,
                            new Object[]{EjbBundleXmlReader.IAS_CMP_MAPPING_JAR_ENTRY,ejbdesc.getEjbClassName(),descriptor.getName(),e.getMessage()}));
                     
                    }catch (Exception e) {
                        oneFailed = true;

                        result.failed(smh.getLocalString(getClass().getName()+".failed1",
                            "FAILED [JDO-GEN-CMP-Validation] : Unexpected exception occured while validating ,  the mapping file [ {0} ], "+
                            "for CMP [ {1} ]"+
                            "of the ejb archive [ {2} ] . "+
                            "Check stacktrace for details : \n [ {3} ]" ,
                            new Object[]{EjbBundleXmlReader.IAS_CMP_MAPPING_JAR_ENTRY,ejbdesc.getEjbClassName(),descriptor.getName(),e.getMessage()}));
                     
                        
                    }

                }
            }//end while loop
     
        }
        else{
            
          notApp = true;
          result.notApplicable(smh.getLocalString
                                 (getClass().getName() + ".notApplicable",
                                  "NOT APPLICABLE [JDO-GEN-CMP-Validation] : There is no cmp present, within the ejb archive [ {0} ].",
                                  new Object[] {descriptor.getName()}));
        }
        
        
        jdogen.cleanup();
       
        
        if (oneFailed) {
            result.setStatus(Result.FAILED);
        } else if(notApp) {
            result.setStatus(Result.NOT_APPLICABLE);
        }else {
            result.setStatus(Result.PASSED);
        }
        return result;
    }
    
    boolean mappingFileExist(EjbDescriptor descriptor){ //4703999
            try{
                if(descriptor.getEjbBundleDescriptor().getIasCmpMappings() != null)
                    return true;
                else
                    return false;
            }catch(Exception e){
                return false;
            }
	        /*
            File f = Verifier.getJarFile(((EjbBundleArchivist) descriptor.getEjbBundleDescriptor().getArchivist()).getEjbJarFile().getName());
            JarFile jarFile = null;
            ZipEntry deploymentEntry=null;
            try {
                              jarFile = new JarFile(f);
                              if(jarFile!=null)
                              deploymentEntry = jarFile.getEntry(EjbBundleXmlReader.IAS_CMP_MAPPING_JAR_ENTRY);
                              

                  }
            catch(IOException e){}
            finally{
                           try{  if(jarFile!=null) jarFile.close();} 
                           catch(IOException e){}
             }

             if(deploymentEntry!=null)
                     return true;
             else 
                     return false;   
        
		     */
    }
    
    boolean containsCMP(IASEjbBundleDescriptor desc) //4724249
    {
        
        if(desc == null || desc.getEjbs() == null )
            return false;
        Iterator ejbs=desc.getEjbs().iterator();
        if(ejbs.hasNext())
        {
            while ( ejbs.hasNext() ) {
                EjbDescriptor ejbdesc = (EjbDescriptor) ejbs.next();
                //if IASEjbCMPEntityDescriptor then there exist a CMP in this archive
                if ( ejbdesc instanceof IASEjbCMPEntityDescriptor ) 
                    return true;
            }
        } 
        return false;      
        
    }    

    
}