All Downloads are FREE. Search and download functionalities are using the official Maven repository.

astra.statement.Query Maven / Gradle / Ivy

package astra.statement;

import java.util.Map;
import java.util.Map.Entry;

import astra.core.Intention;
import astra.formula.Formula;
import astra.reasoner.util.ContextEvaluateVisitor;
import astra.term.Term;
import astra.term.Variable;

public class Query extends AbstractStatement {
	Formula guard;
	
	public Query(String clazz, int[] data, Formula guard) {
		this.setLocation(clazz, data[0], data[1], data[2], data[3]);
		this.guard = guard;
	}
	
	@Override
	public StatementHandler getStatementHandler() {
		return new AbstractStatementHandler() {
			
			@Override
			public boolean execute(Intention intention) {
				try { 
					Map result = intention.query((Formula) guard.accept(new ContextEvaluateVisitor(intention)));
					if (result != null) {
						for(Entry entry: result.entrySet()) {
							executor.addVariable(new Variable(entry.getValue().type(), entry.getKey()), entry.getValue());
						}
					} else {
						intention.failed("Could not resolve query: " + guard, null);
					}
				} catch (Throwable th) {
					intention.failed("Failed to match guard", th);
				}
				return false;
			}

			@Override
			public boolean onFail(Intention context) {
				return false;
			}

			@Override
			public Statement statement() {
				return Query.this;
			}
			
			public String toString() {
				return Query.this.toString();
			}
			
		};
	}

	public String toString() {
		return "query(" + guard + ")";
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy