
prerna.reactor.frame.py.CollapseReactor Maven / Gradle / Ivy
The newest version!
package prerna.reactor.frame.py;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import prerna.ds.py.PandasFrame;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.usertracking.AnalyticsTrackerHelper;
import prerna.util.usertracking.UserTrackerFactory;
public class CollapseReactor extends AbstractPyFrameReactor {
public CollapseReactor() {
this.keysToGet = new String[] { "groupByColumn", ReactorKeysEnum.VALUE.getKey(),
ReactorKeysEnum.DELIMITER.getKey(), ReactorKeysEnum.MAINTAIN_COLUMNS.getKey() };
}
@Override
public NounMetadata execute() {
organizeKeys();
PandasFrame frame = (PandasFrame) getFrame();
String wrapperFrameName = frame.getWrapperName();
List groupByCol = getGroupByCols();
String valueCol = ", '" + this.keyValue.get(this.keysToGet[1]) + "'";
String delim = ", '" + this.keyValue.get(this.keysToGet[2]) + "'";
String groupByColsR = "[";
// group by cols
for (int i = 0; i < groupByCol.size(); i++) {
String groupCol = groupByCol.get(i);
if(i == 0)
groupByColsR = groupByColsR + "'" + groupCol + "'";
else
groupByColsR = groupByColsR + ", '" + groupCol + "'";
}
groupByColsR += "]";
// main cols
// get columns to keep
// convert to a list
StringBuilder maintainCols = new StringBuilder("");
HashSet colsToKeep = getKeepCols();
if (colsToKeep != null) {
// merge columns
maintainCols.append(", [");
colsToKeep.addAll(groupByCol);
Iterator maintainIterator = colsToKeep.iterator();
for(int maintainColIndex = 0;maintainIterator.hasNext();maintainColIndex++)
{
String thisCol = maintainIterator.next();
if(maintainColIndex > 0)
maintainCols.append(", ");
maintainCols.append("'").append(thisCol).append("'");
}
maintainCols.append("]");
}
String script = frame.getName() + " = " + wrapperFrameName + ".collapse(" + groupByColsR + valueCol + delim + maintainCols + ")";
frame.runScript(script);
this.addExecutedCode(script);
frame = (PandasFrame) recreateMetadata(frame);
// NEW TRACKING
UserTrackerFactory.getInstance().trackAnalyticsWidget(
this.insight,
frame,
"Collapse",
AnalyticsTrackerHelper.getHashInputs(this.store, this.keysToGet));
NounMetadata retNoun = new NounMetadata(frame, PixelDataType.FRAME, PixelOperationType.FRAME_HEADERS_CHANGE, PixelOperationType.FRAME_DATA_CHANGE);
return retNoun;
}
private List getGroupByCols() {
List colInputs = new Vector();
GenRowStruct colGRS = this.store.getNoun(this.keysToGet[0]);
if (colGRS != null) {
int size = colGRS.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
// get each individual column entry and clean
String column = colGRS.get(i).toString();
colInputs.add(column);
}
}
}
return colInputs;
}
private HashSet getKeepCols() {
HashSet colInputs = new HashSet();
GenRowStruct colGRS = this.store.getNoun(ReactorKeysEnum.MAINTAIN_COLUMNS.getKey());
if (colGRS != null) {
int size = colGRS.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
// get each individual column entry and clean
String column = colGRS.get(i).toString();
colInputs.add(column);
}
return colInputs;
}
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy