org.eclipse.persistence.internal.jpa.weaving.AttributeDetails Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2023 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
package org.eclipse.persistence.internal.jpa.weaving;
import org.eclipse.persistence.asm.Type;
import org.eclipse.persistence.mappings.DatabaseMapping;
/**
* INTERNAL:
* Internal helper class that holds details of a persistent attribute.
* Used by {@link ClassDetails}
*/
public class AttributeDetails {
/** The name of this attribute. */
protected String attributeName;
protected String referenceClassName;
protected Type referenceClassType;
protected boolean weaveValueHolders = false;
// Determine if we need to weave field level value holders as transient.
// With JPA 2.0 a mapping may have PROPERTY access when the owning class
// itself has FIELD access, meaning we want to avoid having the class
// process a weaved value holder field into a descriptor mapping.
protected boolean weaveTransientFieldValueHolders;
protected DatabaseMapping mapping;
protected String getterMethodName;
protected String setterMethodName;
protected boolean attributeOnSuperClass = false;
/** Determines if the attribute has a real field. */
protected boolean hasField = false;
/** Determines if the attribute has a real field. */
protected Type declaringType;
/** Caches the set method signature. */
protected String setMethodSignature;
protected boolean isVirtualProperty = false;
public AttributeDetails(String attributeName, DatabaseMapping mapping) {
this.attributeName = attributeName;
this.mapping = mapping;
}
public String getAttributeName() {
return this.attributeName;
}
public DatabaseMapping getMapping() {
return mapping;
}
public String getGetterMethodName() {
return getterMethodName;
}
public String getSetterMethodSignature() {
if (setMethodSignature == null) {
if (isVirtualProperty){
setMethodSignature = ClassWeaver.VIRTUAL_SETTER_SIGNATURE;
} else {
setMethodSignature = "(" + getReferenceClassType().getDescriptor() + ")V";
}
}
return setMethodSignature;
}
public String getSetterMethodName() {
return setterMethodName;
}
public String getReferenceClassName() {
return referenceClassName;
}
public void setReferenceClassName(String className) {
referenceClassName = className;
}
public Type getDeclaringType() {
return declaringType;
}
public void setDeclaringType(Type declaringType) {
this.declaringType = declaringType;
}
public Type getReferenceClassType() {
return referenceClassType;
}
public void setReferenceClassType(Type classType){
referenceClassType = classType;
}
public void setAttributeOnSuperClass(boolean onSuperClass) {
attributeOnSuperClass = onSuperClass;
}
public boolean isVirtualProperty() {
return isVirtualProperty;
}
public void setVirtualProperty(boolean isVirtualProperty) {
this.isVirtualProperty = isVirtualProperty;
}
public boolean isAttributeOnSuperClass() {
return attributeOnSuperClass;
}
public void setWeaveTransientFieldValueHolders() {
weaveTransientFieldValueHolders = true;
}
public boolean weaveTransientFieldValueHolders() {
return weaveTransientFieldValueHolders;
}
public boolean weaveValueHolders() {
return weaveValueHolders;
}
public void weaveVH(boolean weaveValueHolders, DatabaseMapping mapping) {
this.weaveValueHolders = weaveValueHolders;
}
public void setGetterMethodName(String getMethodName){
this.getterMethodName = getMethodName;
}
public void setSetterMethodName(String setMethodName){
this.setterMethodName = setMethodName;
}
/**
* Set if the attribute has a real field.
* This allows properties to still be weaved at the field level.
*/
public void setHasField(boolean hasField) {
this.hasField = hasField;
}
/**
* Return if the attribute has a real field.
* This allows properties to still be weaved at the field level.
*/
public boolean hasField() {
return hasField;
}
public boolean isCollectionMapping() {
return mapping.isCollectionMapping();
}
public boolean isMappedWithAttributeAccess(){
return getterMethodName == null;
}
public boolean isOneToOneMapping() {
return mapping.isOneToOneMapping();
}
public boolean isLazy() {
return mapping.isLazy();
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer(attributeName);
if (referenceClassName != null) {
sb.append("[");
sb.append(referenceClassName);
sb.append("]");
}
sb.append(" weaveVH: ");
if (weaveValueHolders()) {
sb.append("true");
}
else {
sb.append("false");
}
sb.append(" CM: ");
if (isCollectionMapping()) {
sb.append("true");
}
else {
sb.append("false");
}
return sb.toString();
}
}