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

prerna.reactor.planner.graph.LoadClientReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.planner.graph;

import java.util.HashMap;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.engine.api.IHeadersDataRow;
import prerna.engine.api.IRawSelectWrapper;
import prerna.reactor.PixelPlanner;
import prerna.reactor.planner.AbstractLoadClient;
import prerna.sablecc2.LazyTranslation;
import prerna.sablecc2.PixelUtility;
import prerna.util.Constants;

public class LoadClientReactor extends AbstractLoadClient {

	private static final Logger LOGGER = LogManager.getLogger(LoadClientReactor.class.getName());

	protected PixelPlanner createPlanner() {
		long start = System.currentTimeMillis();

		// generate our lazy translation
		// which only ingests the routines
		// without executing

		LazyTranslation plannerT = new LazyTranslation();
		// get the iterator we are loading
		IRawSelectWrapper iterator;
		try {
			iterator = (IRawSelectWrapper) getIterator();
			String[] headers = iterator.getHeaders();
			int[] assignmentIndices = getAssignmentIndices(headers);
			int valIndex = getValueIndex(headers);
			int typeIndex = getTypeIndex(headers);
			int returnTypeIndex = getReturnTypeIndex(headers);
			String separator = getSeparator();
			if(!plannerT.getPlanner().hasProperty("MAIN_MAP", "MAIN_MAP")){
				HashMap map = new HashMap();
				plannerT.getPlanner().addProperty("MAIN_MAP", "MAIN_MAP", map);
			}
			HashMap mainMap = (HashMap )plannerT.getPlanner().getProperty("MAIN_MAP", "MAIN_MAP");
			int count = 0;
			while(iterator.hasNext()) {
				//			System.out.println(count);
				//			count++;
				IHeadersDataRow nextData = iterator.next();
				Object[] values = nextData.getValues();

				//grab the assignment variable, or the alias
				String assignment = getAssignment(values, assignmentIndices, separator);

				//grab the value we are assigning to that variable/alias
				String value = getValue(values, valIndex);	
				String returnType = getReturnType(values, returnTypeIndex);
				mainMap.put(assignment, returnType);
				//if the value is a formula add to the pksl planner
				if(isFormula(values, typeIndex)) {
					String pkslString = generatePKSLString(assignment, value);
					// skip adding self reflection pksls
					// i.e. x = (x);
					if(!AbstractPlannerReactor.isSimpleAssignment(pkslString)) {
						PixelUtility.addPixelToTranslation(plannerT, pkslString);
					}
				}
				//else we just want to add the value of the constant/decimal directly to the planner
				else{
					addVariable(plannerT.getPlanner(), assignment, value);
				}
			}
		} catch (Exception e) {
			LOGGER.error(Constants.STACKTRACE, e);
		}

		// grab the planner from the new translation
		//		LOGGER.info("****************    "+total+"      *************************");
		//		LOGGER.info("****************    "+error+"      *************************");

		long end = System.currentTimeMillis();
		LOGGER.info("****************    END LOAD CLIENT "+(end - start)+"ms      *************************");

		return plannerT.getPlanner();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy