From e742bf9b8d1bc5ee7a97586510643db6fd3174f2 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 18 Nov 2019 14:53:44 +0100 Subject: Implement basic API (#15) --- .../pl/edu/mimuw/cloudatlas/model/ValueQuery.java | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java (limited to 'src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java') diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java new file mode 100644 index 0000000..d9cbe4c --- /dev/null +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java @@ -0,0 +1,70 @@ +package pl.edu.mimuw.cloudatlas.model; + +import java.io.ByteArrayInputStream; + +import pl.edu.mimuw.cloudatlas.interpreter.query.Absyn.Program; +import pl.edu.mimuw.cloudatlas.interpreter.query.parser; +import pl.edu.mimuw.cloudatlas.interpreter.query.Yylex; +import pl.edu.mimuw.cloudatlas.model.Value; + +/** + * A class that holds a CloudAtlas query. + */ +public class ValueQuery extends Value { + // Original source code + private String code; + // Parsed query + private Program query; + /** + * Constructs a new ValueQuery object. + * + * @param name the name of the query + * @param query the code of the query + */ + public ValueQuery(String query) throws Exception { + this.code = query; + Yylex lex = new Yylex(new ByteArrayInputStream(query.getBytes())); + this.query = (new parser(lex)).pProgram(); + } + + private ValueQuery() { + this.code = null; + this.query = null; + } + + @Override + public Type getType() { + return TypePrimitive.QUERY; + } + + @Override + public boolean isNull() { + return query == null || code == null; + } + + public Value isEqual(Value value) { + sameTypesOrThrow(value, Operation.EQUAL); + if(isNull() && value.isNull()) + return new ValueBoolean(true); + else if(isNull() || value.isNull()) + return new ValueBoolean(false); + return new ValueBoolean(code.equals(((ValueQuery)value).code)); + } + + @Override + public Value getDefaultValue() { + return new ValueQuery(); + } + + @Override + public Value convertTo(Type type) { + switch(type.getPrimaryType()) { + case QUERY: + return this; + case STRING: + return isNull() ? ValueString.NULL_STRING : new ValueString(code); + default: + throw new UnsupportedConversionException(getType(), type); + } + } +} -- cgit v1.2.3