
prerna.reactor.frame.r.LookupMergeReactor Maven / Gradle / Ivy
The newest version!
package prerna.reactor.frame.r;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import org.apache.logging.log4j.Logger;
import prerna.algorithm.api.SemossDataType;
import prerna.auth.User;
import prerna.auth.utils.AbstractSecurityUtils;
import prerna.ds.OwlTemporalEngineMeta;
import prerna.ds.r.RDataTable;
import prerna.ds.r.RSyntaxHelper;
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.AddHeaderNounMetadata;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.Utility;
public class LookupMergeReactor extends AbstractRFrameReactor {
private static final String CLASS_NAME = LookupMergeReactor.class.getName();
private Logger logger = null;
public static final String MATCHES = "matches";
public LookupMergeReactor() {
this.keysToGet = new String[] { ReactorKeysEnum.COLUMN.getKey(), MATCHES };
}
@Override
public NounMetadata execute() {
organizeKeys();
User user = this.insight.getUser();
// check if user is logged in
if (AbstractSecurityUtils.anonymousUsersEnabled() && user.isAnonymous()) {
throwAnonymousUserError();
}
// initialize the reactor
init();
this.logger = getLogger(CLASS_NAME);
// get frame
RDataTable frame = (RDataTable) getFrame();
// get frame name
String frameName = frame.getName();
// get inputs
String column = getColumn();
// clean column name
if (column.contains("__")) {
column = column.split("__")[1];
}
String newColumn = column + "_matched";
// create the matches frame and get the matches
HashMap matches = getMatches();
StringJoiner request = new StringJoiner(",", "c(", ")");
StringJoiner match = new StringJoiner(",", "c(", ")");
for (Object instance : matches.keySet()) {
List group = (List) matches.get(instance);
int groupIdx = 0;
int groupLen = group.size();
for (; groupIdx < groupLen; groupIdx++) {
request.add("\"" + instance + "\"");
match.add("\"" + group.get(groupIdx) + "\"");
}
}
StringBuilder matchScript = new StringBuilder();
matchScript.append("data.frame(");
matchScript.append("\"" + column + "\"" + "=" + request + ", ");
matchScript.append("\"" + newColumn + "\"" + "=" + match);
matchScript.append(")");
String matchFrame = "LookupMatch" + Utility.getRandomString(6);
// get the join
// we will merge on col1
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy