package org.anodyneos.xpImpl.tld;
import java.util.ArrayList;
import org.anodyneos.commons.xml.sax.CDATAProcessor;
import org.anodyneos.commons.xml.sax.ElementProcessor;
import org.anodyneos.xp.tagext.FunctionInfo;
import org.anodyneos.xp.tagext.TagInfo;
import org.anodyneos.xp.tagext.TagLibraryInfo;
import org.xml.sax.SAXException;
class ProcessorTaglib extends TLDProcessor {
private TagLibraryInfo tagLibraryInfo;
private CDATAProcessor descriptionProcessor;
private ArrayList tags = new ArrayList();
private ArrayList functions = new ArrayList();
public static final String E_DESCRIPTION = "description";
public static final String E_TAG = "tag";
public static final String E_FUNCTION = "function";
public ProcessorTaglib(TLDContext ctx) {
super(ctx);
descriptionProcessor = new CDATAProcessor(ctx);
}
public ElementProcessor getProcessorFor(String uri, String localName, String qName)
throws SAXException {
if (E_DESCRIPTION.equals(localName)) {
return descriptionProcessor;
} else if (E_TAG.equals(localName)) {
ElementProcessor p = new ProcessorTag(getTLDContext());
tags.add(p);
return p;
} else if (E_FUNCTION.equals(localName)) {
ElementProcessor p = new ProcessorFunction(getTLDContext());
functions.add(p);
return p;
} else {
return super.getProcessorFor(uri, localName, qName);
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
TagInfo[] tarray = new TagInfo[tags.size()];
for (int i = 0; i < tags.size(); i++) {
tarray[i] = (TagInfo) ((ProcessorTag) tags.get(i)).getTagInfo();
}
FunctionInfo[] farray = new FunctionInfo[functions.size()];
for (int i = 0; i < functions.size(); i++) {
farray[i] = (FunctionInfo) ((ProcessorFunction) functions.get(i)).getFunctionInfo();
}
tagLibraryInfo = new TagLibraryInfo(descriptionProcessor.getCDATA(), tarray, farray);
descriptionProcessor = null;
tags = null;
}
public TagLibraryInfo getTagLibraryInfo() {
return tagLibraryInfo;
}
}