Search in sources :

Example 1 with XMLCompositeCollectionMapping

use of org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping in project eclipselink by eclipse-ee4j.

the class XMLEntityMappingsMappingProject method getParametersMapping.

/**
 * INTERNAL:
 */
protected XMLCompositeCollectionMapping getParametersMapping() {
    XMLCompositeCollectionMapping parametersMapping = new XMLCompositeCollectionMapping();
    parametersMapping.setAttributeName("m_parameters");
    parametersMapping.setGetMethodName("getParameters");
    parametersMapping.setSetMethodName("setParameters");
    parametersMapping.setReferenceClass(StoredProcedureParameterMetadata.class);
    parametersMapping.setXPath("orm:parameter");
    return parametersMapping;
}
Also used : XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping)

Example 2 with XMLCompositeCollectionMapping

use of org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping in project eclipselink by eclipse-ee4j.

the class XMLEntityMappingsMappingProject method buildTransformationDescriptor.

/**
 * INTERNAL:
 * XSD: transformation
 */
protected ClassDescriptor buildTransformationDescriptor() {
    XMLDescriptor descriptor = new XMLDescriptor();
    descriptor.setJavaClass(TransformationAccessor.class);
    // Element mappings - must remain in order of definition in XML.
    XMLCompositeObjectMapping readTransformerMapping = new XMLCompositeObjectMapping();
    readTransformerMapping.setAttributeName("m_readTransformer");
    readTransformerMapping.setGetMethodName("getReadTransformer");
    readTransformerMapping.setSetMethodName("setReadTransformer");
    readTransformerMapping.setReferenceClass(ReadTransformerMetadata.class);
    readTransformerMapping.setXPath("orm:read-transformer");
    descriptor.addMapping(readTransformerMapping);
    XMLCompositeCollectionMapping writeTransformersMapping = new XMLCompositeCollectionMapping();
    writeTransformersMapping.setAttributeName("m_writeTransformers");
    writeTransformersMapping.setGetMethodName("getWriteTransformers");
    writeTransformersMapping.setSetMethodName("setWriteTransformers");
    writeTransformersMapping.setReferenceClass(WriteTransformerMetadata.class);
    writeTransformersMapping.setXPath("orm:write-transformer");
    descriptor.addMapping(writeTransformersMapping);
    descriptor.addMapping(getPropertyMapping());
    descriptor.addMapping(getAccessMethodsMapping());
    // Attribute mappings
    descriptor.addMapping(getNameAttributeMapping());
    descriptor.addMapping(getFetchAttributeMapping());
    descriptor.addMapping(getOptionalAttributeMapping());
    descriptor.addMapping(getAccessAttributeMapping());
    descriptor.addMapping(getMutableAttributeMapping());
    return descriptor;
}
Also used : XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping) XMLCompositeObjectMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping)

Example 3 with XMLCompositeCollectionMapping

use of org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping in project eclipselink by eclipse-ee4j.

the class MappingsGenerator method generateCompositeCollectionMapping.

public CompositeCollectionMapping generateCompositeCollectionMapping(Property property, Descriptor descriptor, JavaClass javaClass, NamespaceInfo namespaceInfo, String referenceClassName) {
    boolean nestedArray = false;
    CompositeCollectionMapping<AbstractSession, AttributeAccessor, ContainerPolicy, Converter, ClassDescriptor, DatabaseField, XMLMarshaller, Session, UnmarshalKeepAsElementPolicy, XMLUnmarshaller, XMLRecord> mapping = new XMLCompositeCollectionMapping();
    initializeXMLMapping((XMLMapping) mapping, property);
    initializeXMLContainerMapping(mapping, property.getType().isArray());
    JavaClass manyValueJavaClass = helper.getJavaClass(ManyValue.class);
    if (manyValueJavaClass.isAssignableFrom(javaClass)) {
        mapping.setReuseContainer(false);
    }
    // handle null policy set via xml metadata
    if (property.isSetNullPolicy()) {
        mapping.setNullPolicy(getNullPolicyFromProperty(property, getNamespaceResolverForDescriptor(namespaceInfo)));
    } else if (property.isNillable()) {
        mapping.getNullPolicy().setNullRepresentedByXsiNil(true);
        mapping.getNullPolicy().setMarshalNullRepresentation(XMLNullRepresentationType.XSI_NIL);
    }
    if (property.isSetXmlElementWrapper()) {
        mapping.setWrapperNullPolicy(getWrapperNullPolicyFromProperty(property));
    }
    JavaClass collectionType = property.getType();
    if (collectionType.isArray()) {
        JAXBArrayAttributeAccessor accessor = new JAXBArrayAttributeAccessor(mapping.getAttributeAccessor(), mapping.getContainerPolicy(), helper.getClassLoader());
        JavaClass componentType = collectionType.getComponentType();
        if (componentType.isArray()) {
            Class<?> adaptedClass = classToGeneratedClasses.get(componentType.getName());
            referenceClassName = adaptedClass.getName();
            accessor.setAdaptedClassName(referenceClassName);
            JavaClass baseComponentType = getBaseComponentType(componentType);
            if (baseComponentType.isPrimitive()) {
                Class<Object> primitiveClass = XMLConversionManager.getDefaultManager().convertClassNameToClass(baseComponentType.getRawName());
                accessor.setComponentClass(primitiveClass);
            } else {
                accessor.setComponentClassName(baseComponentType.getQualifiedName());
            }
        } else {
            accessor.setComponentClassName(componentType.getQualifiedName());
        }
        mapping.setAttributeAccessor(accessor);
    } else if (helper.isMapType(property.getType())) {
        Class<?> generatedClass = generateMapEntryClassAndDescriptor(property, descriptor.getNonNullNamespaceResolver());
        referenceClassName = generatedClass.getName();
        String mapClassName = property.getType().getRawName();
        mapping.setAttributeAccessor(new MapValueAttributeAccessor(mapping.getAttributeAccessor(), mapping.getContainerPolicy(), generatedClass, mapClassName, helper.getClassLoader()));
    }
    // Nested array check (used in JSON marshalling)
    if (collectionType.getComponentType() == null) {
        if ((collectionType.isArray() || helper.isCollectionType(collectionType)) && (referenceClassName != null && referenceClassName.contains(AnnotationsProcessor.ARRAY_PACKAGE_NAME))) {
            nestedArray = true;
        }
    } else if ((collectionType.isArray() || helper.isCollectionType(collectionType)) && (collectionType.getComponentType().isArray() || helper.isCollectionType(collectionType.getComponentType()))) {
        nestedArray = true;
    }
    collectionType = containerClassImpl(collectionType);
    mapping.useCollectionClassName(collectionType.getRawName());
    // if the XPath is set (via xml-path) use it; otherwise figure it out
    Field xmlField = getXPathForField(property, namespaceInfo, false, false);
    if (helper.isMapType(property.getType())) {
        JavaClass mapValueClass = helper.getJavaClass(MapValue.class);
        if (mapValueClass.isAssignableFrom(javaClass)) {
            mapping.setXPath("entry");
        } else {
            mapping.setXPath(xmlField.getXPath() + "/entry");
        }
    } else {
        mapping.setXPath(xmlField.getXPath());
    }
    if (referenceClassName == null) {
        setTypedTextField((Field) mapping.getField());
    } else {
        mapping.setReferenceClassName(referenceClassName);
    }
    if (property.isTransientType()) {
        mapping.setReferenceClassName(Constants.UNKNOWN_OR_TRANSIENT_CLASS);
    }
    if (property.isRequired()) {
        ((Field) mapping.getField()).setRequired(true);
    }
    ((Field) mapping.getField()).setNestedArray(nestedArray);
    return mapping;
}
Also used : ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) XMLMarshaller(org.eclipse.persistence.oxm.XMLMarshaller) JAXBArrayAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.JAXBArrayAttributeAccessor) MapValueAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.MapValueAttributeAccessor) XMLRecord(org.eclipse.persistence.oxm.record.XMLRecord) XMLField(org.eclipse.persistence.oxm.XMLField) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) Field(org.eclipse.persistence.internal.oxm.mappings.Field) JavaField(org.eclipse.persistence.jaxb.javamodel.JavaField) ContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping) CoreConverter(org.eclipse.persistence.core.mappings.converters.CoreConverter) JAXBEnumTypeConverter(org.eclipse.persistence.jaxb.JAXBEnumTypeConverter) JAXBElementConverter(org.eclipse.persistence.internal.jaxb.JAXBElementConverter) XMLListConverter(org.eclipse.persistence.oxm.mappings.converters.XMLListConverter) XMLConverter(org.eclipse.persistence.oxm.mappings.converters.XMLConverter) Converter(org.eclipse.persistence.mappings.converters.Converter) DefaultElementConverter(org.eclipse.persistence.internal.jaxb.DefaultElementConverter) DomHandlerConverter(org.eclipse.persistence.internal.jaxb.DomHandlerConverter) JAXBElementRootConverter(org.eclipse.persistence.internal.jaxb.JAXBElementRootConverter) XMLJavaTypeConverter(org.eclipse.persistence.internal.jaxb.XMLJavaTypeConverter) JavaClass(org.eclipse.persistence.jaxb.javamodel.JavaClass) UnmarshalKeepAsElementPolicy(org.eclipse.persistence.oxm.mappings.UnmarshalKeepAsElementPolicy) XMLUnmarshaller(org.eclipse.persistence.oxm.XMLUnmarshaller) VirtualAttributeAccessor(org.eclipse.persistence.internal.descriptors.VirtualAttributeAccessor) CustomAccessorAttributeAccessor(org.eclipse.persistence.internal.jaxb.CustomAccessorAttributeAccessor) JAXBSetMethodAttributeAccessor(org.eclipse.persistence.internal.jaxb.JAXBSetMethodAttributeAccessor) AttributeAccessor(org.eclipse.persistence.mappings.AttributeAccessor) JAXBArrayAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.JAXBArrayAttributeAccessor) MapValueAttributeAccessor(org.eclipse.persistence.internal.jaxb.many.MapValueAttributeAccessor) MethodAttributeAccessor(org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor) InstanceVariableAttributeAccessor(org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor) AbstractSession(org.eclipse.persistence.internal.sessions.AbstractSession) Session(org.eclipse.persistence.sessions.Session) AbstractSession(org.eclipse.persistence.internal.sessions.AbstractSession)

Example 4 with XMLCompositeCollectionMapping

use of org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping in project eclipselink by eclipse-ee4j.

the class XmlElementTestCases method testContainerType.

/*
    public void testTeamWithListOfPlayersSchemaGen() {
        String metadataFile = PATH + "team-oxm.xml";

        InputStream iStream = loader.getResourceAsStream(metadataFile);
        if (iStream == null) {
            fail("Couldn't load metadata file [" + metadataFile + "]");
        }
        HashMap<String, Source> metadataSourceMap = new HashMap<String, Source>();
        metadataSourceMap.put(CONTEXT_PATH, new StreamSource(iStream));
        Map<String, Map<String, Source>> properties = new HashMap<String, Map<String, Source>>();
        properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);

        try {
            JAXBContext jContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] { Team.class }, properties, loader);
            MySchemaOutputResolver oResolver = new MySchemaOutputResolver();
            jContext.generateSchema(oResolver);
            // validate schema
            String controlSchema = PATH + "team-schema.xsd";
            compareSchemas(oResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
        } catch (JAXBException e) {
            fail("An exception occurred creating the JAXBContext: " + e.getMessage());
        }
    }
    */
/**
 * Test setting the container class via container-type attribute.
 *
 * Positive test.
 */
public void testContainerType() {
    XMLDescriptor xDesc = ((JAXBContext) jaxbContext).getXMLContext().getDescriptor(new QName("employee"));
    assertNotNull("No descriptor was generated for Employee.", xDesc);
    DatabaseMapping mapping = xDesc.getMappingForAttributeName("myEmployees");
    assertNotNull("No mapping exists on Employee for attribute [myEmployees].", mapping);
    assertTrue("Expected an XMLCompositeCollectionMapping for attribute [myEmployees], but was [" + mapping.toString() + "].", mapping instanceof XMLCompositeCollectionMapping);
    assertTrue("Expected container class [java.util.LinkedList] but was [" + mapping.getContainerPolicy().getContainerClassName() + "]", mapping.getContainerPolicy().getContainerClassName().equals("java.util.LinkedList"));
}
Also used : XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) QName(javax.xml.namespace.QName) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping) DatabaseMapping(org.eclipse.persistence.mappings.DatabaseMapping)

Example 5 with XMLCompositeCollectionMapping

use of org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping in project eclipselink by eclipse-ee4j.

the class PersistenceXMLMappings method buildPersistenceXMLDescriptor.

/**
 * INTERNAL:
 */
private static XMLDescriptor buildPersistenceXMLDescriptor(NamespaceResolver resolver) {
    XMLDescriptor descriptor = new XMLDescriptor();
    descriptor.setNamespaceResolver(resolver);
    descriptor.setJavaClass(PersistenceXML.class);
    descriptor.setDefaultRootElement("persistence");
    XMLCompositeCollectionMapping puMapping = new XMLCompositeCollectionMapping();
    puMapping.setAttributeName("persistenceUnitInfos");
    puMapping.setReferenceClass(SEPersistenceUnitInfo.class);
    puMapping.setXPath("persistence-unit");
    descriptor.addMapping(puMapping);
    return descriptor;
}
Also used : XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping)

Aggregations

XMLCompositeCollectionMapping (org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping)211 XMLDescriptor (org.eclipse.persistence.oxm.XMLDescriptor)151 XMLDirectMapping (org.eclipse.persistence.oxm.mappings.XMLDirectMapping)77 XMLCompositeObjectMapping (org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping)75 XMLField (org.eclipse.persistence.oxm.XMLField)28 ArrayList (java.util.ArrayList)22 AttributeAccessor (org.eclipse.persistence.mappings.AttributeAccessor)22 NamespaceResolver (org.eclipse.persistence.oxm.NamespaceResolver)16 List (java.util.List)15 DatabaseField (org.eclipse.persistence.internal.helper.DatabaseField)13 Association (org.eclipse.persistence.mappings.Association)12 XMLCompositeDirectCollectionMapping (org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping)11 Iterator (java.util.Iterator)10 PropertyAssociation (org.eclipse.persistence.mappings.PropertyAssociation)10 HashMap (java.util.HashMap)9 IndirectionPolicy (org.eclipse.persistence.internal.indirection.IndirectionPolicy)9 NoIndirectionPolicy (org.eclipse.persistence.internal.indirection.NoIndirectionPolicy)9 XMLSchemaClassPathReference (org.eclipse.persistence.oxm.schema.XMLSchemaClassPathReference)9 Map (java.util.Map)8 DatabaseMapping (org.eclipse.persistence.mappings.DatabaseMapping)8