You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/06/23 23:04:35 UTC
svn commit: r787832 [6/6] - in /openjpa/trunk: ./
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/
openjpa-persistence-jdbc/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/
openjpa-persistence-jdbc/src/test/java/...
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Types.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Types.java?rev=787832&r1=787831&r2=787832&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Types.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Types.java Tue Jun 23 21:04:32 2009
@@ -19,37 +19,22 @@
package org.apache.openjpa.persistence.meta;
-import java.lang.reflect.Field;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Locale;
-
-import javax.persistence.metamodel.AbstractCollection;
-import javax.persistence.metamodel.Attribute;
-import javax.persistence.metamodel.Collection;
+import javax.persistence.metamodel.EmbeddableType;
+import javax.persistence.metamodel.EntityType;
import javax.persistence.metamodel.IdentifiableType;
-import javax.persistence.metamodel.List;
-import javax.persistence.metamodel.ManagedType;
-import javax.persistence.metamodel.Map;
-import javax.persistence.metamodel.MappedSuperclass;
-import javax.persistence.metamodel.Member;
-import javax.persistence.metamodel.Set;
+import javax.persistence.metamodel.MappedSuperclassType;
+import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.Type;
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
-import org.apache.openjpa.meta.JavaTypes;
+import org.apache.openjpa.util.OpenJPAId;
/**
- * Type according to JPA 2.0.
+ * Persistent Type according to JPA 2.0.
*
- * Implemented as a thin adapter to OpenJPA metadata system.
+ * Implemented as a thin adapter to OpenJPA metadata system. Mostly immutable.
*
* @author Pinaki Poddar
*
@@ -60,11 +45,11 @@
protected static Localizer _loc = Localizer.forPackage(Types.class);
/**
- * Mirrors a concrete Java type X.
+ * Mirrors a Java class.
*
* @param <X> Java class
*/
- private static abstract class BaseType<X> implements Type<X> {
+ static abstract class BaseType<X> implements Type<X> {
public final Class<X> cls;
protected BaseType(Class<X> cls) {
@@ -90,396 +75,69 @@
}
}
- public static abstract class Managed<X> extends BaseType<X> implements
- ManagedType<X> {
-
- public final MetamodelImpl model;
- public final ClassMetaData meta;
-
- private java.util.Map<FieldMetaData, Attribute<? super X, ?>> attrs =
- new HashMap<FieldMetaData, Attribute<? super X, ?>>();
-
- private java.util.Map<FieldMetaData, AbstractCollection<? super X,?,?>>
- colls = new HashMap<FieldMetaData, AbstractCollection<? super X,?,?>>();
-
- public Managed(ClassMetaData meta, MetamodelImpl model) {
- super((Class<X>)meta.getDescribedType());
- this.model = model;
- this.meta = meta;
- FieldMetaData[] fmds = meta.getFields();
- for (FieldMetaData f : fmds) {
- int decCode = f.getDeclaredTypeCode();
- switch (decCode) {
- case JavaTypes.BOOLEAN:
- case JavaTypes.BOOLEAN_OBJ:
- attrs.put(f, new Members.Attribute<X, Boolean>(this, f));
- break;
- case JavaTypes.BYTE:
- case JavaTypes.BYTE_OBJ:
- attrs.put(f, new Members.Attribute<X, Byte>(this, f));
- break;
- case JavaTypes.CHAR:
- case JavaTypes.CHAR_OBJ:
- attrs.put(f, new Members.Attribute<X, Character>(this, f));
- break;
- case JavaTypes.DOUBLE:
- case JavaTypes.DOUBLE_OBJ:
- attrs.put(f, new Members.Attribute<X, Double>(this, f));
- break;
- case JavaTypes.FLOAT:
- case JavaTypes.FLOAT_OBJ:
- attrs.put(f, new Members.Attribute<X, Float>(this, f));
- break;
- case JavaTypes.INT:
- case JavaTypes.INT_OBJ:
- attrs.put(f, new Members.Attribute<X, Integer>(this, f));
- break;
- case JavaTypes.LONG:
- case JavaTypes.LONG_OBJ:
- attrs.put(f, new Members.Attribute<X, Long>(this, f));
- break;
- case JavaTypes.SHORT:
- case JavaTypes.SHORT_OBJ:
- attrs.put(f, new Members.Attribute<X, Short>(this, f));
- break;
- case JavaTypes.STRING:
- attrs.put(f, new Members.Attribute<X, String>(this, f));
- break;
- case JavaTypes.NUMBER:
- attrs.put(f, new Members.Attribute<X, Number>(this, f));
- break;
- case JavaTypes.DATE:
- attrs.put(f, new Members.Attribute<X, Date>(this, f));
- break;
- case JavaTypes.CALENDAR:
- attrs.put(f, new Members.Attribute<X, Calendar>(this, f));
- break;
- case JavaTypes.BIGDECIMAL:
- attrs.put(f, new Members.Attribute<X, BigDecimal>(this, f));
- break;
- case JavaTypes.BIGINTEGER:
- attrs.put(f, new Members.Attribute<X, BigInteger>(this, f));
- break;
- case JavaTypes.LOCALE:
- attrs.put(f, new Members.Attribute<X, Locale>(this, f));
- break;
- case JavaTypes.OBJECT:
- case JavaTypes.OID:
- case JavaTypes.PC:
- attrs.put(f, new Members.Attribute(this, f));
- break;
- case JavaTypes.ARRAY:
- case JavaTypes.COLLECTION:
- switch (model.getCollectionType(f.getDeclaredType())) {
- case COLLECTION:
- colls.put(f, new Members.Collection(this, f));
- break;
- case LIST:
- colls.put(f, new Members.List(this, f));
- break;
- case SET:
- colls.put(f, new Members.Set(this, f));
- break;
- }
- break;
- case JavaTypes.MAP:
- colls.put(f, new Members.Map(this, f));
- break;
- default:
- throw new IllegalStateException(_loc.get(
- "field-unrecognized", f.getFullName(false), decCode)
- .getMessage());
- }
- // TODO: Account for the following codes
- // case PC_UNTYPED = 27;
- // case INPUT_STREAM = 30;
- // case INPUT_READER = 31;
- }
- }
-
- public Member<? super X,?> getMember(Field field) {
- return getMember(field.getName());
- }
-
- public Member<? super X,?> getMember(String name) {
- FieldMetaData fmd = meta.getField(name);
- if (fmd == null) {
- throw new IllegalArgumentException(_loc.get("field-missing",
- name, meta.getDescribedType(),
- Arrays.toString(meta.getFieldNames())).getMessage());
- }
- if (attrs.containsKey(fmd))
- return attrs.get(fmd);
- if (colls.containsKey(fmd))
- return colls.get(fmd);
- throw new IllegalArgumentException(_loc.get("field-missing",
- name, meta.getDescribedType(),
- Arrays.toString(meta.getFieldNames())).getMessage());
- }
-
- public <Y> Attribute<? super X, Y> getAttribute(String name,
- Class<Y> type) {
- return (Attribute<? super X, Y>) attrs.get(getField(name, type));
- }
-
- public <Y> Attribute<X, Y> getDeclaredAttribute(String name,
- Class<Y> type) {
- return (Attribute<X, Y>) attrs.get(getField(name, type, true));
- }
-
- public <E> Collection<? super X, E> getCollection(String name,
- Class<E> elementType) {
- return getCollectionMember(name, java.util.Collection.class,
- elementType, false);
- }
-
- public <E> Set<? super X, E> getSet(String name, Class<E> elementType) {
- return getCollectionMember(name, java.util.Set.class, elementType,
- false);
- }
-
- public <E> List<? super X, E> getList(String name,
- Class<E> elementType) {
- return getCollectionMember(name, java.util.List.class, elementType,
- false);
- }
-
- public <K, V> Map<? super X, K, V> getMap(String name,
- Class<K> keyType, Class<V> valueType) {
- return getMapMember(name, valueType, keyType, false);
- }
-
- public <E> Collection<X, E> getDeclaredCollection(String name,
- Class<E> elementType) {
- return getCollectionMember(name, java.util.Collection.class,
- elementType, true);
- }
-
- public <E> Set<X, E> getDeclaredSet(String name, Class<E> elementType) {
- return getCollectionMember(name, java.util.Set.class, elementType,
- true);
- }
-
- public <E> List<X, E> getDeclaredList(String name,
- Class<E> elementType) {
- return getCollectionMember(name, java.util.List.class, elementType,
- true);
- }
-
- public <K, V> Map<X, K, V> getDeclaredMap(String name,
- Class<K> keyType, Class<V> valueType) {
- return getMapMember(name, valueType, keyType, true);
- }
-
- public java.util.Set<Attribute<? super X, ?>> getAttributes() {
- return collect(attrs.values());
- }
-
- public java.util.Set<Attribute<X, ?>> getDeclaredAttributes() {
- return filter(collect(attrs.values()));
- }
-
- public java.util.Set<AbstractCollection<? super X, ?, ?>>
- getCollections() {
- return collect(colls.values());
- }
-
- public java.util.Set<AbstractCollection<X, ?, ?>>
- getDeclaredCollections() {
- return filter(collect(colls.values()));
- }
-
- <T> java.util.Set<T> collect(java.util.Collection<T> values) {
- java.util.Set<T> result = new HashSet<T>();
- result.addAll(values);
- return result;
- }
-
- <T extends Member<X, ?>> java.util.Set<T> filter(
- java.util.Set<? extends Member<? super X, ?>> values) {
- java.util.Set<T> result = new HashSet<T>();
- for (Member<? super X, ?> m : values) {
- if (isDeclared(m))
- result.add((T) m);
- }
- return result;
- }
-
- // relaxed-type: gets the model elements by String arguments.
-
- public Attribute<? super X, ?> getAttribute(String name) {
- return getAttribute(name, null);
- }
-
- public Attribute<X, ?> getDeclaredAttribute(String name) {
- return getDeclaredAttribute(name, null);
- }
-
- public Collection<? super X, ?> getCollection(String name) {
- return getCollectionMember(name, java.util.Collection.class, null,
- false);
- }
-
- public Set<? super X, ?> getSet(String name) {
- return getCollectionMember(name, java.util.Set.class, null, false);
- }
-
- public List<? super X, ?> getList(String name) {
- return getCollectionMember(name, java.util.List.class, null, false);
- }
-
- public Map<? super X, ?, ?> getMap(String name) {
- return getMapMember(name, null, null, false);
- }
-
- public Collection<X, ?> getDeclaredCollection(String name) {
- return getCollectionMember(name, java.util.Collection.class, null,
- true);
- }
-
- public Set<X, ?> getDeclaredSet(String name) {
- return getCollectionMember(name, java.util.Set.class, null, true);
- }
-
- public List<X, ?> getDeclaredList(String name) {
- return getCollectionMember(name, java.util.List.class, null, true);
- }
-
- public Map<X, ?, ?> getDeclaredMap(String name) {
- return getMapMember(name, null, null, true);
- }
-
- public BindableType getBindableType() {
- return BindableType.MANAGED_TYPE;
- }
-
- // =====================================================================
- // Support functions
- // =====================================================================
-
- FieldMetaData getField(String name) {
- return getField(name, null, null, null, false);
- }
-
- FieldMetaData getField(String name, Class type) {
- return getField(name, type, null, null, false);
- }
-
- FieldMetaData getField(String name, Class type, boolean declaredOnly) {
- return getField(name, type, null, null, declaredOnly);
- }
-
+ /**
+ * Instances of the type ManagedType represent entity, mapped
+ * superclass, and embeddable types.
+ *
+ * @param <X> The represented type.
+ */
+// public static abstract class Managed<X> extends AbstractManagedType<X> implements
+// ManagedType<X> {
/**
- * Get the field of the given name after validating the conditions. null
- * value on any condition implies not to validate.
- *
- * @param name simple name i.e. without the class name
- * @param type the expected type of the field.
- * @param element the expected element type of the field.
- * @param key the expected key type of the field.
- * @param declared is this field declared in this receiver
- *
- * @exception IllegalArgumentException if any of the validation fails.
+ * Construct a managed type. The supplied metadata must be resolved i.e.
+ * all its fields populated. Because this receiver will populate its
+ * attributes corresponding to the available fields of the metadata.
*
*/
- FieldMetaData getField(String name, Class<?> type, Class<?> elementType,
- Class<?> keyType, boolean decl) {
- FieldMetaData fmd =
- decl ? meta.getDeclaredField(name) : meta.getField(name);
-
- if (fmd == null) {
- if (decl && meta.getField(name) != null) {
- throw new IllegalArgumentException(_loc.get(
- "field-not-decl", name, cls,
- meta.getField(name).getDeclaringType()).getMessage());
- } else {
- throw new IllegalArgumentException(_loc.get(
- "field-missing", name, meta.getDescribedType(),
- Arrays.toString(meta.getFieldNames())).getMessage());
- }
- }
- assertType("field-type-mismatch", fmd, fmd.getDeclaredType(), type);
- assertType("field-element-type-mismatch", fmd, fmd.getElement()
- .getDeclaredType(), elementType);
- assertType("field-key-type-mismatch", fmd, fmd.getKey()
- .getDeclaredType(), keyType);
- return fmd;
- }
-
- void assertType(String msg, FieldMetaData fmd, Class<?> actual,
- Class<?> expected) {
- if (expected != null && !expected.isAssignableFrom(actual)) {
- if (wrap(expected) != wrap(actual)) {
- throw new IllegalArgumentException(_loc.get(msg, fmd.getName(),
- actual, expected).getMessage());
- }
- }
- }
-
- Class<?> wrap(Class<?> c) {
- if (c.isPrimitive()) {
- if (c == int.class) return Integer.class;
- if (c == long.class) return Long.class;
- if (c == boolean.class) return Boolean.class;
- if (c == byte.class) return Byte.class;
- if (c == char.class) return Character.class;
- if (c == double.class) return Double.class;
- if (c == float.class) return Float.class;
- if (c == short.class) return Short.class;
- }
- return c;
- }
+// public Managed(ClassMetaData meta, MetamodelImpl model) {
+// super(meta, model);
+// }
+
+ /**
+ * Return the bindable type of the represented object.
+ * @return bindable type
+ */
+// public BindableType getBindableType() {
+// return BindableType.ENTITY_TYPE;
+// }
- boolean isDeclared(Member<?,?> member) {
- return member.getDeclaringType() == this;
- }
-
- <T extends AbstractCollection, C,E> T getCollectionMember(
- String name, Class<C> target, Class<E> eType, boolean dec) {
- FieldMetaData fmd = getField(name, target, eType, null, dec);
- return (T) colls.get(fmd);
- }
-
- <T extends Map, K, V> T getMapMember(String name,
- Class<V> vType, Class<K> kType, boolean dec) {
- FieldMetaData fmd = getField(name, java.util.Map.class, vType,
- kType, dec);
- return (T) colls.get(fmd);
- }
-
- }
+ /**
+ * Return the Java type of the represented object.
+ * If the bindable type of the object is PLURAL_ATTRIBUTE,
+ * the Java element type is returned. If the bindable type is
+ * SINGULAR_ATTRIBUTE or ENTITY_TYPE, the Java type of the
+ * represented entity or attribute is returned.
+ * @return Java type
+ */
+// public Class<X> getBindableJavaType() {
+// throw new AbstractMethodError();
+// }
+//
+// }
- public static abstract class Identifiable<X> extends Managed<X> implements
- IdentifiableType<X> {
+ public static abstract class Identifiable<X> extends AbstractManagedType<X>
+ implements IdentifiableType<X> {
public Identifiable(ClassMetaData meta, MetamodelImpl model) {
super(meta, model);
}
- public <Y> Attribute<? super X, Y> getId(Class<Y> type) {
- FieldMetaData[] pks = meta.getPrimaryKeyFields();
- Class<?> idType = meta.getObjectIdType();
- return (Attribute<? super X, Y>) getAttribute(pks[0].getName(),
- idType);
- }
-
- public <Y> Attribute<? super X, Y> getVersion(Class<Y> type) {
- FieldMetaData vfmd = meta.getVersionField();
- return (Attribute<? super X, Y>) getAttribute(vfmd.getName());
+ /**
+ * Whether or not the identifiable type has a version attribute.
+ * @return boolean indicating whether or not the identifiable
+ * type has a version attribute
+ */
+ public boolean hasVersionAttribute() {
+ return meta.getVersionField() != null;
}
- public <Y> Attribute<X, Y> getDeclaredId(Class<Y> type) {
- FieldMetaData[] pks = meta.getPrimaryKeyFields();
- Class<?> idType = meta.getObjectIdType();
- return (Attribute<X, Y>) getDeclaredAttribute(pks[0].getName(),
- idType);
- }
-
- public <Y> Attribute<X, Y> getDeclaredVersion(Class<Y> type) {
- FieldMetaData vfmd = meta.getVersionField();
- return (Attribute<X, Y>) getDeclaredAttribute(vfmd.getName());
- }
+ /**
+ * Return the identifiable type that corresponds to the most
+ * specific mapped superclass or entity extended by the entity
+ * or mapped superclass.
+ * @return supertype of identifiable type or null if no such supertype
+ */
public IdentifiableType<? super X> getSupertype() {
return (IdentifiableType<? super X>) model.type(meta
.getPCSuperclassMetaData().getDescribedType());
@@ -488,15 +146,31 @@
public boolean hasIdAttribute() {
return meta.getIdentityType() == ClassMetaData.ID_APPLICATION;
}
+
+ /**
+ * Whether or not the identifiable type has an id attribute.
+ * Returns true for a simple id or embedded id; returns false
+ * for an idclass.
+ * @return boolean indicating whether or not the identifiable
+ * type has a single id attribute
+ */
+ public boolean hasSingleIdAttribute() {
+ return meta.getPrimaryKeyFields().length == 1;
+ }
+ /**
+ * Return the type that represents the type of the id.
+ * @return type of id
+ */
public Type<?> getIdType() {
- Class<?> idType = meta.getObjectIdType();
- return model.type(idType);
+ Class<?> idType = hasSingleIdAttribute()
+ ? meta.getPrimaryKeyFields()[0].getDeclaredType() : meta.getObjectIdType();
+ return model.getType(idType);
}
}
- public static class Embeddable<X> extends Managed<X>
- implements javax.persistence.metamodel.Embeddable<X> {
+ public static class Embeddable<X> extends AbstractManagedType<X>
+ implements EmbeddableType<X> {
public Embeddable(ClassMetaData meta, MetamodelImpl model) {
super(meta, model);
}
@@ -507,7 +181,7 @@
}
public static class MappedSuper<X> extends Identifiable<X> implements
- MappedSuperclass<X> {
+ MappedSuperclassType<X> {
public MappedSuper(ClassMetaData meta, MetamodelImpl model) {
super(meta, model);
@@ -520,7 +194,7 @@
}
public static class Entity<X> extends Identifiable<X>
- implements javax.persistence.metamodel.Entity<X> {
+ implements EntityType<X> {
public Entity(ClassMetaData meta, MetamodelImpl model) {
super(meta, model);
@@ -533,5 +207,24 @@
public String getName() {
return meta.getTypeAlias();
}
- }
+ /**
+ * Return the bindable type of the represented object.
+ * @return bindable type
+ */
+ public BindableType getBindableType() {
+ return BindableType.ENTITY_TYPE;
+ }
+
+ /**
+ * Return the Java type of the represented object.
+ * If the bindable type of the object is PLURAL_ATTRIBUTE,
+ * the Java element type is returned. If the bindable type is
+ * SINGULAR_ATTRIBUTE or ENTITY_TYPE, the Java type of the
+ * represented entity or attribute is returned.
+ * @return Java type
+ */
+ public Class<X> getBindableJavaType() {
+ return getJavaType();
+ }
+ }
}
Modified: openjpa/trunk/openjpa-project/checkstyle.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/checkstyle.xml?rev=787832&r1=787831&r2=787832&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/checkstyle.xml (original)
+++ openjpa/trunk/openjpa-project/checkstyle.xml Tue Jun 23 21:04:32 2009
@@ -30,6 +30,8 @@
<module name="Checker">
<module name="NewlineAtEndOfFile"/>
<module name="TreeWalker">
- <module name="LineLength"/>
+ <module name="LineLength">
+ <property name="max" value="120"/>
+ </module>
</module>
</module>
Modified: openjpa/trunk/pom.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/pom.xml?rev=787832&r1=787831&r2=787832&view=diff
==============================================================================
--- openjpa/trunk/pom.xml (original)
+++ openjpa/trunk/pom.xml Tue Jun 23 21:04:32 2009
@@ -475,7 +475,7 @@
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_2.0_spec</artifactId>
- <version>1.0-EA2-SNAPSHOT</version>
+ <version>1.0-EA3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>