FileDocCategorySizeDatePackage
HomeInterfaceFindMethodHasQuery.javaAPI DocGlassfish v2 API9789Fri May 04 22:33:48 BST 2007com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod

HomeInterfaceFindMethodHasQuery

public class HomeInterfaceFindMethodHasQuery extends com.sun.enterprise.tools.verifier.tests.ejb.EjbTest implements com.sun.enterprise.tools.verifier.tests.ejb.EjbCheck
Entity beans home interface find method throws javax.ejb.FinderException test. The following are the requirements for the enterprise Bean's home interface find signature: The find must have a query associated with it (except findByPrimaryKey).

Fields Summary
Result
result
ComponentNameConstructor
compName
private static final String
FINDBYPRIMARYKEY
Constructors Summary
Methods Summary
public Resultcheck(EjbDescriptor descriptor)
Entity beans home interface find method throws javax.ejb.FinderException test. The following are the requirements for the enterprise Bean's home interface find signature: The find must have a query associated with it (except findByPrimaryKey).

param
descriptor the Enterprise Java Bean deployment descriptor
return
Result the results for this assertion



                                                                
        

        result = getInitializedResult();
	compName = getVerifierContext().getComponentNameConstructor();
	boolean oneFailed = false;
	if (descriptor instanceof EjbEntityDescriptor) {
	    String persistence =
		((EjbEntityDescriptor)descriptor).getPersistenceType();
	    if (EjbEntityDescriptor.CONTAINER_PERSISTENCE.equals(persistence)) {
                if (((EjbCMPEntityDescriptor) descriptor).getCMPVersion()==EjbCMPEntityDescriptor.CMP_2_x) {                
                    if(descriptor.getHomeClassName() != null && !"".equals(descriptor.getHomeClassName())) {
                        oneFailed = commonToBothInterfaces(descriptor.getHomeClassName(),descriptor, MethodDescriptor.EJB_HOME);
                    }
                    if(oneFailed == false) {
                        if(descriptor.getLocalHomeClassName() != null && !"".equals(descriptor.getLocalHomeClassName())) {
                            oneFailed = commonToBothInterfaces(descriptor.getLocalHomeClassName(),descriptor, MethodDescriptor.EJB_LOCALHOME);
                        }
                    }
                    if (oneFailed) {
                        result.setStatus(result.FAILED);
                    } else {
                        result.setStatus(result.PASSED);
                    }
                    return result;
                }
	    } 
            //if (Bean_PERSISTENCE.equals(persistence)) or wrong version
            result.addNaDetails(smh.getLocalString
				   ("tests.componentNameConstructor",
				    "For [ {0} ]",
				    new Object[] {compName.toString()}));
            result.notApplicable(smh.getLocalString
			     (getClass().getName() + ".notApplicable2",
                             "Expected [ {0} {1} ] managed persistence, but [ {2} ] bean has [ {3} ] managed persistence.",
                            new Object[] {EjbEntityDescriptor.CONTAINER_PERSISTENCE, new Integer(EjbCMPEntityDescriptor.CMP_2_x), descriptor.getName(),persistence}));
            return result;
        
	} else {
	    result.addNaDetails(smh.getLocalString
				   ("tests.componentNameConstructor",
				    "For [ {0} ]",
				    new Object[] {compName.toString()}));
	    result.notApplicable(smh.getLocalString
				 (getClass().getName() + ".notApplicable",
				  "[ {0} ] expected {1} bean, but called with {2} bean.",
				  new Object[] {getClass(),"Entity","Session"}));
	    return result;
	} 
    
private booleancommonToBothInterfaces(java.lang.String home, EjbDescriptor descriptor, java.lang.String methodIntf)
This method is responsible for the logic of the test. It is called for both local and remote interfaces.

param
descriptor the Enterprise Java Bean deployment descriptor
param
home for the Home interface of the Ejb.
param
methodIntf is the interface type
return
boolean the results for this assertion i.e if a test has failed or not

        boolean oneFailed = false;
	// RULE: Entity home interface are only allowed to have find<METHOD> 
	//       methods which must throw javax.ejb.FinderException
	try {
	    PersistenceDescriptor pers = ((EjbCMPEntityDescriptor)descriptor).getPersistenceDescriptor();

	    Context context = getVerifierContext();
	    ClassLoader jcl = context.getClassLoader();
	    Class c = Class.forName(home, false, getVerifierContext().getClassLoader());
	    Method methods[] = c.getDeclaredMethods();
	    
	    for (int i=0; i< methods.length; i++) {
	        if (methods[i].getName().startsWith("find") && !(methods[i].getName()).equals(FINDBYPRIMARYKEY)) {
		    QueryDescriptor query = pers.getQueryFor(new MethodDescriptor(methods[i], methodIntf));
		    if (query != null) {
		        if (query.getQuery() != null && !"".equals(query.getQuery())) {
		            result.addGoodDetails(smh.getLocalString
						  ("tests.componentNameConstructor",
						   "For [ {0} ]",
						   new Object[] {compName.toString()}));
			    result.addGoodDetails(smh.getLocalString
						  (getClass().getName() + ".debug1",
						   "For Home Interface [ {0} ] Method [ {1} ]",
						   new Object[] {c.getName(),methods[i].getName()}));
			    result.addGoodDetails(smh.getLocalString
						  (getClass().getName() + ".passed",
						   "The [ {0} ] method has a query assigned to it",
						   new Object[] {methods[i].getName()}));
			} else {
			    oneFailed = true;
			    result.addErrorDetails(smh.getLocalString
						   ("tests.componentNameConstructor",
						    "For [ {0} ]",
						    new Object[] {compName.toString()}));
			    result.addErrorDetails(smh.getLocalString
						   (getClass().getName() + ".debug1",
						    "For Home Interface [ {0} ] Method [ {1} ]",
						    new Object[] {c.getName(),methods[i].getName()}));
			    result.addErrorDetails(smh.getLocalString
						   (getClass().getName() + ".failed",
						    "Error: A [ {0} ] method was found, but did not have a query element assigned",
						    new Object[] {methods[i].getName()}));
			}  // end of reporting for this particular 'find' method
		    }
		    else {
		        oneFailed = true;
			result.addErrorDetails(smh.getLocalString
					       ("tests.componentNameConstructor",
						"For [ {0} ]",
						new Object[] {compName.toString()}));
			result.addErrorDetails(smh.getLocalString
					       (getClass().getName() + ".debug1",
						"For Home Interface [ {0} ] Method [ {1} ]",
						new Object[] {c.getName(),methods[i].getName()}));
			result.addErrorDetails(smh.getLocalString
					       (getClass().getName() + ".failed",
						"Error: A [ {0} ] method was found, but did not have a query element assigned",
						new Object[] {methods[i].getName()}));
		        
		    }
		} // if the home interface found a "find" method
		
	    } // for all the methods within the home interface class, loop
	    return oneFailed;
	    
	} catch (ClassNotFoundException e) {
	  Verifier.debug(e);
	  result.addErrorDetails(smh.getLocalString
				 ("tests.componentNameConstructor",
				  "For [ {0} ]",
				  new Object[] {compName.toString()}));
	  result.failed(smh.getLocalString
			(getClass().getName() + ".failedException",
			 "Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ]",
			 new Object[] {home, descriptor.getName()}));
	  return oneFailed;
	}