Package com.adito.networkplaces.wizards.forms

Source Code of com.adito.networkplaces.wizards.forms.NetworkPlaceDetailsForm

        /*
*  Adito
*
*  Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU General Public License
*  as published by the Free Software Foundation; either version 2 of
*  the License, or (at your option) any later version.
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public
*  License along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
     
package com.adito.networkplaces.wizards.forms;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import com.adito.boot.Util;
import com.adito.core.forms.AbstractResourceDetailsWizardForm;
import com.adito.input.validators.HostnameOrIPAddressWithReplacementsValidator;
import com.adito.networkplaces.NetworkPlace;
import com.adito.networkplaces.NetworkPlacePlugin;
import com.adito.networkplaces.NetworkPlaceUtil;
import com.adito.networkplaces.NetworkPlaceVFSProvider;
import com.adito.policyframework.ResourceType;
import com.adito.vfs.DefaultVFSProvider;
import com.adito.vfs.VFSProvider;
import com.adito.vfs.VFSProviderManager;
import com.adito.wizard.AbstractWizardSequence;

public class NetworkPlaceDetailsForm extends AbstractResourceDetailsWizardForm {
 
  /**
   * Default provider used for entering in URI format
   */
  public final static VFSProvider DEFAULT_PROVIDER = new DefaultVFSProvider("automatic", null, NetworkPlacePlugin.MESSAGE_RESOURCES_KEY);

  public final static String ATTR_PROVIDER = "provider";
  public final static String ATTR_HOST = "host";
  public final static String ATTR_PATH = "path";
  public final static String ATTR_PORT = "port";
  public final static String ATTR_USERNAME = "username";
  public final static String ATTR_PASSWORD = "password";
  public final static String ATTR_READ_ONLY = "readOnly";
  public final static String ATTR_SHOW_HIDDEN = "showHidden";
  public final static String ATTR_ALLOW_RECURSIVE = "allowRecursive";
  public final static String ATTR_NO_DELETE = "noDelete";
  public final static String ATTR_SCHEME = "scheme";

  private String host;
  private String path;
  private int port;
  private String username;
  private String password;
  private String scheme;
    private String queryString;
    private VFSProvider provider;
  private boolean readOnly;
  private boolean showHidden;
  private boolean allowRecursive;
  private boolean noDelete;
    private boolean autoDetected;

  final static Log log = LogFactory.getLog(NetworkPlaceDetailsForm.class);

  public NetworkPlaceDetailsForm(boolean nextAvailable, boolean previousAvailable, String page, String focussedField,
                  boolean autoComplete, boolean finishAvailable, String pageName, String resourceBundle,
                  String resourcePrefix, int stepIndex, ResourceType resourceTypeForAccessRights) {
    super(nextAvailable,
            previousAvailable,
            page,
            focussedField,
            autoComplete,
            finishAvailable,
            pageName,
            resourceBundle,
            resourcePrefix,
            stepIndex,
            resourceTypeForAccessRights);
  }

  public NetworkPlaceDetailsForm() {
      /* Autocomplete must be false because this form contains passwords
       * and not all browsers seem to support disabling of autocomplete
       * for individual fields
       */
    super(true,
            true,
            "/WEB-INF/jsp/content/vfs/networkingWizard/networkPlaceDetails.jspf",
            "scheme",
            false,
            false,
            "networkPlaceDetails",
            NetworkPlacePlugin.MESSAGE_RESOURCES_KEY,
            "networkPlaceWizard.networkPlaceDetails",
            2,
            NetworkPlacePlugin.NETWORK_PLACE_RESOURCE_TYPE);
  }

    public void init(AbstractWizardSequence sequence, HttpServletRequest request) throws Exception {
        super.init(sequence, request);

        if(provider == null) {
          provider = DEFAULT_PROVIDER;
        }
       
        // Initialise
        path = (String) sequence.getAttribute(ATTR_PATH, "");
        host = (String) sequence.getAttribute(ATTR_HOST, "");
        username = (String) sequence.getAttribute(ATTR_USERNAME, "");
        password = (String) sequence.getAttribute(ATTR_PASSWORD, "");
        scheme = (String) sequence.getAttribute(ATTR_SCHEME, provider.getScheme());
        queryString = "";
        readOnly = ((Boolean) sequence.getAttribute(ATTR_READ_ONLY, Boolean.FALSE)).booleanValue();
        showHidden = ((Boolean) sequence.getAttribute(ATTR_SHOW_HIDDEN, Boolean.FALSE)).booleanValue();
        allowRecursive = ((Boolean) sequence.getAttribute(ATTR_ALLOW_RECURSIVE, Boolean.TRUE)).booleanValue();
        noDelete = ((Boolean) sequence.getAttribute(ATTR_NO_DELETE, Boolean.FALSE)).booleanValue();
    }

    public void apply(AbstractWizardSequence sequence) throws Exception {
        super.apply(sequence);
        sequence.putAttribute(ATTR_PROVIDER, provider);
        sequence.putAttribute(ATTR_HOST, getHost());
        sequence.putAttribute(ATTR_PATH, getPath());
        sequence.putAttribute(ATTR_PORT, Integer.valueOf(getPort()));
        sequence.putAttribute(ATTR_USERNAME, getUsername());
        sequence.putAttribute(ATTR_PASSWORD, getPassword());
        sequence.putAttribute(ATTR_SCHEME, getScheme());
        sequence.putAttribute(ATTR_READ_ONLY, new Boolean(readOnly));
        sequence.putAttribute(ATTR_SHOW_HIDDEN, new Boolean(showHidden));
        sequence.putAttribute(ATTR_ALLOW_RECURSIVE, new Boolean(allowRecursive));
        sequence.putAttribute(ATTR_NO_DELETE, new Boolean(noDelete));
    }

  public String getPath() {
    return path;
  }

  public void setPath(String path) {
    this.path = path;
  }

    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        if (isCommiting()) {
            ActionErrors errs = super.validate(mapping, request);
            if (errs == null)
                errs = new ActionErrors();
           
            try {              
               
                /* If using the default URI provider, turn into a proper provider so validation can take place */
                if(provider == DEFAULT_PROVIDER) {
                 
                  // Using 'Automatic' means a path *must* be provided
                   
                    if(Util.isNullOrTrimmedBlank(path)) {
                        errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noPath"));
                        return errs;
                    }
                 
                  try {
                    NetworkPlace np = NetworkPlaceUtil.createNetworkPlaceForPath(path);
                  provider = VFSProviderManager.getInstance().getProvider(np.getScheme());
                  if(provider == null) {
                    throw new Exception("No provider " + np.getScheme());
                  }
                  scheme = np.getScheme();
                  host = np.getHost();
                  port = Math.max(np.getPort(), 0);
                  path = np.getPath();
                  username = np.getUsername();
                  password = np.getPassword();
                        autoDetected = true;
                  }
                catch(Exception e) {                       
                        errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.invalidUri", path));
                        return errs;                     
                }
                    changeProvider(provider);
                }
               
                if(provider == null) {
                  throw new Exception("No provider.");
                }
               
                if(!(provider instanceof NetworkPlaceVFSProvider)) {
                  throw new Exception("Must be a Network Place VFS provider.");
                }
               
                /* Validate all of the elements */
               
                if(provider.getHostRequirement() == VFSProvider.ELEMENT_REQUIRED) {
                String name = Util.trimmedOrBlank(host);
                  if("".equals(name)) {                   
                    errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noHost"));
                  }
                  else {
                    /* Officialy, the only supported characters in a hostname
                     * are [a-z], [0-9], '.' and '-'. In practice though other
                     * characters such as '_' are commonly used. Lets just catach
                     * the obvious ones for now HTTP Proxy Host
                     */
                        if(!HostnameOrIPAddressWithReplacementsValidator.isValidAsHostOrIp(name)) {                     
                        errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.invalidHost"));                     
                    }
                  }
                }
               
                if(provider.getPortRequirement() == VFSProvider.ELEMENT_REQUIRED &&
                        port == 0) {
                    errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noPort"));
                }
               
                if(provider.getUserInfoRequirement() == VFSProvider.ELEMENT_REQUIRED &&
                        Util.isNullOrTrimmedBlank(username)) {
                    errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noUserInfo"));
                }
               
                if(provider.getPathRequirement() == VFSProvider.ELEMENT_REQUIRED &&
                        Util.isNullOrTrimmedBlank(path)) {
                    errs.add(Globals.ERROR_KEY, new ActionMessage("networkPlaceWizard.networkPlaceDetails.error.noPath"));
                }
            } catch (Exception ex) {
                errs.add(Globals.ERROR_KEY, new ActionMessage("vfs.unexpected.error", ex.getMessage()));
            }
            return errs;
        }
        return null;
    }
   
    public VFSProvider getProvider() {
      return provider;
    }

  public boolean isAllowRecursive() {
    return allowRecursive;
  }

  public void setAllowRecursive(boolean allowRecursive) {
    this.allowRecursive = allowRecursive;
  }

  public boolean isNoDelete() {
    return noDelete;
  }

  public void setNoDelete(boolean noDelete) {
    this.noDelete = noDelete;
  }

  public boolean isReadOnly() {
    return readOnly;
  }

  public void setReadOnly(boolean readOnly) {
    this.readOnly = readOnly;
  }

  public boolean isShowHidden() {
    return showHidden;
  }

  public void setShowHidden(boolean showHidden) {
    this.showHidden = showHidden;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String getScheme() {
    return scheme;
  }

  public void setScheme(String scheme) {
    this.scheme = scheme;
  }

  public String getHost() {
    return host;
  }

  public void setHost(String host) {
    this.host = host;
  }

  public int getPort() {
    return port;
  }

  public void setPort(int port) {
    this.port = port;
  }

  public String getQueryString() {
        return queryString;
    }

    public void setQueryString(String queryString) {
        this.queryString = queryString;
    }

  public void reset(ActionMapping mapping, HttpServletRequest request) {
    super.reset(mapping, request);
    this.showHidden = false;
    this.readOnly = false;
    this.allowRecursive = false;
    this.noDelete = false;
        this.autoDetected = false;
  }

  public void setProvider(VFSProvider provider) {
    this.provider = provider;   
  }

    public void changeProvider(VFSProvider provider) {
        setProvider(provider);
        setScheme(provider.getScheme());       
    }

    public boolean isAutomaticallyDetected() {
        return autoDetected;
    }
}
TOP

Related Classes of com.adito.networkplaces.wizards.forms.NetworkPlaceDetailsForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.