
prerna.reactor.frame.CacheNativeFrame Maven / Gradle / Ivy
The newest version!
package prerna.reactor.frame;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import prerna.algorithm.api.ITableDataFrame;
import prerna.ds.nativeframe.NativeFrame;
import prerna.engine.api.IRawSelectWrapper;
import prerna.om.Insight;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.reactor.imports.IImporter;
import prerna.reactor.imports.ImportFactory;
import prerna.reactor.insights.copy.CopyFrameUtil;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.VarStore;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.Constants;
public class CacheNativeFrame extends AbstractFrameReactor {
private static final Logger classLogger = LogManager.getLogger(CacheNativeFrame.class);
private static final String CLASS_NAME = CacheNativeFrame.class.getName();
private static final String SYNCHRONIZE = "inThread";
public CacheNativeFrame() {
this.keysToGet = new String[] {ReactorKeysEnum.FRAME.getKey(), ReactorKeysEnum.FRAME_TYPE.getKey(), SYNCHRONIZE};
}
@Override
public NounMetadata execute() {
Logger logger = getLogger(CLASS_NAME);
ITableDataFrame frame = getFrame();
if(!(frame instanceof NativeFrame)) {
throw new IllegalArgumentException("Frame must be a native frame");
}
String frameType = getFrameType();
ITableDataFrame newFrame = null;
String origFrameName = frame.getName();
try {
String alias = origFrameName + "_OLD";
newFrame = FrameFactory.getFrame(this.insight, frameType, alias);
NounMetadata noun = new NounMetadata(newFrame, PixelDataType.FRAME, PixelOperationType.FRAME);
this.insight.getVarStore().put(alias, noun);
} catch (Exception e) {
throw new IllegalArgumentException("Error occurred trying to create frame of type " + frameType, e);
}
CachingThread cache = new CachingThread();
cache.insight = this.insight;
cache.frame = (NativeFrame) frame;
cache.newFrame = newFrame;
cache.logger = logger;
if(inThread() || this.insight.isSavedInsightMode()) {
logger.info("Running cache in thread");
cache.run();
NounMetadata newFrameNoun = this.insight.getVarStore().get(origFrameName);
newFrameNoun.addAdditionalOpTypes(PixelOperationType.FRAME, PixelOperationType.FRAME_DATA_CHANGE, PixelOperationType.FRAME_HEADERS_CHANGE);
return newFrameNoun;
} else {
logger.info("Start running cache in background");
java.lang.Thread t = new Thread(cache);
t.start();
return new NounMetadata("Swapping frame in parallel thread", PixelDataType.CONST_STRING, PixelOperationType.FRAME_SWAP);
}
}
/**
* Get the frame type
* @return
*/
private String getFrameType() {
GenRowStruct grs = this.store.getNoun(this.keysToGet[1]);
if(grs != null && !grs.isEmpty()) {
return grs.get(0).toString();
}
return this.curRow.get(0).toString();
}
/**
* True means run in the current thread
* False means run in its own thread
* @return
*/
private boolean inThread() {
GenRowStruct grs = this.store.getNoun(this.keysToGet[2]);
if(grs != null && !grs.isEmpty()) {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy