1 16 package org.outerj.daisy.frontend.editor; 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.outerj.daisy.frontend.editor.HtmlCleaningConvertor; 32 import org.xml.sax.InputSource ; 33 34 37 public class HtmlCleaningConvertorBuilder implements ConvertorBuilder, Serviceable { 38 private ServiceManager serviceManager; 39 40 public void service(ServiceManager serviceManager) throws ServiceException { 41 this.serviceManager = serviceManager; 42 } 43 44 public Convertor build(Element element) throws Exception { 45 String config = DomHelper.getAttribute(element, "config"); 46 47 48 Source source = null; 49 SourceResolver sourceResolver = null; 50 CacheManager cacheManager = null; 51 try { 52 cacheManager = (CacheManager)serviceManager.lookup(CacheManager.ROLE); 53 sourceResolver = (SourceResolver)serviceManager.lookup(SourceResolver.ROLE); 54 source = sourceResolver.resolveURI(config); 55 56 String prefix = HtmlCleanerTemplate.class.getName(); 57 HtmlCleanerTemplate template = (HtmlCleanerTemplate)cacheManager.get(source, prefix); 58 if (template == null) { 59 HtmlCleanerFactory factory = new HtmlCleanerFactory(); 60 InputSource is = SourceUtil.getInputSource(source); 61 template = factory.buildTemplate(is); 62 cacheManager.set(template, source, prefix); 63 } 64 65 return new HtmlCleaningConvertor(template); 66 } finally { 67 if (source != null) 68 sourceResolver.release(source); 69 if (sourceResolver != null) 70 serviceManager.release(sourceResolver); 71 if (cacheManager != null) 72 serviceManager.release(cacheManager); 73 } 74 } 75 } 76 | Popular Tags |