/*
* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache JMeter" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache JMeter", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.jmeter.protocol.http.parser;
import java.util.*;
import org.apache.oro.text.regex.*;
import org.apache.jmeter.control.ResponseParser;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.protocol.http.config.UrlConfig;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @author Michael Stover
* @version 1.0
*/
public class HtmlParser implements ResponseParser
{
Collection parsedConfigs;
Perl5Compiler compiler;
List hrefPatterns;
private int compilerOptions = Perl5Compiler.CASE_INSENSITIVE_MASK |
Perl5Compiler.MULTILINE_MASK | Perl5Compiler.READ_ONLY_MASK;
public HtmlParser()
{
compiler = new Perl5Compiler();
hrefPatterns = new LinkedList();
}
public void modifyEntry(Entry entry, String currentResponse)
{
if(entryIrrelevant(entry))
{
return;
}
parsedConfigs = new LinkedList();
UrlConfig config = (UrlConfig)entry.getConfigElement(
org.apache.jmeter.protocol.http.config.UrlConfig.class);
parseResponse(currentResponse);
Iterator iter = parsedConfigs.iterator();
while (iter.hasNext())
{
UrlConfig item = (UrlConfig)iter.next();
if(item.getDomain().equals(config.getDomain()) &&
item.getPath().equals(config.getPath()))
{
//modifyEntry(entry,item);
}
}
}
private void parseResponse(String html)
{
int index = 0;
int previous = 0;
while((index = html.indexOf("<",previous)) > -1)
{
if(html.substring(index+1,index+3).equalsIgnoreCase("a "))
{
parseAnchor(html.substring(index,html.indexOf(">",index)));
}
else if(html.substring(index+1,index+"form ".length()).equalsIgnoreCase("form "))
{
parseForm(html.substring(index));
}
previous = html.indexOf(">",index);
}
}
private void parseForm(String form)
{
}
private void parseAnchor(String anchorString)
{
String upperVersion = anchorString.toUpperCase();
int start = upperVersion.indexOf("HREF=");
int end;
start += 5;
if(anchorString.charAt(start) == '"')
{
start++;
end = anchorString.indexOf("\"",start);
}
else
{
int x = anchorString.indexOf(" ");
if(x > -1)
{
end = x;
}
else
{
end = anchorString.length();
}
}
}
private boolean entryIrrelevant(Entry entry)
{
UrlConfig config = (UrlConfig)entry.getConfigElement(
org.apache.jmeter.protocol.http.config.UrlConfig.class);
if(config == null)
{
return true;
}
return false;
}
public String getClassLabel()
{
/**@todo: Implement this org.apache.jmeter.control.ResponseParser method*/
throw new java.lang.UnsupportedOperationException("Method getClassLabel() not yet implemented.");
}
}