mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-30 21:08:30 +08:00
refactored Operation implementations to use OperationMixin
This commit is contained in:
parent
2f60b9b419
commit
c0e28df7bb
@ -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);
|
||||
|
||||
@ -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<SubType extends VisitorBase<SubType>> implemen
|
||||
visit((Operation<?, ?>) expr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(OStringArray expr) {
|
||||
visit((Operation<?, ?>) expr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(OTime<?, ?> expr) {
|
||||
visit((Operation<?, ?>) expr);
|
||||
|
||||
@ -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<Boolean, Boolean> {
|
||||
return new OBoolean(op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<Boolean> op;
|
||||
|
||||
private final Operation<Boolean, Boolean> opMixin;
|
||||
|
||||
OBoolean(Operator<Boolean> op, Expr<?>... args) {
|
||||
this(op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
OBoolean(Operator<Boolean> op, List<Expr<?>> args) {
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
opMixin = new OperationMixin<Boolean,Boolean>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,32 +41,34 @@ public class OBoolean extends EBoolean implements Operation<Boolean, Boolean> {
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<Boolean> 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<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<Boolean> 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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<OpType, D extends Comparable<?>> extends
|
||||
return new OComparable<O,D>(type, op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OpType> op;
|
||||
|
||||
private final Operation<OpType, D> opMixin;
|
||||
|
||||
OComparable(Class<D> type, Operator<OpType> op, Expr<?>... args) {
|
||||
this(type, op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
OComparable(Class<D> type, Operator<OpType> op, List<Expr<?>> args) {
|
||||
super(type);
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<OpType, D>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -58,23 +54,24 @@ public class OComparable<OpType, D extends Comparable<?>> extends
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EComparable<D> asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
|
||||
}
|
||||
@ -39,43 +39,40 @@ public class ODate <OpType extends Comparable<?>, D extends Comparable<?>> exten
|
||||
return new ODate<O,D>(type, op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OpType> op;
|
||||
|
||||
private final Operation<OpType, D> opMixin;
|
||||
|
||||
ODate(Class<D> type, Operator<OpType> op, Expr<?>... args) {
|
||||
this(type, op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
ODate(Class<D> type, Operator<OpType> op, List<Expr<?>> args) {
|
||||
super(type);
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<OpType, D>(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<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EDate<D> asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -38,19 +38,16 @@ EDateTime<D> implements Operation<OpType, D> {
|
||||
public static <O extends Comparable<?>,D extends Comparable<?>> EDateTime<D> create(Class<D> type, Operator<O> op, Expr<?>... args){
|
||||
return new ODateTime<O,D>(type, op, args);
|
||||
}
|
||||
|
||||
private final Operation<OpType, D> opMixin;
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OpType> op;
|
||||
|
||||
ODateTime(Class<D> type, Operator<OpType> op, Expr<?>... args) {
|
||||
this(type, op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
ODateTime(Class<D> type, Operator<OpType> op, List<Expr<?>> args) {
|
||||
super(type);
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<OpType, D>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -58,23 +55,23 @@ EDateTime<D> implements Operation<OpType, D> {
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EDateTime<D> asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,18 +39,15 @@ public class ONumber<OpType extends Number, D extends Number & Comparable<?>>
|
||||
return new ONumber<O,D>(type, op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OpType> op;
|
||||
|
||||
private final Operation<OpType, D> opMixin;
|
||||
|
||||
ONumber(Class<? extends D> type, Operator<OpType> op, Expr<?>... args) {
|
||||
this(type, op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
ONumber(Class<? extends D> type, Operator<OpType> op, List<Expr<?>> args) {
|
||||
super(type);
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<OpType, D>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -58,23 +55,23 @@ public class ONumber<OpType extends Number, D extends Number & Comparable<?>>
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ENumber<D> asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
}
|
||||
@ -37,9 +37,7 @@ public class OSimple<OpType, D> extends Expr<D> implements Operation<OpType, D>
|
||||
return new OSimple<OpType,D>(type, op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OpType> op;
|
||||
private final Operation<OpType, D> opMixin;
|
||||
|
||||
OSimple(Class<? extends D> type, Operator<OpType> op, Expr<?>... args) {
|
||||
this(type, op, Arrays.asList(args));
|
||||
@ -47,8 +45,7 @@ public class OSimple<OpType, D> extends Expr<D> implements Operation<OpType, D>
|
||||
|
||||
OSimple(Class<? extends D> type, Operator<OpType> op, List<Expr<?>> args) {
|
||||
super(type);
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<OpType, D>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -56,23 +53,23 @@ public class OSimple<OpType, D> extends Expr<D> implements Operation<OpType, D>
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<D> asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
}
|
||||
@ -26,17 +26,14 @@ public class OString extends EString implements Operation<String, String> {
|
||||
return new OString(op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<String> op;
|
||||
private final Operation<String, String> opMixin;
|
||||
|
||||
OString(Operator<String> op, Expr<?>... args) {
|
||||
this(op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
OString(Operator<String> op, List<Expr<?>> args) {
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<String, String>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,23 +41,24 @@ public class OString extends EString implements Operation<String, String> {
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<String> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EString asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<String> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
}
|
||||
@ -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<String[]> implements
|
||||
Operation<String, String[]> {
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<String> op;
|
||||
|
||||
OStringArray(Operator<String> op, Expr<?>... args) {
|
||||
this(op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
OStringArray(Operator<String> op, List<Expr<?>> 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<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<String> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<String[]> asExpr() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -38,18 +38,15 @@ public class OTime<OpType, D extends Comparable<?>> extends ETime<D> implements
|
||||
return new OTime<O,D>(type, op, args);
|
||||
}
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OpType> op;
|
||||
|
||||
private final Operation<OpType, D> opMixin;
|
||||
|
||||
OTime(Class<D> type, Operator<OpType> op, Expr<?>... args) {
|
||||
this(type, op, Arrays.asList(args));
|
||||
}
|
||||
|
||||
OTime(Class<D> type, Operator<OpType> op, List<Expr<?>> args) {
|
||||
super(type);
|
||||
this.op = op;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
this.opMixin = new OperationMixin<OpType, D>(this, op, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -57,23 +54,23 @@ public class OTime<OpType, D extends Comparable<?>> extends ETime<D> implements
|
||||
v.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return op;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ETime<D> asExpr() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int index) {
|
||||
return opMixin.getArg(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return opMixin.getArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OpType> getOperator() {
|
||||
return opMixin.getOperator();
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,6 +16,11 @@ import com.mysema.query.types.expr.Expr;
|
||||
* @version $Id$
|
||||
*/
|
||||
public interface Operation<OP, RT> {
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
Expr<RT> asExpr();
|
||||
|
||||
/**
|
||||
* Get the argument with the given index
|
||||
*
|
||||
@ -37,17 +42,12 @@ public interface Operation<OP, RT> {
|
||||
* @return
|
||||
*/
|
||||
Operator<OP> getOperator();
|
||||
|
||||
|
||||
/**
|
||||
* Get the type of this operation
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
Class<? extends RT> getType();
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
Expr<RT> asExpr();
|
||||
|
||||
}
|
||||
|
||||
@ -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 <OP>
|
||||
* @param <RT>
|
||||
*/
|
||||
public class OperationMixin<OP, RT> implements Operation<OP, RT> {
|
||||
|
||||
private final List<Expr<?>> args;
|
||||
|
||||
private final Operator<OP> operator;
|
||||
|
||||
private final Expr<RT> self;
|
||||
|
||||
public OperationMixin(Expr<RT> self, Operator<OP> operator, List<Expr<?>> args){
|
||||
this.self = self;
|
||||
this.operator = operator;
|
||||
this.args = Collections.unmodifiableList(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<RT> asExpr() {
|
||||
return self;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Expr<?> getArg(int i) {
|
||||
return args.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expr<?>> getArgs() {
|
||||
return args;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operator<OP> getOperator() {
|
||||
return operator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends RT> getType() {
|
||||
return self.getType();
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user