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

prerna.engine.impl.json.JsonWrapper Maven / Gradle / Ivy

The newest version!
package prerna.engine.impl.json;

import java.io.IOException;
import java.util.Hashtable;

import net.minidev.json.JSONArray;
import prerna.algorithm.api.SemossDataType;
import prerna.engine.api.IDatabaseEngine;
import prerna.engine.api.IHeadersDataRow;
import prerna.engine.api.IRawSelectWrapper;
import prerna.om.HeadersDataRow;

public class JsonWrapper implements IRawSelectWrapper {
	
	protected IDatabaseEngine engine;
	protected String separator = "_";
	protected int numRows = -1;
	protected int curRow = 0;
	
	// values for querying
	protected String query;
	
	// number of return columns
	protected int numColumns = 0;
	
	// values for return
	protected String[] headers;
	protected	SemossDataType[] types;
	
	// specific for this engine
	// json wrapper 2 deos not use this
	// but shares the above
	private JSONArray [] data = null;
	
	@Override
	public void execute() throws Exception {
		// sorry for the bad way to transport data
		Hashtable output = (Hashtable)engine.execQuery(query);
		this.data = (JSONArray [])output.get("DATA");

		this.headers = (String [])output.get("HEADERS");
		this.numColumns = this.headers.length;
		this.numRows = (Integer)output.get("COUNT");

		if(output.containsKey("SEPARATOR")) {
			separator = (String)output.get("SEPARATOR");
		}
		
		String[] strTypes = (String []) output.get("TYPES");
		this.types = new SemossDataType[this.numColumns];
		for(int i = 0; i < this.numColumns; i++) {
			this.types[i] = SemossDataType.convertStringToDataType(strTypes[i]);
		}
	}

	@Override
	public boolean hasNext() {
		return curRow < numRows;
	}

	@Override
	public void setQuery(String query) {
		this.query = query;
	}
	
	@Override
	public String getQuery() {
		return this.query;
	}

	@Override
	public void setEngine(IDatabaseEngine engine) {
		this.engine = engine;
	}

	@Override
	public IDatabaseEngine getEngine() {
		return this.engine;
	}
	
	@Override
	public IHeadersDataRow next() {
		Object [] values = new Object[headers.length];
		for(int colIndex = 0;colIndex < headers.length;colIndex++) {
			JSONArray thisArray = data[colIndex];

			Object thisValue = thisArray.get(curRow);
			if(thisValue instanceof JSONArray) {
				// need to do the magic of delimiters etc. 
				JSONArray thisValueArray = (JSONArray)thisValue;
				StringBuffer output = new StringBuffer("");
				for(int valIndex = 0; valIndex < thisValueArray.size(); valIndex++) {
					if(valIndex != 0) {
						output.append(separator);
					}
					output.append(thisValueArray.get(valIndex));	
				}
				thisValue = output.toString();
			}

			values[colIndex] = thisValue;
		}
		curRow++;

		IHeadersDataRow retRow = new HeadersDataRow(this.headers, values);
		return retRow;
	}

	@Override
	public String[] getHeaders() {
		return this.headers;
	}

	@Override
	public SemossDataType[] getTypes() {
		return types;
	}
	
	@Override
	public long getNumRows() {
		return this.numRows;
	}
	
	@Override
	public long getNumRecords() {
		return this.numRows * this.headers.length;
	}
	
	@Override
	public void close() throws IOException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void reset() {
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public boolean flushable() {
		// TODO Auto-generated method stub
		return false;
	}
	
	@Override
	public String flush() {
		// TODO Auto-generated method stub
		return null;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy