package de.skuzzle.polly.core.parser.ast.lang.functions; import java.util.Calendar; import java.util.Locale; import de.skuzzle.polly.core.parser.Position; import de.skuzzle.polly.core.parser.ast.declarations.Namespace; import de.skuzzle.polly.core.parser.ast.declarations.types.Type; import de.skuzzle.polly.core.parser.ast.expressions.literals.DateLiteral; import de.skuzzle.polly.core.parser.ast.expressions.literals.Literal; import de.skuzzle.polly.core.parser.ast.expressions.literals.StringLiteral; import de.skuzzle.polly.core.parser.ast.lang.UnaryOperator; import de.skuzzle.polly.core.parser.ast.visitor.ASTTraversalException; import de.skuzzle.polly.core.parser.ast.visitor.ExecutionVisitor; import de.skuzzle.polly.tools.collections.Stack; public class Day extends UnaryOperator<DateLiteral> { public Day() { super(OpType.DAY); this.initTypes(Type.STRING, Type.DATE); } @Override protected void exec(Stack<Literal> stack, Namespace ns, DateLiteral operand, Position resultPos, ExecutionVisitor execVisitor) throws ASTTraversalException { switch (this.getOp()) { case DAY: final Calendar c = Calendar.getInstance(); c.setTime(operand.getValue()); final String dayName = c.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault()); stack.push(new StringLiteral(resultPos, dayName)); break; default: this.invalidOperatorType(this.getOp()); } } }