| /* |
| * Copyright (c) 2012, 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: |
| // Blaise Doughan - 2.5 - initial implementation |
| package org.eclipse.persistence.core.descriptors; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.persistence.internal.core.helper.CoreField; |
| import org.eclipse.persistence.internal.core.sessions.CoreAbstractRecord; |
| import org.eclipse.persistence.internal.core.sessions.CoreAbstractSession; |
| |
| /** |
| * INTERNAL |
| * A abstraction of inheritance policy capturing behavior common to all |
| * persistence types. |
| */ |
| public abstract class CoreInheritancePolicy< |
| ABSTRACT_RECORD extends CoreAbstractRecord, |
| ABSTRACT_SESSION extends CoreAbstractSession, |
| DESCRIPTOR extends CoreDescriptor, |
| FIELD extends CoreField> { |
| |
| /** |
| * Default constructor. |
| */ |
| protected CoreInheritancePolicy() { |
| } |
| |
| /** |
| * INTERNAL: |
| * Add abstract class indicator information to the database row. This is |
| * required when building a row for an insert or an update of a concrete child |
| * descriptor. |
| */ |
| public abstract void addClassIndicatorFieldToRow(ABSTRACT_RECORD databaseRow); |
| |
| /** |
| * INTERNAL: |
| * Add the class name reference by class name, used by the MW. |
| */ |
| public abstract void addClassNameIndicator(String childClassName, Object typeValue); |
| |
| /** |
| * INTERNAL: |
| * This method is invoked only for the abstract descriptors. |
| */ |
| public abstract Class<?> classFromRow(ABSTRACT_RECORD record, ABSTRACT_SESSION session); |
| |
| /** |
| * INTERNAL: |
| * Returns all the child descriptors, even descriptors for subclasses of |
| * subclasses. |
| * Required for bug 3019934. |
| */ |
| public abstract List<DESCRIPTOR> getAllChildDescriptors(); |
| |
| /** |
| * INTERNAL: |
| * Returns field that the class type indicator is store when using inheritance. |
| */ |
| public abstract FIELD getClassIndicatorField(); |
| |
| /** |
| * PUBLIC: |
| * Return the class indicator field name. |
| * This is the name of the field in the table that stores what type of object this is. |
| */ |
| public abstract String getClassIndicatorFieldName(); |
| |
| /** |
| * INTERNAL: |
| * Return the association of indicators and classes using specified ConversionManager |
| */ |
| public abstract Map getClassIndicatorMapping(); |
| |
| /** |
| * INTERNAL: |
| * Return the mapping from class name to indicator, used by MW. |
| */ |
| public abstract Map getClassNameIndicatorMapping(); |
| |
| /** |
| * INTERNAL: |
| * Returns the descriptor which the policy belongs to. |
| */ |
| public abstract DESCRIPTOR getDescriptor(); |
| |
| /** |
| * PUBLIC: |
| * Return the parent class. |
| */ |
| public abstract Class<?> getParentClass(); |
| |
| /** |
| * INTERNAL: |
| * Return the parent descriptor. |
| */ |
| public abstract DESCRIPTOR getParentDescriptor(); |
| |
| /** |
| * INTERNAL: |
| */ |
| public abstract boolean hasClassExtractor(); |
| |
| /** |
| * INTERNAL: |
| * Return whether or not is root parent descriptor |
| */ |
| public abstract boolean isRootParentDescriptor(); |
| |
| /** |
| * ADVANCED: |
| * Set the class extractor class name. At descriptor initialize time this |
| * class will be converted to a Class and set as the ClassExtractor. This |
| * method is called from JPA. |
| * |
| * @see org.eclipse.persistence.descriptors.InheritancePolicy#setClassExtractor |
| * setClassExtractor for more information on the ClassExtractor class. |
| */ |
| public abstract void setClassExtractorName(String classExtractorName); |
| |
| /** |
| * ADVANCED: |
| * To set the class indicator field. |
| * This can be used for advanced field types, such as XML nodes, or to set the field type. |
| */ |
| public abstract void setClassIndicatorField(FIELD classIndicatorField); |
| |
| /** |
| * PUBLIC: |
| * Set the association of indicators and classes. |
| * This may be desired to be used by clients in strange inheritance models. |
| */ |
| public abstract void setClassIndicatorMapping(Map classIndicatorMapping); |
| |
| /** |
| * INTERNAL: |
| * Set the descriptor. |
| */ |
| public abstract void setDescriptor(DESCRIPTOR descriptor); |
| |
| |
| /** |
| * INTERNAL: |
| * Set the parent class name, used by MW to avoid referencing the real class for |
| * deployment XML generation. |
| */ |
| public abstract void setParentClassName(String parentClassName); |
| |
| /** |
| * INTERNAL: |
| * Set the descriptor to read instance of itself and its subclasses when queried. |
| * This is used with inheritance to configure the result of queries. |
| * By default this is true for root inheritance descriptors, and false for all others. |
| */ |
| public abstract void setShouldReadSubclasses(Boolean shouldReadSubclasses); |
| } |