Package org.apache.jmeter.protocol.http.control

Source Code of org.apache.jmeter.protocol.http.control.HeaderManager

// $Header: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java,v 1.9.2.1 2004/05/19 21:24:24 sebb Exp $
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.jmeter.protocol.http.control;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;

import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.util.JMeterUtils;

/**
* This class provides an interface to headers file to
* pass HTTP headers along with a request.
*
* @author  <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
* @version $Revision: 1.9.2.1 $ $Date: 2004/05/19 21:24:24 $
*/
public class HeaderManager extends ConfigTestElement implements Serializable
{

    public static final String HEADERS = "HeaderManager.headers";

    private final static int columnCount = 2;
    private final static String[] columnNames =
        { JMeterUtils.getResString("name"), JMeterUtils.getResString("value")};
    /**
     * Apache SOAP driver does not provide an easy
     * way to get and set the cookie or HTTP
     * header. Therefore it is necessary to store
     * the SOAPHTTPConnection object and reuse it.
     */
  private Object SOAPHeader = null;
 
    public HeaderManager()
    {
        setProperty(new CollectionProperty(HEADERS, new ArrayList()));
    }

    public CollectionProperty getHeaders()
    {
        return (CollectionProperty) getProperty(HEADERS);
    }

    public int getColumnCount()
    {
        return columnCount;
    }

    public String getColumnName(int column)
    {
        return columnNames[column];
    }

    public Class getColumnClass(int column)
    {
        return columnNames[column].getClass();
    }

    public Header getHeader(int row)
    {
        return (Header) getHeaders().get(row).getObjectValue();
    }

    /**
     * Save the header data to a file.
     */
    public void save(String headFile) throws IOException
    {
        File file = new File(headFile);
        if (!file.isAbsolute())
        {
            file =
                new File(
                    System.getProperty("user.dir") + File.separator + headFile);
        }
        PrintWriter writer = new PrintWriter(new FileWriter(file));
        writer.println("# JMeter generated Header file");
        for (int i = 0; i < getHeaders().size(); i++)
        {
            Header head = (Header) getHeaders().get(i);
            writer.println(head.toString());
        }
        writer.flush();
        writer.close();
    }

    /**
     * Add header data from a file.
     */
    public void addFile(String headerFile) throws IOException
    {
        File file = new File(headerFile);
        if (!file.isAbsolute())
        {
            file =
                new File(
                    System.getProperty("user.dir")
                        + File.separator
                        + headerFile);
        }
        BufferedReader reader = null;
        if (file.canRead())
        {
            reader = new BufferedReader(new FileReader(file));
        }
        else
        {
            throw new IOException("The file you specified cannot be read.");
        }

        String line;
        while ((line = reader.readLine()) != null)
        {
            try
            {
                if (line.startsWith("#") || line.trim().length() == 0)
                {
                    continue;
                }
                String[] st = split(line, "\t", " ");
                int name = 0;
                int value = 1;
                Header header = new Header(st[name], st[value]);
                getHeaders().addItem(header);
            }
            catch (Exception e)
            {
                throw new IOException(
                    "Error parsing header line\n\t'" + line + "'\n\t" + e);
            }
        }
        reader.close();
    }

    /**
     * Add a header.
     */
    public void add(Header h)
    {
        getHeaders().addItem(h);
    }

    /**
     * Add an empty header.
     */
    public void add()
    {
        getHeaders().addItem(new Header());
    }

    /**
     * Remove a header.
     */
    public void remove(int index)
    {
        getHeaders().remove(index);
    }

    /**
     * Return the number of headers.
     */
    public int size()
    {
        return getHeaders().size();
    }

    /**
     * Return the header at index i.
     */
    public Header get(int i)
    {
        return (Header) getHeaders().get(i).getObjectValue();
    }

    /*
    public String getHeaderHeaderForURL(URL url)
    {
        if (!url.getProtocol().toUpperCase().trim().equals("HTTP")
            && !url.getProtocol().toUpperCase().trim().equals("HTTPS"))
        {
            return null;
        }

        StringBuffer sbHeader = new StringBuffer();
        for (Iterator enum = headers.iterator(); enum.hasNext();)
        {
            Header header = (Header) enum.next();
            if (url.getHost().endsWith(header.getDomain())
                && url.getFile().startsWith(header.getPath())
                && (System.currentTimeMillis() / 1000) <= header.getExpires())
            {
                if (sbHeader.length() > 0)
                {
                    sbHeader.append("; ");
                }
                sbHeader.append(header.getName()).append("=").append(
                    header.getValue());
            }
        }

        if (sbHeader.length() != 0)
        {
            return sbHeader.toString();
        }
        else
        {
            return null;
        }
    }
    */
   
    /*
    public void addHeaderFromHeader(String headerHeader, URL url)
    {
        StringTokenizer st = new StringTokenizer(headerHeader, ";");
        String nvp;

        // first n=v is name=value
        nvp = st.nextToken();
        int index = nvp.indexOf("=");
        String name = nvp.substring(0, index);
        String value = nvp.substring(index + 1);
        String domain = url.getHost();

        Header newHeader = new Header(name, value);
        // check the rest of the headers
        while (st.hasMoreTokens())
        {
            nvp = st.nextToken();
            nvp = nvp.trim();
            index = nvp.indexOf("=");
            if (index == -1)
            {
                index = nvp.length();
            }
            String key = nvp.substring(0, index);

            Vector removeIndices = new Vector();
            for (int i = headers.size() - 1; i >= 0; i--)
            {
                Header header = (Header) headers.get(i);
                if (header == null)
                {
                    continue;
                }
                if (header.getName().equals(newHeader.getName()))
                {
                    removeIndices.addElement(new Integer(i));
                }
            }

            for (Enumeration e = removeIndices.elements();
                e.hasMoreElements();
                )
            {
                index = ((Integer) e.nextElement()).intValue();
                headers.remove(index);
            }

        }
        */
    public void removeHeaderNamed(String name)
    {
        Vector removeIndices = new Vector();
        for (int i = getHeaders().size() - 1; i >= 0; i--)
        {
            Header header = (Header) getHeaders().get(i).getObjectValue();
            if (header == null)
            {
                continue;
            }
            if (header.getName().equalsIgnoreCase(name))
            {
                removeIndices.addElement(new Integer(i));
            }
        }

        for (Enumeration e = removeIndices.elements(); e.hasMoreElements();)
        {
            getHeaders().remove(((Integer) e.nextElement()).intValue());
        }
    }

    /**
     * Takes a String and a tokenizer character, and returns a new array of
     * strings of the string split by the tokenizer character.
     *
     * @param splittee  string to be split
     * @param splitChar character to split the string on
     * @param def       default value to place between two split chars that have
     *                  nothing between them
     * @return          array of all the tokens.
     */
    public String[] split(String splittee, String splitChar, String def)
    {
        if (splittee == null || splitChar == null)
        {
            return new String[0];
        }
        StringTokenizer tokens;
        String temp;
        int spot;
        while ((spot = splittee.indexOf(splitChar + splitChar)) != -1)
        {
            splittee =
                splittee.substring(0, spot + splitChar.length())
                    + def
                    + splittee.substring(
                        spot + (1 * splitChar.length()),
                        splittee.length());
        }
        Vector returns = new Vector();
        tokens = new StringTokenizer(splittee, splitChar);
        while (tokens.hasMoreTokens())
        {
            temp = (String) tokens.nextToken();
            returns.addElement(temp);
        }
        String[] values = new String[returns.size()];
        returns.copyInto(values);
        return values;
    }

    public String getClassLabel()
    {
        return JMeterUtils.getResString("header_manager_title");
    }
   
    /**
     * Added support for SOAP related header stuff.
     * 1-29-04 Peter Lin
     * @return the SOAP header Object
     */
    public Object getSOAPHeader(){
      return this.SOAPHeader;
    }
   
    /**
     * Set the SOAPHeader with the SOAPHTTPConnection
     * object. We may or may not want to rename this
     * to setHeaderObject(Object). Concievably, other
     * samplers may need this kind of functionality.
     * 1-29-04 Peter Lin
     * @param header
     */
    public void setSOAPHeader(Object header){
      this.SOAPHeader = header;
    }
}
TOP

Related Classes of org.apache.jmeter.protocol.http.control.HeaderManager

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.