why not?   what's wrong with prompting the user for input?

I'll even supply the task................ (see attachment)


Filip Cruz wrote:

> Thanks, Paul
> I'll give it a try.
>
> At 11:36 AM 7/26/2001 -0400, you wrote:
>
>> I'm doing SSH deployment using SecureCRT.
>> SecureCRT has VCP command line utility to transfer files over SSH.
>> One problem - you can't input password during deployment so I'm 
>> providing it
>> in a password file.
>>
>> Here is an example of target:
>>
>> <target name="doSSH" description="Copies file to remote server over 
>> SSH.">
>>         <!-- Secure CRT location -->
>>         <property name="vcp.dir" value="C:\Progra~1\Secure~1.0"/>
>>         <property name="pwd.file" value="pwd"/>
>>         <property name="pwd" value="xxxxx"/>
>>
>>         <echo message="Copying ${source.file} to ${dest.dir} at 
>> XXXX..."/>
>>       <!-- Create password file -->
>>         <echo message="${pwd}" file="${source.dir}/${pwd.file}"/>
>>         <exec dir="${source.dir}" executable="cmd">
>>                 <arg line="/S /C ${vcp.dir}\vcp.exe ${source.file}
>> [EMAIL PROTECTED]:${dest.dir} &lt; ${pwd.file}"/>
>>         </exec>
>>       <!-- delete password file when we've done -->
>>         <delete file="${source.dir}/${pwd.file}"/>
>> </target>
>>
>> Good luck,
>>
>> Paul Perevalov,
>> Bridium,Inc.
>>
>> -----Original Message-----
>> From: Filip Cruz [mailto:[EMAIL PROTECTED]]
>> Sent: Thursday, July 26, 2001 11:18 AM
>> To: [EMAIL PROTECTED]
>> Subject: Re: Using Ant with SSH
>>
>>
>> Sorry,
>> I am trying to use Ant to deploy to our production servers through 
>> SSH. In
>> brief I want to be able to deploy the files over SSH to the server 
>> from a
>> task in the Ant build.xml file. I am using a Win2K client and I have SSH
>> Secure Shell client and SecureCRT.
>>
>> Is there a way to deploy over SSH from Ant?? If so, how is it done?
>
>
>
>


/*
 ******************************************************************************
 *  $RCSfile: Prompt.java,v $ $Revision: 1.3 $ $Date: 2001/06/15 20:30:57 $ 
 ******************************************************************************
 */
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import java.io.LineNumberReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/***
 * Task definition for the ANT task to prompt the user for information
 * Usage:
 *
 *   Task declaration in the project:
 *     <taskdef name="prompt" classname="Prompt" />
 *
 *   Task calling syntax:
 *     <prompt message="message" propertyname="propname" 
 *             [defaultvalue="value" | allowempty="true|false"]
 *     >
 *        [ <allow value="value" ]*
 *     </prompt>
 *
 *   Attributes:
 *       message -> The message to display to the user
 *       propertyname -> The name of the property to set with the received input
 *       defaultValue -> The default value if the user just hits enter
 *       allowempty   -> Whether or not an empty value is allowed
 *
 *   Subitems:
 *       <allow  value="value" /> --> allow this value to be input.  By supplying
 *                                    one or more of this subitem, you limit the
 *                                    input to a range of specific allowable
 *                                    values.  Any value input that is not explicitly
 *                                    allowed is rejected.  (good for y/n questions)
 *
 *   Notes:
 *       1. The defaultvalue and allowempty attributes are mutually exclusive,
 *          and if both are specified, the defaultvalue attribute takes precedence.
 */
public class Prompt extends Task
{
    private String message;
    private String defaultValue;
    private String propertyName;
    private boolean allowEmpty;
    private List allows;

    /***
     * Default Constructor
     */
    public Prompt()
    {
        allows = new ArrayList();
        allowEmpty = true;
    }

    public void execute()
        throws BuildException
    {
        if (message == null)
            throw new BuildException("Message is missing");
        if (propertyName == null)
            throw new BuildException("PropertyName is missing");

        if (defaultValue != null && allows.size() > 0)
        {
            if (! allows.contains(new Allow(defaultValue)))
                throw new BuildException("Default Value is not in the set of allowed 
values.");
        }

        StringBuffer sb = new StringBuffer();
        sb.append(message);
        sb.append(" ");

        int asize = allows.size();
        if (asize > 0)
        {
            sb.append(" (");
            for (int i=0;i<asize;i++)
            {
                if (i != 0) sb.append(',');
                sb.append(allows.get(i));
            }
            sb.append(") ");
        }

        if (defaultValue != null)
        {
            sb.append('[');
            sb.append(defaultValue);
            sb.append(']');
            sb.append(" : ");
        }

        boolean done = false;
        LineNumberReader lnr = new LineNumberReader(new InputStreamReader(System.in));

        String inputValue = "";

        while (! done)
        {
            System.out.print(sb.toString());    
            
            try
            {
                inputValue = lnr.readLine();

                if ((defaultValue != null) && (inputValue.trim().length() == 0))
                {
                    inputValue = defaultValue;
                    done = true;
                }
                else if (allows.size() > 0)
                {
                    if  (allows.contains(new Allow(inputValue)) ||
                         (defaultValue != null && 
inputValue.trim().equals(defaultValue)))
                    {
                        done = true;
                    }
                }
                else
                {
                    done = true;
                }
            }
            catch (IOException e)
            {
                throw new BuildException(e);
            }
            
            if (defaultValue != null && inputValue.trim().length() == 0)
            {
                inputValue = defaultValue;
            }

            if (! allowEmpty && inputValue.trim().length() == 0)
                done = false;

            if (! done)
                System.out.println("   Invalid value: '" + inputValue + "'");
        }

        Project p = getProject();
        p.setUserProperty(propertyName, inputValue);
    }

    /***
     * Sets the prompt message
     */
    public void setMessage(String message)
    {
        this.message = message;
    }

    /***
     * Sets the defaultValue that is used if the user just hits return
     */
    public void setDefaultValue(String defaultValue)
    {
        this.defaultValue = defaultValue;
    }

    public void setAllowEmpty(String allowEmpty)
    {
        try
        {
            this.allowEmpty = Boolean.valueOf(allowEmpty).booleanValue();
        }
        catch (Exception e)
        {
            this.allowEmpty = true;
        }
    }

    /***
     * Inner class which defines the "<allow>" tag as a child
     * of a "<prompt>" tag
     */
    public static final class Allow extends Object
    {
        private String value;
        
        public Allow()
        {
            super();
        }
        
        public Allow(String value)
        {
            super();
            setValue(value);
        }

        public void setValue(String value)
        {
            this.value = value;
        }

        public boolean equals(Object o)
        {
            Allow a = (Allow)o;
            return value.equals(a.value);
        }

        public String toString()
        {
            return value;
        }
    }

    /***
     * Creates the <allow> tag
     */
    public Prompt.Allow createAllow()
    {
        Prompt.Allow res = new Prompt.Allow();
        allows.add(res);
        return res;
    }

    /***
     * Sets the name of the property which will contain
     * the input value after the prompt is finished.
     */
    public void setPropertyName(String propertyName)
    {
        this.propertyName = propertyName;
    }

}

Reply via email to