1 16 package org.apache.cocoon.forms.datatype.convertor; 17 18 import org.apache.cocoon.forms.datatype.convertor.ConvertorBuilder; 19 import org.apache.cocoon.forms.datatype.convertor.Convertor; 20 import org.apache.cocoon.forms.util.DomHelper; 21 import org.apache.cocoon.forms.CacheManager; 22 import org.apache.cocoon.components.source.SourceUtil; 23 import org.apache.avalon.framework.service.Serviceable; 24 import org.apache.avalon.framework.service.ServiceManager; 25 import org.apache.avalon.framework.service.ServiceException; 26 import org.apache.excalibur.source.SourceResolver; 27 import org.apache.excalibur.source.Source; 28 import org.w3c.dom.Element ; 29 import org.outerj.daisy.htmlcleaner.HtmlCleanerTemplate; 30 import org.outerj.daisy.htmlcleaner.HtmlCleanerFactory; 31 import org.xml.sax.InputSource ; 32 33 36 public class HtmlCleaningConvertorBuilder implements ConvertorBuilder, Serviceable { 37 private ServiceManager serviceManager; 38 39 public void service(ServiceManager serviceManager) throws ServiceException { 40 this.serviceManager = serviceManager; 41 } 42 43 public Convertor build(Element element) throws Exception { 44 String config = DomHelper.getAttribute(element, "config"); 45 46 Source source = null; 47 SourceResolver sourceResolver = null; 48 CacheManager cacheManager = null; 49 try { 50 cacheManager = (CacheManager)serviceManager.lookup(CacheManager.ROLE); 51 sourceResolver = (SourceResolver)serviceManager.lookup(SourceResolver.ROLE); 52 source = sourceResolver.resolveURI(config); 53 54 String prefix = HtmlCleanerTemplate.class.getName(); 55 HtmlCleanerTemplate template = (HtmlCleanerTemplate)cacheManager.get(source, prefix); 56 if (template == null) { 57 HtmlCleanerFactory factory = new HtmlCleanerFactory(); 58 InputSource is = SourceUtil.getInputSource(source); 59 template = factory.buildTemplate(is); 60 cacheManager.set(template, source, prefix); 61 } 62 63 return new HtmlCleaningConvertor(template); 64 } finally { 65 if (source != null) 66 sourceResolver.release(source); 67 if (sourceResolver != null) 68 serviceManager.release(sourceResolver); 69 if (cacheManager != null) 70 serviceManager.release(cacheManager); 71 } 72 } 73 } 74 | Popular Tags |