EntityJdbcCmp1Desc.java

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 // TODO : fill mapping information with defaults values (same as CMP 2)
00047 //       to accept to have optional mapping information in the jonas-ejb-jar.xml.
00048 // TODO : Review this class, many methods are common with EntityJdbcCmp2yDesc
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         // check for jdbcMapping
00067         JdbcMapping jm = jEnt.getJdbcMapping();
00068         if (jm == null) {
00069             throw new DeploymentDescException("jdbc-mapping missing for bean " + ent.getEjbName());
00070         }
00071 
00072         // populate field descriptor map with jdbc information
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         // check that all cmp fields are jdbc
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         // populate method descriptor map with jdbc information
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         // jndi name of the datasource
00104         datasourceJndiName = jm.getJndiName();
00105 
00106         // table name
00107         jdbcTableName = jm.getJdbcTableName();
00108 
00109         // optionnal parameter automatic-pk
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 

Generated on Tue Feb 15 15:05:45 2005 for JOnAS by  doxygen 1.3.9.1