refactored PathMetadata.PathType class and instances

This commit is contained in:
Timo Westkämper 2008-04-03 21:21:51 +00:00
parent 407af3bec2
commit 2d25c424a8
4 changed files with 63 additions and 70 deletions

View File

@ -39,7 +39,7 @@ public class Grammar {
}
public static <A> Expr.Boolean in(A left, CollectionType<A> right){
return createBoolean(Op.IN, createConstant(left), (Expr<?>)right);
return createBoolean(Ops.IN, createConstant(left), (Expr<?>)right);
}
public static <A extends Comparable<A>> Expr.Comparable<A> mult(Expr<A> left, A right) {

View File

@ -13,55 +13,51 @@ package com.mysema.query.grammar;
*/
public interface Ops {
/**
* Operators (the return type is encoded in the 1st generic parameter)
*/
public interface Op<RT> {
Op<java.lang.Boolean> EQ = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> IN = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> ISNOTNULL = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> ISNULL = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> ISTYPEOF = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> NE = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> NOTIN = new OpImpl<java.lang.Boolean>();
}
public static class Op<RT>{}
public static final class OpImpl<RT> implements Op<RT>{}
// general
Op<java.lang.Boolean> EQ = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> IN = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> ISNOTNULL = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> ISNULL = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> ISTYPEOF = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> NE = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> NOTIN = new Op<java.lang.Boolean>();
// Boolean
Op<java.lang.Boolean> AND = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> NOT = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> OR = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> XNOR = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> XOR = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> AND = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> NOT = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> OR = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> XNOR = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> XOR = new Op<java.lang.Boolean>();
// Comparable
Op<java.lang.Boolean> BETWEEN = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> GOE = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> GT = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> LOE = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> LT = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> NOTBETWEEN = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> BETWEEN = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> GOE = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> GT = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> LOE = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> LT = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> NOTBETWEEN = new Op<java.lang.Boolean>();
// Date
Op<java.lang.Boolean> AFTER = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> BEFORE = new OpImpl<java.lang.Boolean>();
Op<java.lang.Boolean> AFTER = new Op<java.lang.Boolean>();
Op<java.lang.Boolean> BEFORE = new Op<java.lang.Boolean>();
// Number
Op<java.lang.Number> ADD = new OpImpl<java.lang.Number>();
Op<java.lang.Number> DIV = new OpImpl<java.lang.Number>();
Op<java.lang.Number> MOD = new OpImpl<java.lang.Number>();
Op<java.lang.Number> MULT = new OpImpl<java.lang.Number>();
Op<java.lang.Number> SQRT = new OpImpl<java.lang.Number>();
Op<java.lang.Number> SUB = new OpImpl<java.lang.Number>();
Op<java.lang.Number> ADD = new Op<java.lang.Number>();
Op<java.lang.Number> DIV = new Op<java.lang.Number>();
Op<java.lang.Number> MOD = new Op<java.lang.Number>();
Op<java.lang.Number> MULT = new Op<java.lang.Number>();
Op<java.lang.Number> SQRT = new Op<java.lang.Number>();
Op<java.lang.Number> SUB = new Op<java.lang.Number>();
// String
Op<java.lang.String> CONCAT = new OpImpl<java.lang.String>();
Op<java.lang.Boolean> LIKE = new OpImpl<java.lang.Boolean>();
Op<java.lang.String> LOWER = new OpImpl<java.lang.String>();
Op<java.lang.String> SUBSTR1ARG = new OpImpl<java.lang.String>();
Op<java.lang.String> SUBSTR2ARGS = new OpImpl<java.lang.String>();
Op<java.lang.String> TRIM = new OpImpl<java.lang.String>();
Op<java.lang.String> UPPER = new OpImpl<java.lang.String>();
Op<java.lang.String> CONCAT = new Op<java.lang.String>();
Op<java.lang.Boolean> LIKE = new Op<java.lang.Boolean>();
Op<java.lang.String> LOWER = new Op<java.lang.String>();
Op<java.lang.String> SUBSTR1ARG = new Op<java.lang.String>();
Op<java.lang.String> SUBSTR2ARGS = new Op<java.lang.String>();
Op<java.lang.String> TRIM = new Op<java.lang.String>();
Op<java.lang.String> UPPER = new Op<java.lang.String>();
}

View File

@ -13,7 +13,6 @@ import static com.mysema.query.grammar.types.Factory.createString;
import com.mysema.query.grammar.Ops;
import com.mysema.query.grammar.Order;
import com.mysema.query.grammar.OrderSpecifier;
import com.mysema.query.grammar.Ops.Op;
import com.mysema.query.grammar.types.Expr.CollectionType;
/**
@ -124,11 +123,11 @@ class IntGrammar{
}
static <A> Expr.Boolean eq(Expr<A> left, A right) {
return createBoolean(Op.EQ, left, createConstant(right));
return createBoolean(Ops.EQ, left, createConstant(right));
}
static <A> Expr.Boolean eq(Expr<A> left, Expr<? super A> right) {
return createBoolean(Op.EQ, left, right);
return createBoolean(Ops.EQ, left, right);
}
static <A extends Comparable<A>> Expr.Boolean goe(Expr<A> left,
@ -152,21 +151,21 @@ class IntGrammar{
static <A extends Comparable<A>> Expr.Boolean in(Expr<A> left,
A... rest) {
return createBoolean(Op.IN, left, createConstant(rest));
return createBoolean(Ops.IN, left, createConstant(rest));
}
static <A> Expr.Boolean in(Expr<A> left, CollectionType<A> right){
return createBoolean(Op.IN, left, (Expr<?>)right);
return createBoolean(Ops.IN, left, (Expr<?>)right);
}
static <A> Expr.Boolean isnotnull(Expr<A> left) {
return createBoolean(Op.ISNOTNULL, left);
return createBoolean(Ops.ISNOTNULL, left);
}
static <A> Expr.Boolean isnull(Expr<A> left) {
return createBoolean(Op.ISNULL, left);
return createBoolean(Ops.ISNULL, left);
}
static Expr.Boolean like(Expr<String> left, String right) {
@ -197,11 +196,11 @@ class IntGrammar{
}
static <A> Expr.Boolean ne(Expr<A> left, A right) {
return createBoolean(Op.NE, left, createConstant(right));
return createBoolean(Ops.NE, left, createConstant(right));
}
static <A> Expr.Boolean ne(Expr<A> left, Expr<? super A> right) {
return createBoolean(Op.NE, left, right);
return createBoolean(Ops.NE, left, right);
}
static <A extends Comparable<A>> Expr.Boolean notBetween(Expr<A> left,
@ -216,11 +215,11 @@ class IntGrammar{
static <A extends Comparable<A>> Expr.Boolean notIn(Expr<A> left,
A... rest) {
return createBoolean(Op.NOTIN, left, createConstant(rest));
return createBoolean(Ops.NOTIN, left, createConstant(rest));
}
static <A> Expr.Boolean notIn(Expr<A> left, CollectionType<A> right){
return createBoolean(Op.NOTIN, left, (Expr<?>)right);
return createBoolean(Ops.NOTIN, left, (Expr<?>)right);
}
static Expr.Boolean or(Expr.Boolean left, Expr.Boolean right) {
@ -240,7 +239,7 @@ class IntGrammar{
}
static <A, B extends A> Expr.Boolean typeOf(Expr<A> left, Class<B> right) {
return createBoolean(Op.ISTYPEOF, left, createConstant(right));
return createBoolean(Ops.ISTYPEOF, left, createConstant(right));
}
static Expr.String upper(Expr<String> left) {

View File

@ -30,36 +30,36 @@ public final class PathMetadata<T> {
public static PathMetadata<Integer> forListAccess(Path.Collection<?> parent,
Expr<Integer> index) {
return new PathMetadata<Integer>(parent, index, PathType.LISTVALUE);
return new PathMetadata<Integer>(parent, index, LISTVALUE);
}
public static PathMetadata<Integer> forListAccess(Path.Collection<?> parent,
int index) {
return new PathMetadata<Integer>(parent, Factory.createConstant(index),
PathType.LISTVALUE_CONSTANT);
LISTVALUE_CONSTANT);
}
public static PathMetadata<Integer> forSize(Path.Collection<?> parent) {
return new PathMetadata<Integer>(parent, null, PathType.SIZE);
return new PathMetadata<Integer>(parent, null, SIZE);
}
public static <KT> PathMetadata<KT> forMapAccess(Path.Map<?, ?> parent,
Expr<KT> key) {
return new PathMetadata<KT>(parent, key, PathType.MAPVALUE);
return new PathMetadata<KT>(parent, key, MAPVALUE);
}
public static <KT> PathMetadata<KT> forMapAccess(Path.Map<?, ?> parent,
KT key) {
return new PathMetadata<KT>(parent, Factory.createConstant(key), PathType.MAPVALUE_CONSTANT);
return new PathMetadata<KT>(parent, Factory.createConstant(key), MAPVALUE_CONSTANT);
}
public static PathMetadata<String> forProperty(Path<?> parent,
String property) {
return new PathMetadata<String>(parent, Factory.createConstant(property), PathType.PROPERTY);
return new PathMetadata<String>(parent, Factory.createConstant(property), PROPERTY);
}
public static PathMetadata<String> forVariable(String variable) {
return new PathMetadata<String>(null, Factory.createConstant(variable), PathType.VARIABLE);
return new PathMetadata<String>(null, Factory.createConstant(variable), VARIABLE);
}
public Expr<T> getExpression() {
@ -74,20 +74,18 @@ public final class PathMetadata<T> {
return pathType;
}
public static final class PathTypeImpl implements PathType{ }
/**
* Type provides
*
*/
public interface PathType extends Ops.Op<Path<?>> {
PathType LISTVALUE = new PathTypeImpl();
PathType LISTVALUE_CONSTANT = new PathTypeImpl();
PathType MAPVALUE = new PathTypeImpl();
PathType MAPVALUE_CONSTANT = new PathTypeImpl();
PathType PROPERTY = new PathTypeImpl();
PathType VARIABLE = new PathTypeImpl();
PathType SIZE = new PathTypeImpl();
}
public static class PathType extends Ops.Op<Path<?>> {}
public static PathType LISTVALUE = new PathType();
public static PathType LISTVALUE_CONSTANT = new PathType();
public static PathType MAPVALUE = new PathType();
public static PathType MAPVALUE_CONSTANT = new PathType();
public static PathType PROPERTY = new PathType();
public static PathType VARIABLE = new PathType();
public static PathType SIZE = new PathType();
}