/* * Copyright (c) 2001-2004 Ant-Contrib project. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.antcontrib.math; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.DynamicConfigurator; /** * Task for mathematical operations. * * @author inger */ public class MathTask extends Task implements DynamicConfigurator { // storage for result private String result = null; private Operation operation = null; private Operation locOperation = null; private String datatype = null; private boolean strict = false; public MathTask() { super(); } public void execute() throws BuildException { Operation op = locOperation; if (op == null) op = operation; Number res = op.evaluate(); if (datatype != null) res = Math.convert(res, datatype); getProject().setUserProperty(result, res.toString()); } public void setDynamicAttribute(String s, String s1) throws BuildException { throw new BuildException("No dynamic attributes for this task"); } public Object createDynamicElement(String name) throws BuildException { Operation op = new Operation(); op.setOperation(name); operation = op; return op; } public void setResult(String result) { this.result = result; } public void setDatatype(String datatype) { this.datatype = datatype; } public void setStrict(boolean strict) { this.strict = strict; } private Operation getLocalOperation() { if (locOperation == null) { locOperation = new Operation(); locOperation.setDatatype(datatype); locOperation.setStrict(strict); } return locOperation; } public void setOperation(String operation) { getLocalOperation().setOperation(operation); } public void setDataType(String dataType) { getLocalOperation().setDatatype(dataType); } public void setOperand1(String operand1) { getLocalOperation().setArg1(operand1); } public void setOperand2(String operand2) { getLocalOperation().setArg2(operand2); } public Operation createOperation() { if (locOperation != null || operation != null) throw new BuildException("Only 1 operation can be specified"); this.operation = new Operation(); this.operation.setStrict(strict); this.operation.setDatatype(datatype); return this.operation; } // conform to old task public Operation createOp() { return createOperation(); } }