
prerna.reactor.frame.r.DropColumnReactor Maven / Gradle / Ivy
The newest version!
package prerna.reactor.frame.r;
import java.util.List;
import java.util.Vector;
import prerna.ds.OwlTemporalEngineMeta;
import prerna.ds.r.RDataTable;
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.sablecc2.om.nounmeta.RemoveHeaderNounMetadata;
import prerna.util.usertracking.AnalyticsTrackerHelper;
import prerna.util.usertracking.UserTrackerFactory;
public class DropColumnReactor extends AbstractRFrameReactor {
/**
* This reactor drops columns from the frame. The inputs to the reactor are:
* 1) list of columns to drop
*/
public DropColumnReactor() {
this.keysToGet = new String[]{ReactorKeysEnum.COLUMNS.getKey()};
}
@Override
public NounMetadata execute() {
// initialize rJavaTranslator
init();
// get frame
RDataTable frame = (RDataTable) getFrame();
OwlTemporalEngineMeta metaData = this.getFrame().getMetaData();
// get table name
String table = frame.getName();
// store the list of names being removed
List remCols = new Vector();
// get inputs
List columns = getColumns();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < columns.size(); i++) {
String col = columns.get(i);
if (col.contains("__")) {
String[] split = col.split("__");
col = split[1];
table = split[0];
}
// define the script to be executed
builder.append(table + " <- " + table + "[," + col + ":=NULL];");
remCols.add(col);
String dataType = metaData.getHeaderTypeAsString(table + "__" + col);
if(dataType == null)
return getWarning("Frame is out of sync / No Such Column. Cannot perform this operation");
metaData.dropProperty(table + "__" + col, table);
// drop filters with this column
frame.getFrameFilters().removeColumnFilter(col);
}
// run the script
this.rJavaTranslator.runR(builder.toString());
this.addExecutedCode(builder.toString());
// reset the frame headers
frame.syncHeaders();
// NEW TRACKING
UserTrackerFactory.getInstance().trackAnalyticsWidget(
this.insight,
frame,
"DropColumn",
AnalyticsTrackerHelper.getHashInputs(this.store, this.keysToGet));
NounMetadata retNoun = new NounMetadata(frame, PixelDataType.FRAME, PixelOperationType.FRAME_HEADERS_CHANGE, PixelOperationType.FRAME_DATA_CHANGE);
retNoun.addAdditionalReturn(new RemoveHeaderNounMetadata(remCols));
return retNoun;
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
///////////////////////// GET PIXEL INPUT ////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
private List getColumns() {
List columns = new Vector();
GenRowStruct colGrs = this.store.getNoun(this.keysToGet[0]);
if (colGrs != null && !colGrs.isEmpty()) {
for (int selectIndex = 0; selectIndex < colGrs.size(); selectIndex++) {
String column = colGrs.get(selectIndex) + "";
columns.add(column);
}
} else {
GenRowStruct inputsGRS = this.getCurRow();
// keep track of selectors to change to upper case
if (inputsGRS != null && !inputsGRS.isEmpty()) {
for (int selectIndex = 0; selectIndex < inputsGRS.size(); selectIndex++) {
String column = inputsGRS.get(selectIndex) + "";
columns.add(column);
}
}
}
return columns;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy