00001
00027 package org.objectweb.jonas_ejb.deployment.api;
00028
00029 import java.io.CharArrayReader;
00030 import java.lang.reflect.Method;
00031
00032 import org.objectweb.jonas_ejb.deployment.ejbql.ASTEJBQL;
00033 import org.objectweb.jonas_ejb.deployment.ejbql.EJBQL;
00034 import org.objectweb.jonas_ejb.deployment.ejbql.ParseException;
00035 import org.objectweb.jonas_ejb.lib.EjbqlQueryTreeHolder;
00036 import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
00037 import org.objectweb.jorm.api.PMapper;
00038
00039
00045 public class MethodCmp2Desc extends MethodDesc {
00046
00047 protected String query = null;
00048 protected ASTEJBQL queryNode = null;
00049 protected EjbqlQueryTreeHolder queryTreeHolder = null;
00050 protected boolean resultTypeMappingRemote = false;
00051 protected EntityDesc entityDesc;
00052
00053
00057 MethodCmp2Desc(BeanDesc beanDesc, Method meth,int index) {
00058 super(beanDesc, meth, index);
00059 entityDesc = (EntityDesc) beanDesc;
00060 }
00061
00066 public String getQuery() {
00067 return query;
00068 }
00069
00074 public void setQuery(String query) throws ParseException {
00075
00076 this.query = query.replace('\r',' ').replace('\n',' ').replace('\t',' ');
00077 EJBQL parser = new EJBQL(new CharArrayReader(query.toCharArray()));
00078 queryNode = (ASTEJBQL)parser.EJBQL();
00079 queryTreeHolder=null;
00080 }
00081
00082
00086 public EjbqlQueryTreeHolder getQueryTreeHolder(PMapper mapper) throws DeploymentDescException {
00087 if (queryTreeHolder==null) {
00088 try {
00089 queryTreeHolder = new EjbqlQueryTreeHolder(this, queryNode, mapper);
00090 } catch (Exception e) {
00091 throw new DeploymentDescException("ejbql query "+query+" does not map to the persistent schema",e);
00092 }
00093 }
00094 return queryTreeHolder;
00095 }
00096
00101 public boolean isResultTypeMappingRemote() {
00102 return resultTypeMappingRemote;
00103 }
00104
00108 public void setResultTypeMapping(String resultTypeMapping)
00109 throws DeploymentDescException {
00110 if (resultTypeMapping.equals("Remote")) {
00111 resultTypeMappingRemote=true;
00112 } else if (resultTypeMapping.equals("Local")) {
00113 resultTypeMappingRemote=false;
00114 } else {
00115 throw new DeploymentDescException(resultTypeMapping+" is not a valid result-type-mapping value");
00116 }
00117 }
00118
00123 public boolean getPrefetch() {
00124 if (this.isFinder()) {
00125 return entityDesc.isPrefetch();
00126 } else {
00127 return false;
00128 }
00129 }
00130
00131
00137 public static String queryMethodElementToString(org.objectweb.jonas_ejb.deployment.xml.QueryMethod m) {
00138 return methodElementToString(null, m.getMethodName(),m.getMethodParams());
00139 }
00140
00145 public String toString() {
00146 StringBuffer ret = new StringBuffer();
00147 ret.append(super.toString());
00148 ret.append("\nquery = " + query);
00149 ret.append("\nqueryNode = " + queryNode);
00150 ret.append("\nqueryTreeHolder = " + queryTreeHolder);
00151 ret.append("\nresultTypeMappingRemote = " + resultTypeMappingRemote);
00152 return ret.toString();
00153 }
00154
00155 }