KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > networkplaces > wizards > forms > NetworkPlaceDetailsForm


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.networkplaces.wizards.forms;
21
22 import javax.servlet.http.HttpServletRequest JavaDoc;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.struts.Globals;
27 import org.apache.struts.action.ActionErrors;
28 import org.apache.struts.action.ActionMapping;
29 import org.apache.struts.action.ActionMessage;
30
31 import com.sslexplorer.boot.Util;
32 import com.sslexplorer.core.forms.AbstractResourceDetailsWizardForm;
33 import com.sslexplorer.input.validators.HostnameOrIPAddressValidator;
34 import com.sslexplorer.input.validators.HostnameOrIPAddressWithReplacementsValidator;
35 import com.sslexplorer.networkplaces.NetworkPlace;
36 import com.sslexplorer.networkplaces.NetworkPlacePlugin;
37 import com.sslexplorer.networkplaces.NetworkPlaceUtil;
38 import com.sslexplorer.networkplaces.NetworkPlaceVFSProvider;
39 import com.sslexplorer.policyframework.ResourceType;
40 import com.sslexplorer.vfs.DefaultVFSProvider;
41 import com.sslexplorer.vfs.VFSProvider;
42 import com.sslexplorer.vfs.VFSProviderManager;
43 import com.sslexplorer.wizard.AbstractWizardSequence;
44
45 public class NetworkPlaceDetailsForm extends AbstractResourceDetailsWizardForm {
46     
47     /**
48      * Default provider used for entering in URI format
49      */

50     public final static VFSProvider DEFAULT_PROVIDER = new DefaultVFSProvider("automatic", null, NetworkPlacePlugin.MESSAGE_RESOURCES_KEY);
51
52     public final static String JavaDoc ATTR_PROVIDER = "provider";
53     public final static String JavaDoc ATTR_HOST = "host";
54     public final static String JavaDoc ATTR_PATH = "path";
55     public final static String JavaDoc ATTR_PORT = "port";
56     public final static String JavaDoc ATTR_USERNAME = "username";
57     public final static String JavaDoc ATTR_PASSWORD = "password";
58     public final static String JavaDoc ATTR_READ_ONLY = "readOnly";
59     public final static String JavaDoc ATTR_SHOW_HIDDEN = "showHidden";
60     public final static String JavaDoc ATTR_ALLOW_RECURSIVE = "allowRecursive";
61     public final static String JavaDoc ATTR_NO_DELETE = "noDelete";
62     public final static String JavaDoc ATTR_SCHEME = "scheme";
63
64     private String JavaDoc host;
65     private String JavaDoc path;
66     private int port;
67     private String JavaDoc username;
68     private String JavaDoc password;
69     private String JavaDoc scheme;
70     private String JavaDoc queryString;
71     private VFSProvider provider;
72     private boolean readOnly;
73     private boolean showHidden;
74     private boolean allowRecursive;
75     private boolean noDelete;
76     private boolean autoDetected;
77
78     final static Log log = LogFactory.getLog(NetworkPlaceDetailsForm.class);
79
80     public NetworkPlaceDetailsForm(boolean nextAvailable, boolean previousAvailable, String JavaDoc page, String JavaDoc focussedField,
81                                     boolean autoComplete, boolean finishAvailable, String JavaDoc pageName, String JavaDoc resourceBundle,
82                                     String JavaDoc resourcePrefix, int stepIndex, ResourceType resourceTypeForAccessRights) {
83         super(nextAvailable,
84                         previousAvailable,
85                         page,
86                         focussedField,
87                         autoComplete,
88                         finishAvailable,
89                         pageName,
90                         resourceBundle,
91                         resourcePrefix,
92                         stepIndex,
93                         resourceTypeForAccessRights);
94     }
95
96     public NetworkPlaceDetailsForm() {
97         /* Autocomplete must be false because this form contains passwords
98          * and not all browsers seem to support disabling of autocomplete
99          * for individual fields
100          */

101         super(true,
102                         true,
103                         "/WEB-INF/jsp/content/vfs/networkingWizard/networkPlaceDetails.jspf",
104                         "scheme",
105                         false,
106                         false,
107                         "networkPlaceDetails",
108                         NetworkPlacePlugin.MESSAGE_RESOURCES_KEY,
109                         "networkPlaceWizard.networkPlaceDetails",
110                         2,
111                         NetworkPlacePlugin.NETWORK_PLACE_RESOURCE_TYPE);
112     }
113
114     public void init(AbstractWizardSequence sequence, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
115         super.init(sequence, request);
116
117         if(provider == null) {
118             provider = DEFAULT_PROVIDER;
119         }
120         
121         // Initialise
122
path = (String JavaDoc) sequence.getAttribute(ATTR_PATH, "");
123         host = (String JavaDoc) sequence.getAttribute(ATTR_HOST, "");
124         username = (String JavaDoc) sequence.getAttribute(ATTR_USERNAME, "");
125         password = (String JavaDoc) sequence.getAttribute(ATTR_PASSWORD, "");
126         scheme = (String JavaDoc) sequence.getAttribute(ATTR_SCHEME, provider.getScheme());
127         queryString = "";
128         readOnly = ((Boolean JavaDoc) sequence.getAttribute(ATTR_READ_ONLY, Boolean.FALSE)).booleanValue();
129         showHidden = ((Boolean JavaDoc) sequence.getAttribute(ATTR_SHOW_HIDDEN, Boolean.FALSE)).booleanValue();
130         allowRecursive = ((Boolean JavaDoc) sequence.getAttribute(ATTR_ALLOW_RECURSIVE, Boolean.TRUE)).booleanValue();
131         noDelete = ((Boolean JavaDoc) sequence.getAttribute(ATTR_NO_DELETE, Boolean.FALSE)).booleanValue();
132     }
133
134     public void apply(AbstractWizardSequence sequence) throws Exception JavaDoc {
135         super.apply(sequence);
136         sequence.putAttribute(ATTR_PROVIDER, provider);
137         sequence.putAttribute(ATTR_HOST, getHost());
138         sequence.putAttribute(ATTR_PATH, getPath());
139         sequence.putAttribute(ATTR_PORT, Integer.valueOf(getPort()));
140         sequence.putAttribute(ATTR_USERNAME, getUsername());
141         sequence.putAttribute(ATTR_PASSWORD, getPassword());
142         sequence.putAttribute(ATTR_SCHEME, getScheme());
143         sequence.putAttribute(ATTR_READ_ONLY, new Boolean JavaDoc(readOnly));
144         sequence.putAttribute(ATTR_SHOW_HIDDEN, new Boolean JavaDoc(showHidden));
145         sequence.putAttribute(ATTR_ALLOW_RECURSIVE, new Boolean JavaDoc(allowRecursive));
146         sequence.putAttribute(ATTR_NO_DELETE, new Boolean JavaDoc(noDelete));
147     }
148
149     public String JavaDoc getPath() {
150         return path;
151     }
152
153     public void setPath(String JavaDoc path) {
154         this.path = path;
155     }
156
157     public ActionErrors validate(ActionMapping mapping, HttpServletRequest JavaDoc request) {
158         if (isCommiting()) {
159             ActionErrors errs = super.validate(mapping, request);
160             if (errs == null)
161                 errs = new ActionErrors();
162             
163             try {
164                 
165                 /* If using the default URI provider, turn into a proper provider so validation can take place */
166                 if(provider == DEFAULT_PROVIDER) {
167                     
168                     // Using 'Automatic' means a path *must* be provided
169

170                     if(Util.isNullOrTrimmedBlank(path)) {
171                         errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noPath"));
172                         return errs;
173                     }
174                     
175                     try {
176                         NetworkPlace np = NetworkPlaceUtil.createNetworkPlaceForPath(path);
177                         provider = VFSProviderManager.getInstance().getProvider(np.getScheme());
178                         if(provider == null) {
179                             throw new Exception JavaDoc("No provider " + np.getScheme());
180                         }
181                         scheme = np.getScheme();
182                         host = np.getHost();
183                         port = Math.max(np.getPort(), 0);
184                         path = np.getPath();
185                         username = np.getUsername();
186                         password = np.getPassword();
187                         autoDetected = true;
188                     }
189                     catch(Exception JavaDoc e) {
190                         errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.invalidUri", path));
191                         return errs;
192                     }
193                     changeProvider(provider);
194                 }
195                 
196                 if(provider == null) {
197                     throw new Exception JavaDoc("No provider.");
198                 }
199                 
200                 if(!(provider instanceof NetworkPlaceVFSProvider)) {
201                     throw new Exception JavaDoc("Must be a Network Place VFS provider.");
202                 }
203                 
204                 /* Validate all of the elements */
205                 
206                 if(provider.getHostRequirement() == VFSProvider.ELEMENT_REQUIRED) {
207                     String JavaDoc name = Util.trimmedOrBlank(host);
208                     if("".equals(name)) {
209                         errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noHost"));
210                     }
211                     else {
212                         /* Officialy, the only supported characters in a hostname
213                          * are [a-z], [0-9], '.' and '-'. In practice though other
214                          * characters such as '_' are commonly used. Lets just catach
215                          * the obvious ones for now HTTP Proxy Host
216                          */

217                         if(!HostnameOrIPAddressWithReplacementsValidator.isValidAsHostOrIp(name)) {
218                             errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.invalidHost"));
219                         }
220                     }
221                 }
222                 
223                 if(provider.getPortRequirement() == VFSProvider.ELEMENT_REQUIRED &&
224                                 port == 0) {
225                     errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noPort"));
226                 }
227                 
228                 if(provider.getUserInfoRequirement() == VFSProvider.ELEMENT_REQUIRED &&
229                                 Util.isNullOrTrimmedBlank(username)) {
230                     errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noUserInfo"));
231                 }
232                 
233                 if(provider.getPathRequirement() == VFSProvider.ELEMENT_REQUIRED &&
234                                 Util.isNullOrTrimmedBlank(path)) {
235                     errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noPath"));
236                 }
237             } catch (Exception JavaDoc ex) {
238                 errs.add(Globals.ERROR_KEY, new ActionMessage("vfs.unexpected.error", ex.getMessage()));
239             }
240             return errs;
241         }
242         return null;
243     }
244     
245     public VFSProvider getProvider() {
246         return provider;
247     }
248
249     public boolean isAllowRecursive() {
250         return allowRecursive;
251     }
252
253     public void setAllowRecursive(boolean allowRecursive) {
254         this.allowRecursive = allowRecursive;
255     }
256
257     public boolean isNoDelete() {
258         return noDelete;
259     }
260
261     public void setNoDelete(boolean noDelete) {
262         this.noDelete = noDelete;
263     }
264
265     public boolean isReadOnly() {
266         return readOnly;
267     }
268
269     public void setReadOnly(boolean readOnly) {
270         this.readOnly = readOnly;
271     }
272
273     public boolean isShowHidden() {
274         return showHidden;
275     }
276
277     public void setShowHidden(boolean showHidden) {
278         this.showHidden = showHidden;
279     }
280
281     public String JavaDoc getPassword() {
282         return password;
283     }
284
285     public void setPassword(String JavaDoc password) {
286         this.password = password;
287     }
288
289     public String JavaDoc getUsername() {
290         return username;
291     }
292
293     public void setUsername(String JavaDoc username) {
294         this.username = username;
295     }
296
297     public String JavaDoc getScheme() {
298         return scheme;
299     }
300
301     public void setScheme(String JavaDoc scheme) {
302         this.scheme = scheme;
303     }
304
305     public String JavaDoc getHost() {
306         return host;
307     }
308
309     public void setHost(String JavaDoc host) {
310         this.host = host;
311     }
312
313     public int getPort() {
314         return port;
315     }
316
317     public void setPort(int port) {
318         this.port = port;
319     }
320
321     public String JavaDoc getQueryString() {
322         return queryString;
323     }
324
325     public void setQueryString(String JavaDoc queryString) {
326         this.queryString = queryString;
327     }
328
329     public void reset(ActionMapping mapping, HttpServletRequest JavaDoc request) {
330         super.reset(mapping, request);
331         this.showHidden = false;
332         this.readOnly = false;
333         this.allowRecursive = false;
334         this.noDelete = false;
335         this.autoDetected = false;
336     }
337
338     public void setProvider(VFSProvider provider) {
339         this.provider = provider;
340     }
341
342     public void changeProvider(VFSProvider provider) {
343         setProvider(provider);
344         setScheme(provider.getScheme());
345     }
346
347     public boolean isAutomaticallyDetected() {
348         return autoDetected;
349     }
350 }
351
Popular Tags