%PDF- %PDF-
| Direktori : /home/waritko/yacy/libbuild/WebCat-swf/src/pt/tumba/parser/swf/ |
| Current File : //home/waritko/yacy/libbuild/WebCat-swf/src/pt/tumba/parser/swf/SaxHandlerBase.java |
package pt.tumba.parser.swf;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;
/**
* Base class for SAX2 Content Handlers
*
*@author unknown
*@created 15 de Setembro de 2002
*/
public abstract class SaxHandlerBase extends DefaultHandler {
/**
* Description of the Field
*/
protected Map elementTypes = new HashMap();
/**
* Description of the Field
*/
protected SaxHandlerBase.ElementType elemType;
/**
* Description of the Field
*/
protected List elems = new ArrayList();
/**
* Description of the Field
*/
protected boolean gatherMode = false;
/**
* Description of the Field
*/
protected List gatherBuffer;
/**
* Description of the Field
*/
protected SaxHandlerBase.GatheringElementType gatheringElement;
//--Start gathering elements/chars for later dispatch
/**
* Description of the Method
*
*@param elem Description of the Parameter
*/
public void startGatherMode(SaxHandlerBase.GatheringElementType elem) {
gatheringElement = elem;
gatherBuffer = new ArrayList();
gatherMode = true;
}
//--stop gathering and dispatch the gathered elements
/**
* Description of the Method
*
*@exception Exception Description of the Exception
*/
public void endGatherMode() throws Exception {
gatherMode = false;
gatheringElement = null;
//--replay the elements
for (Iterator it = gatherBuffer.iterator(); it.hasNext(); ) {
Object[] elem = (Object[]) it.next();
SaxHandlerBase.ElementType type = (SaxHandlerBase.ElementType) elem[0];
if (type == null) {
continue;
}
if (elem[1] == null) {
//element end
type.endElement();
} else if (elem[1] instanceof String) {
String charstring = (String) elem[1];
char[] chars = charstring.toCharArray();
type.characters(chars, 0, chars.length);
} else {
Attributes atts = (Attributes) elem[1];
type.startElement(atts);
}
}
gatherBuffer = null;
}
//--dispatch all the gathered elements that match the name
/**
* Description of the Method
*
*@param elemName Description of the Parameter
*@exception Exception Description of the Exception
*/
public void dispatchAllMatchingGatheredElements(String elemName) throws Exception {
SaxHandlerBase.ElementType dispelem =
(SaxHandlerBase.ElementType) elementTypes.get(elemName);
if (dispelem == null) {
return;
}
boolean found = false;
for (Iterator it = gatherBuffer.iterator(); it.hasNext(); ) {
Object[] elem = (Object[]) it.next();
SaxHandlerBase.ElementType type = (SaxHandlerBase.ElementType) elem[0];
if (type == null) {
continue;
}
if (type == dispelem) {
found = true;
}
if (found) {
it.remove();
if (elem[1] == null) {
//element end
type.endElement();
if (type == dispelem) {
found = false;
}
//done dispatching this element
} else if (elem[1] instanceof String) {
String charstring = (String) elem[1];
char[] chars = charstring.toCharArray();
type.characters(chars, 0, chars.length);
} else {
Attributes atts = (Attributes) elem[1];
type.startElement(atts);
}
}
}
}
//--dispatch the first gathered element that matches the name
/**
* Description of the Method
*
*@param elemName Description of the Parameter
*@exception Exception Description of the Exception
*/
public void dispatchGatheredElement(String elemName) throws Exception {
SaxHandlerBase.ElementType dispelem =
(SaxHandlerBase.ElementType) elementTypes.get(elemName);
if (dispelem == null) {
return;
}
boolean found = false;
for (Iterator it = gatherBuffer.iterator(); it.hasNext(); ) {
Object[] elem = (Object[]) it.next();
SaxHandlerBase.ElementType type = (SaxHandlerBase.ElementType) elem[0];
if (type == null) {
continue;
}
if (type == dispelem) {
found = true;
}
if (found) {
it.remove();
if (elem[1] == null) {
//element end
type.endElement();
if (type == dispelem) {
return;
}
//done dispatching
} else if (elem[1] instanceof String) {
String charstring = (String) elem[1];
char[] chars = charstring.toCharArray();
type.characters(chars, 0, chars.length);
} else {
Attributes atts = (Attributes) elem[1];
type.startElement(atts);
}
}
}
}
/**
* Description of the Class
*
*@author unknown
*@created 15 de Setembro de 2002
*/
public static class ElementType {
/**
* Description of the Method
*
*@param atts Description of the Parameter
*@exception Exception Description of the Exception
*/
public void startElement(Attributes atts) throws Exception { }
/**
* Description of the Method
*
*@exception Exception Description of the Exception
*/
public void endElement() throws Exception { }
/**
* Description of the Method
*
*@param ch Description of the Parameter
*@param start Description of the Parameter
*@param length Description of the Parameter
*@exception Exception Description of the Exception
*/
public void characters(char[] ch, int start, int length)
throws Exception { }
}
/**
* Description of the Class
*
*@author unknown
*@created 15 de Setembro de 2002
*/
public static class ContentElementType extends SaxHandlerBase.ElementType {
/**
* Description of the Field
*/
protected Attributes attrs;
/**
* Description of the Field
*/
protected StringBuffer buff;
/**
* Description of the Method
*
*@param atts Description of the Parameter
*@exception Exception Description of the Exception
*/
public void startElement(Attributes atts) throws Exception {
attrs = new AttributesImpl(atts);
buff = new StringBuffer();
}
/**
* Description of the Method
*
*@param ch Description of the Parameter
*@param start Description of the Parameter
*@param length Description of the Parameter
*@exception Exception Description of the Exception
*/
public void characters(char[] ch, int start, int length)
throws Exception {
buff.append(ch, start, length);
}
}
/**
* Description of the Class
*
*@author unknown
*@created 15 de Setembro de 2002
*/
public static class GatheringElementType extends SaxHandlerBase.ContentElementType {
/**
* Description of the Method
*
*@param atts Description of the Parameter
*@exception Exception Description of the Exception
*/
public void startElement(Attributes atts) throws Exception {
super.startElement(atts);
}
/**
* Description of the Method
*
*@param localName Description of the Parameter
*@param atts Description of the Parameter
*@return Description of the Return Value
*/
public boolean gatherElement(String localName, Attributes atts) {
return true;
}
}
/**
* Description of the Method
*
*@param namespaceURI Description of the Parameter
*@param localName Description of the Parameter
*@param qName Description of the Parameter
*@param atts Description of the Parameter
*@exception SAXException Description of the Exception
*/
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts)
throws SAXException {
try {
elemType = (SaxHandlerBase.ElementType) elementTypes.get(localName);
if (gatherMode) {
//gather the element for later processing
if (gatheringElement.gatherElement(localName, atts)) {
gatherBuffer.add(new Object[]{elemType, new AttributesImpl(atts)});
}
} else {
if (elemType == null) {
return;
}
elemType.startElement(atts);
}
elems.add(elemType);
} catch (SAXException saxex) {
throw saxex;
} catch (Exception ex) {
//ex.printStackTrace();
throw new SAXException(ex);
}
}
/**
* Description of the Method
*
*@param namespaceURI Description of the Parameter
*@param localName Description of the Parameter
*@param qName Description of the Parameter
*@exception SAXException Description of the Exception
*/
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
try {
elemType = (SaxHandlerBase.ElementType) elementTypes.get(localName);
if (elemType == null) {
return;
}
if (elemType == gatheringElement) {
gatherMode = false;
}
if (gatherMode) {
//gather the element for later processing
gatherBuffer.add(new Object[]{elemType, null});
} else {
elemType.endElement();
}
if (!elems.isEmpty()) {
elemType = (SaxHandlerBase.ElementType) elems.remove(elems.size() - 1);
} else {
elemType = null;
}
} catch (SAXException saxex) {
throw saxex;
} catch (Exception ex) {
throw new SAXException(ex);
}
}
/**
* Description of the Method
*
*@param ch Description of the Parameter
*@param start Description of the Parameter
*@param length Description of the Parameter
*@exception SAXException Description of the Exception
*/
public void characters(char[] ch, int start, int length) throws SAXException {
try {
if (elemType == null) {
return;
}
if (gatherMode) {
//gather the element for later processing
gatherBuffer.add(new Object[]{elemType, new String(ch, start, length)});
} else {
elemType.characters(ch, start, length);
}
} catch (SAXException saxex) {
throw saxex;
} catch (Exception ex) {
throw new SAXException(ex);
}
}
/**
* Gets the attr attribute of the SaxHandlerBase class
*
*@param attrs Description of the Parameter
*@param name Description of the Parameter
*@param defaultValue Description of the Parameter
*@return The attr value
*/
public static String getAttr(Attributes attrs, String name, String defaultValue) {
String value = attrs.getValue("", name);
if (value == null) {
return defaultValue;
}
return value;
}
/**
* Gets the attrInt attribute of the SaxHandlerBase class
*
*@param attrs Description of the Parameter
*@param name Description of the Parameter
*@param defaultValue Description of the Parameter
*@return The attrInt value
*/
public static int getAttrInt(Attributes attrs, String name, int defaultValue) {
String value = attrs.getValue("", name);
if (value == null) {
return defaultValue;
}
try {
return Integer.parseInt(value);
} catch (NumberFormatException nfe) {
return defaultValue;
}
}
/**
* Gets the attrDouble attribute of the SaxHandlerBase class
*
*@param attrs Description of the Parameter
*@param name Description of the Parameter
*@param defaultValue Description of the Parameter
*@return The attrDouble value
*/
public static double getAttrDouble(Attributes attrs, String name, double defaultValue) {
String value = attrs.getValue("", name);
if (value == null) {
return defaultValue;
}
try {
return Double.parseDouble(value);
} catch (NumberFormatException nfe) {
return defaultValue;
}
}
/**
* Gets the attrBool attribute of the SaxHandlerBase class
*
*@param attrs Description of the Parameter
*@param name Description of the Parameter
*@param defaultValue Description of the Parameter
*@return The attrBool value
*/
public static boolean getAttrBool(Attributes attrs, String name, boolean defaultValue) {
String value = attrs.getValue("", name);
if (value == null) {
return defaultValue;
}
if (value.equalsIgnoreCase("yes")) {
return true;
}
if (value.equalsIgnoreCase("true")) {
return true;
}
return false;
}
}