package org.anodyneos.xpImpl.registry; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.anodyneos.commons.xml.sax.CDATAProcessor; import org.anodyneos.commons.xml.sax.ElementProcessor; import org.anodyneos.xpImpl.XpTranslationException; import org.xml.sax.SAXException; class ProcessorTaglib extends RegistryProcessor { private CDATAProcessor uriProcessor; private CDATAProcessor locationProcessor; public static final String E_TAGLIB_URI = "taglib-uri"; public static final String E_TAGLIB_LOCATION = "taglib-location"; public ProcessorTaglib(RegistryContext ctx) { super(ctx); uriProcessor = new CDATAProcessor(ctx); locationProcessor = new CDATAProcessor(ctx); } public ElementProcessor getProcessorFor(String uri, String localName, String qName) throws SAXException { if (E_TAGLIB_URI.equals(localName)) { return uriProcessor; } else if (E_TAGLIB_LOCATION.equals(localName)) { return locationProcessor; } else { return super.getProcessorFor(uri, localName, qName); } } public void endElement(String uri, String localName, String qName) throws SAXException { URI locationURI; try { locationURI = getContext().uriFromRelative(locationProcessor.getCDATA().trim()); } catch (URISyntaxException e) { throw new SAXException("Malformed URI for taglib: " + locationProcessor.getCDATA(), e); } try { getRegistryContext().getRegistry().addTaglib(uriProcessor.getCDATA().trim(), locationURI.toString()); } catch (IOException e) { // @TODO: check to see if this error handling is good enough. Do // parse errors get through ok? //throw new SAXException("Cannot process taglib: " + locationProcessor.getCDATA(), e); throw new XpTranslationException("Cannot process taglib: " + locationProcessor.getCDATA(), getLocator(), e); } } }