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

prerna.query.interpreters.JsonInterpreter Maven / Gradle / Ivy

The newest version!
package prerna.query.interpreters;

import java.util.List;
import java.util.Vector;

import org.apache.logging.log4j.Logger;

import prerna.engine.api.IDatabaseEngine;
import prerna.query.querystruct.AbstractQueryStruct;
import prerna.query.querystruct.filters.IQueryFilter;
import prerna.query.querystruct.filters.SimpleQueryFilter;
import prerna.query.querystruct.filters.SimpleQueryFilter.FILTER_TYPE;
import prerna.query.querystruct.selectors.IQuerySelector;
import prerna.query.querystruct.selectors.QueryColumnSelector;

public class JsonInterpreter implements IQueryInterpreter{

	
	AbstractQueryStruct qs = null;
	StringBuffer selectors = null;
	StringBuffer filters = null;
	// for fda this is a +
	public String separator = "&";
	IDatabaseEngine engine = null;
	
	// equalizer
	// for FDA this is a :
	public String equal = "=";
	

	public JsonInterpreter(IDatabaseEngine engine)
	{
		this.engine = engine;
	}
	
	
	@Override
	public String composeQuery() {
		addSelectors();
		addFilters();
		
		String retString = "";
		if(selectors != null)
			retString = selectors.toString();
		
		if(filters != null)
			retString = selectors.toString() + "@@@" + filters.toString();
		
		return retString;
	}

	@Override
	public void setQueryStruct(AbstractQueryStruct qs) {
		this.qs = qs;
		
	}

	@Override
	public void setDistinct(boolean isDistinct) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public boolean isDistinct() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void setLogger(Logger logger) {
		// TODO Auto-generated method stub
		
	}
	
	 /* Loops through the selectors defined in the QS to add them to the selector string
	 * and considers if the table should be added to the from string
	 */
	public void addSelectors() {
		List selectorData = qs.getSelectors();
		for(IQuerySelector selector : selectorData) {
			addSelector(selector);
		}
	}
	
	private void addSelector(IQuerySelector selector) {
		String alias = selector.getAlias();
		
		String pathPattern = ((QueryColumnSelector)selector).getColumn();
		
		// this is basically the same thing
		// the path pattern sits on the prop file
		if(alias.equalsIgnoreCase(pathPattern))
		{
			if(selectors == null)
				selectors = new StringBuffer(pathPattern);
			else
				selectors = selectors.append(";").append(pathPattern);
		}

		//alias=pathPattern
		
		else
		{
			String totalString = alias + "=" + pathPattern;
			if(selectors == null)
				selectors = new StringBuffer(totalString);
			else
				selectors = selectors.append(";").append(totalString);			
		}		
	}
	
	public void addFilters() {
		List filters = qs.getCombinedFilters().getFilters();
		for(IQueryFilter filter : filters) {
			StringBuilder filterSyntax = processFilter(filter);
			if(filterSyntax != null) {
				if(this.filters == null) {
					this.filters = new StringBuffer(filterSyntax);
				} else {
					this.filters = this.filters.append(";").append(filterSyntax);	
				}
			}
		}
	}
	
	private StringBuilder processFilter(IQueryFilter filter) {
		IQueryFilter.QUERY_FILTER_TYPE filterType = filter.getQueryFilterType();
		if(filterType == IQueryFilter.QUERY_FILTER_TYPE.SIMPLE) 
			return processSimpleQueryFilter((SimpleQueryFilter) filter);
		return null;
	}
 

	private StringBuilder processSimpleQueryFilter(SimpleQueryFilter filter) {
		// big assumption!!!!
		// only considering a filter for basic columns
		// not taking into consideration the actual comparator
		FILTER_TYPE fType = filter.getSimpleFilterType();
		if(fType == FILTER_TYPE.COL_TO_VALUES) {
			return processColToValFilter((IQuerySelector) filter.getLComparison().getValue(), filter.getRComparison().getValue());
		} else if(fType == FILTER_TYPE.VALUES_TO_COL) {
			return processColToValFilter((IQuerySelector) filter.getRComparison().getValue(), filter.getLComparison().getValue());
		} else if(fType == FILTER_TYPE.VALUE_TO_VALUE) {
			return processValToValFilter(filter.getRComparison().getValue(), filter.getLComparison().getValue());
		} else {
			return null;
		}
	}
	
	private StringBuilder processValToValFilter(Object value1, Object value2) {
		// account for arrays
		// TODO: too lazy atm
		StringBuilder finalVal = new StringBuilder(value2 + "=");
		String value1String = value1 + "";
		
		if(value1 instanceof Vector)
		{
			Vector vecValue1 = (Vector)value1;
			StringBuffer rightValMaker = new StringBuffer("ARRAY");
			for(int valIndex = 0; valIndex < vecValue1.size(); valIndex++)
			{
				if(valIndex != 0) {
					rightValMaker.append("<>");
				}
				rightValMaker.append(vecValue1.get(valIndex));
			}
			rightValMaker.append("ARRAY");
			finalVal.append(rightValMaker.toString());
		}
		else
			finalVal.append(value1);
		
		return finalVal;
	}


	private StringBuilder processColToValFilter(IQuerySelector col, Object val) {
		String alias = col.getAlias();
		String valStr = null;
		if(val instanceof List) {
			StringBuffer rightValMaker = new StringBuffer("ARRAY");
			for(int valIndex = 0; valIndex < ((List) val).size(); valIndex++)
			{
				if(valIndex != 0) {
					rightValMaker.append("<>");
				}
				rightValMaker.append(((List) val).get(valIndex));
			}
			rightValMaker.append("ARRAY");
			valStr = rightValMaker.toString();
		} else {
			valStr = val.toString();
		}
		return new StringBuilder(alias + "=" + valStr);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy