View Javadoc
1   package org.apache.turbine.util.uri;
2   
3   
4   /*
5    * Licensed to the Apache Software Foundation (ASF) under one
6    * or more contributor license agreements.  See the NOTICE file
7    * distributed with this work for additional information
8    * regarding copyright ownership.  The ASF licenses this file
9    * to you under the Apache License, Version 2.0 (the
10   * "License"); you may not use this file except in compliance
11   * with the License.  You may obtain a copy of the License at
12   *
13   *   http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing,
16   * software distributed under the License is distributed on an
17   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18   * KIND, either express or implied.  See the License for the
19   * specific language governing permissions and limitations
20   * under the License.
21   */
22  
23  
24  import java.util.Iterator;
25  
26  import org.apache.commons.lang.StringUtils;
27  import org.apache.fulcrum.parser.ParameterParser;
28  import org.apache.turbine.util.RunData;
29  import org.apache.turbine.util.ServerData;
30  
31  /**
32   * This class allows you to keep all the information needed for a single
33   * link at one place. It keeps your query data, path info, the server
34   * scheme, name, port and the script path. It is tuned for usage with a
35   * Template System e.g. Velocity.
36   *
37   * If you must generate a Turbine Link in a Template System, use this class.
38   *
39   * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
40   * @version $Id: TemplateURI.java 1071038 2011-02-15 20:32:27Z tv $
41   */
42  
43  public class TemplateURI
44          extends TurbineURI
45  {
46      /**
47       * Empty C'tor. Uses Turbine.getDefaultServerData().
48       *
49       */
50      public TemplateURI()
51      {
52          super();
53      }
54  
55      /**
56       * Constructor with a RunData object
57       *
58       * @param runData A RunData object
59       */
60      public TemplateURI(RunData runData)
61      {
62          super(runData);
63      }
64  
65      /**
66       * Constructor, set explicit redirection
67       *
68       * @param runData A RunData object
69       * @param redirect True if redirection allowed.
70       */
71      public TemplateURI(RunData runData, boolean redirect)
72      {
73          super(runData, redirect);
74      }
75  
76      /**
77       * Constructor, set Template
78       *
79       * @param runData A RunData object
80       * @param template A Template Name
81       */
82      public TemplateURI(RunData runData, String template)
83      {
84          super(runData);
85          setTemplate(template);
86      }
87  
88      /**
89       * Constructor, set Template, set explicit redirection
90       *
91       * @param runData A RunData object
92       * @param template A Template Name
93       * @param redirect True if redirection allowed.
94       */
95      public TemplateURI(RunData runData, String template, boolean redirect)
96      {
97          super(runData, redirect);
98          setTemplate(template);
99      }
100 
101     /**
102      * Constructor, set Template and Action
103      *
104      * @param runData A RunData object
105      * @param template A Template Name
106      * @param action An Action Name
107      */
108     public TemplateURI(RunData runData, String template, String action)
109     {
110         this(runData, template);
111         setAction(action);
112     }
113 
114     /**
115      * Constructor, set Template and Action, set explicit redirection
116      *
117      * @param runData A RunData object
118      * @param template A Template Name
119      * @param action An Action Name
120      * @param redirect True if redirection allowed.
121      */
122     public TemplateURI(RunData runData, String template, String action, boolean redirect)
123     {
124         this(runData, template, redirect);
125         setAction(action);
126     }
127 
128     /**
129      * Constructor with a ServerData object
130      *
131      * @param serverData A ServerData object
132      */
133     public TemplateURI(ServerData serverData)
134     {
135         super(serverData);
136     }
137 
138     /**
139      * Constructor, set explicit redirection
140      *
141      * @param serverData A ServerData object
142      * @param redirect True if redirection allowed.
143      */
144     public TemplateURI(ServerData serverData, boolean redirect)
145     {
146         super(serverData, redirect);
147     }
148 
149     /**
150      * Constructor, set Template
151      *
152      * @param serverData A ServerData object
153      * @param template A Template Name
154      */
155     public TemplateURI(ServerData serverData, String template)
156     {
157         super(serverData);
158         setTemplate(template);
159     }
160 
161     /**
162      * Constructor, set Template, set explicit redirection
163      *
164      * @param serverData A ServerData object
165      * @param template A Template Name
166      * @param redirect True if redirection allowed.
167      */
168     public TemplateURI(ServerData serverData, String template, boolean redirect)
169     {
170         super(serverData, redirect);
171         setTemplate(template);
172     }
173 
174     /**
175      * Constructor, set Template and Action
176      *
177      * @param serverData A ServerData object
178      * @param template A Template Name
179      * @param action An Action Name
180      */
181     public TemplateURI(ServerData serverData, String template, String action)
182     {
183         this(serverData, template);
184         setAction(action);
185     }
186 
187     /**
188      * Constructor, set Template and Action, set explicit redirection
189      *
190      * @param serverData A ServerData object
191      * @param template A Template Name
192      * @param action An Action Name
193      * @param redirect True if redirection allowed.
194      */
195     public TemplateURI(ServerData serverData, String template, String action, boolean redirect)
196     {
197         this(serverData, template, redirect);
198         setAction(action);
199     }
200 
201     /**
202      * Constructor, user Turbine.getDefaultServerData(), set Template and Action
203      *
204      * @param template A Template Name
205      * @param action An Action Name
206      */
207     public TemplateURI(String template, String action)
208     {
209         this();
210         setTemplate(template);
211         setAction(action);
212     }
213 
214     /**
215      * Sets the template= value for this URL.
216      *
217      * By default it adds the information to the path_info instead
218      * of the query data. An empty value (null or "") cleans out
219      * an existing value.
220      *
221      * @param template A String with the template value.
222      */
223     public void setTemplate(String template)
224     {
225         if(StringUtils.isNotEmpty(template))
226         {
227             add(PATH_INFO, CGI_TEMPLATE_PARAM, template);
228         }
229         else
230         {
231             clearTemplate();
232         }
233     }
234 
235     /**
236      * Clears the template= value for this URL.
237      *
238      */
239     public void clearTemplate()
240     {
241         removePathInfo(CGI_TEMPLATE_PARAM);
242     }
243 
244     /*
245      * ========================================================================
246      *
247      * Protected / Private Methods
248      *
249      * ========================================================================
250      *
251      */
252 
253     /**
254      * Method for a quick way to add all the parameters in a
255      * ParameterParser.
256      *
257      * <p>If the type is P (0), then add name/value to the pathInfo
258      * hashtable.
259      *
260      * <p>If the type is Q (1), then add name/value to the queryData
261      * hashtable.
262      *
263      * @param type Type of insertion (@see #add(char type, String name, String value))
264      * @param pp A ParameterParser.
265      */
266     protected void add(int type,
267             ParameterParser pp)
268     {
269         for(Iterator<?> it = pp.keySet().iterator(); it.hasNext();)
270         {
271             String key = (String) it.next();
272 
273             if (!key.equalsIgnoreCase(CGI_ACTION_PARAM) &&
274                     !key.equalsIgnoreCase(CGI_SCREEN_PARAM) &&
275                     !key.equalsIgnoreCase(CGI_TEMPLATE_PARAM))
276             {
277                 String[] values = pp.getStrings(key);
278                 if(values != null)
279                 {
280                     for (int i = 0; i < values.length; i++)
281                     {
282                         add(type, key, values[i]);
283                     }
284                 }
285                 else
286                 {
287                     add(type, key, "");
288                 }
289             }
290         }
291     }
292 }