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

prerna.reactor.frame.FrameFactory Maven / Gradle / Ivy

The newest version!
package prerna.reactor.frame;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.algorithm.api.ITableDataFrame;
import prerna.ds.TinkerFrame;
import prerna.ds.nativeframe.NativeFrame;
import prerna.ds.py.PandasFrame;
import prerna.ds.py.PyTranslator;
import prerna.ds.r.RDataTable;
import prerna.ds.rdbms.h2.H2Frame;
import prerna.ds.rdbms.postgres.PostgresFrame;
import prerna.ds.rdbms.sqlite.SQLiteFrame;
import prerna.om.Insight;
import prerna.util.Constants;
import prerna.util.DIHelper;
import prerna.util.sql.RdbmsTypeEnum;

public class FrameFactory {

	private static final Logger logger = LogManager.getLogger(FrameFactory.class);
	
	private static final String CLASS_NAME = FrameFactory.class.getName();
	// this is so we only grab from DIHelper once
	private static boolean INIT = false;
	// grab default frame
	private static String DEFAULT_FRAME_TYPE = null;
	private static RdbmsTypeEnum RDBMS_TYPE = null;

	public static ITableDataFrame getFrame(Insight insight, String frameType, String alias) throws Exception {
		frameType = frameType.toUpperCase();
		
		Logger logger = null;
		if(!INIT) {
			init();
		}
		
		if(frameType.equals("DEFAULT")) {
			frameType = DEFAULT_FRAME_TYPE;
		}
		switch (frameType) {
			case "GRID": { 
				return getGrid(alias);
			}
			case "H2": { 
				return getGrid(alias);
			}
			
			case "GRAPH": { 
				TinkerFrame frame = new TinkerFrame(alias);
				return frame;
			} 
			case "TINKER": { 
				TinkerFrame frame = new TinkerFrame(alias);
				return frame;
			}
			
			case "R": { 
				logger = LogManager.getLogger(CLASS_NAME);
				return new RDataTable(insight.getRJavaTranslator(logger), alias); 
			}
			case "RFRAME": { 
				logger = LogManager.getLogger(CLASS_NAME);
				return new RDataTable(insight.getRJavaTranslator(logger), alias); 
			}
			case "DATATABLE": { 
				logger = LogManager.getLogger(CLASS_NAME);
				return new RDataTable(insight.getRJavaTranslator(logger), alias); 
			}
			
			case "PYTHON": {
				PandasFrame frame = new PandasFrame(alias);
				PyTranslator pyt = insight.getPyTranslator();
				pyt.setLogger(logger);
				frame.setTranslator(pyt);
				return frame;
			}
			case "PY": {
				PandasFrame frame = new PandasFrame(alias);
				PyTranslator pyt = insight.getPyTranslator();
				pyt.setLogger(logger);
				frame.setTranslator(pyt);
				return frame;
			}
			case "PYFRAME": {
				PandasFrame frame = new PandasFrame(alias);
				PyTranslator pyt = insight.getPyTranslator();
				pyt.setLogger(logger);
				frame.setTranslator(pyt);

				return frame;
			}
			case "PANDAS": {
				PandasFrame frame = new PandasFrame(alias);
				PyTranslator pyt = insight.getPyTranslator();
				pyt.setLogger(logger);
				frame.setTranslator(pyt);
				return frame;
			}
			
			case "NATIVE": { 
				NativeFrame frame = new NativeFrame(alias);
				return frame;
			}
			case "ENGINE": { 
				NativeFrame frame = new NativeFrame(alias);
				return frame;
			}
			
			default: { 
				return getGrid(alias); 
			}
		
		}
	}
	
	private static ITableDataFrame getGrid(String alias) throws Exception {
		if(RDBMS_TYPE == RdbmsTypeEnum.SQLITE) {
			return new SQLiteFrame(alias);
		} else if(RDBMS_TYPE == RdbmsTypeEnum.POSTGRES) {
			return new PostgresFrame(alias);
		}
		
		return new H2Frame(alias);
	}
	
	/**
	 * Init the frame factory configuration
	 */
	private static void init() {
		DEFAULT_FRAME_TYPE = DIHelper.getInstance().getProperty(Constants.DEFAULT_FRAME_TYPE);
		String defaultGridType = DIHelper.getInstance().getProperty(Constants.DEFAULT_GRID_TYPE);
		if(defaultGridType == null || defaultGridType.isEmpty()) {
			defaultGridType = "H2_DB";
		}
		try {
			RDBMS_TYPE = RdbmsTypeEnum.valueOf(defaultGridType);
		} catch(Exception e) {
			logger.error("Error occurred trying to set the default grid type for the application. Defaulting to h2");
			logger.error(Constants.STACKTRACE, e);
			defaultGridType = "H2_DB";
			RDBMS_TYPE = RdbmsTypeEnum.H2_DB;
		}
		
		if(DEFAULT_FRAME_TYPE == null) {
			DEFAULT_FRAME_TYPE = "GRID";
		}
		INIT = true;
	}

	public static boolean canCacheFrameQueries(ITableDataFrame frame) {
		if(frame == null) {
			return false;
		}
		boolean cache = false;
		if(frame instanceof RDataTable) {
			cache = true;
		} else if(frame instanceof PandasFrame) {
			cache = true;
		} else if(frame instanceof NativeFrame) {
			cache = ((NativeFrame) frame).engineQueryCacheable();
		}
		
		return cache;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy