Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java Thu May 21 05:05:39 2009 @@ -25,6 +25,8 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Expression; +import javax.persistence.criteria.ListJoin; +import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.QueryBuilder; import javax.persistence.criteria.QueryBuilder.Trimspec; @@ -34,14 +36,23 @@ import org.apache.openjpa.kernel.exps.Literal; import org.apache.openjpa.kernel.exps.Value; import org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder; +import org.apache.openjpa.meta.ClassMetaData; import org.apache.openjpa.persistence.meta.MetamodelImpl; public class Expressions { + /** + * Convert the given Criteria expression to a corresponding kernel value + * using the given ExpressionFactory. + * Also sets the alias of the resulting value. + */ static Value toValue(ExpressionImpl<?> e, ExpressionFactory factory, MetamodelImpl model, CriteriaQuery q) { - return (e == null ? factory.getNull() : - e.toValue(factory, model, q)); + Value v = e == null ? factory.getNull() : e.toValue(factory, model, q); + v.setImplicitType(e.getJavaType()); + v.setAlias(e.getAlias()); + + return v; } /** @@ -197,6 +208,20 @@ return factory.size(Expressions.toValue(e, factory, model, q)); } } + + public static class Type<X> + extends UnaryFunctionalExpression<Class<? extends X>> { + public Type(PathImpl<?, X> path) { + super((Class<Class<? extends X>>) path.getJavaType().getClass(), + path); + } + + @Override + public Value toValue(ExpressionFactory factory, MetamodelImpl model, + CriteriaQuery q) { + return factory.type(Expressions.toValue(e, factory, model, q)); + } + } public static class Cast<B> extends UnaryFunctionalExpression<B> { Class<B> b; @@ -488,32 +513,25 @@ this(x, new Constant<Object>(Object.class, y)); } - public Equal negate() { - negate = true; - return this; - } - @Override org.apache.openjpa.kernel.exps.Expression toKernelExpression( ExpressionFactory factory, MetamodelImpl model, CriteriaQuery q) { boolean isTypeExpr = false; Value val1 = Expressions.toValue(e1, factory, model, q); Value val2 = Expressions.toValue(e2, factory, model, q); - if (e1 instanceof PathImpl) { - PathImpl path = (PathImpl)e1; - isTypeExpr = path.isTypeExpr(); - if (isTypeExpr) { - ((Constant)e2).setTypeLit(isTypeExpr); - val2 = Expressions.toValue(e2, factory, model, q); - Class clzz = (Class)((Literal)val2).getValue(); - val2.setMetaData(((Types.Managed)model.type(clzz)).meta); - } - } +// if (e1 instanceof TypePathImpl) { +// PathImpl path = (PathImpl)e1; +// isTypeExpr = path.isTypeExpr(); +// if (isTypeExpr) { +// ((Constant)e2).setTypeLit(isTypeExpr); +// val2 = Expressions.toValue(e2, factory, model, q); +// Class clzz = (Class)((Literal)val2).getValue(); +// val2.setMetaData(((Types.Managed)model.type(clzz)).meta); +// } +// } ((CriteriaQueryImpl)q).setImplicitTypes(val1, val2, null); - if (!negate) - return factory.equal(val1, val2); - else - return factory.notEqual(val1, val2); + return isNegated() ? factory.notEqual(val1, val2) + : factory.equal(val1, val2); } } @@ -598,15 +616,13 @@ super(new GreaterThanEqual(v,x), new LessThanEqual(v,y)); } - public Between(Expression<? extends Y> v, Y x, - Y y) { + public Between(Expression<? extends Y> v, Y x, Y y) { this(v, new Constant<Y>(x), new Constant<Y>(y)); } } public static class Constant<X> extends ExpressionImpl<X> { public final Object arg; - private boolean typeLit; public Constant(Class<X> t, X x) { super(t); this.arg = x; @@ -616,44 +632,75 @@ this((Class<X>)x.getClass(),x); } - public void setTypeLit(boolean typeLit) { - this.typeLit = typeLit; + @Override + public Value toValue(ExpressionFactory factory, MetamodelImpl model, + CriteriaQuery q) { + int literalType = Literal.TYPE_UNKNOWN; + if (arg != null) { + Class<?> literalClass = arg.getClass(); + if (Number.class.isAssignableFrom(literalClass)) + literalType = Literal.TYPE_NUMBER; + else if (Boolean.class.isAssignableFrom(literalClass)) + literalType = Literal.TYPE_BOOLEAN; + else if (String.class.isAssignableFrom(literalClass)) + literalType = Literal.TYPE_STRING; + else if (Enum.class.isAssignableFrom(literalClass)) + literalType = Literal.TYPE_ENUM; + else if (Class.class.isAssignableFrom(literalClass)) { + literalType = Literal.TYPE_CLASS; + Literal lit = factory.newTypeLiteral(arg, + Literal.TYPE_CLASS); + lit.setMetaData(model.repos.getMetaData((Class<?>)arg, + null, true)); + return lit; + } + + } + return factory.newLiteral(arg, literalType); + } + } + + public static class TypeConstant<X> extends Constant<X> { + public TypeConstant(X x) { + super((Class<X>)x.getClass(),x); } @Override public Value toValue(ExpressionFactory factory, MetamodelImpl model, CriteriaQuery q) { - if (!typeLit) - return factory.newLiteral(arg, 1); - else - return factory.newTypeLiteral(arg, Literal.TYPE_CLASS); + return factory.newTypeLiteral(arg, Literal.TYPE_CLASS); } - } public static class IsEmpty extends PredicateImpl { ExpressionImpl<?> collection; - boolean negate; public IsEmpty(Expression<?> collection) { super(); this.collection = (ExpressionImpl<?>)collection; } - public IsEmpty negate() { - negate = true; - return this; - } - @Override public org.apache.openjpa.kernel.exps.Expression toKernelExpression( - ExpressionFactory factory, MetamodelImpl model, - CriteriaQuery q) { - if (!negate) - return factory.isEmpty( - Expressions.toValue(collection, factory, model, q)); - else - return factory.isNotEmpty( - Expressions.toValue(collection, factory, model, q)); + ExpressionFactory factory, MetamodelImpl model, CriteriaQuery q) { + Value val = Expressions.toValue(collection, factory, model, q); + return (isNegated()) + ? factory.isNotEmpty(val) : factory.isEmpty(val); + } + } + + public static class Index extends UnaryFunctionalExpression<Integer> { + public Index(Joins.List<?,?> e) { + super(Integer.class, e); + } + + @Override + public org.apache.openjpa.kernel.exps.Value toValue( + ExpressionFactory factory, MetamodelImpl model, CriteriaQuery q) { + Value v = Expressions.toValue(e, factory, model, q); + ClassMetaData meta = ((PathImpl)e)._member.fmd.getElement() + .getTypeMetaData(); + v.setMetaData(meta); + return factory.index(v); } } @@ -924,7 +971,7 @@ private Expression<? extends R> otherwise; - private Expression<? extends R> caseOperand; + private Expression<C> caseOperand; public SimpleCase() { super(null); @@ -934,11 +981,12 @@ super(cls); } - public SimpleCase(Expression<? extends R> expr) { + public SimpleCase(Expression<C> expr) { super(null); this.caseOperand = expr; } - public Expression getExpression() { + + public Expression<C> getExpression() { return caseOperand; }
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java Thu May 21 05:05:39 2009 @@ -19,6 +19,8 @@ package org.apache.openjpa.persistence.criteria; +import java.util.HashSet; + import javax.persistence.criteria.CollectionJoin; import javax.persistence.criteria.Fetch; import javax.persistence.criteria.From; @@ -33,9 +35,12 @@ import javax.persistence.metamodel.List; import javax.persistence.metamodel.ManagedType; import javax.persistence.metamodel.Map; +import javax.persistence.metamodel.Member; import javax.persistence.metamodel.Set; import org.apache.openjpa.persistence.criteria.PathImpl; +import org.apache.openjpa.persistence.meta.Members; +import org.apache.openjpa.persistence.meta.Types; /** * Represents a bound type, usually an entity that appears in the from clause, @@ -47,167 +52,168 @@ * @param <X> the type represented by this receiver */ -public class FromImpl<Z,X> extends PathImpl<X> implements From<Z,X> { +public class FromImpl<Z,X> extends PathImpl<Z,X> implements From<Z,X> { private java.util.Set<Join<X, ?>> _joins; private java.util.Set<Fetch<X, ?>> _fetches; + private Types.Managed<X> type; /** * Supply the non-null managed type. */ - public FromImpl(ManagedType<X> type) { + protected FromImpl(Types.Managed<X> type) { super(type.getJavaType()); + this.type = type; + } + + protected FromImpl(PathImpl<?,Z> parent, Members.Member<? super Z, ?> m, + Class<X> x) { + super(parent, m, x); } /** + * Create a path from the given parent ending at the given member. + */ +// protected FromImpl(PathImpl<?,Z> parent, Members.Member<? super Z, X> m) { +// super(parent, m); +// } + + /** * Return the joins that have been made from this type. - * @return joins made from this type */ public java.util.Set<Join<X, ?>> getJoins() { - throw new AbstractMethodError(); + return _joins; } /** - * Join to the specified attribute using an inner join. - * @param attribute target of the join - * @return the resulting join + * Join to the given attribute using an inner join. */ public <Y> Join<X, Y> join(Attribute<? super X, Y> attribute) { return join(attribute, JoinType.INNER); } /** - * Join to the specified attribute using the given join type. - * @param attribute target of the join - * @param jt join type - * @return the resulting join + * Join to the given attribute using the given join type. */ public <Y> Join<X, Y> join(Attribute<? super X, Y> attribute, JoinType jt) { - throw new AbstractMethodError(); + Join<X, Y> join = new Joins.Attribute<X,Y>(this, + (Members.Attribute<? super X, Y>) attribute, jt); + addJoin(join); + + return join; } /** - * Join to the specified Collection-valued attribute using an - * inner join. - * @param collection target of the join - * @return the resulting join + * Join to the given Collection-valued attribute using an inner join. */ public <Y> CollectionJoin<X, Y> join(Collection<? super X, Y> collection) { return join(collection, JoinType.INNER); } /** - * Join to the specified Collection-valued attribute using the given + * Join to the given Collection-valued attribute using the given * join type. - * @param collection target of the join - * @return the resulting join */ public <Y> CollectionJoin<X, Y> join(Collection<? super X, Y> collection, JoinType jt) { - throw new AbstractMethodError(); + CollectionJoin<X, Y> join = new Joins.Collection<X, Y>(this, + (Members.Collection<? super X, Y>)collection, jt); + addJoin(join); + + return join; } /** - * Join to the specified Set-valued attribute using an inner join. - * @param set target of the join - * @return the resulting join + * Join to the given Set-valued attribute using an inner join. */ public <Y> SetJoin<X,Y> join(Set<? super X, Y> set) { return join(set, JoinType.INNER); } /** - * Join to the specified Set-valued attribute using the given join type. - * @param set target of the join - * @return the resulting join + * Join to the given Set-valued attribute using the given join type. */ public <Y> SetJoin<X,Y> join(Set<? super X, Y> set, JoinType jt) { - throw new AbstractMethodError(); + SetJoin<X, Y> join = new Joins.Set<X, Y>(this, + (Members.Set<? super X, Y>)set, jt); + addJoin(join); + return join; } /** - * Join to the specified List-valued attribute using an inner join. - * @param set target of the join - * @return the resulting join + * Join to the given List-valued attribute using an inner join. */ public <Y> ListJoin<X,Y> join(List<? super X, Y> list) { return join(list, JoinType.INNER); } /** - * Join to the specified List-valued attribute using the given join type. - * @param set target of the join - * @return the resulting join + * Join to the given List-valued attribute using the given join type. */ public <Y> ListJoin<X,Y> join(List<? super X, Y> list, JoinType jt) { - throw new AbstractMethodError(); + ListJoin<X, Y> join = new Joins.List<X, Y>(this, + (Members.List<? super X, Y>)list, jt); + addJoin(join); + return join; } /** - * Join to the specified Map-valued attribute using an inner join. - * @param set target of the join - * @return the resulting join + * Join to the given Map-valued attribute using an inner join. */ public <K,V> MapJoin<X,K,V> join(Map<? super X,K,V> map) { return join(map, JoinType.INNER); } /** - * Join to the specified Map-valued attribute using the given join type. - * @param set target of the join - * @return the resulting join + * Join to the given Map-valued attribute using the given join type. */ public <K,V> MapJoin<X,K,V> join(Map<? super X,K,V> map, JoinType jt) { - throw new AbstractMethodError(); + MapJoin<X,K,V> join = new Joins.Map<X,K,V>(this, + (Members.Map<? super X,K,V>)map, jt); + addJoin(join); + return join; } // String based counterparts public Join join(String attributeName) { - throw new AbstractMethodError(); + return join(type.getAttribute(attributeName)); } public Join join(String attributeName, JoinType jt) { - throw new AbstractMethodError(); + return join(type.getAttribute(attributeName), jt); } public CollectionJoin joinCollection(String attributeName) { - throw new AbstractMethodError(); + return join(type.getCollection(attributeName)); } public CollectionJoin joinCollection(String attributeName, JoinType jt) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getCollection(attributeName), jt); } public ListJoin joinList(String attributeName) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getList(attributeName)); } public ListJoin joinList(String attributeName, JoinType jt) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getList(attributeName), jt); } public MapJoin joinMap(String attributeName) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getMap(attributeName)); } public MapJoin joinMap(String attributeName, JoinType jt) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getMap(attributeName)); } public SetJoin joinSet(String attributeName) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getSet(attributeName)); } public SetJoin joinSet(String attributeName, JoinType jt) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return join(type.getSet(attributeName), jt); } public Fetch fetch(Attribute assoc) { @@ -244,5 +250,10 @@ // TODO Auto-generated method stub throw new AbstractMethodError(); } - + + private void addJoin(Join<X,?> join) { + if (_joins == null) + _joins = new HashSet<Join<X,?>>(); + _joins.add(join); + } } Added: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java?rev=776951&view=auto ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java (added) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java Thu May 21 05:05:39 2009 @@ -0,0 +1,276 @@ +package org.apache.openjpa.persistence.criteria; + +import javax.persistence.criteria.AbstractCollectionJoin; +import javax.persistence.criteria.CollectionJoin; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Expression; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.JoinType; +import javax.persistence.criteria.ListJoin; +import javax.persistence.criteria.MapJoin; +import javax.persistence.criteria.Path; +import javax.persistence.criteria.SetJoin; +import javax.persistence.metamodel.Member; + +import org.apache.openjpa.kernel.exps.ExpressionFactory; +import org.apache.openjpa.kernel.exps.Value; +import org.apache.openjpa.meta.ClassMetaData; +import org.apache.openjpa.persistence.meta.Members; +import org.apache.openjpa.persistence.meta.MetamodelImpl; + +/** + * + * @author Pinaki Poddar + * + */ +public abstract class Joins { + + /** + * Join a single-valued attribute. + * + * + * @param <Z> type from which joining + * @param <X> type of the attribute being joined + */ + public static class Attribute<Z,X> extends FromImpl<Z,X> + implements Join<Z,X>{ + private final JoinType joinType; + + public Attribute(FromImpl<?,Z> from, + Members.Attribute<? super Z, X> member, JoinType jt) { + super(from, member, member.getJavaType()); + joinType = jt; + } + + public JoinType getJoinType() { + return joinType; + } + + public FromImpl<?, Z> getParent() { + return (FromImpl<?, Z>) _parent; + } + + public Member<? extends Z, X> getMember() { + return (Member<? extends Z, X>) _member; + } + + @Override + public Value toValue(ExpressionFactory factory, MetamodelImpl model, + CriteriaQuery c) { + boolean allowNull = joinType != JoinType.INNER; + org.apache.openjpa.kernel.exps.Path path = + (org.apache.openjpa.kernel.exps.Path) + getParent().toValue(factory, model, c); + path.get(_member.fmd, allowNull); + ClassMetaData meta = _member.fmd.getDeclaredTypeMetaData(); + path.setMetaData(meta); + path.setImplicitType(meta.getDescribedType()); + return path; + } + + @Override + public org.apache.openjpa.kernel.exps.Expression toKernelExpression( + ExpressionFactory factory, MetamodelImpl model, CriteriaQuery c) { + org.apache.openjpa.kernel.exps.Value path = this.toValue + (factory, model, c); + ClassMetaData meta = _member.fmd.getDeclaredTypeMetaData(); + Value var = factory.newBoundVariable(getAlias(), + meta.getDescribedType()); + org.apache.openjpa.kernel.exps.Expression join = factory + .bindVariable(var, path); + return join; + } + } + + /** + * Join a multi-valued attribute. + * + * @param Z type being joined from + * @param C Java collection type of the container + * @param type of the element being joined to + * + */ + public static abstract class AbstractCollection<Z,C,E> + extends FromImpl<Z,E> + implements AbstractCollectionJoin<Z, C, E> { + final JoinType joinType; +// final FromImpl<?, Z> _from; +// final Members.BaseCollection<? super Z, C, E> _member; + + public AbstractCollection(FromImpl<?,Z> from, + Members.BaseCollection<? super Z, C, E> member, JoinType jt) { + super(from, member, member.getJavaType()); + joinType = jt; + } + + public JoinType getJoinType() { + return joinType; + } + + public FromImpl<?, Z> getParent() { + return (FromImpl<?, Z>) _parent; + } + + @Override + public FromImpl<?, Z> getParentPath() { + return (FromImpl<?, Z>) _parent; + } + + public Member<? extends Z, E> getMember() { + return (Member<? extends Z, E>)_member; + } + + public javax.persistence.metamodel.AbstractCollection<? super Z, C, E> + getModel() { + return (javax.persistence.metamodel.AbstractCollection + <? super Z, C, E>) + _member.getType(); + } + + /** + * Convert this path to a kernel path (value). + */ + @Override + public Value toValue(ExpressionFactory factory, MetamodelImpl model, + CriteriaQuery c) { + boolean allowNull = joinType != JoinType.INNER; + org.apache.openjpa.kernel.exps.Path path = + (org.apache.openjpa.kernel.exps.Path) + _parent.toValue(factory, model, c); + path.get(_member.fmd, allowNull); + ClassMetaData meta = _member.fmd.getElement() + .getDeclaredTypeMetaData(); + path.setMetaData(meta); + path.setImplicitType(meta.getDescribedType()); + return path; + } + + /** + * Convert this path to a join expression. + * + */ + @Override + public org.apache.openjpa.kernel.exps.Expression toKernelExpression( + ExpressionFactory factory, MetamodelImpl model, CriteriaQuery c) { + org.apache.openjpa.kernel.exps.Value path = toValue + (factory, model, c); + + ClassMetaData meta = _member.fmd.isElementCollection() + ? _member.fmd.getEmbeddedMetaData() + : _member.fmd.getElement().getDeclaredTypeMetaData(); + Value var = factory.newBoundVariable(getAlias(), + meta.getDescribedType()); + org.apache.openjpa.kernel.exps.Expression join = factory + .bindVariable(var, path); + return join; + } + + } + + /** + * Join a java.util.Collection type attribute. + * + * @param <Z> + * @param <E> + */ + public static class Collection<Z,E> + extends AbstractCollection<Z,java.util.Collection<E>,E> + implements CollectionJoin<Z,E>{ + public Collection(FromImpl<?,Z> parent, + Members.Collection<? super Z, E> member, JoinType jt) { + super(parent, member, jt); + } + + public javax.persistence.metamodel.Collection<? super Z, E> getModel() { + return (javax.persistence.metamodel.Collection<? super Z, E>) + _member.getType(); + } + } + + /** + * Join a java.util.Set type attribute. + * + * @param <Z> + * @param <E> + */ + public static class Set<Z,E> + extends AbstractCollection<Z,java.util.Set<E>,E> + implements SetJoin<Z,E>{ + public Set(FromImpl<?,Z> parent, + Members.Set<? super Z, E> member, JoinType jt) { + super(parent, member, jt); + } + + public javax.persistence.metamodel.Set<? super Z, E> getModel() { + return (javax.persistence.metamodel.Set<? super Z, E>)_member; + } + } + + /** + * Join a java.util.List type attribute. + * + * @param <Z> + * @param <E> + */ + + public static class List<Z,E> + extends AbstractCollection<Z,java.util.List<E>,E> + implements ListJoin<Z,E> { + + public List(FromImpl<?,Z> parent, + Members.List<? super Z, E> member, JoinType jt) { + super(parent, member, jt); + } + + public javax.persistence.metamodel.List<? super Z, E> getModel() { + return (javax.persistence.metamodel.List<? super Z, E>) + _member.getType(); + } + + public Expression<Integer> index() { + return new Expressions.Index(this); + } + } + + /** + * Join a java.util.Map type attribute. + * + * @param <Z> + * @param <E> + */ + + public static class Map<Z,K,V> + extends AbstractCollection<Z,java.util.Map<K,V>,V> + implements MapJoin<Z,K,V> { + + public Map(FromImpl<?,Z> parent, + Members.Map<? super Z, K,V> member, JoinType jt) { + super(parent, member, jt); + } + + public javax.persistence.metamodel.Map<? super Z, K,V> getModel() { + return (javax.persistence.metamodel.Map<? super Z, K,V>) + _member.getType(); + } + + public Join<java.util.Map<K, V>, K> joinKey() { + throw new AbstractMethodError(); + } + + public Join<java.util.Map<K, V>, K> joinKey(JoinType jt) { + throw new AbstractMethodError(); + } + + public Expression<java.util.Map.Entry<K, V>> entry() { + throw new AbstractMethodError(); + } + + public Path<K> key() { + throw new AbstractMethodError(); + } + + public Path<V> value() { + throw new AbstractMethodError(); + } + } +} Propchange: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java Thu May 21 05:05:39 2009 @@ -25,7 +25,10 @@ import javax.persistence.metamodel.AbstractCollection; import javax.persistence.metamodel.Attribute; import javax.persistence.metamodel.Bindable; +import javax.persistence.metamodel.ManagedType; import javax.persistence.metamodel.Map; +import javax.persistence.metamodel.Member; +import javax.persistence.metamodel.Type; import org.apache.openjpa.kernel.exps.ExpressionFactory; import org.apache.openjpa.kernel.exps.Value; @@ -34,37 +37,50 @@ import org.apache.openjpa.persistence.meta.MetamodelImpl; /** - * Path from another (parent) path. + * Path is an expression often representing a persistent member traversed + * from another (parent) path. * - * @author ppoddar + * @author Pinaki Poddar * - * @param <X> + * @param <Z> the type of the parent path + * @param <X> the type of this path */ -public class PathImpl<X> extends ExpressionImpl<X> implements Path<X> { - private PathImpl<?> _parent; - private Members.Member<?,X> member; - private boolean _isTypeExpr; +public class PathImpl<Z,X> extends ExpressionImpl<X> implements Path<X> { + protected final PathImpl<?,Z> _parent; + protected final Members.Member<? super Z,?> _member; /** - * - * @param cls + * Protected. use by root path which neither represent a member nor has a + * parent. */ protected PathImpl(Class<X> cls) { super(cls); + _parent = null; + _member = null; } - public <Z> PathImpl(Members.Member<Z, X> member) { - super(member.getMemberJavaType()); - this.member = member; + /** + * Create a path from the given parent representing the the given member. + */ + public PathImpl(PathImpl<?,Z> parent, Members.Member<? super Z, ?> member, + Class<X> cls) { + super(cls); + _parent = parent; + _member = member; + if (parent == null) + throw new NullPointerException("Null parent for member " + member); + if (member == null) + throw new NullPointerException("Null member for parent " + parent); + } - public <Z> PathImpl(PathImpl<Z> parent, - Members.Member<? super Z, X> member) { - super(member.getMemberJavaType()); - _parent = parent; - this.member = member; + public PathImpl<?,Z> getParentPath() { + return _parent; } + /** + * Convert this path to a kernel path value. + */ @Override public Value toValue(ExpressionFactory factory, MetamodelImpl model, CriteriaQuery q) { @@ -73,61 +89,66 @@ org.apache.openjpa.kernel.exps.Path path = (org.apache.openjpa.kernel.exps.Path) _parent.toValue(factory, model, q); - path.get(member.fmd, false); + boolean allowNull = false; + path.get(_member.fmd, allowNull); var = path; } else { var = factory.newPath();//getJavaType()); var.setMetaData(model.repos.getMetaData(getJavaType(), null, true)); } - if (member != null) { - int typeCode = member.fmd.getDeclaredTypeCode(); + if (_member != null) { + int typeCode = _member.fmd.getDeclaredTypeCode(); if (typeCode != JavaTypes.COLLECTION && typeCode != JavaTypes.MAP) var.setImplicitType(getJavaType()); } var.setAlias(getAlias()); - if (_isTypeExpr) - var = factory.type(var); return var; } public <Y> Path<Y> get(Attribute<? super X, Y> attr) { - return new PathImpl(this, (Members.Member<? super X, Y>)attr); + return new PathImpl<X,Y>(this, (Members.Attribute<? super X, Y>)attr, + attr.getJavaType()); } - - public Expression get(AbstractCollection collection) { - return new PathImpl(this, (Members.BaseCollection) collection); - } - - public Expression get(Map collection) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); - } - - public Path get(String attName) { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + + public <E, C extends java.util.Collection<E>> Expression<C> + get(AbstractCollection<X, C, E> coll) { + return new PathImpl<X,C>(this, + (Members.BaseCollection<? super X, C, E>)coll, + coll.getMemberJavaType()); + } + + public <K, V, M extends java.util.Map<K, V>> Expression<M> + get(Map<X, K, V> map) { + return new PathImpl<X,M>(this, (Members.Map<? super X,K,V>)map, + (Class<M>) map.getMemberJavaType()); + } + + public <Y> Path<Y> get(String attName) { + Members.Member<? super X, Y> next = null; + Type<?> type = _member.getType(); + switch (type.getPersistenceType()) { + case BASIC: + throw new RuntimeException(attName + " not navigable from " + this); + default: next = (Members.Member<? super X, Y>) + ((ManagedType<?>)type).getAttribute(attName); + } + return new PathImpl<X,Y>(this, next, (Class<Y>)type.getClass()); } + + + + /** + * Gets the bindable object that corresponds to this path. + */ //TODO: what does this return for a collection key, value? null? public Bindable<X> getModel() { - // TODO Auto-generated method stub - throw new AbstractMethodError(); + return (Bindable<X>)_member.getType(); } - public Path<?> getParentPath() { - return _parent; - } - + /** + * Get the type() expression corresponding to this path. + */ public Expression<Class<? extends X>> type() { - PathImpl<X> path = new PathImpl(getJavaType()); - path.setTypeExpr(true); - return (Expression<Class<? extends X>>) path; - } - - public void setTypeExpr(boolean isTypeExpr) { - _isTypeExpr = isTypeExpr; - } - - public boolean isTypeExpr() { - return _isTypeExpr; + return new Expressions.Type<X>(this); } } Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/RootImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/RootImpl.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/RootImpl.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/RootImpl.java Thu May 21 05:05:39 2009 @@ -19,22 +19,27 @@ package org.apache.openjpa.persistence.criteria; +import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.persistence.metamodel.Entity; +import org.apache.openjpa.kernel.exps.ExpressionFactory; +import org.apache.openjpa.kernel.exps.Value; import org.apache.openjpa.persistence.criteria.FromImpl; +import org.apache.openjpa.persistence.meta.MetamodelImpl; +import org.apache.openjpa.persistence.meta.Types; /** - * A path from itself. + * A path without a parent. * * @author Pinaki Poddar * * @param <X> */ public class RootImpl<X> extends FromImpl<X,X> implements Root<X> { - private final Entity<X> _entity; + private final Types.Entity<X> _entity; - public RootImpl(Entity<X> type) { + public RootImpl(Types.Entity<X> type) { super(type); _entity = type; } @@ -42,4 +47,32 @@ public Entity<X> getModel() { return _entity; } + + /** + * Convert this path to a kernel path value. + */ + @Override + public Value toValue(ExpressionFactory factory, MetamodelImpl model, + CriteriaQuery c) { + Value var = factory.newPath(); + var.setMetaData(_entity.meta); + return var; + } + + /** + * Convert this path to a kernel expression. + * + */ + @Override + public org.apache.openjpa.kernel.exps.Expression toKernelExpression( + ExpressionFactory factory, MetamodelImpl model, CriteriaQuery c) { + org.apache.openjpa.kernel.exps.Value path = toValue(factory, model, c); + + Value var = factory.newBoundVariable(getAlias(), + _entity.meta.getDescribedType()); + org.apache.openjpa.kernel.exps.Expression exp = + factory.bindVariable(var, path); + + return exp; + } } Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/SelectionImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/SelectionImpl.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/SelectionImpl.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/SelectionImpl.java Thu May 21 05:05:39 2009 @@ -45,7 +45,7 @@ super(cls); } - public SelectionImpl setSelections(Selection<?>... selections) { + public SelectionImpl<X> setSelections(Selection<?>... selections) { _sels = Arrays.asList(selections); return this; } Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java Thu May 21 05:05:39 2009 @@ -25,9 +25,11 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Set; import javax.annotation.Generated; @@ -39,6 +41,7 @@ import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Elements; import javax.persistence.metamodel.TypesafeMetamodel; @@ -151,7 +154,10 @@ * given the fully-qualified name of a Java class. * */ - private TypeCategory toMetaModelTypeCategory(String name) { + private TypeCategory toMetaModelTypeCategory(TypeMirror mirror, + String name) { + if (mirror.getKind() == TypeKind.ARRAY) + return TypeCategory.LIST; if (CLASSNAMES_COLLECTION.contains(name)) return TypeCategory.COLLECTION; if (CLASSNAMES_LIST.contains(name)) @@ -223,9 +229,11 @@ for (Element m : members) { TypeMirror decl = handler.getDeclaredType(m); + decl.getKind(); String fieldName = handler.getPersistentMemberName(m); String fieldType = handler.getDeclaredTypeName(decl); - TypeCategory typeCategory = toMetaModelTypeCategory(fieldType); + TypeCategory typeCategory = toMetaModelTypeCategory(decl, + fieldType); String metaModelType = typeCategory.getMetaModelType(); SourceCode.Field modelField = null; switch (typeCategory) { Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Members.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Members.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Members.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/Members.java Thu May 21 05:05:39 2009 @@ -19,6 +19,8 @@ package org.apache.openjpa.persistence.meta; +import java.lang.reflect.Field; + import javax.persistence.metamodel.AbstractCollection; import javax.persistence.metamodel.ManagedType; import javax.persistence.metamodel.Type; @@ -56,14 +58,18 @@ } public final ManagedType<X> getDeclaringType() { - return owner.model.type((Class<X>) fmd.getDeclaringType()); + return (ManagedType<X>)owner.model.getType(fmd.getDeclaringType()); + } + + public Type<?> getType() { + return owner.model.getType(fmd.getDeclaredType()); } public final java.lang.reflect.Member getJavaMember() { return fmd.getBackingMember(); } - public final Class<Y> getMemberJavaType() { + public Class<Y> getMemberJavaType() { return (Class<Y>) fmd.getDeclaredType(); } @@ -79,9 +85,9 @@ return fmd.getDeclaredTypeCode() == JavaTypes.COLLECTION || fmd.getDeclaredTypeCode() == JavaTypes.MAP; } - + public String toString() { - return fmd.getName(); + return fmd.getName() + ":" + getType(); } } @@ -126,6 +132,10 @@ public Class<T> getJavaType() { return super.getMemberJavaType(); } + + public void validateMeta(Field f) { + + } } /** @@ -151,8 +161,8 @@ return BindableType.COLLECTION; } - public final Class<E> getJavaType() { - return fmd.getElement().getDeclaredType(); + public Class<E> getJavaType() { + return fmd.getDeclaredType(); } } Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java Thu May 21 05:05:39 2009 @@ -7,6 +7,9 @@ javax.persistence.metamodel.Type.PersistenceType.MAPPED_SUPERCLASS; import java.lang.reflect.Field; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.TypeVariable; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -18,14 +21,17 @@ import javax.persistence.metamodel.Entity; import javax.persistence.metamodel.ManagedType; import javax.persistence.metamodel.MappedSuperclass; +import javax.persistence.metamodel.Member; import javax.persistence.metamodel.Metamodel; import javax.persistence.metamodel.Type; +import javax.persistence.metamodel.TypesafeMetamodel; import javax.persistence.metamodel.AbstractCollection.CollectionType; import javax.persistence.metamodel.Type.PersistenceType; import org.apache.openjpa.lib.util.J2DoPrivHelper; import org.apache.openjpa.lib.util.Localizer; import org.apache.openjpa.meta.ClassMetaData; +import org.apache.openjpa.meta.FieldMetaData; import org.apache.openjpa.meta.MetaDataRepository; import org.apache.openjpa.util.InternalException; @@ -178,6 +184,8 @@ return CollectionType.COLLECTION; if (Map.class.isAssignableFrom(cls)) return CollectionType.MAP; + if (cls.isArray()) + return CollectionType.LIST; return null; } @@ -185,15 +193,117 @@ * Populate the static fields of the canonical type. */ public <X> void populate(Types.Managed<X> type) { - try { - Class<X> cls = type.getJavaType(); - Class<?> mcls = repos.getMetaModel(cls, true); - Field[] fields = mcls.getFields(); - for (Field f : fields) { - f.set(null, type.getMember(f.getName())); - } - } catch (Exception e) { - - } + Class<X> cls = type.getJavaType(); + Class<?> mcls = repos.getMetaModel(cls, true); + if (mcls == null) + return; + TypesafeMetamodel anno = mcls.getAnnotation(TypesafeMetamodel.class); + if (anno == null) + throw new IllegalArgumentException(_loc.get("meta-class-no-anno", + mcls.getName(), cls.getName(), TypesafeMetamodel.class.getName()) + .getMessage()); + + if (cls != anno.value()) { + throw new IllegalStateException(_loc.get("meta-class-mismatch", + mcls.getName(), cls.getName(), anno.value()).getMessage()); + } + + Field[] mfields = mcls.getFields(); + for (Field mf : mfields) { + try { + ParameterizedType mfType = getParameterziedType(mf); + Member<? super X, ?> f = type.getMember(mf.getName()); + Class<?> fClass = f.getMemberJavaType(); + java.lang.reflect.Type[] args = mfType.getActualTypeArguments(); + if (args.length < 2) + throw new IllegalStateException( + _loc.get("meta-field-no-para", mf).getMessage()); + java.lang.reflect.Type ftype = args[1]; + if (fClass.isPrimitive() + || Collection.class.isAssignableFrom(fClass) + || Map.class.isAssignableFrom(fClass)) { + ; + } else if (ftype != args[1]) { + throw new RuntimeException(_loc.get("meta-field-mismatch", + new Object[]{mf.getName(), mcls.getName(), + toTypeName(mfType), toTypeName(ftype)}).getMessage()); + } + mf.set(null, f); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(mf.toString()); + } + } + } + + /** + * Gets the parameterized type of the given field after validating. + */ + ParameterizedType getParameterziedType(Field mf) { + java.lang.reflect.Type t = mf.getGenericType(); + if (t instanceof ParameterizedType == false) { + throw new IllegalStateException(_loc.get("meta-field-not-param", + mf.getDeclaringClass(), mf.getName(), toTypeName(t)).getMessage()); + } + ParameterizedType mfType = (ParameterizedType)t; + java.lang.reflect.Type[] args = mfType.getActualTypeArguments(); + if (args.length < 2) { + throw new IllegalStateException(_loc.get("meta-field-less-param", + mf.getDeclaringClass(), mf.getName(), toTypeName(t)).getMessage()); + } + + return mfType; + } + + /** + * Pretty prints a Type. + */ + String toTypeName(java.lang.reflect.Type type) { + if (type instanceof GenericArrayType) { + return toTypeName(((GenericArrayType)type). + getGenericComponentType())+"[]"; + } + if (type instanceof ParameterizedType == false) { + Class<?> cls = (Class<?>)type; + return cls.getName(); + } + ParameterizedType pType = (ParameterizedType)type; + java.lang.reflect.Type[] args = pType.getActualTypeArguments(); + StringBuffer tmp = new StringBuffer(pType.getRawType().toString()); + for (int i = 0; i < args.length; i++) { + tmp.append((i == 0) ? "<" : ","); + tmp.append(toTypeName(args[i])); + tmp.append((i == args.length-1) ? ">" : ""); + } + return tmp.toString(); } + + /** + * Validates the given field of the meta class matches the given + * FieldMetaData and + * @param <X> + * @param <Y> + * @param mField + * @param member + */ + void validate(Field metaField, FieldMetaData fmd) { + + } + + <X,Y> void validate(Field mField, Member<X, Y> member) { + Class<?> fType = member.getMemberJavaType(); + if (!ParameterizedType.class.isInstance(mField.getGenericType())) { + throw new IllegalArgumentException(_loc.get("meta-bad-field", + mField).getMessage()); + } + ParameterizedType mfType = (ParameterizedType)mField.getGenericType(); + java.lang.reflect.Type[] args = mfType.getActualTypeArguments(); + java.lang.reflect.Type owner = args[0]; + if (member.getDeclaringType().getJavaType() != owner) + throw new IllegalArgumentException(_loc.get("meta-bad-field-owner", + mField, owner).getMessage()); + java.lang.reflect.Type elementType = args[1]; + if (fType.isPrimitive()) + return; + } } Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java (original) +++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java Thu May 21 05:05:39 2009 @@ -538,9 +538,9 @@ String getDeclaredTypeName(TypeMirror mirror, boolean box) { if (mirror.getKind() == TypeKind.ARRAY) { TypeMirror comp = ((ArrayType)mirror).getComponentType(); - return getDeclaredTypeName(comp, false)+"[]"; + return getDeclaredTypeName(comp, false); } - mirror = box? box(mirror) : mirror; + mirror = box ? box(mirror) : mirror; if (isPrimitive(mirror)) return ((PrimitiveType)mirror).toString(); return processingEnv.getTypeUtils().asElement(mirror).toString(); @@ -597,6 +597,8 @@ * indexed parameter type argument. Otherwise null. */ TypeMirror getTypeParameter(TypeMirror mirror, int index) { + if (mirror.getKind() == TypeKind.ARRAY) + return ((ArrayType)mirror).getComponentType(); if (mirror.getKind() != TypeKind.DECLARED) return null; List<? extends TypeMirror> params = ((DeclaredType)mirror) 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=776951&r1=776950&r2=776951&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 Thu May 21 05:05:39 2009 @@ -19,8 +19,10 @@ 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; @@ -167,6 +169,7 @@ case JavaTypes.OBJECT: attrs.put(f, new Members.Attribute(this, f)); break; + case JavaTypes.ARRAY: case JavaTypes.COLLECTION: switch (model.getCollectionType(f.getDeclaredType())) { case COLLECTION: @@ -178,10 +181,15 @@ case SET: colls.put(f, new Members.Set(this, f)); break; - case MAP: - colls.put(f, new Members.Map(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 ARRAY = 11; @@ -192,13 +200,24 @@ } } + public Member<? super X,?> getMember(Field field) { + return getMember(field.getName()); + } + public Member<? super X,?> getMember(String name) { - FieldMetaData fmd = meta.getField(name); - if (attrs.containsKey(fmd)) - return attrs.get(fmd); - if (colls.containsKey(fmd)) - return colls.get(fmd); - return null; + 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, @@ -374,12 +393,12 @@ if (fmd == null) { if (decl && meta.getField(name) != null) { throw new IllegalArgumentException(_loc.get( - "field-not-decl", name, cls) - .getMessage()); + "field-not-decl", name, cls, + meta.getField(name).getDeclaringType()).getMessage()); } else { throw new IllegalArgumentException(_loc.get( - "field-missing", name, meta.getDescribedType()) - .getMessage()); + "field-missing", name, meta.getDescribedType(), + Arrays.toString(meta.getFieldNames())).getMessage()); } } assertType("field-type-mismatch", fmd, fmd.getDeclaredType(), type); Modified: openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties?rev=776951&r1=776950&r2=776951&view=diff ============================================================================== --- openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties (original) +++ openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties Thu May 21 05:05:39 2009 @@ -24,15 +24,17 @@ access-none: Class "{0}" has not explicitly annotated any access type and \ no field or method is annotated either. It is not possible to determine \ its access type -field-missing: "{0}" is not a managed field in "{1}" +field-missing: "{0}" is not a managed field in "{1}". Available fields are {2}. field-not-decl: "{0}" is not declared in "{1}" itself but one of its \ - persistent super class + persistent super class "{2}" field-type-mismatch: Actual type of field "{0}" "{1}" does not match with the \ expected type "{2}" field-element-type-mismatch: Actual element type of field "{0}" "{1}" does not \ match with the expected element type "{2}" field-key-type-mismatch: Actual key type of map field "{0}" "{1}" does not \ match with the expected key type "{2}" +field-unrecognized: Field "{0}" is not recognized by its type code "{1}" to \ + be included in the meta model. getter-unmatched: Getter method "{0}" in "{1}" has no matching setter method. mmg-tool-banner: Starting OpenJPA Annotation Processor for Metamodel Generation mmg-process: Generating canonical metamodel source code "{0}" @@ -43,4 +45,10 @@ mmg-bad-naming: Naming policy for meta-model classes specified in -Anaming \ option "{0}" can not be used due to "{1}". Using default naming policy. mmg-bad-log: Log level specified is -Alog option "{0}" is not recognized. \ - Logging at default "{1}" level. \ No newline at end of file + Logging at default "{1}" level. + +meta-class-no-anno: Meta class "{0}" registered for "{1}" is not annotated \ + with "{2}" annotation. +meta-field-mismatch: The field "{0}" in meta class "{1}" is of type "{2}" does \ + not match with the persistent property type "{3}". +type-wrong-category:"{0}" categorized as "{1}" should be a "{2}" \ No newline at end of file
