00001
00026 package org.objectweb.jonas_ejb.deployment.api;
00027
00028 import java.lang.reflect.Field;
00029 import java.lang.reflect.Method;
00030 import java.util.Iterator;
00031 import org.objectweb.jonas_ejb.deployment.xml.AssemblyDescriptor;
00032 import org.objectweb.jonas_ejb.deployment.xml.CmpFieldJdbcMapping;
00033 import org.objectweb.jonas_ejb.deployment.xml.Entity;
00034 import org.objectweb.jonas_ejb.deployment.xml.FinderMethodJdbcMapping;
00035 import org.objectweb.jonas_ejb.deployment.xml.JonasEntity;
00036 import org.objectweb.jonas_ejb.deployment.xml.JdbcMapping;
00037 import org.objectweb.jonas_lib.deployment.xml.JLinkedList;
00038 import org.objectweb.jonas_ejb.deployment.xml.JonasMethod;
00039 import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
00040
00046
00047
00048
00049
00050 public class EntityJdbcCmp1Desc extends EntityCmp1Desc {
00051
00052
00053 String jdbcTableName;
00054 String datasourceJndiName;
00059 public EntityJdbcCmp1Desc(ClassLoader classLoader, Entity ent,
00060 AssemblyDescriptor asd, JonasEntity jEnt,
00061 JLinkedList jMDRList, String fileName)
00062 throws DeploymentDescException {
00063
00064 super(classLoader, ent, asd, jEnt, jMDRList, fileName);
00065
00066
00067 JdbcMapping jm = jEnt.getJdbcMapping();
00068 if (jm == null) {
00069 throw new DeploymentDescException("jdbc-mapping missing for bean " + ent.getEjbName());
00070 }
00071
00072
00073 for (Iterator i = jm.getCmpFieldJdbcMappingList().iterator(); i.hasNext(); ) {
00074 CmpFieldJdbcMapping cmpFieldJdbcMapping = (CmpFieldJdbcMapping) i.next();
00075 String fn = cmpFieldJdbcMapping.getFieldName();
00076 FieldDesc f = (FieldDesc) fieldDesc.get(fn);
00077 if (f == null) {
00078 throw new DeploymentDescException("field-name " + fn
00079 + " listed in cmp-field-jdbc-mapping is not of cmp-field of bean " + ent.getEjbName());
00080 }
00081 ((FieldJdbcDesc) f).setJdbcFieldName(cmpFieldJdbcMapping.getJdbcFieldName());
00082 }
00083
00084 for (Iterator j = fieldDesc.values().iterator(); j.hasNext();) {
00085 FieldJdbcDesc fd = (FieldJdbcDesc) j.next();
00086 if (fd.getJdbcFieldName() == null) {
00087 throw new DeploymentDescException("field-name " + fd.getName()
00088 + " is missing in cmp-field-jdbc-mapping for bean " + ent.getEjbName());
00089 }
00090 }
00091
00092
00093 for (Iterator i = jm.getFinderMethodJdbcMappingList().iterator(); i.hasNext(); ) {
00094 FinderMethodJdbcMapping fmj = ((FinderMethodJdbcMapping) i.next());
00095 JonasMethod m = fmj.getJonasMethod();
00096 for (Iterator j = getMethodDescIterator(); j.hasNext();) {
00097 MethodJdbcCmp1Desc md = (MethodJdbcCmp1Desc) j.next();
00098 int matchStatus = md.matchPattern(null, m.getMethodName(), m.getMethodParams());
00099 md.overwriteJdbcWhereClause(fmj.getJdbcWhereClause(), matchStatus);
00100 }
00101 }
00102
00103
00104 datasourceJndiName = jm.getJndiName();
00105
00106
00107 jdbcTableName = jm.getJdbcTableName();
00108
00109
00110 if (jm.getAutomaticPk() != null) {
00111 jdbcAutomaticPk = jm.getAutomaticPk().equalsIgnoreCase("true");
00112 }
00113 }
00114
00115
00120 public String getDatasourceJndiName() {
00121 return datasourceJndiName;
00122 }
00123
00130 public FieldJdbcDesc getFieldJdbcDesc(Field field) {
00131 return (FieldJdbcDesc) super.getCmpFieldDesc(field);
00132 }
00133
00134
00140 public String getJdbcTableName() {
00141 return jdbcTableName;
00142 }
00143
00147 protected MethodDesc newMethodDescInstance(Method meth, int index) {
00148 return new MethodJdbcCmp1Desc(this, meth, index);
00149 }
00150
00155 public String toString() {
00156 StringBuffer ret = new StringBuffer();
00157 ret.append(super.toString());
00158 ret.append("\ngetDatasourceJndiName()=" + getDatasourceJndiName());
00159 ret.append("\ngetJdbcTableName()=" + getJdbcTableName());
00160 return ret.toString();
00161 }
00162
00163
00164 }
00165