package nebula.expr; @Deprecated public abstract class QuickExprBuilder { protected Exp exp; protected abstract String getStringByName(String name); protected abstract Integer getIntegerByName(String name); public V<String> Fs(String name) { return new Field_String(name); } public V_Integer Fint(String name) { return new Field_Integer(name); } public V_String C(String value) { return new Cst_String(value); } public V<Integer> C(Integer value) { return new Cst_Integer(value); } public LogicExp Nop() { return new True(); } class ExpImp implements Exp { @Override final public void finish() { QuickExprBuilder.this.exp = this; } } abstract class LogicExpImp extends ExpImp implements LogicExp { public LogicExp and(LogicExp v) { return new And(this, v); } public LogicExp or(LogicExp v) { return new Or(this, v); } public LogicExp not() { return new Not(this); } } class Cst_String extends V_StringImp { String value; Cst_String(final String value) { this.value = value; } public String exec() { return value; } } class Cst_Integer extends V_Integer { int value; Cst_Integer(final Integer value) { this.value = value; } public Integer exec() { return value; } } abstract class V_StringImp extends ExpImp implements V<String>, V_String { @Override public LogicExp gt(V<String> v) { return new Gt_String(this, v); } @Override public LogicExp ge(V<String> v) { return new Ge_String(this, v); } @Override public LogicExp lt(V<String> v) { return new Lt_String(this, v); } @Override public LogicExp le(V<String> v) { return new Le_String(this, v); } @Override public LogicExp eq(V<String> v) { return new Eq_String(this, v); } @Override public LogicExp ne(V<String> v) { return new Ne_String(this, v); } @Override public LogicExp gtF(String name) { return new Gt_String(this, new Field_String(name)); } @Override public LogicExp geF(String name) { return new Ge_String(this, new Field_String(name)); } @Override public LogicExp ltF(String name) { return new Lt_String(this, new Field_String(name)); } @Override public LogicExp leF(String name) { return new Le_String(this, new Field_String(name)); } @Override public LogicExp eqF(String name) { return new Eq_String(this, new Field_String(name)); } @Override public LogicExp neF(String name) { return new Ne_String(this, new Field_String(name)); } @Override public LogicExp gt(String v) { return new Gt_String(this, new Cst_String(v)); } @Override public LogicExp ge(String v) { return new Ge_String(this, new Cst_String(v)); } @Override public LogicExp lt(String v) { return new Lt_String(this, new Cst_String(v)); } @Override public LogicExp le(String v) { return new Le_String(this, new Cst_String(v)); } @Override public LogicExp eq(String v) { return new Eq_String(this, new Cst_String(v)); } @Override public LogicExp ne(String v) { return new Ne_String(this, new Cst_String(v)); } @Override public LogicExp inF(String name) { return new In_String(this, new Field_String(name)); } @Override public LogicExp in(V<String> v) { return new In_String(this, v); } @Override public LogicExp in(String v) { return new In_String(this, new Cst_String(v)); } } abstract class V_Integer extends ExpImp implements V<Integer> { @Override public LogicExp gt(V<Integer> v) { return new Gt_Integer(this, v); } @Override public LogicExp ge(V<Integer> v) { return new Ge_Integer(this, v); } @Override public LogicExp lt(V<Integer> v) { return new Lt_Integer(this, v); } @Override public LogicExp le(V<Integer> v) { return new Le_Integer(this, v); } @Override public LogicExp eq(V<Integer> v) { return new Eq_Integer(this, v); } @Override public LogicExp ne(V<Integer> v) { return new Ne_Integer(this, v); } @Override public LogicExp gtF(String name) { return new Gt_Integer(this, new Field_Integer(name)); } @Override public LogicExp geF(String name) { return new Ge_Integer(this, new Field_Integer(name)); } @Override public LogicExp ltF(String name) { return new Lt_Integer(this, new Field_Integer(name)); } @Override public LogicExp leF(String name) { return new Le_Integer(this, new Field_Integer(name)); } @Override public LogicExp eqF(String name) { return new Eq_Integer(this, new Field_Integer(name)); } @Override public LogicExp neF(String name) { return new Ne_Integer(this, new Field_Integer(name)); } @Override public LogicExp gt(Integer v) { return new Gt_Integer(this, new Cst_Integer(v)); } @Override public LogicExp ge(Integer v) { return new Ge_Integer(this, new Cst_Integer(v)); } @Override public LogicExp lt(Integer v) { return new Lt_Integer(this, new Cst_Integer(v)); } @Override public LogicExp le(Integer v) { return new Le_Integer(this, new Cst_Integer(v)); } @Override public LogicExp eq(Integer v) { return new Eq_Integer(this, new Cst_Integer(v)); } @Override public LogicExp ne(Integer v) { return new Ne_Integer(this, new Cst_Integer(v)); } } private class Field_String extends V_StringImp implements Field<String> { String name; Field_String(final String name) { this.name = name; } @Override public String exec() { return QuickExprBuilder.this.getStringByName(name); } } private class Field_Integer extends V_Integer implements Field<Integer> { String name; Field_Integer(final String name) { this.name = name; } @Override public Integer exec() { return QuickExprBuilder.this.getIntegerByName(name); } } abstract class BinaryLogicCompareExp<T> extends LogicExpImp { V<T> e1; V<T> e2; BinaryLogicCompareExp(final V<T> e1, final V<T> e2) { this.e1 = e1; this.e2 = e2; } } abstract class BinaryLogicComputeExp extends LogicExpImp { LogicExp e1; LogicExp e2; BinaryLogicComputeExp(final LogicExp e1, final LogicExp e2) { this.e1 = e1; this.e2 = e2; } } class Gt_String extends BinaryLogicCompareExp<String> { Gt_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return s1 != null && s2 != null && s1.compareTo(s2) > 0; } } class Ge_String extends BinaryLogicCompareExp<String> { Ge_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return (s1 != null && s2 != null && s1.compareTo(s2) >= 0); } } class Lt_String extends BinaryLogicCompareExp<String> { Lt_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return s1 != null && s2 != null && s1.compareTo(s2) < 0; } } class Le_String extends BinaryLogicCompareExp<String> { Le_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return s1 != null && s2 != null && s1.compareTo(s2) <= 0; } } class Eq_String extends BinaryLogicCompareExp<String> { Eq_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return s1 != null && s2 != null && s1.compareTo(s2) == 0; } } class Ne_String extends BinaryLogicCompareExp<String> { Ne_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return s1 != null && s2 != null && s1.compareTo(s2) != 0; } } class In_String extends BinaryLogicCompareExp<String> { In_String(final V<String> e1, final V<String> e2) { super(e1, e2); } @Override public boolean exec() { String s1 = e1.exec(); String s2 = e2.exec(); return s1 != null && s2 != null && s2.indexOf(s1) >= 0; } } class Gt_Integer extends BinaryLogicCompareExp<Integer> { Gt_Integer(final V<Integer> e1, final V<Integer> e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() > e2.exec(); } } class Ge_Integer extends BinaryLogicCompareExp<Integer> { Ge_Integer(final V<Integer> e1, final V<Integer> e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() >= e2.exec(); } } class Lt_Integer extends BinaryLogicCompareExp<Integer> { Lt_Integer(final V<Integer> e1, final V<Integer> e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() < e2.exec(); } } class Le_Integer extends BinaryLogicCompareExp<Integer> { Le_Integer(final V<Integer> e1, final V<Integer> e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() <= e2.exec(); } } class Eq_Integer extends BinaryLogicCompareExp<Integer> { Eq_Integer(final V<Integer> e1, final V<Integer> e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() == e2.exec(); } } class Ne_Integer extends BinaryLogicCompareExp<Integer> { Ne_Integer(final V<Integer> e1, final V<Integer> e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() != e2.exec(); } } /** * A logical "or" expression. */ class Or extends BinaryLogicComputeExp { Or(final LogicExp e1, final LogicExp e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() || e2.exec(); } } class And extends BinaryLogicComputeExp { And(final LogicExp e1, final LogicExp e2) { super(e1, e2); } @Override public boolean exec() { return e1.exec() && e2.exec(); } } class Not extends LogicExpImp { LogicExp e; Not(final LogicExp e) { this.e = e; } @Override public boolean exec() { return !e.exec(); } } class True extends LogicExpImp { @Override public boolean exec() { return true; } } }