/** * INTERNAL: */ protected XMLCompositeObjectMapping getAccessMethodsMapping() { XMLCompositeObjectMapping accessMethodsMapping = new XMLCompositeObjectMapping(); accessMethodsMapping.setAttributeName("m_accessMethods"); accessMethodsMapping.setGetMethodName("getAccessMethods"); accessMethodsMapping.setSetMethodName("setAccessMethods"); accessMethodsMapping.setReferenceClass(AccessMethodsMetadata.class); accessMethodsMapping.setXPath("orm:access-methods"); return accessMethodsMapping; }
/** * @param parentRecord * @param aNodeValue * @param aNullPolicy */ public CompositeObjectMappingContentHandler(UnmarshalRecord parentRecord, // XMLCompositeObjectMappingNodeValue aNodeValue, XMLCompositeObjectMapping aMapping, // Attributes atts, XPathFragment aFragment, XMLDescriptor aDescriptor) { super(parentRecord); attributes = atts; mapping = aMapping; nullPolicy = mapping.getNullPolicy(); nodeValue = aNodeValue; xPathFragment = aFragment; xmlDescriptor = aDescriptor; }
protected ClassDescriptor buildXMLChoiceFieldToClassAssociationDescriptor() { ClassDescriptor descriptor = super.buildXMLChoiceFieldToClassAssociationDescriptor(); XMLCompositeObjectMapping converterMapping = new XMLCompositeObjectMapping(); converterMapping.setAttributeName("converter"); converterMapping.setXPath(getPrimaryNamespacePrefix() + "value-converter"); converterMapping.setReferenceClass(Converter.class); descriptor.addMapping(converterMapping); return descriptor; }
XMLCompositeObjectMapping hrefMapping = new XMLCompositeObjectMapping(); hrefMapping.setAttributeName("_persistence_href"); hrefMapping.setGetMethodName("_persistence_getHref"); hrefMapping.setSetMethodName("_persistence_setHref"); hrefMapping.setDescriptor(descriptor); hrefMapping.setField(new XMLField("_link")); hrefMapping.setReferenceClass(Link.class); hrefMapping.setXPath("."); descriptor.addMapping(hrefMapping); XMLCompositeObjectMapping itemLinksMapping = new XMLCompositeObjectMapping(); itemLinksMapping.setAttributeName("_persistence_links"); itemLinksMapping.setGetMethodName("_persistence_getLinks"); itemLinksMapping.setSetMethodName("_persistence_setLinks"); itemLinksMapping.setDescriptor(descriptor); itemLinksMapping.setReferenceClass(ItemLinks.class); itemLinksMapping.setXPath("."); descriptor.addMapping(itemLinksMapping); XMLInverseReferenceMapping inverseMapping = ((XMLCompositeObjectMapping) mapping).getInverseReferenceMapping(); if (inverseMapping != null) { break; ClassDescriptor jaxbDescriptor = project.getDescriptorForAlias(jpaMapping.getDescriptor().getAlias()); if (jaxbDescriptor != null) { Class clazz = jpaMapping.getReferenceClass(); if (clazz != null) { if ((jpaSession.getDescriptor(clazz) != null) && (jpaSession.getDescriptor(clazz).isEISDescriptor()))
/** * INTERNAL: * The mapping is initialized with the given session. This mapping is fully initialized * after this. */ public void initialize(AbstractSession session) throws DescriptorException { //modified so that reference class on composite mappings is no longer mandatory if ((getReferenceClass() == null) && (getReferenceClassName() != null)) { setReferenceClass(session.getDatasourcePlatform().getConversionManager().convertClassNameToClass(getReferenceClassName())); } if (getReferenceClass() != null) { super.initialize(session); } else { //below should be the same as AbstractCompositeObjectMapping.initialize if (getField() == null) { throw DescriptorException.fieldNameNotSetInMapping(this); } setField(getDescriptor().buildField(getField())); setFields(collectFields()); // initialize the converter - if necessary if (hasConverter()) { getConverter().initialize(this, session); } } if(null != getContainerAccessor()) { getContainerAccessor().initializeAttributes(this.referenceClass); } }
public Object readFromRowIntoObject(AbstractRecord databaseRow, JoinedAttributeManager joinManager, Object targetObject, CacheKey parentCacheKey, ObjectBuildingQuery sourceQuery, AbstractSession executionSession, boolean isTargetProtected) throws DatabaseException { Object fieldValue = databaseRow.getIndicatingNoEntry(getField()); if (getNullPolicy().getIsSetPerformedForAbsentNode()) { setAttributeValueInObject(targetObject, null); } else { return null; XMLRecord nestedRow = (XMLRecord) this.getDescriptor().buildNestedRowFromFieldValue(fieldValue); if (getNullPolicy().valueIsNull((Element) nestedRow.getDOM())) { setAttributeValueInObject(targetObject, null); return null; Object attributeValue = valueFromRow(fieldValue, nestedRow, joinManager, sourceQuery, executionSession, isTargetProtected); setAttributeValueInObject(targetObject, attributeValue); if(null != getContainerAccessor()) { if(this.inverseReferenceMapping.getContainerPolicy() == null) { getContainerAccessor().setAttributeValueInObject(attributeValue, targetObject); } else { Object backpointerContainer = getContainerAccessor().getAttributeValueFromObject(attributeValue); if(backpointerContainer == null) { backpointerContainer = this.inverseReferenceMapping.getContainerPolicy().containerInstance(); getContainerAccessor().setAttributeValueInObject(attributeValue, backpointerContainer);
protected void initializeReferenceDescriptorAndField(AbstractSession session){ if (this.referenceClass != null) { super.initialize(session); } else { //below should be the same as AbstractCompositeObjectMapping.initialize if (this.field == null) { throw DescriptorException.fieldNameNotSetInMapping(this); } setField(getDescriptor().buildField(this.field)); setFields(collectFields()); // initialize the converter - if necessary if (hasConverter()) { getConverter().initialize(this, session); } } } /**
public Object valueFromRow(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, AbstractSession executionSession) throws DatabaseException { Object fieldValue = row.get(this.getField()); // BUG#2667762 there could be whitespace in the row instead of null if ((fieldValue == null) || (fieldValue instanceof String)) { return null; } XMLRecord nestedRow = (XMLRecord) this.getDescriptor().buildNestedRowFromFieldValue(fieldValue); // Check the policy to see if this DOM record represents null if (getNullPolicy().valueIsNull((Element) nestedRow.getDOM())) { return null; } return valueFromRow(fieldValue, nestedRow, joinManager, sourceQuery, executionSession); }
public void writeSingleValue(Object value, Object parent, XMLRecord record, AbstractSession session) { Object attributeValue = convertObjectValueToDataValue(value, session, record.getMarshaller()); if (((XMLField) getField()).isSelfField()) { if (((keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) && attributeValue instanceof org.w3c.dom.Node) { ClassDescriptor desc; if(null == attributeValue) { desc = this.getReferenceDescriptor(); } else { desc = this.getReferenceDescriptor(attributeValue.getClass(), session); objectBuilder.buildIntoNestedRow(record, attributeValue, session, (XMLDescriptor)getReferenceDescriptor(), (XMLField) getField()); }else{ record.put(this.getField(), attributeValue); Object fieldValue = null; if (attributeValue != null) { fieldValue = buildCompositeRow(attributeValue, session, record, WriteType.UNDEFINED); } else if (getNullPolicy().compositeObjectMarshal(record, parent, (XMLField) getField(), session)) { record.put(this.getField(), fieldValue);
XMLDescriptor xmlDescriptor = (XMLDescriptor)xmlCompositeObjectMapping.getReferenceDescriptor(); if (null == xmlDescriptor) { xmlDescriptor = findReferenceDescriptor(xPathFragment, unmarshalRecord, atts, xmlCompositeObjectMapping,xmlCompositeObjectMapping.getKeepAsElementPolicy()); if(xmlCompositeObjectMapping.getField() != null){ QName leafType = ((XMLField)xmlCompositeObjectMapping.getField()).getLastXPathFragment().getLeafElementType(); if (leafType != null) { XPathFragment frag = new XPathFragment(); if (uri != null && uri.length() > 0) { frag.setNamespaceURI(uri); String prefix = ((XMLDescriptor)xmlCompositeObjectMapping.getDescriptor()).getNonNullNamespaceResolver().resolveNamespaceURI(uri); if (prefix != null && prefix.length() > 0) { xpath = prefix + XMLConstants.COLON + xpath; UnmarshalKeepAsElementPolicy policy = xmlCompositeObjectMapping.getKeepAsElementPolicy(); if (((xmlDescriptor == null) && (policy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT)) || (policy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) { if(unmarshalRecord.getTypeQName() != null){ if(xmlCompositeObjectMapping.getNullPolicy().isNullRepresentedByEmptyNode() || xmlCompositeObjectMapping.getNullPolicy().isNullRepresentedByXsiNil()) { String qnameString = xPathFragment.getLocalName(); if(xPathFragment.getPrefix() != null) { boolean isNull = xmlCompositeObjectMapping.getNullPolicy().valueIsNull(atts); if (isNull) { xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(), null); } else { XMLField xmlFld = (XMLField)this.xmlCompositeObjectMapping.getField();
public void writeSingleValue(Object value, Object parent, XMLRecord record, AbstractSession session) { Object attributeValue = value; if (getConverter() != null) { if (getConverter() instanceof XMLConverter) { attributeValue = ((XMLConverter) getConverter()).convertObjectValueToDataValue(attributeValue, session, record.getMarshaller()); } else { attributeValue = getConverter().convertObjectValueToDataValue(attributeValue, session); if (((XMLField) getField()).isSelfField()) { if (((keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) && attributeValue instanceof org.w3c.dom.Node) { ClassDescriptor desc = this.getReferenceDescriptor(attributeValue.getClass(), session); if(desc != null){ XMLObjectBuilder objectBuilder = (XMLObjectBuilder)desc.getObjectBuilder(); boolean addXsiType = shouldAddXsiType((XMLRecord) record, desc); objectBuilder.buildIntoNestedRow(record, attributeValue, session, addXsiType); }else{ record.put(this.getField(), attributeValue); Object fieldValue = null; if (attributeValue != null) { fieldValue = buildCompositeRow(attributeValue, session, record); } else if (getNullPolicy().compositeObjectMarshal(record, parent, (XMLField) getField(), session)) { record.put(this.getField(), fieldValue);
/** * INTERNAL: * The mapping is initialized with the given session. This mapping is fully initialized * after this. */ public void initialize(AbstractSession session) throws DescriptorException { //modified so that reference class on composite mappings is no longer mandatory String referenceClassName = getReferenceClassName(); if ((this.referenceClass == null) && (referenceClassName != null)) { if (!referenceClassName.equals(XMLConstants.UNKNOWN_OR_TRANSIENT_CLASS)) { setReferenceClass(session.getDatasourcePlatform().getConversionManager().convertClassNameToClass(referenceClassName)); } } initializeReferenceDescriptorAndField(session); if(null != getContainerAccessor()) { getContainerAccessor().initializeAttributes(this.referenceClass); } }
if (xmlCompositeObjectMapping.getConverter() != null) { Converter converter = xmlCompositeObjectMapping.getConverter(); if (converter instanceof XMLConverter) { objectValue = ((XMLConverter)converter).convertObjectValueToDataValue(objectValue, session, marshaller); return xmlCompositeObjectMapping.getNullPolicy().compositeObjectMarshal(xPathFragment, marshalRecord, object, session, namespaceResolver); marshalRecord.closeStartGroupingElements(groupingFragment); UnmarshalKeepAsElementPolicy keepAsElementPolicy = xmlCompositeObjectMapping.getKeepAsElementPolicy(); if (((keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) && objectValue instanceof Node) { if(xPathFragment.isSelfFragment){ XMLDescriptor descriptor = (XMLDescriptor)xmlCompositeObjectMapping.getReferenceDescriptor(); if(descriptor == null || descriptor.hasInheritance()){ descriptor = (XMLDescriptor)session.getDescriptor(objectValue.getClass()); if ((xmlCompositeObjectMapping.getReferenceDescriptor() == null) && (descriptor.getSchemaReference() != null)) { addTypeAttributeIfNeeded(descriptor, xmlCompositeObjectMapping, marshalRecord); QName schemaType = getSchemaType((XMLField) xmlCompositeObjectMapping.getField(), objectValue, session); String stringValue = getValueToWrite(schemaType, objectValue, (XMLConversionManager) session.getDatasourcePlatform().getConversionManager(), namespaceResolver); updateNamespaces(schemaType, marshalRecord,((XMLField)xmlCompositeObjectMapping.getField())); marshalRecord.characters(stringValue);
public void endSelfNodeValue(UnmarshalRecord unmarshalRecord, Attributes attributes) { if(xmlCompositeObjectMapping.getNullPolicy().valueIsNull(attributes)){ xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(), null); return; UnmarshalKeepAsElementPolicy keepAsElementPolicy = xmlCompositeObjectMapping.getKeepAsElementPolicy(); if(theClass != null){ endElementProcessText(unmarshalRecord, xmlCompositeObjectMapping.getConverter(), null, null); return; xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(), value); } else { xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(), element); if (xmlCompositeObjectMapping.getConverter() != null) { Converter converter = xmlCompositeObjectMapping.getConverter(); if (converter instanceof XMLConverter) { valueToSet = ((XMLConverter)converter).convertDataValueToObjectValue(valueToSet, unmarshalRecord.getSession(), unmarshalRecord.getUnmarshaller()); xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(), valueToSet); if (xmlCompositeObjectMapping.getInverseReferenceMapping() != null) { xmlCompositeObjectMapping.getInverseReferenceMapping().getAttributeAccessor().setAttributeValueInObject(unmarshalRecord.getCurrentObject(), valueToSet);
QName leafType = ((XMLField) getField()).getLastXPathFragment().getLeafElementType(); if (leafType != null) { XPathFragment frag = new XPathFragment(); if ((uri != null) && uri.length() > 0) { frag.setNamespaceURI(uri); String prefix = ((XMLDescriptor) getDescriptor()).getNonNullNamespaceResolver().resolveNamespaceURI(uri); if ((prefix != null) && prefix.length() > 0) { xpath = prefix + XMLConstants.COLON + xpath;
protected AbstractRecord buildCompositeRowForDescriptor(ClassDescriptor classDesc, Object attributeValue, AbstractSession session, XMLRecord parentRow, WriteType writeType) { XMLObjectBuilder objectBuilder = (XMLObjectBuilder) classDesc.getObjectBuilder(); XMLRecord child = (XMLRecord) objectBuilder.createRecordFor(attributeValue, (XMLField) getField(), parentRow, this); child.setNamespaceResolver(parentRow.getNamespaceResolver()); child.setSession(session); objectBuilder.buildIntoNestedRow(child, attributeValue, session, (XMLDescriptor)getReferenceDescriptor(), (XMLField) getField()); return child; }
public boolean isNullCapableValue() { XMLField xmlField = (XMLField)xmlCompositeObjectMapping.getField(); if (xmlField.getLastXPathFragment().isSelfFragment) { return false; } return xmlCompositeObjectMapping.getNullPolicy().getIsSetPerformedForAbsentNode(); }
/** * Return a new aggregate/embedded mapping for this type of descriptor. */ @Override public AggregateMapping newAggregateMapping() { return new XMLCompositeObjectMapping(); }
/** * Get the XPath String * @return String the XPath String associated with this Mapping */ public String getXPath() { return getField().getName(); }
if (oldValue != null && compositeMapping.getContainerAccessor() != null) { compositeMapping.getContainerAccessor().setAttributeValueInObject(oldValue, null); if (mapping.isAbstractCompositeObjectMapping()) { XMLCompositeObjectMapping compositeMapping = (XMLCompositeObjectMapping) mapping; if (value != null && compositeMapping.getContainerAccessor() != null) { compositeMapping.getContainerAccessor().setAttributeValueInObject(newValue, entity);