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

org.eclipse.persistence.oxm.mappings.BidirectionalPolicy Maven / Gradle / Ivy

There is a newer version: 5.0.0-B03
Show 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:
// mmacivor - October 16th 2009 - 2.0 - Initial implementation
package org.eclipse.persistence.oxm.mappings;

import org.eclipse.persistence.internal.descriptors.InstanceVariableAttributeAccessor;
import org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor;
import org.eclipse.persistence.internal.queries.ContainerPolicy;
import org.eclipse.persistence.mappings.AttributeAccessor;

/**
 * 

Purpose: Provides a means to configure bidirectional relationship * maintenance for OXM mappings. * ant * @author mmacivor */ public class BidirectionalPolicy { private AttributeAccessor bidirectionalTargetAccessor; private ContainerPolicy bidirectionalTargetContainerPolicy; /** * Sets the AttributeAccessor that is used to get and set the value of the * container on the target object. * * @param anAttributeAccessor - the accessor to be used. */ public void setBidirectionalTargetAccessor(AttributeAccessor anAttributeAccessor) { this.bidirectionalTargetAccessor = anAttributeAccessor; } /** * Sets the name of the backpointer attribute on the target object. Used to * populate the backpointer. If the specified attribute doesn't exist on * the reference class of this mapping, a DescriptorException will be thrown * during initialize. * * @param attributeName - the name of the backpointer attribute to be populated */ public void setBidirectionalTargetAttributeName(String attributeName) { if(attributeName != null) { if(this.bidirectionalTargetAccessor == null) { this.bidirectionalTargetAccessor = new InstanceVariableAttributeAccessor(); } this.getBidirectionalTargetAccessor().setAttributeName(attributeName); } } /** * Gets the name of the backpointer attribute on the target object. Used to * populate the backpointer. */ public String getBidirectionalTargetAttributeName() { if(this.bidirectionalTargetAccessor == null) { return null; } return this.getBidirectionalTargetAccessor().getAttributeName(); } /** * Sets the method name to be used when accessing the value of the back pointer * on the target object of this mapping. If the specified method doesn't exist * on the reference class of this mapping, a DescriptorException will be thrown * during initialize. * * @param methodName - the getter method to be used. */ public void setBidirectionalTargetGetMethodName(String methodName) { if (methodName == null) { return; } if(this.bidirectionalTargetAccessor == null) { bidirectionalTargetAccessor = new MethodAttributeAccessor(); } // This is done because setting attribute name by defaults create InstanceVariableAttributeAccessor if (!getBidirectionalTargetAccessor().isMethodAttributeAccessor()) { String attributeName = this.bidirectionalTargetAccessor.getAttributeName(); setBidirectionalTargetAccessor(new MethodAttributeAccessor()); getBidirectionalTargetAccessor().setAttributeName(attributeName); } ((MethodAttributeAccessor)getBidirectionalTargetAccessor()).setGetMethodName(methodName); } /** * Sets the name of the method to be used when setting the value of the back pointer * on the target object of this mapping. If the specified method doesn't exist * on the reference class of this mapping, a DescriptorException will be thrown * during initialize. * * @param methodName - the setter method to be used. */ public void setBidirectionalTargetSetMethodName(String methodName) { if (methodName == null) { return; } if(this.bidirectionalTargetAccessor == null) { this.bidirectionalTargetAccessor = new MethodAttributeAccessor(); } // This is done because setting attribute name by defaults create InstanceVariableAttributeAccessor if (!getBidirectionalTargetAccessor().isMethodAttributeAccessor()) { String attributeName = this.bidirectionalTargetAccessor.getAttributeName(); setBidirectionalTargetAccessor(new MethodAttributeAccessor()); getBidirectionalTargetAccessor().setAttributeName(attributeName); } ((MethodAttributeAccessor)getBidirectionalTargetAccessor()).setSetMethodName(methodName); } /** * Gets the name of the method to be used when accessing the value of the * back pointer on the target object of this mapping. */ public String getBidirectionalTargetGetMethodName() { if (getBidirectionalTargetAccessor() == null || !getBidirectionalTargetAccessor().isMethodAttributeAccessor()) { return null; } return ((MethodAttributeAccessor)getBidirectionalTargetAccessor()).getGetMethodName(); } /** * Gets the name of the method to be used when setting the value of the * back pointer on the target object of this mapping. */ public String getBidirectionalTargetSetMethodName() { if (getBidirectionalTargetAccessor() == null || !getBidirectionalTargetAccessor().isMethodAttributeAccessor()) { return null; } return ((MethodAttributeAccessor)getBidirectionalTargetAccessor()).getSetMethodName(); } public ContainerPolicy getBidirectionalTargetContainerPolicy() { return this.bidirectionalTargetContainerPolicy; } public void setBidirectionalTargetContainerPolicy(ContainerPolicy cp) { this.bidirectionalTargetContainerPolicy = cp; } public void setBidirectionalTargetContainerClass(Class cls) { if(this.bidirectionalTargetContainerPolicy == null) { this.bidirectionalTargetContainerPolicy = ContainerPolicy.buildPolicyFor(cls); } else { this.bidirectionalTargetContainerPolicy.setContainerClass(cls); } } /** * Gets the AttributeAccessor that is used to get and set the value of the * container on the target object. */ public AttributeAccessor getBidirectionalTargetAccessor() { return this.bidirectionalTargetAccessor; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy