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

prerna.reactor.AsReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor;

import java.util.List;
import java.util.Set;

import prerna.reactor.frame.CreateFrameReactor;
import prerna.reactor.frame.convert.ConvertReactor;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.nounmeta.NounMetadata;

public class AsReactor extends AbstractReactor {
	
	public NounMetadata execute() {
		String alias = (String) curRow.get(0);
		NounMetadata noun = new NounMetadata(alias, PixelDataType.ALIAS);
		// also add up to the parent like 
		// as ALIAS type
		if(parentReactor != null) {
			parentReactor.getNounStore().makeNoun(PixelDataType.ALIAS.getKey()).add(noun);
		}
		// return null - we dont want to merge this twice
		// and the syntax is always .as()
		// which means there should always be a parent reactor
		return null;
	}

	public void updatePlan()
	{
		// add the inputs from the store as well as this operation
		// first is all the inputs
		// really has one job pick the parent.. 
		// replace the as Name
		// the as name could come in as an array too
		// for now I will go with the name
		Set keys = store.nounRow.keySet();

		String [] asNames = null;
		for(String singleKey : keys) {
			GenRowStruct struct = store.nounRow.get(singleKey);
			List inputs = struct.getAllStrValues(); // ideally this should get only one column for now
			asNames = new String[1];
			asNames[0] = inputs.get(0).trim();
		}
		
		if(this.parentReactor != null && asNames != null) {
			// get the columns on as
			parentReactor.setAs(asNames);
			
			NounMetadata asNoun = null;
			if(parentReactor instanceof CreateFrameReactor || parentReactor instanceof ConvertReactor) {
				// do not override if we already have the actual 
				// frame in the planner
				if(!(this.planner.hasVariable(asNames[0]) 
						&& this.planner.getVariable(asNames[0]).getNounType() == PixelDataType.FRAME) ) {
					asNoun = new NounMetadata(parentReactor.getStoreMap(), PixelDataType.FRAME, PixelOperationType.FRAME_MAP);
				}
			} else {
				asNoun = new NounMetadata(parentReactor, PixelDataType.LAMBDA);
				this.planner.addVariable(asNames[0], asNoun);
			}
		}
	}
	
	@Override
	public void mergeUp() {
		// merge this reactor into the parent reactor
		if(parentReactor != null) {
			// this adds to the parent directly
			execute();
		}
	}
	
	@Override
	public List getInputs() {
		// this is used primarily for the planner
		// we do not need to add these steps since 
		// the parent will automatically take these 
		// into consideration
		return null;
	}
	
	@Override
	public List getOutputs() {
		// this is used primarily for the planner
		// we do not need to add these steps since 
		// the parent will automatically take these 
		// into consideration
		return null;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy