
prerna.query.querystruct.selectors.QueryArithmeticSelector Maven / Gradle / Ivy
The newest version!
package prerna.query.querystruct.selectors;
import java.util.List;
import java.util.Vector;
public class QueryArithmeticSelector extends AbstractQuerySelector {
private static final IQuerySelector.SELECTOR_TYPE SELECTOR_TYPE = IQuerySelector.SELECTOR_TYPE.ARITHMETIC;
private IQuerySelector leftSelector;
private String mathExpr;
private IQuerySelector rightSelector;
boolean encapsulated = false;
public QueryArithmeticSelector() {
this.mathExpr = "";
}
@Override
public SELECTOR_TYPE getSelectorType() {
return SELECTOR_TYPE;
}
@Override
public String getAlias() {
if(this.alias == null || this.alias.equals("")) {
return this.leftSelector.getAlias()+ "_" + getEnglishForMath() + "_" + this.rightSelector.getAlias();
}
return this.alias;
}
@Override
public boolean isDerived() {
return true;
}
@Override
public String getQueryStructName() {
String ret = "";
if(this.leftSelector.getSelectorType() == IQuerySelector.SELECTOR_TYPE.ARITHMETIC) {
ret += "(" + this.leftSelector.getQueryStructName() + ")";
} else {
ret += this.leftSelector.getQueryStructName();
}
ret += this.mathExpr;
if(this.rightSelector.getSelectorType() == IQuerySelector.SELECTOR_TYPE.ARITHMETIC) {
ret += "(" + this.rightSelector.getQueryStructName() + ")";
} else {
ret += this.rightSelector.getQueryStructName();
}
return ret;
}
@Override
public String getDataType() {
return "NUMBER";
}
public boolean isEncapsulated() {
return this.encapsulated;
}
public void setEncapsulated(boolean encapsulated) {
this.encapsulated = encapsulated;
}
public IQuerySelector getLeftSelector() {
return leftSelector;
}
public void setLeftSelector(IQuerySelector leftSelector) {
this.leftSelector = leftSelector;
}
public String getMathExpr() {
return mathExpr;
}
public void setMathExpr(String mathExpr) {
this.mathExpr = mathExpr;
}
public IQuerySelector getRightSelector() {
return rightSelector;
}
public void setRightSelector(IQuerySelector rightSelector) {
this.rightSelector = rightSelector;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof QueryArithmeticSelector) {
QueryArithmeticSelector selector = (QueryArithmeticSelector)obj;
if(this.leftSelector.equals(selector.leftSelector) &&
this.rightSelector.equals(selector.rightSelector) &&
this.mathExpr.equals(selector.mathExpr) &&
this.alias.equals(selector.alias)) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
String allString = leftSelector+":::"+this.mathExpr+":::"+this.rightSelector+":::"+alias;
return allString.hashCode();
}
/**
* Used for the default alias since most languages will not support
* the string version of the math expression (for obvious reasons)
* @return
*/
private String getEnglishForMath() {
if(this.mathExpr.equals("+")) {
return "Plus";
} else if(this.mathExpr.equals("-")) {
return "Minus";
} else if(this.mathExpr.equals("*")) {
return "MultipiedBy";
} else if(this.mathExpr.equals("/")) {
return "DividedBy";
}
return "";
}
@Override
public List getAllQueryColumns() {
// grab all the columns from the left selector and the right selector
List usedCols = new Vector();
usedCols.addAll(this.leftSelector.getAllQueryColumns());
usedCols.addAll(this.rightSelector.getAllQueryColumns());
return usedCols;
}
/**
*
* @param leftColQs
* @param rightColQs
* @param mathExpr
* @param alias
* @return
*/
public static QueryArithmeticSelector makeCol2ColSelector(String leftColQs, String rightColQs, String mathExpr, String alias) {
return makeCol2ColSelector(new QueryColumnSelector(leftColQs), new QueryColumnSelector(rightColQs), mathExpr, alias);
}
/**
*
* @param leftSelector
* @param rightSelector
* @param mathExpr
* @param alias
* @return
*/
public static QueryArithmeticSelector makeCol2ColSelector(IQuerySelector leftSelector, IQuerySelector rightSelector, String mathExpr, String alias) {
QueryArithmeticSelector math = new QueryArithmeticSelector();
math.setLeftSelector(leftSelector);
math.setRightSelector(rightSelector);
math.setMathExpr(mathExpr);
math.setAlias(alias);
return math;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy