KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > cocoon > forms > datatype > convertor > HtmlCleaningConvertorBuilder


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
29 import org.outerj.daisy.htmlcleaner.HtmlCleanerTemplate;
30 import org.outerj.daisy.htmlcleaner.HtmlCleanerFactory;
31 import org.xml.sax.InputSource JavaDoc;
32
33 /**
34  * Builds {@link HtmlCleaningConvertor}s.
35  */

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 JavaDoc element) throws Exception JavaDoc {
44         String JavaDoc 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 JavaDoc prefix = HtmlCleanerTemplate.class.getName();
55             HtmlCleanerTemplate template = (HtmlCleanerTemplate)cacheManager.get(source, prefix);
56             if (template == null) {
57                 HtmlCleanerFactory factory = new HtmlCleanerFactory();
58                 InputSource JavaDoc 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