/******************************************************************************* * Copyright (c) 2006, 2010 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.core.context.java; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jpt.core.context.CollectionMapping; import org.eclipse.jpt.core.context.Embeddable; import org.eclipse.jpt.core.context.PersistentAttribute; import org.eclipse.jpt.core.jpa2.resource.java.JPA2_0; import org.eclipse.jpt.core.resource.java.JavaResourcePersistentAttribute; /** * Context Java persistent attribute (field or property). *

* Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching * stability. It is available at this early stage to solicit feedback from * pioneering adopters on the understanding that any code that uses this API * will almost certainly be broken (repeatedly) as the API evolves. * * @version 2.3 * @since 2.0 */ public interface JavaPersistentAttribute extends PersistentAttribute, JavaJpaContextNode { // ********** mapping ********** JavaAttributeMapping getMapping(); JavaAttributeMapping setMappingKey(String key); // ********** misc ********** /** * Return the "resource" persistent attribute. */ JavaResourcePersistentAttribute getResourcePersistentAttribute(); /** * Return whether the attribute contains the given offset into the text file. */ boolean contains(int offset, CompilationUnit astRoot); /** * Return the embeddable (type mapping) corresponding to the persistent * attribute's type. Return null if it is not found. */ Embeddable getEmbeddable(); /** * Return whether the attribute is a field (as opposed to a property). */ boolean isField(); /** * Return whether the attribute is a property (as opposed to a field). */ boolean isProperty(); /** * Return whether the attribute is 'public', which is problematic for fields. */ boolean isPublic(); /** * Return whether the attribute is 'final', which is problematic. */ boolean isFinal(); // ********** type ********** /** * Return whether the attribute's type is valid for a default basic mapping. */ boolean typeIsBasic(); /** * Return the attribute's type name if it is valid as a target type * (i.e. the type is neither an array nor a "container"). */ String getSingleReferenceTargetTypeName(); /** * If the attribute's type is an appropriate "container" type, * return the type parameter that can be used as a target type. * Return null if the attribute is not a container or if the type * parameter is not valid as a target type (i.e. it is either * an array or a "container"). */ String getMultiReferenceTargetTypeName(); /** * If the attribute's type is a map type, * return the type parameter that can be used as a key type. * Return null if the attribute is not a map or if the type * parameter is not valid as a key type (i.e. it is either * an array or a "container"). */ String getMultiReferenceMapKeyTypeName(); /** * Return the JpaContainer that corresponds to this attribute's type. * Return a null implementation if the type is not a container (map or collection) */ JpaContainerDefinition getJpaContainerDefinition(); // ********** JPA container ********** /** * JPA container definition interface (and null implementation) */ interface JpaContainerDefinition { String getTypeName(); boolean isContainer(); boolean isMap(); String getMultiReferenceTargetTypeName(JavaResourcePersistentAttribute resourcePersistentAttribute); String getMultiReferenceMapKeyTypeName(JavaResourcePersistentAttribute resourcePersistentAttribute); String getMetamodelContainerFieldTypeName(); String getMetamodelContainerFieldMapKeyTypeName(CollectionMapping mapping); final class Null implements JpaContainerDefinition { public static final JpaContainerDefinition INSTANCE = new Null(); public static JpaContainerDefinition instance() { return INSTANCE; } // ensure single instance private Null() { super(); } public String getTypeName() { return null; } public boolean isContainer() { return false; } public boolean isMap() { return false; } public String getMultiReferenceTargetTypeName(JavaResourcePersistentAttribute resourcePersistentAttribute) { return null; } public String getMultiReferenceMapKeyTypeName(JavaResourcePersistentAttribute resourcePersistentAttribute) { return null; } public String getMetamodelContainerFieldTypeName() { return JPA2_0.COLLECTION_ATTRIBUTE; } public String getMetamodelContainerFieldMapKeyTypeName(CollectionMapping mapping) { return null; } @Override public String toString() { return JpaContainerDefinition.class.getSimpleName() + ".Null"; //$NON-NLS-1$ } } } }