All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.persistence.internal.oxm.FieldTransformerNodeValue Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.internal.oxm;

import org.eclipse.persistence.core.mappings.transformers.CoreFieldTransformer;
import org.eclipse.persistence.internal.core.sessions.CoreAbstractSession;
import org.eclipse.persistence.internal.oxm.mappings.Field;
import org.eclipse.persistence.internal.oxm.mappings.TransformationMapping;
import org.eclipse.persistence.internal.oxm.record.MarshalContext;
import org.eclipse.persistence.internal.oxm.record.MarshalRecord;
import org.eclipse.persistence.internal.oxm.record.ObjectMarshalContext;
import org.eclipse.persistence.internal.oxm.record.UnmarshalRecord;

/**
 * INTERNAL:
 * 

Purpose: This is how the Field Transformer is handled when used * with the TreeObjectBuilder. Field Transformers are used with the XML * Transformation Mapping.

*/ public class FieldTransformerNodeValue extends NodeValue { private CoreFieldTransformer fieldTransformer; private TransformationMapping transformationMapping; private Field xmlField; public FieldTransformerNodeValue(TransformationMapping transformationMapping) { this.transformationMapping = transformationMapping; } public CoreFieldTransformer getFieldTransformer() { return fieldTransformer; } public void setFieldTransformer(CoreFieldTransformer fieldTransformer) { this.fieldTransformer = fieldTransformer; } public Field getXMLField() { return xmlField; } public void setXMLField(Field xmlField) { this.xmlField = xmlField; } @Override public boolean marshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver) { return marshal(xPathFragment, marshalRecord, object, session, namespaceResolver, ObjectMarshalContext.getInstance()); } @Override public boolean marshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { Object value = fieldTransformer.buildFieldValue(object, getXMLField().getXPath(), session); return this.marshalSingleValue(xPathFragment, marshalRecord, object, value, session, namespaceResolver, marshalContext); } @Override public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) { if(value == null) { return false; } XPathFragment groupingFragment = marshalRecord.openStartGroupingElements(namespaceResolver); if (getXMLField().getLastXPathFragment().isAttribute()) { marshalRecord.add(getXMLField(), value); marshalRecord.closeStartGroupingElements(groupingFragment); } else { marshalRecord.closeStartGroupingElements(groupingFragment); marshalRecord.add(getXMLField(), value); } return true; } @Override public void attribute(UnmarshalRecord unmarshalRecord, String namespaceURI, String localName, String value) { ConversionManager conversionManager = (ConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager(); Object objectValue = unmarshalRecord.getXMLReader().convertValueBasedOnSchemaType(xmlField, value, conversionManager, unmarshalRecord); transformationMapping.writeFromAttributeIntoRow(unmarshalRecord, xmlField, objectValue, false); } @Override public void endElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord) { Object value = unmarshalRecord.getCharacters().toString(); unmarshalRecord.resetStringBuffer(); ConversionManager conversionManager = unmarshalRecord.getConversionManager(); if (unmarshalRecord.getTypeQName() != null) { Class typeClass = xmlField.getJavaClass(unmarshalRecord.getTypeQName(), conversionManager); value = conversionManager.convertObject(value, typeClass, unmarshalRecord.getTypeQName()); } else { value = unmarshalRecord.getXMLReader().convertValueBasedOnSchemaType(xmlField, value, conversionManager, unmarshalRecord); } transformationMapping.writeFromAttributeIntoRow(unmarshalRecord, xmlField, value, true); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy