ArdenClause.java

/**
 * The contents of this file are subject to the OpenMRS Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://license.openmrs.org
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * Copyright (C) OpenMRS, LLC.  All Rights Reserved.
 */
package org.openmrs.arden;

import org.openmrs.Concept;

/**
 * Arden Clauses are represented by ArdenClause classes. Clauses can be constructed from concepts,
 * rules, or other clauses. They also expose aggregate and predicate methods such as earliest(),
 * latest(), max(), and greaterThan(n). Every method returns another ArdenClause. The Arden Clauses
 * do not actually fetch data or return values; rather, they represent a semantic hierarchy needed
 * to resolve a particular Arden Value. The criteria are abstracted so an Arden Clause can be passed
 * down to the database layer and, ideally, be translated to SQL or similar language.
 */

public class ArdenClause {
	
	private ArdenRule rule;
	
	private Concept concept;
	
	private ArdenClause clause;
	
	public static enum Predicate {
		last, first, max, min, avg, greaterThan, lessThan, greaterThanEqual, lessThanEqual
	};
	
	private Predicate predicate;
	
	private Double predicateVal;
	
	/*
	 * Default Constructor
	 */

	public ArdenClause() {
		
	}
	
	public ArdenClause concept(Concept c) {
		concept = c;
		return this;
	}
	
	public ArdenClause rule(ArdenRule r) {
		rule = r;
		return this;
	}
	
	public ArdenClause clause(ArdenClause cl) {
		clause = cl;
		return this;
	}
	
	/*
	* getters
	*/
	public Concept getConcept() {
		return concept;
	}
	
	public Predicate getPredicate() {
		return predicate;
		
	}
	
	public ArdenClause last() {
		predicate = Predicate.last;
		return this;
	}
	
	public ArdenClause last(double val) {
		predicate = Predicate.last;
		predicateVal = val;
		return this;
	}
	
	public ArdenClause first() {
		predicate = Predicate.first;
		return this;
	}
	
	public ArdenClause first(double val) {
		predicate = Predicate.first;
		predicateVal = val;
		return this;
	}
	
	public ArdenClause max() {
		predicate = Predicate.max;
		return this;
	}
	
	public ArdenClause min() {
		predicate = Predicate.min;
		return this;
	}
	
	public ArdenClause avg() {
		predicate = Predicate.avg;
		return this;
		
	}
	
	public ArdenClause greaterThan(double val) {
		predicate = Predicate.greaterThan;
		predicateVal = val;
		return this;
	}
	
	public ArdenClause lessThan(double val) {
		predicate = Predicate.lessThan;
		predicateVal = val;
		return this;
	}
	
	public ArdenClause greaterThanEqual(double val) {
		predicate = Predicate.greaterThanEqual;
		predicateVal = val;
		return this;
	}
	
	public ArdenClause lessThanEqual(double val) {
		predicate = Predicate.lessThanEqual;
		predicateVal = val;
		return this;
	}
	
	/*
	* Temporal operations
	*/
	public ArdenClause within() {
		return this;
	}
	
	public ArdenClause within(String str1, String str2) {
		return this;
	}
	
	public ArdenClause past() {
		return this;
	}
	
	public ArdenClause after(String str) {
		return this;
	}
	
	public ArdenClause before(String str) {
		return this;
	}
	
	public ArdenClause at(String str) {
		return this;
	}
	
	public ArdenClause equal(String str) {
		return this;
	}
	
	public ArdenClause Days(int val) {
		return this;
	}
	
	public ArdenClause Years(int val) {
		return this;
	}
	
}