blob: 3b5b7a8466a66a11e4cca673db279f798d33036f [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// 03/26/2008-1.0M6 Guy Pelletier
// - 211302: Add variable 1-1 mapping support to the EclipseLink-ORM.XML Schema
// 05/16/2008-1.0M8 Guy Pelletier
// - 218084: Implement metadata merging functionality between mapping files
// 03/27/2009-2.0 Guy Pelletier
// - 241413: JPA 2.0 Add EclipseLink support for Map type attributes
// 05/04/2010-2.1 Guy Pelletier
// - 309373: Add parent class attribute to EclipseLink-ORM
// 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.HashSet;
import org.eclipse.persistence.internal.jpa.metadata.MetadataProject;
import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.VariableOneToOneAccessor;
import org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataAnnotation;
import org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataClass;
/**
* An interface accessor. This is kinda forward thinking. I assume once we
* get into full interface support etc. this class will handle much more and
* will map directly to an interface schema element from the eclipselink orm
* schema.
*
* Things that should or could be mapped on this interface are:
* - alias
* - query keys
*
* 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 InterfaceAccessor extends ClassAccessor {
private HashSet<VariableOneToOneAccessor> m_variableOneToOneAccessors;
/**
* INTERNAL:
*/
public InterfaceAccessor(MetadataAnnotation annotation, MetadataClass cls, MetadataProject project) {
super(annotation, cls, project);
m_variableOneToOneAccessors = new HashSet<VariableOneToOneAccessor>();
}
/**
* INTERNAL:
* Add the given entity accessor to this interface's list of variable one
* to one accessors.
*/
public void addEntityAccessor(EntityAccessor accessor) {
for (VariableOneToOneAccessor variableOneToOne : m_variableOneToOneAccessors) {
variableOneToOne.addDiscriminatorClassFor(accessor);
}
}
/**
* INTERNAL:
* Query keys are stored internally in a map (keyed on the query key name).
* Therefore, adding the same query key name multiple times (for each
* variable one to one accessor to this interface) will not cause a problem.
*/
public void addQueryKey(String queryKeyName) {
getDescriptor().getClassDescriptor().addAbstractQueryKey(queryKeyName);
}
/**
* INTERNAL:
* Add a variable one to one accessor for this interface. Those entities
* that implement the interface on the accessor will need to make sure they
* add themselves to the class indicator list. See the process method below
* which is called from MetadataProject processing.
*/
public void addVariableOneToOneAccessor(VariableOneToOneAccessor accessor) {
m_variableOneToOneAccessors.add(accessor);
}
/**
* INTERNAL:
*/
@Override
public void process() {
// Does nothing at this point ... perhaps it will in the future ...
}
/**
* INTERNAL:
*/
@Override
public void processAccessType() {
// Does nothing at this point ... perhaps it will in the future ...
}
}