com.adito.webforwards.webforwardwizard.forms.WebForwardSpecificDetailsForm.java Source code

Java tutorial

Introduction

Here is the source code for com.adito.webforwards.webforwardwizard.forms.WebForwardSpecificDetailsForm.java

Source

/*
*  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.webforwards.webforwardwizard.forms;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

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.PropertyList;
import com.adito.core.BundleActionMessage;
import com.adito.core.forms.AbstractResourceDetailsWizardForm;
import com.adito.vfs.webdav.DAVUtilities;
import com.adito.webforwards.WebForward;
import com.adito.webforwards.WebForwardPlugin;
import com.adito.webforwards.WebForwardTypes;
import com.adito.wizard.AbstractWizardSequence;

/**
 * The form for all other attributes associated with the TunneledSite resource.
 */
public class WebForwardSpecificDetailsForm extends AbstractResourceDetailsWizardForm {

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

    private int type = -1;
    // for all web forwards
    public final static String ATTR_DESTINATION_URL = "destinationURL";
    public final static String ATTR_CATEGORY = "category";

    private String destinationURL;
    private String category;

    // Replacement proxy attributes
    public final static String ATTR_RESTRICT_TO_HOSTS = "restrictToHosts";
    public final static String ATTR_ENCODEING = "encoding";

    private String encoding;
    private PropertyList restrictToHosts;

    // reverse proxy attribute
    public final static String ATTR_PATHS = "paths";
    public final static String ATTR_ACTIVE_DNS = "activeDNS";
    public final static String ATTR_CUSTOM_HEADERS = "customHeaders";

    public static final String ATTR_HOST_HEADER = "hostHeader";

    private String hostHeader;
    private String paths;
    private boolean activeDNS;
    private Map customHeaders;

    /**
     * Construtor
     */
    public WebForwardSpecificDetailsForm() {
        super(true, true, "/WEB-INF/jsp/content/webforward/webforwardwizard/webForwardSpecificDetails.jspf",
                "destinationURL", true, false, "webForwardSpecificDetails", "webForwards",
                "webForwardWizard.webForwardSpecificDetails", 3, WebForwardPlugin.WEBFORWARD_RESOURCE_TYPE);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.adito.wizard.forms.AbstractWizardForm#init(com.adito.wizard.AbstractWizardSequence,
     *      javax.servlet.http.HttpServletRequest)
     */
    public void init(AbstractWizardSequence sequence, HttpServletRequest request) throws Exception {
        super.init(sequence, request);
        this.restrictToHosts = (PropertyList) sequence.getAttribute(ATTR_RESTRICT_TO_HOSTS, new PropertyList());
        this.destinationURL = (String) sequence.getAttribute(ATTR_DESTINATION_URL, "");
        this.category = (String) sequence.getAttribute(ATTR_CATEGORY, "General");
        type = ((Integer) sequence.getAttribute(WebForwardTypeSelectionForm.ATTR_TYPE, new Integer(0))).intValue();
        this.encoding = (String) sequence.getAttribute(ATTR_ENCODEING, WebForwardTypes.DEFAULT_ENCODING);

        this.paths = (String) sequence.getAttribute(ATTR_PATHS, "");
        this.hostHeader = (String) sequence.getAttribute(ATTR_HOST_HEADER, "");
        this.activeDNS = ((Boolean) sequence.getAttribute(ATTR_ACTIVE_DNS, Boolean.FALSE)).booleanValue();
        this.customHeaders = (Map) sequence.getAttribute(ATTR_CUSTOM_HEADERS, new HashMap());
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.adito.wizard.forms.AbstractWizardForm#apply(com.adito.wizard.AbstractWizardSequence)
     */
    public void apply(AbstractWizardSequence sequence) throws Exception {
        super.apply(sequence);
        sequence.putAttribute(ATTR_DESTINATION_URL, this.destinationURL);
        sequence.putAttribute(ATTR_CATEGORY, this.category);
        sequence.putAttribute(ATTR_ENCODEING, this.encoding);
        sequence.putAttribute(ATTR_PATHS, this.paths);
        sequence.putAttribute(ATTR_ACTIVE_DNS, new Boolean(this.activeDNS));
        sequence.putAttribute(ATTR_HOST_HEADER, activeDNS ? "" : this.hostHeader);
        sequence.putAttribute(ATTR_CUSTOM_HEADERS, this.customHeaders);
        sequence.putAttribute(ATTR_RESTRICT_TO_HOSTS, restrictToHosts);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping,
     *      javax.servlet.http.HttpServletRequest)
     */
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        if (getResourceName() != null && isCommiting()) {
            ActionErrors errs = super.validate(mapping, request);
            AbstractWizardSequence seq = getWizardSequence(request);

            try {
                if (this.getDestinationURL().indexOf("${") == -1) {
                    // only chek the format if there is no hash on the front.
                    new URL(this.getDestinationURL());
                }
            } catch (MalformedURLException e) {
                errs.add(Globals.ERROR_KEY, new BundleActionMessage(seq.getCurrentPageForm().getResourceBundle(),
                        seq.getCurrentPageForm().getResourcePrefix() + ".error.malformedURLException"));
            }

            if (getCategory().trim().equals("")) {
                errs.add(Globals.ERROR_KEY, new BundleActionMessage(seq.getCurrentPageForm().getResourceBundle(),
                        seq.getCurrentPageForm().getResourcePrefix() + ".error.noCategory"));
            }

            if (type == WebForward.TYPE_PATH_BASED_REVERSE_PROXY) {
                if (this.paths != null && this.paths.length() == 0) {
                    errs.add(Globals.ERROR_KEY,
                            new ActionMessage("webForwardWizard.webForwardSpecificDetails.error.needs.path"));
                }
                String validatedPaths = "";

                if (this.paths != null && this.paths.length() > 0) {
                    StringTokenizer t = new StringTokenizer(this.paths, "\n\r");
                    while (t.hasMoreTokens()) {
                        String path = t.nextToken();
                        path = path.trim();
                        if (!path.startsWith("/"))
                            path = "/" + path;
                        if (path.endsWith("/"))
                            path = DAVUtilities.stripTrailingSlash(path);

                        validatedPaths += path + "\n";
                    }
                    if (errs.size() == 0)
                        this.paths = validatedPaths;
                }
            } else if (type == WebForward.TYPE_HOST_BASED_REVERSE_PROXY) {
                if (this.activeDNS && !this.hostHeader.equals("")) {
                    errs.add(Globals.ERROR_KEY, new ActionMessage(
                            "webForwardWizard.webForwardSpecificDetails.error.hostBased.bothSelected"));
                }
                if (!this.activeDNS && this.hostHeader.equals("")) {
                    errs.add(Globals.ERROR_KEY, new ActionMessage(
                            "webForwardWizard.webForwardSpecificDetails.error.hostBased.nonSelected"));
                }
            }

            return errs;
        }
        return null;
    }

    /**
     * @return The Web Forward Category.
     */
    public String getCategory() {
        return category;
    }

    /**
     * @param category The Web Forward Category.
     */
    public void setCategory(String category) {
        this.category = category;
    }

    /**
     * @return The destination URL.
     */
    public String getDestinationURL() {
        return destinationURL;
    }

    /**
     * @param destinationURL The destination URL.
     */
    public void setDestinationURL(String destinationURL) {
        this.destinationURL = destinationURL;
    }

    public boolean isPathBased() {
        return WebForward.TYPE_PATH_BASED_REVERSE_PROXY == type;
    }

    public boolean isHostBased() {
        return WebForward.TYPE_HOST_BASED_REVERSE_PROXY == type;
    }

    public PropertyList getRestrictToHostsList() {
        return restrictToHosts;
    }

    public String getRestrictToHosts() {
        return restrictToHosts.getAsTextFieldText();
    }

    public void setRestrictToHosts(String restrictToHosts) {
        this.restrictToHosts.setAsTextFieldText(restrictToHosts);
    }

    public void reset(ActionMapping mapping, HttpServletRequest request) {
        super.reset(mapping, request);
        this.activeDNS = false;
    }

    public boolean isActiveDNS() {
        return activeDNS;
    }

    public void setActiveDNS(boolean activeDNS) {
        this.activeDNS = activeDNS;
    }

    public Map getCustomHeaders() {
        return customHeaders;
    }

    public void setCustomHeaders(Map customHeaders) {
        this.customHeaders = customHeaders;
    }

    public String getPaths() {
        return paths;
    }

    public void setPaths(String paths) {
        this.paths = paths;
    }

    public String getEncoding() {
        return encoding;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public String getHostHeader() {
        return hostHeader;
    }

    public void setHostHeader(String hostHeader) {
        this.hostHeader = hostHeader;
    }

    public List getEncodeingTypeList() {
        return WebForwardTypes.ENCODING_TYPES;
    }
}