/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package reportgen.math.condition.unary;
import java.util.ArrayList;
import java.util.List;
import reportgen.math.reference.field.MathExpressionEntityFieldRef;
import reportgen.math.reference.operator.MathExpressionOperatorRef;
import reportgen.math.reference.operator.variants.MOperator;
import reportgen.math.reference.rescol.MathExpressionResultColumnRef;
import org.jdom.Element;
import reportgen.math.MathExpressionOperand;
import reportgen.prototype.context.Context;
import reportgen.prototype.context.ContextGeneric;
import reportgen.prototype.context.ContextMode;
import reportgen.math.reference.operator.variants.unary.MathOperatorUnary;
import reportgen.utils.ReportException;
import reportgen.prototype.context.group.ContextGroup;
import reportgen.math.condition.MathExpressionConditionUnary;
import reportgen.math.reference.method.MathExpressionEntityMethodRef;
import reportgen.math.reference.objectfield.MathExpressionEntityObjectFieldRef;
/**
* Условие состоит из двух операндов и одного оператора.
* Операнды могут быть составными математическими выражениями.
* Оператор является булевым оператором сравнения
* @author axe
*/
public class MathExpressionConditionUnaryNull extends MathExpressionConditionUnary {
public static final ContextGroup GROUP = new UnaryCondContextGroup();
public static final String TAG = "unarynull";
public MathExpressionConditionUnaryNull(Context context) {
super(context);
MathExpressionOperatorRef operator = new MathExpressionOperatorRef(
MathOperatorUnary.ISNULL,
getChildContext(MathExpressionOperatorRef.GROUP)
);
setOperator(operator);
}
MathExpressionConditionUnaryNull(Context context, MathExpressionOperand operand,
MathExpressionOperatorRef operator) {
super(context, operand, operator);
}
public MathExpressionConditionUnaryNull(Element element,
Context context) throws ReportException {
super(element, context);
}
@Override
public MathExpressionConditionUnaryNull makeClone() throws ReportException {
return new MathExpressionConditionUnaryNull(toXML(), getParentContext());
}
@Override
public Context getChildContext(ContextGroup group) {
if(group.isTheSameType(MathExpressionOperatorRef.GROUP)) {
return new ContextGeneric(getParentContext()) {
@Override
public ContextMode getContextMode() {
return getParentContext().getContextMode();
}
@Override
public List<ContextGroup> getAvailiableGroups() {
List<ContextGroup> res = new ArrayList<ContextGroup>();
res.add(MathExpressionOperatorRef.GROUP);
return res;
}
@Override
public List<MOperator> getOperators() {
List<MOperator> model = new ArrayList<MOperator>();
model.add(MathOperatorUnary.ISNULL);
model.add(MathOperatorUnary.ISNOTNULL);
return model;
}
};
}
return getParentContext();
}
@Override
public Context getLocalContext() {
return new ContextGeneric(getParentContext()) {
@Override
public ContextMode getContextMode() {
return getParentContext().getContextMode();
}
@Override
public List<ContextGroup> getAvailiableGroups() {
List<ContextGroup> avail = new ArrayList<ContextGroup>();
avail.add(MathExpressionOperatorRef.GROUP);
for(ContextGroup g : getParentContext().getAvailiableGroups()) {
if(g.isTheSameType(MathExpressionEntityObjectFieldRef.GROUP)
|| g.isTheSameType(MathExpressionEntityFieldRef.GROUP)
|| g.isTheSameType(MathExpressionEntityMethodRef.GROUP)
|| g.isTheSameType(MathExpressionResultColumnRef.GROUP)
) {
avail.add(g);
}
}
return avail;
}
};
}
@Override
public ContextGroup getContextGroup() {
return GROUP;
}
@Override
protected String getRootTag() {
return TAG;
}
}