package org.reldb.rel.v0.values; import java.io.PrintStream; import java.io.Serializable; import org.reldb.rel.v0.generator.Generator; import org.reldb.rel.v0.types.Type; import org.reldb.rel.v0.vm.Context; import org.reldb.rel.v0.vm.Operator; public class ValueOperator extends ValueAbstract implements Serializable { private static final long serialVersionUID = 0; private String source; private volatile Operator operator; private volatile Context enclosingContext; /** Create a new tuple with default attribute values. */ public ValueOperator(Generator generator, Operator operator, String source) { super(generator); this.operator = operator; this.source = source; enclosingContext = null; loaded(generator); } public void loaded(Generator generator) { super.loaded(generator); } public void setEnclosingContext(Context context) { enclosingContext = context; } public Context getEnclosingContext() { return enclosingContext; } /** Obtain a serializable clone of this value. */ public Value getSerializableClone() { return new ValueOperator(getGenerator(), null, source); } public String getTypeName() { return "OPERATOR"; } public Operator getOperator(Generator generator) { if (operator == null) operator = generator.getDatabase().compileAnonymousOperator(getSource(), generator.getPrintStream()).operator; return operator; } /** Output this Value to a PrintStream. */ public void toStream(Generator generator, Context context, Type type, PrintStream p, int depth) { p.print(toString()); } public int hashCode() { return toString().hashCode(); } public int compareTo(Value v) { // questionable to compare on operator text, but it's the best we've got return getSource().compareTo(((ValueOperator)v).getSource()); } public String getSource() { return "OPERATOR " + source + " END OPERATOR"; } public String toString() { return "\"" + getSource() + "\""; } }