1 23 24 package com.sun.enterprise.deployment.node.ejb; 25 26 import java.util.Map ; 27 import java.util.Set ; 28 import java.util.Iterator ; 29 import org.w3c.dom.Node ; 30 31 import com.sun.enterprise.deployment.node.XMLElement; 32 import com.sun.enterprise.deployment.node.DescriptorFactory; 33 34 import com.sun.enterprise.deployment.Descriptor; 35 import com.sun.enterprise.deployment.EjbDescriptor; 36 import com.sun.enterprise.deployment.EjbEntityDescriptor; 37 import com.sun.enterprise.deployment.EjbBundleDescriptor; 38 import com.sun.enterprise.deployment.EjbCMPEntityDescriptor; 39 import com.sun.enterprise.deployment.EntityManagerReferenceDescriptor; 40 import com.sun.enterprise.deployment.EntityManagerFactoryReferenceDescriptor; 41 import com.sun.enterprise.deployment.IASEjbCMPEntityDescriptor; 42 import com.sun.enterprise.deployment.FieldDescriptor; 43 import com.sun.enterprise.deployment.MethodDescriptor; 44 import com.sun.enterprise.deployment.QueryDescriptor; 45 import com.sun.enterprise.deployment.xml.EjbTagNames; 46 47 53 public class EjbEntityNode extends InterfaceBasedEjbNode { 54 55 private EjbEntityDescriptor descriptor; 56 57 58 public EjbEntityNode() { 59 super(); 60 registerElementHandler(new XMLElement(EjbTagNames.CMP_FIELD), CmpFieldNode.class); 61 registerElementHandler(new XMLElement(EjbTagNames.QUERY), QueryNode.class); 62 } 63 64 67 public EjbDescriptor getEjbDescriptor() { 68 69 if (descriptor==null) { 70 descriptor = (EjbEntityDescriptor) DescriptorFactory.getDescriptor(getXMLPath()); 71 descriptor.setEjbBundleDescriptor((EjbBundleDescriptor) getParentNode().getDescriptor()); 72 } 73 return descriptor; 74 } 75 76 80 private EjbCMPEntityDescriptor getCMPEntityDescriptor() { 81 EjbDescriptor current = getEjbDescriptor(); 82 if (!(current instanceof EjbCMPEntityDescriptor)) { 83 descriptor = new IASEjbCMPEntityDescriptor(current); 84 } 85 return (EjbCMPEntityDescriptor) descriptor; 86 } 87 88 94 public void addDescriptor(Object newDescriptor) { 95 if (newDescriptor instanceof FieldDescriptor) { 96 getCMPEntityDescriptor().getPersistenceDescriptor().addCMPField((FieldDescriptor) newDescriptor); 97 } else if (newDescriptor instanceof QueryDescriptor) { 98 QueryDescriptor newQuery = (QueryDescriptor) newDescriptor; 99 getCMPEntityDescriptor().getPersistenceDescriptor().setQueryFor( 100 newQuery.getQueryMethodDescriptor(), newQuery); 101 } else { 102 super.addDescriptor(newDescriptor); 103 } 104 } 105 106 107 113 protected Map getDispatchTable() { 114 Map table = super.getDispatchTable(); 116 table.put(EjbTagNames.PERSISTENCE_TYPE, "setPersistenceType"); 117 table.put(EjbTagNames.PRIMARY_KEY_CLASS, "setPrimaryKeyClassName"); 118 table.put(EjbTagNames.REENTRANT, "setReentrant"); 119 return table; 120 } 121 122 123 129 public void setElementValue(XMLElement element, String value) { 130 if (EjbTagNames.CMP_VERSION.equals(element.getQName())) { 131 if (EjbTagNames.CMP_1_VERSION.equals(value)) { 132 getCMPEntityDescriptor().setCMPVersion(EjbCMPEntityDescriptor.CMP_1_1); 133 } else if (EjbTagNames.CMP_2_VERSION.equals(value)) { 134 getCMPEntityDescriptor().setCMPVersion(EjbCMPEntityDescriptor.CMP_2_x); 135 } 136 } else if (EjbTagNames.ABSTRACT_SCHEMA_NAME.equals(element.getQName())) { 137 getCMPEntityDescriptor().setAbstractSchemaName(value); 138 } else if (EjbTagNames.PRIMARY_KEY_FIELD.equals(element.getQName())) { 139 getCMPEntityDescriptor().setPrimaryKeyFieldDesc(new FieldDescriptor(value)); 140 } else { 141 super.setElementValue(element, value); 142 } 143 } 144 145 153 public Node writeDescriptor(Node parent, String nodeName, Descriptor descriptor) { 154 if (! (descriptor instanceof EjbEntityDescriptor)) { 155 throw new IllegalArgumentException (getClass() + " cannot handles descriptors of type " + descriptor.getClass()); 156 } 157 EjbEntityDescriptor ejbDesc = (EjbEntityDescriptor) descriptor; 158 159 Node ejbNode = super.writeDescriptor(parent, nodeName, descriptor); 160 writeDisplayableComponentInfo(ejbNode, descriptor); 161 writeCommonHeaderEjbDescriptor(ejbNode, ejbDesc); 162 appendTextChild(ejbNode, EjbTagNames.PERSISTENCE_TYPE, ejbDesc.getPersistenceType()); 163 appendTextChild(ejbNode, EjbTagNames.PRIMARY_KEY_CLASS, ejbDesc.getPrimaryKeyClassName()); 164 appendTextChild(ejbNode, EjbTagNames.REENTRANT, ejbDesc.getReentrant()); 165 166 if (ejbDesc instanceof EjbCMPEntityDescriptor) { 168 EjbCMPEntityDescriptor cmpDesc = (EjbCMPEntityDescriptor) ejbDesc; 169 if (cmpDesc.getCMPVersion()==cmpDesc.CMP_1_1) { 170 appendTextChild(ejbNode, EjbTagNames.CMP_VERSION, EjbTagNames.CMP_1_VERSION); 171 } else { 172 appendTextChild(ejbNode, EjbTagNames.CMP_VERSION, EjbTagNames.CMP_2_VERSION); 173 } 174 175 appendTextChild(ejbNode, EjbTagNames.ABSTRACT_SCHEMA_NAME, cmpDesc.getAbstractSchemaName()); 176 CmpFieldNode cmpNode = new CmpFieldNode(); 178 for (Iterator fields = cmpDesc.getPersistenceDescriptor().getCMPFields().iterator();fields.hasNext();) { 179 FieldDescriptor aField = (FieldDescriptor) fields.next(); 180 cmpNode.writeDescriptor(ejbNode, EjbTagNames.CMP_FIELD, aField); 181 } 182 if ( cmpDesc.getPrimaryKeyFieldDesc()!=null) { 183 appendTextChild(ejbNode, EjbTagNames.PRIMARY_KEY_FIELD, cmpDesc.getPrimaryKeyFieldDesc().getName()); 184 } 185 } 186 187 writeEnvEntryDescriptors(ejbNode, ejbDesc.getEnvironmentProperties().iterator()); 189 190 writeEjbReferenceDescriptors(ejbNode, ejbDesc.getEjbReferenceDescriptors().iterator()); 192 193 writeServiceReferenceDescriptors(ejbNode, ejbDesc.getServiceReferenceDescriptors().iterator()); 195 196 writeResourceRefDescriptors(ejbNode, ejbDesc.getResourceReferenceDescriptors().iterator()); 198 199 writeResourceEnvRefDescriptors(ejbNode, ejbDesc.getJmsDestinationReferenceDescriptors().iterator()); 201 202 writeMessageDestinationRefDescriptors(ejbNode, ejbDesc.getMessageDestinationReferenceDescriptors().iterator()); 204 205 writeEntityManagerReferenceDescriptors(ejbNode, ejbDesc.getEntityManagerReferenceDescriptors().iterator()); 207 208 writeEntityManagerFactoryReferenceDescriptors(ejbNode, ejbDesc.getEntityManagerFactoryReferenceDescriptors().iterator()); 210 211 writePostConstructDescriptors(ejbNode, ejbDesc.getPostConstructDescriptors().iterator()); 213 214 writePreDestroyDescriptors(ejbNode, ejbDesc.getPreDestroyDescriptors().iterator()); 216 217 writeRoleReferenceDescriptors(ejbNode, ejbDesc.getRoleReferences().iterator()); 219 220 writeSecurityIdentityDescriptor(ejbNode, ejbDesc); 222 223 if (ejbDesc instanceof EjbCMPEntityDescriptor) { 225 EjbCMPEntityDescriptor cmpDesc = (EjbCMPEntityDescriptor) ejbDesc; 226 Set queriedMethods = cmpDesc.getPersistenceDescriptor().getQueriedMethods(); 227 if (queriedMethods.size()>0) { 228 QueryNode queryNode = new QueryNode(); 229 for (Iterator e=queriedMethods.iterator();e.hasNext();) { 230 queryNode.writeDescriptor(ejbNode, EjbTagNames.QUERY, 231 cmpDesc.getPersistenceDescriptor().getQueryFor((MethodDescriptor) e.next())); 232 } 233 } 234 } 235 return ejbNode; 236 } 237 } 238 | Popular Tags |