From c0e28df7bb9aae38a8a6ddb97a335c1d894e13d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 30 Nov 2009 08:27:28 +0000 Subject: [PATCH] refactored Operation implementations to use OperationMixin --- .../java/com/mysema/query/types/Visitor.java | 3 - .../com/mysema/query/types/VisitorBase.java | 6 -- .../query/types/operation/OBoolean.java | 57 +++++++++-------- .../query/types/operation/OComparable.java | 41 ++++++------ .../mysema/query/types/operation/ODate.java | 39 ++++++------ .../query/types/operation/ODateTime.java | 39 ++++++------ .../mysema/query/types/operation/ONumber.java | 39 ++++++------ .../mysema/query/types/operation/OSimple.java | 37 +++++------ .../mysema/query/types/operation/OString.java | 36 +++++------ .../query/types/operation/OStringArray.java | 63 ------------------- .../mysema/query/types/operation/OTime.java | 39 ++++++------ .../query/types/operation/Operation.java | 12 ++-- .../query/types/operation/OperationMixin.java | 58 +++++++++++++++++ 13 files changed, 217 insertions(+), 252 deletions(-) delete mode 100644 querydsl-core/src/main/java/com/mysema/query/types/operation/OStringArray.java create mode 100644 querydsl-core/src/main/java/com/mysema/query/types/operation/OperationMixin.java diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Visitor.java b/querydsl-core/src/main/java/com/mysema/query/types/Visitor.java index 270601aa5..c29363b81 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Visitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Visitor.java @@ -27,7 +27,6 @@ import com.mysema.query.types.operation.ODateTime; import com.mysema.query.types.operation.ONumber; import com.mysema.query.types.operation.OSimple; import com.mysema.query.types.operation.OString; -import com.mysema.query.types.operation.OStringArray; import com.mysema.query.types.operation.OTime; import com.mysema.query.types.operation.Operation; import com.mysema.query.types.path.PArray; @@ -110,8 +109,6 @@ public interface Visitor { void visit(OString expr); - void visit(OStringArray expr); - void visit(PArray expr); void visit(Path expr); diff --git a/querydsl-core/src/main/java/com/mysema/query/types/VisitorBase.java b/querydsl-core/src/main/java/com/mysema/query/types/VisitorBase.java index 74eae9c52..fd88bafe5 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/VisitorBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/VisitorBase.java @@ -28,7 +28,6 @@ import com.mysema.query.types.operation.ODateTime; import com.mysema.query.types.operation.ONumber; import com.mysema.query.types.operation.OSimple; import com.mysema.query.types.operation.OString; -import com.mysema.query.types.operation.OStringArray; import com.mysema.query.types.operation.OTime; import com.mysema.query.types.operation.Operation; import com.mysema.query.types.path.PArray; @@ -169,11 +168,6 @@ public abstract class VisitorBase> implemen visit((Operation) expr); } - @Override - public void visit(OStringArray expr) { - visit((Operation) expr); - } - @Override public void visit(OTime expr) { visit((Operation) expr); diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OBoolean.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OBoolean.java index 989788496..ba7f89813 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/OBoolean.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/OBoolean.java @@ -6,7 +6,6 @@ package com.mysema.query.types.operation; import java.util.Arrays; -import java.util.Collections; import java.util.List; import com.mysema.query.types.Visitor; @@ -26,17 +25,15 @@ public class OBoolean extends EBoolean implements Operation { return new OBoolean(op, args); } - private final List> args; - - private final Operator op; + private final Operation opMixin; + OBoolean(Operator op, Expr... args) { this(op, Arrays.asList(args)); } OBoolean(Operator op, List> args) { - this.op = op; - this.args = Collections.unmodifiableList(args); + opMixin = new OperationMixin(this, op, args); } @Override @@ -44,32 +41,34 @@ public class OBoolean extends EBoolean implements Operation { v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - @Override - public Operator getOperator() { - return op; - } - - @Override - public EBoolean not() { - if (op == Ops.NOT && args.get(0) instanceof EBoolean){ - return (EBoolean) args.get(0); - }else{ - return super.not(); - } - } - @Override public EBoolean asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } + + @Override + public EBoolean not() { + if (opMixin.getOperator() == Ops.NOT && opMixin.getArg(0) instanceof EBoolean){ + return (EBoolean) opMixin.getArg(0); + }else{ + return super.not(); + } + } + } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OComparable.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OComparable.java index 715627c54..5a228834e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/OComparable.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/OComparable.java @@ -6,7 +6,6 @@ package com.mysema.query.types.operation; import java.util.Arrays; -import java.util.Collections; import java.util.List; import com.mysema.query.types.Visitor; @@ -39,18 +38,15 @@ public class OComparable> extends return new OComparable(type, op, args); } - private final List> args; - - private final Operator op; - + private final Operation opMixin; + OComparable(Class type, Operator op, Expr... args) { this(type, op, Arrays.asList(args)); } OComparable(Class type, Operator op, List> args) { super(type); - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override @@ -58,23 +54,24 @@ public class OComparable> extends v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - @Override public EComparable asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } + } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/ODate.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/ODate.java index dc5b462ca..36053d813 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/ODate.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/ODate.java @@ -39,43 +39,40 @@ public class ODate , D extends Comparable> exten return new ODate(type, op, args); } - private final List> args; - - private final Operator op; - + private final Operation opMixin; + ODate(Class type, Operator op, Expr... args) { this(type, op, Arrays.asList(args)); } ODate(Class type, Operator op, List> args) { super(type); - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override public void accept(Visitor v) { v.visit(this); } - - @Override - public Expr getArg(int i) { - return args.get(i); - } - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - @Override public EDate asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/ODateTime.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/ODateTime.java index 9d48273a4..2d368e011 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/ODateTime.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/ODateTime.java @@ -38,19 +38,16 @@ EDateTime implements Operation { public static ,D extends Comparable> EDateTime create(Class type, Operator op, Expr... args){ return new ODateTime(type, op, args); } + + private final Operation opMixin; - private final List> args; - - private final Operator op; - ODateTime(Class type, Operator op, Expr... args) { this(type, op, Arrays.asList(args)); } ODateTime(Class type, Operator op, List> args) { super(type); - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override @@ -58,23 +55,23 @@ EDateTime implements Operation { v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - @Override public EDateTime asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/ONumber.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/ONumber.java index 5d74cc953..e38342242 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/ONumber.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/ONumber.java @@ -39,18 +39,15 @@ public class ONumber> return new ONumber(type, op, args); } - private final List> args; - - private final Operator op; - + private final Operation opMixin; + ONumber(Class type, Operator op, Expr... args) { this(type, op, Arrays.asList(args)); } ONumber(Class type, Operator op, List> args) { super(type); - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override @@ -58,23 +55,23 @@ public class ONumber> v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - @Override public ENumber asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OSimple.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OSimple.java index 8ad1bd8db..eeac6a431 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/OSimple.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/OSimple.java @@ -37,9 +37,7 @@ public class OSimple extends Expr implements Operation return new OSimple(type, op, args); } - private final List> args; - - private final Operator op; + private final Operation opMixin; OSimple(Class type, Operator op, Expr... args) { this(type, op, Arrays.asList(args)); @@ -47,8 +45,7 @@ public class OSimple extends Expr implements Operation OSimple(Class type, Operator op, List> args) { super(type); - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override @@ -56,23 +53,23 @@ public class OSimple extends Expr implements Operation v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - @Override public Expr asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OString.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OString.java index 79720f1fc..e746d5abe 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/OString.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/OString.java @@ -26,17 +26,14 @@ public class OString extends EString implements Operation { return new OString(op, args); } - private final List> args; - - private final Operator op; + private final Operation opMixin; OString(Operator op, Expr... args) { this(op, Arrays.asList(args)); } OString(Operator op, List> args) { - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override @@ -44,23 +41,24 @@ public class OString extends EString implements Operation { v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } @Override public EString asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OStringArray.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OStringArray.java deleted file mode 100644 index afe63031c..000000000 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/OStringArray.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2009 Mysema Ltd. - * All rights reserved. - * - */ -package com.mysema.query.types.operation; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import com.mysema.query.types.Visitor; -import com.mysema.query.types.expr.Expr; - -/** - * OStringArray represents a String[] typed operation - * - * @author tiwe - * - */ -@SuppressWarnings("serial") -public class OStringArray extends Expr implements - Operation { - - private final List> args; - - private final Operator op; - - OStringArray(Operator op, Expr... args) { - this(op, Arrays.asList(args)); - } - - OStringArray(Operator op, List> args) { - super(String[].class); - this.op = op; - this.args = Collections.unmodifiableList(args); - } - - @Override - public void accept(Visitor v) { - v.visit(this); - } - - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - - @Override - public Expr asExpr() { - return this; - } -} \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OTime.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OTime.java index 019dc6d9c..830d67caf 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/OTime.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/OTime.java @@ -38,18 +38,15 @@ public class OTime> extends ETime implements return new OTime(type, op, args); } - private final List> args; - - private final Operator op; - + private final Operation opMixin; + OTime(Class type, Operator op, Expr... args) { this(type, op, Arrays.asList(args)); } OTime(Class type, Operator op, List> args) { super(type); - this.op = op; - this.args = Collections.unmodifiableList(args); + this.opMixin = new OperationMixin(this, op, args); } @Override @@ -57,23 +54,23 @@ public class OTime> extends ETime implements v.visit(this); } - @Override - public Expr getArg(int i) { - return args.get(i); - } - - @Override - public List> getArgs() { - return args; - } - - @Override - public Operator getOperator() { - return op; - } - @Override public ETime asExpr() { return this; } + + @Override + public Expr getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/Operation.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/Operation.java index 715bc72db..59b4ff004 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/operation/Operation.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/Operation.java @@ -16,6 +16,11 @@ import com.mysema.query.types.expr.Expr; * @version $Id$ */ public interface Operation { + /** + * @return + */ + Expr asExpr(); + /** * Get the argument with the given index * @@ -37,17 +42,12 @@ public interface Operation { * @return */ Operator getOperator(); - + /** * Get the type of this operation * * @return */ Class getType(); - - /** - * @return - */ - Expr asExpr(); } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/operation/OperationMixin.java b/querydsl-core/src/main/java/com/mysema/query/types/operation/OperationMixin.java new file mode 100644 index 000000000..0c36ba0ac --- /dev/null +++ b/querydsl-core/src/main/java/com/mysema/query/types/operation/OperationMixin.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.query.types.operation; + +import java.util.Collections; +import java.util.List; + +import com.mysema.query.types.expr.Expr; + +/** + * @author tiwe + * + * @param + * @param + */ +public class OperationMixin implements Operation { + + private final List> args; + + private final Operator operator; + + private final Expr self; + + public OperationMixin(Expr self, Operator operator, List> args){ + this.self = self; + this.operator = operator; + this.args = Collections.unmodifiableList(args); + } + + @Override + public Expr asExpr() { + return self; + } + + @Override + public Expr getArg(int i) { + return args.get(i); + } + + @Override + public List> getArgs() { + return args; + } + + @Override + public Operator getOperator() { + return operator; + } + + @Override + public Class getType() { + return self.getType(); + } + +}