sunlabs.brazil.handler

Class MapPage

public class MapPage extends Object

Utility class to rewrite links inside of web pages so they appear to come from a different site.

Note: This only works for "http", not "https".

Version: @(#)MapPage.java 2.4

Author: Stephen Uhler

Field Summary
intcount
static booleanlog
VectorpatternMap
Stringprefix
HashtabletagMap
Initialized to all tag/attribute pairs whose attribute values are considered for rewriting.
HashtableurlMap
Constructor Summary
MapPage(String prefix)
Create a site mapper.
Method Summary
voidaddMapEntry(String name, String value)
Add or remove an item to the map table
voidaddPatternEntry(String pattern, String replacement)
Add or remove an item to the pattern table
voidaddTag(String name, String attribute)
add a tag/attribute pair to the rewrite list.
voidclearPatterns()
Clear the pattern map.
StringconvertHtml(String content)
Rewrite all the url's in this document.
StringconvertString(String fix)
Rewrite a url inside a tag parameter.
voidlog(String message)
diagnostic output
intmapCount()
How many tags have been mapped?
voidsetMap(Hashtable map)
Set the map table for cross-linked sites.
voidsetPrefix(String prefix)
Change the prefix that will replace the leading "/" in a URL.

Field Detail

count

public int count

log

public static boolean log

patternMap

public Vector patternMap

prefix

public String prefix

tagMap

public Hashtable tagMap
Initialized to all tag/attribute pairs whose attribute values are considered for rewriting.

urlMap

public Hashtable urlMap

Constructor Detail

MapPage

public MapPage(String prefix)
Create a site mapper. The following table maps all the entity/attribute combinations that are (or could be) URL's to (possibly) rewrite.

Parameters: prefix Every link starting with "/" has the leading slash replaced by prefix. If prefix is null, then only fully qualified url's are considered for rewriting.

Method Detail

addMapEntry

public void addMapEntry(String name, String value)
Add or remove an item to the map table

Parameters: name The prefix of the url to match value The prefix to replace it with. If null, remove the prefix

addPatternEntry

public void addPatternEntry(String pattern, String replacement)
Add or remove an item to the pattern table

Parameters: pattern The prefix pattern of the url to match Full tcl8.0-style regexps are supported replacement The prefix to replace it with. If null, remove the prefix. \n's are replaced by the corrosponding sub-matches in the name

Patterns are stored in a vector, with each pattern taking 3 concecutive elements: the pattern, the replacement rule, and the compiled expression. This way they are searched in order. Sample usage: http://www.([^.]*).com/ /site/\1/ will replace the url: http://www.foo.com/a/b.html with /site/foo/a/b.html

addTag

public void addTag(String name, String attribute)
add a tag/attribute pair to the rewrite list. If the attribute is null, remove the tag.

clearPatterns

public void clearPatterns()
Clear the pattern map.

convertHtml

public String convertHtml(String content)
Rewrite all the url's in this document. This is accomplished via repeated calls to {@link #convertString}.

Parameters: content The HTML to be processed.

Returns: The smae HTML, will all URL's rewritten. URL's starting with "/" have the "/" replaced with the prefix. All others are re-written based on the supplied mapping tables.

convertString

public String convertString(String fix)
Rewrite a url inside a tag parameter.

Parameters: fix The value of the tag to be rewritten (fixed)

Returns: null of the existing value is OK, otherwise the new value is returned

log

public void log(String message)
diagnostic output

mapCount

public int mapCount()
How many tags have been mapped?

setMap

public void setMap(Hashtable map)
Set the map table for cross-linked sites. Foreach key in the table that matches a URL, replace the key portion of the url with the key's value.

setPrefix

public void setPrefix(String prefix)
Change the prefix that will replace the leading "/" in a URL.