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

org.eclipse.persistence.internal.jpa.metadata.accessors.classes.XMLAttributes Maven / Gradle / Ivy

There is a newer version: 4.0.2
Show newest version
/*
 * Copyright (c) 1998, 2018 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
//     05/16/2008-1.0M8 Guy Pelletier
//       - 218084: Implement metadata merging functionality between mapping files
//     01/28/2009-2.0 Guy Pelletier
//       - 248293: JPA 2.0 Element Collections (part 1)
//     04/27/2010-2.1 Guy Pelletier
//       - 309856: MappedSuperclasses from XML are not being initialized properly
//     09/16/2010-2.2 Guy Pelletier
//       - 283028: Add support for letting an @Embeddable extend a @MappedSuperclass
//     03/24/2011-2.3 Guy Pelletier
//       - 337323: Multi-tenant with shared schema support (part 1)
package org.eclipse.persistence.internal.jpa.metadata.accessors.classes;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.persistence.internal.jpa.metadata.ORMetadata;

import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.BasicAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.BasicCollectionAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.BasicMapAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ElementCollectionAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.EmbeddedAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.EmbeddedIdAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.IdAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ManyToManyAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ManyToOneAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.MappingAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.OneToManyAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.OneToOneAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.TransformationAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.TransientAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.VariableOneToOneAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.VersionAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataAccessibleObject;
import org.eclipse.persistence.internal.jpa.metadata.structures.ArrayAccessor;
import org.eclipse.persistence.internal.jpa.metadata.structures.StructureAccessor;
import org.eclipse.persistence.internal.jpa.metadata.xml.XMLEntityMappings;

/**
 * Object to represent all the attributes of an XML defined entity,
 * mapped-superclass or embeddable.
 *
 * Key notes:
 * - any metadata mapped from XML to this class must be compared in the
 *   equals method.
 * - any metadata mapped from XML to this class must be handled in the merge
 *   method. (merging is done at the accessor/mapping level)
 * - any metadata mapped from XML to this class must be initialized in the
 *   initXMLObject  method.
 * - methods should be preserved in alphabetical order.
 *
 * @author Guy Pelletier
 * @since EclipseLink 1.0
 */
public class XMLAttributes extends ORMetadata {
    private EmbeddedIdAccessor m_embeddedId;

    private List m_basics;
    private List m_basicCollections;
    private List m_basicMaps;
    private List m_elementCollections;
    private List m_embeddeds;
    private List m_ids;
    private List m_manyToManys;
    private List m_manyToOnes;
    private List m_oneToManys;
    private List m_oneToOnes;
    private List m_variableOneToOnes;
    private List m_transformations;
    private List m_transients;
    private List m_versions;
    private List m_structures;
    private List m_arrays;

    /**
     * INTERNAL:
     */
    public XMLAttributes() {
        super("");
    }

    /**
     * INTERNAL:
     */
    @Override
    public boolean equals(Object objectToCompare) {
        if (objectToCompare instanceof XMLAttributes) {
            XMLAttributes attributes = (XMLAttributes) objectToCompare;

            if (! valuesMatch(m_embeddedId, attributes.getEmbeddedId())) {
                return false;
            }

            if (! valuesMatch(m_basics, attributes.getBasics())) {
                return false;
            }

            if (! valuesMatch(m_basicCollections, attributes.getBasicCollections())) {
                return false;
            }

            if (! valuesMatch(m_basicMaps, attributes.getBasicMaps())) {
                return false;
            }

            if (! valuesMatch(m_elementCollections, attributes.getElementCollections())) {
                return false;
            }

            if (! valuesMatch(m_embeddeds, attributes.getEmbeddeds())) {
                return false;
            }

            if (! valuesMatch(m_ids, attributes.getIds())) {
                return false;
            }

            if (! valuesMatch(m_manyToManys, attributes.getManyToManys())) {
                return false;
            }

            if (! valuesMatch(m_manyToOnes, attributes.getManyToOnes())) {
                return false;
            }

            if (! valuesMatch(m_oneToManys, attributes.getOneToManys())) {
                return false;
            }

            if (! valuesMatch(m_oneToOnes, attributes.getOneToOnes())) {
                return false;
            }

            if (! valuesMatch(m_variableOneToOnes, attributes.getVariableOneToOnes())) {
                return false;
            }

            if (! valuesMatch(m_transformations, attributes.getTransformations())) {
                return false;
            }

            if (! valuesMatch(m_transients, attributes.getTransients())) {
                return false;
            }

            if (! valuesMatch(m_structures, attributes.getStructures())) {
                return false;
            }

            if (! valuesMatch(m_arrays, attributes.getArrays())) {
                return false;
            }

            return valuesMatch(m_versions, attributes.getVersions());
        }

        return false;
    }

    @Override
    public int hashCode() {
        int result = m_embeddedId != null ? m_embeddedId.hashCode() : 0;
        result = 31 * result + (m_basics != null ? m_basics.hashCode() : 0);
        result = 31 * result + (m_basicCollections != null ? m_basicCollections.hashCode() : 0);
        result = 31 * result + (m_basicMaps != null ? m_basicMaps.hashCode() : 0);
        result = 31 * result + (m_elementCollections != null ? m_elementCollections.hashCode() : 0);
        result = 31 * result + (m_embeddeds != null ? m_embeddeds.hashCode() : 0);
        result = 31 * result + (m_ids != null ? m_ids.hashCode() : 0);
        result = 31 * result + (m_manyToManys != null ? m_manyToManys.hashCode() : 0);
        result = 31 * result + (m_manyToOnes != null ? m_manyToOnes.hashCode() : 0);
        result = 31 * result + (m_oneToManys != null ? m_oneToManys.hashCode() : 0);
        result = 31 * result + (m_oneToOnes != null ? m_oneToOnes.hashCode() : 0);
        result = 31 * result + (m_variableOneToOnes != null ? m_variableOneToOnes.hashCode() : 0);
        result = 31 * result + (m_transformations != null ? m_transformations.hashCode() : 0);
        result = 31 * result + (m_transients != null ? m_transients.hashCode() : 0);
        result = 31 * result + (m_versions != null ? m_versions.hashCode() : 0);
        result = 31 * result + (m_structures != null ? m_structures.hashCode() : 0);
        result = 31 * result + (m_arrays != null ? m_arrays.hashCode() : 0);
        return result;
    }

    /**
     * INTERNAL:
     * This list is not cached and should not be cached since our accessors
     * may change in a merge. The accessors list gets rebuilt every time
     * this method is called (which should only ever be once!)
     */
    public List getAccessors() {
        List accessors = new ArrayList();

        if (m_embeddedId != null) {
            accessors.add(m_embeddedId);
        }

        accessors.addAll(m_ids);
        accessors.addAll(m_basics);
        accessors.addAll(m_basicCollections);
        accessors.addAll(m_basicMaps);
        accessors.addAll(m_versions);
        accessors.addAll(m_embeddeds);
        accessors.addAll(m_elementCollections);
        accessors.addAll(m_transformations);
        accessors.addAll(m_transients);
        accessors.addAll(m_manyToManys);
        accessors.addAll(m_manyToOnes);
        accessors.addAll(m_oneToManys);
        accessors.addAll(m_oneToOnes);
        accessors.addAll(m_variableOneToOnes);
        accessors.addAll(m_structures);
        accessors.addAll(m_arrays);

        return accessors;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getArrays() {
        return m_arrays;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getBasicCollections() {
        return m_basicCollections;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getBasicMaps() {
        return m_basicMaps;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getBasics() {
        return m_basics;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getElementCollections() {
        return m_elementCollections;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public EmbeddedIdAccessor getEmbeddedId() {
        return m_embeddedId;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getEmbeddeds() {
        return m_embeddeds;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getIds() {
        return m_ids;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getManyToManys() {
        return m_manyToManys;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getManyToOnes() {
        return m_manyToOnes;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getOneToManys() {
        return m_oneToManys;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getOneToOnes() {
        return m_oneToOnes;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getStructures() {
        return m_structures;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getTransformations() {
        return m_transformations;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getTransients() {
        return m_transients;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getVariableOneToOnes() {
        return m_variableOneToOnes;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public List getVersions() {
        return m_versions;
    }

    /**
     * INTERNAL:
     * This is going to initialize the accessible objects.
     */
    @Override
    public void initXMLObject(MetadataAccessibleObject accessibleObject, XMLEntityMappings entityMappings) {
        super.initXMLObject(accessibleObject, entityMappings);

        // For merging purposes we will initialize the accessors with the owning
        // classes accessible object. The actual accessible object (field or
        // method) for each accessor will be set during the actual metadata
        // processing stage.

        // Initialize single objects.
        initXMLObject(m_embeddedId, accessibleObject);

        // Initialize lists of objects.
        initXMLObjects(m_basics, accessibleObject);
        initXMLObjects(m_basicCollections, accessibleObject);
        initXMLObjects(m_basicMaps, accessibleObject);
        initXMLObjects(m_elementCollections, accessibleObject);
        initXMLObjects(m_embeddeds, accessibleObject);
        initXMLObjects(m_ids, accessibleObject);
        initXMLObjects(m_manyToManys, accessibleObject);
        initXMLObjects(m_manyToOnes, accessibleObject);
        initXMLObjects(m_oneToManys, accessibleObject);
        initXMLObjects(m_oneToOnes, accessibleObject);
        initXMLObjects(m_variableOneToOnes, accessibleObject);
        initXMLObjects(m_transformations, accessibleObject);
        initXMLObjects(m_transients, accessibleObject);
        initXMLObjects(m_versions, accessibleObject);
        initXMLObjects(m_structures, accessibleObject);
        initXMLObjects(m_arrays, accessibleObject);
    }

    /**
     * INTERNAL:
     * Since we are controlling the merging and we know we'll be comparing
     * apples with apples, the casting is safe to assume.
     */
    @Override
    public void merge(ORMetadata metadata) {
        if (metadata != null) {
            XMLAttributes attributes = (XMLAttributes) metadata;

            // ORMetadata object merging
            m_embeddedId = (EmbeddedIdAccessor) mergeORObjects(getEmbeddedId(), attributes.getEmbeddedId());

            // ORMetadata list merging.
            m_basics = mergeORObjectLists(m_basics, attributes.getBasics());
            m_basicCollections = mergeORObjectLists(m_basicCollections, attributes.getBasicCollections());
            m_basicMaps = mergeORObjectLists(m_basicMaps, attributes.getBasicMaps());
            m_elementCollections = mergeORObjectLists(m_elementCollections, attributes.getElementCollections());
            m_embeddeds = mergeORObjectLists(m_embeddeds, attributes.getEmbeddeds());
            m_ids = mergeORObjectLists(m_ids, attributes.getIds());
            m_manyToManys = mergeORObjectLists(m_manyToManys, attributes.getManyToManys());
            m_manyToOnes = mergeORObjectLists(m_manyToOnes, attributes.getManyToOnes());
            m_oneToManys = mergeORObjectLists(m_oneToManys, attributes.getOneToManys());
            m_oneToOnes = mergeORObjectLists(m_oneToOnes, attributes.getOneToOnes());
            m_variableOneToOnes = mergeORObjectLists(m_variableOneToOnes, attributes.getVariableOneToOnes());
            m_transformations = mergeORObjectLists(m_transformations, attributes.getTransformations());
            m_transients = mergeORObjectLists(m_transients, attributes.getTransients());
            m_versions = mergeORObjectLists(m_versions, attributes.getVersions());
            m_structures = mergeORObjectLists(m_structures, attributes.getStructures());
            m_arrays = mergeORObjectLists(m_arrays, attributes.getArrays());
        }
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setArrays(List arrays) {
        m_arrays = arrays;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setBasicCollections(List basicCollections) {
        m_basicCollections = basicCollections;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setBasicMaps(List basicMaps) {
        m_basicMaps = basicMaps;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setBasics(List basics) {
        m_basics = basics;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setElementCollections(List elementCollections) {
        m_elementCollections = elementCollections;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setEmbeddedId(EmbeddedIdAccessor embeddedId) {
        m_embeddedId = embeddedId;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setEmbeddeds(List embeddeds) {
        m_embeddeds = embeddeds;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setIds(List ids) {
        m_ids = ids;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setManyToManys(List manyToManys) {
        m_manyToManys = manyToManys;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setManyToOnes(List manyToOnes) {
        m_manyToOnes = manyToOnes;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setOneToManys(List oneToManys) {
        m_oneToManys = oneToManys;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setOneToOnes(List oneToOnes) {
        m_oneToOnes = oneToOnes;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setStructures(List structures) {
        m_structures = structures;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setTransformations(List transformations) {
        m_transformations = transformations;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setTransients(List transients) {
        m_transients = transients;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setVariableOneToOnes(List variableOneToOnes) {
        m_variableOneToOnes = variableOneToOnes;
    }

    /**
     * INTERNAL:
     * Used for OX mapping.
     */
    public void setVersions(List versions) {
        m_versions = versions;
    }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy