diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Input.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Input.java | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Input.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Input.java new file mode 100644 index 00000000..ed051318 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Input.java @@ -0,0 +1,259 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.tools.ant.taskdefs; + +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.input.DefaultInputHandler; +import org.apache.tools.ant.input.GreedyInputHandler; +import org.apache.tools.ant.input.InputHandler; +import org.apache.tools.ant.input.InputRequest; +import org.apache.tools.ant.input.MultipleChoiceInputRequest; +import org.apache.tools.ant.input.PropertyFileInputHandler; +import org.apache.tools.ant.input.SecureInputHandler; +import org.apache.tools.ant.types.EnumeratedAttribute; +import org.apache.tools.ant.util.ClasspathUtils; +import org.apache.tools.ant.util.StringUtils; + +/** + * Reads an input line from the console. + * + * @since Ant 1.5 + * + * @ant.task category="control" + */ +public class Input extends Task { + + /** + * Represents an InputHandler. + */ + public class Handler extends DefBase { + + private String refid = null; + private HandlerType type = null; + private String classname = null; + + /** + * Specify that the handler is a reference on the project; + * this allows the use of a custom inputhandler. + * @param refid the String refid. + */ + public void setRefid(final String refid) { + this.refid = refid; + } + /** + * Get the refid of this Handler. + * @return String refid. + */ + public String getRefid() { + return refid; + } + /** + * Set the InputHandler classname. + * @param classname the String classname. + */ + public void setClassname(final String classname) { + this.classname = classname; + } + /** + * Get the classname of the InputHandler. + * @return String classname. + */ + public String getClassname() { + return classname; + } + /** + * Set the handler type. + * @param type a HandlerType. + */ + public void setType(final HandlerType type) { + this.type = type; + } + /** + * Get the handler type. + * @return a HandlerType object. + */ + public HandlerType getType() { + return type; + } + private InputHandler getInputHandler() { + if (type != null) { + return type.getInputHandler(); + } + if (refid != null) { + try { + return (InputHandler) (getProject().getReference(refid)); + } catch (final ClassCastException e) { + throw new BuildException( + refid + " does not denote an InputHandler", e); + } + } + if (classname != null) { + return (InputHandler) (ClasspathUtils.newInstance(classname, + createLoader(), InputHandler.class)); + } + throw new BuildException( + "Must specify refid, classname or type"); + } + } + + /** + * EnumeratedAttribute representing the built-in input handler types: + * "default", "propertyfile", "greedy", "secure" (since Ant 1.8). + */ + public static class HandlerType extends EnumeratedAttribute { + private static final String[] VALUES = {"default", "propertyfile", "greedy", "secure"}; + + private static final InputHandler[] HANDLERS + = {new DefaultInputHandler(), + new PropertyFileInputHandler(), + new GreedyInputHandler(), + new SecureInputHandler()}; + + /** {@inheritDoc} */ + @Override + public String[] getValues() { + return VALUES; + } + private InputHandler getInputHandler() { + return HANDLERS[getIndex()]; + } + } + + private String validargs = null; + private String message = ""; + private String addproperty = null; + private String defaultvalue = null; + private Handler handler = null; + private boolean messageAttribute; + + /** + * Defines valid input parameters as comma separated strings. If set, input + * task will reject any input not defined as accepted and requires the user + * to reenter it. Validargs are case sensitive. If you want 'a' and 'A' to + * be accepted you need to define both values as accepted arguments. + * + * @param validargs A comma separated String defining valid input args. + */ + public void setValidargs (final String validargs) { + this.validargs = validargs; + } + + /** + * Defines the name of a property to be created from input. Behaviour is + * according to property task which means that existing properties + * cannot be overridden. + * + * @param addproperty Name for the property to be created from input + */ + public void setAddproperty (final String addproperty) { + this.addproperty = addproperty; + } + + /** + * Sets the Message which gets displayed to the user during the build run. + * @param message The message to be displayed. + */ + public void setMessage (final String message) { + this.message = message; + messageAttribute = true; + } + + /** + * Defines the default value of the property to be created from input. + * Property value will be set to default if not input is received. + * + * @param defaultvalue Default value for the property if no input + * is received + */ + public void setDefaultvalue (final String defaultvalue) { + this.defaultvalue = defaultvalue; + } + + /** + * Set a multiline message. + * @param msg The message to be displayed. + */ + public void addText(final String msg) { + if (messageAttribute && "".equals(msg.trim())) { + return; + } + message += getProject().replaceProperties(msg); + } + + /** + * No arg constructor. + */ + public Input () { + } + + /** + * Actual method executed by ant. + * @throws BuildException on error + */ + @Override + public void execute () throws BuildException { + if (addproperty != null + && getProject().getProperty(addproperty) != null) { + log("skipping " + getTaskName() + " as property " + addproperty + + " has already been set."); + return; + } + + InputRequest request = null; + if (validargs != null) { + final Vector<String> accept = StringUtils.split(validargs, ','); + request = new MultipleChoiceInputRequest(message, accept); + } else { + request = new InputRequest(message); + } + request.setDefaultValue(defaultvalue); + + final InputHandler h = handler == null + ? getProject().getInputHandler() + : handler.getInputHandler(); + + h.handleInput(request); + + String value = request.getInput(); + if ((value == null || value.trim().length() == 0) + && defaultvalue != null) { + value = defaultvalue; + } + if (addproperty != null && value != null) { + getProject().setNewProperty(addproperty, value); + } + } + + /** + * Create a nested handler element. + * @return a Handler for this Input task. + */ + public Handler createHandler() { + if (handler != null) { + throw new BuildException( + "Cannot define > 1 nested input handler"); + } + handler = new Handler(); + return handler; + } + +} |