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

prerna.query.querystruct.selectors.IQuerySelector Maven / Gradle / Ivy

The newest version!
package prerna.query.querystruct.selectors;

import java.util.List;

import prerna.util.gson.AbstractSemossTypeAdapter;
import prerna.util.gson.QueryArithmeticSelectorAdapter;
import prerna.util.gson.QueryColumnSelectorAdapter;
import prerna.util.gson.QueryConstantSelectorAdapter;
import prerna.util.gson.QueryFunctionSelectorAdapter;
import prerna.util.gson.QueryIfSelectorAdapter;
import prerna.util.gson.QueryOpaqueSelectorAdapter;

public interface IQuerySelector {

	String PRIM_KEY_PLACEHOLDER = "PRIM_KEY_PLACEHOLDER";

	enum SELECTOR_TYPE {OPAQUE, COLUMN, FUNCTION, ARITHMETIC, CONSTANT, IF_ELSE}
	
	/**
	 * Determine the type of the selector
	 * @return
	 */
	SELECTOR_TYPE getSelectorType();
	
	/**
	 * Get the display name for the selector
	 * @return
	 */
	String getAlias();
	
	/**
	 * Set the display name for the selector
	 * @param alias
	 */
	void setAlias(String alias);
	
	/**
	 * Determine if it is a derived selector
	 * @return
	 */
	boolean isDerived();
	
	/**
	 * Return the predicted data type of the column
	 * @return
	 */
	String getDataType();
	
	/**
	 * Get the pixel component that generated the selector
	 * @return
	 */
	String getQueryStructName();
	
	/**
	 * Determine all the columns used within an expression
	 * @return
	 */
	List getAllQueryColumns();

	////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////

	/*
	 * 
	 * Methods around serialization
	 * 
	 */
	
	static AbstractSemossTypeAdapter getAdapterForSelector(SELECTOR_TYPE type) {
		if(type == SELECTOR_TYPE.OPAQUE) {
			return new QueryOpaqueSelectorAdapter();
		} else if(type == SELECTOR_TYPE.COLUMN) {
			return new QueryColumnSelectorAdapter();
		} else if(type == SELECTOR_TYPE.FUNCTION) {
			return new QueryFunctionSelectorAdapter();
		} else if(type == SELECTOR_TYPE.ARITHMETIC) {
			return new QueryArithmeticSelectorAdapter();
		} else if(type == SELECTOR_TYPE.CONSTANT) {
			return new QueryConstantSelectorAdapter();
		} else if(type == SELECTOR_TYPE.IF_ELSE) {
			return new QueryIfSelectorAdapter();
		}
		
		return null;
	}
	
	/**
	 * Convert string to SELECTOR_TYPE
	 * @param s
	 * @return
	 */
	static SELECTOR_TYPE convertStringToSelectorType(String s) {
		if(s.equals(SELECTOR_TYPE.OPAQUE.toString())) {
			return SELECTOR_TYPE.OPAQUE;
		} else if(s.equals(SELECTOR_TYPE.COLUMN.toString())) {
			return SELECTOR_TYPE.COLUMN;
		} else if(s.equals(SELECTOR_TYPE.FUNCTION.toString())) {
			return SELECTOR_TYPE.FUNCTION;
		} else if(s.equals(SELECTOR_TYPE.ARITHMETIC.toString())) {
			return SELECTOR_TYPE.ARITHMETIC;
		} else if(s.equals(SELECTOR_TYPE.CONSTANT.toString())) {
			return SELECTOR_TYPE.CONSTANT;
		} else if(s.equals(SELECTOR_TYPE.IF_ELSE.toString())) {
			return SELECTOR_TYPE.IF_ELSE;
		}
		return null;
	}
	
	/**
	 * Get the class for each selector type
	 * @param type
	 * @return
	 */
	static Class getQuerySelectorClassFromType(SELECTOR_TYPE type) {
		if(type == SELECTOR_TYPE.OPAQUE) {
			return QueryOpaqueSelector.class;
		} else if(type == SELECTOR_TYPE.COLUMN) {
			return QueryColumnSelector.class;
		} else if(type == SELECTOR_TYPE.FUNCTION) {
			return QueryFunctionSelector.class;
		} else if(type == SELECTOR_TYPE.ARITHMETIC) {
			return QueryArithmeticSelector.class;
		} else if(type == SELECTOR_TYPE.CONSTANT) {
			return QueryConstantSelector.class;
		} else if(type == SELECTOR_TYPE.IF_ELSE) {
			return QueryIfSelector.class;
		}
		
		return null;
	}
	
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy