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

org.hibernate.metamodel.internal.BaseAttributeMetadata Maven / Gradle / Ivy

There is a newer version: 7.0.0.Beta1
Show newest version
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
 */
package org.hibernate.metamodel.internal;

import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;

import org.hibernate.mapping.Property;
import org.hibernate.metamodel.AttributeClassification;
import org.hibernate.metamodel.model.domain.ManagedDomainType;
import org.hibernate.metamodel.model.domain.internal.MapMember;

/**
 * @author Steve Ebersole
 */
public abstract class BaseAttributeMetadata implements AttributeMetadata {
	private final Property propertyMapping;
	private final ManagedDomainType ownerType;
	private final Member member;
	private final Class javaType;
	private final AttributeClassification attributeClassification;

	protected BaseAttributeMetadata(
			Property propertyMapping,
			ManagedDomainType ownerType,
			Member member,
			AttributeClassification attributeClassification,
			MetadataContext metadataContext) {
		this.propertyMapping = propertyMapping;
		this.ownerType = ownerType;
		this.member = member;
		this.attributeClassification = attributeClassification;

		final Class declaredType;

		if ( member == null ) {
			// assume we have a MAP entity-mode "class"
			declaredType = propertyMapping.getType().getReturnedClass();
		}
		else if ( member instanceof Field ) {
			declaredType = ( (Field) member ).getType();
		}
		else if ( member instanceof Method ) {
			declaredType = ( (Method) member ).getReturnType();
		}
		else if ( member instanceof MapMember ) {
			declaredType = ( (MapMember) member ).getType();
		}
		else {
			throw new IllegalArgumentException( "Cannot determine java-type from given member [" + member + "]" );
		}
		//noinspection unchecked
		this.javaType = AttributeFactory.accountForPrimitiveTypes( declaredType, metadataContext );
	}

	public String getName() {
		return propertyMapping.getName();
	}

	public Member getMember() {
		return member;
	}

	public String getMemberDescription() {
		return determineMemberDescription( getMember() );
	}

	public String determineMemberDescription(Member member) {
		return member.getDeclaringClass().getName() + '#' + member.getName();
	}

	public Class getJavaType() {
		return javaType;
	}

	@Override
	public AttributeClassification getAttributeClassification() {
		return attributeClassification;
	}

	public ManagedDomainType getOwnerType() {
		return ownerType;
	}

	public boolean isPlural() {
		return propertyMapping.getType().isCollectionType();
	}

	public Property getPropertyMapping() {
		return propertyMapping;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy