1 /***
2 * ====================================================================
3 *
4 * The Apache Software License, Version 1.1
5 *
6 * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
7 * reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. The end-user documentation included with the redistribution, if
22 * any, must include the following acknowlegement:
23 * "This product includes software developed by the
24 * Apache Software Foundation (http://www.apache.org/)."
25 * Alternately, this acknowlegement may appear in the software itself,
26 * if and wherever such third-party acknowlegements normally appear.
27 *
28 * 4. The names "The Jakarta Project", "Commons", and "Apache Software
29 * Foundation" must not be used to endorse or promote products derived
30 * from this software without prior written permission. For written
31 * permission, please contact apache@apache.org.
32 *
33 * 5. Products derived from this software may not be called "Apache"
34 * nor may "Apache" appear in their names without prior written
35 * permission of the Apache Group.
36 *
37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 * ====================================================================
50 *
51 * This software consists of voluntary contributions made by many
52 * individuals on behalf of the Apache Software Foundation. For more
53 * information on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 *
56 * $Id: AskTag.java,v 1.1 2002/07/13 00:49:45 smor Exp $
57 */
58 package org.apache.commons.jelly.tags.interaction;
59
60 import java.io.InputStreamReader;
61 import java.io.BufferedReader;
62 import java.io.IOException;
63
64 import org.apache.commons.jelly.TagSupport;
65 import org.apache.commons.jelly.XMLOutput;
66
67 /***
68 * Jelly Tag that asks the user a question, and puts his answer into
69 * a variable, with the attribute "answer".
70 * This variable may be reused further as any other Jelly variable.
71 * @author <a href="mailto:smor@hasgard.net">Stéphane Mor</a>
72 */
73 public class AskTag extends TagSupport
74 {
75 /*** The question to ask to the user */
76 private String question;
77
78 /***
79 * The variable in which we will stock the user's input.
80 * This defaults to "interact.answer".
81 */
82 private String answer = "interact.answer";
83
84 /*** The default value, if the user doesn't answer */
85 private String defaultInput;
86
87 /*** The user's input */
88 private String input = "";
89
90 /*** The prompt to display before the user input */
91 private String prompt = ">";
92
93 /***
94 * Sets the question to ask to the user. If a "default" attribute
95 * is present, it will appear inside [].
96 * @param question The question to ask to the user
97 */
98 public void setQuestion(String question)
99 {
100 this.question = question;
101 }
102
103 /***
104 * Sets the name of the variable that will hold the answer
105 * This defaults to "interact.answer".
106 * @param answer the name of the variable that will hold the answer
107 */
108 public void setAnswer(String answer)
109 {
110 this.answer = answer;
111 }
112
113 /***
114 * Sets the default answer to the question.
115 * If it is present, it will appear inside [].
116 * @param default the default answer to the question
117 */
118 public void setDefault(String defaultInput)
119 {
120 this.defaultInput = defaultInput;
121 }
122
123 /***
124 * Sets the prompt that will be displayed before the user's input.
125 * @param promt the prompt that will be displayed before the user's input.
126 */
127 public void setPrompt(String prompt)
128 {
129 this.prompt = prompt;
130 }
131
132
133 /***
134 * Perform functionality provided by the tag
135 * @param output the place to write output
136 */
137 public void doTag(XMLOutput output)
138 {
139 if (question != null)
140 {
141 if (defaultInput != null)
142 {
143 System.out.println(question + " [" + defaultInput + "]");
144 }
145 else
146 {
147 System.out.println(question);
148 }
149 // The prompt should be just before the user's input,
150 // but it doesn't work ...
151 //System.out.print(prompt + " ");
152 }
153
154 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
155
156 try {
157 input = br.readLine();
158 if (defaultInput != null && input.trim().equals(""))
159 {
160 input = defaultInput;
161 }
162 } catch (IOException ioe) {
163 }
164 context.setVariable(answer, input);
165 }
166 }
This page was automatically generated by Maven