Author: reinhard Date: Fri Nov 26 01:57:02 2004 New Revision: 106652 URL: http://svn.apache.org/viewcvs?view=rev&rev=106652 Log: uuups, forgot to check them in (HTMLCleaningConvertor) Added: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleanerConfiguration.xml cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertor.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertorBuilder.java
Added: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleanerConfiguration.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleanerConfiguration.xml?view=auto&rev=106652 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleanerConfiguration.xml Fri Nov 26 01:57:02 2004 @@ -0,0 +1,143 @@ +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<htmlcleaner> + <cleanup> + <!-- Span elements will only be retained if they have one of the classes listed belowed. --> + <allowed-span-classes> + </allowed-span-classes> + + <!-- Div elements will only be retained if they have one of the classes listed belowed. --> + <allowed-div-classes> + </allowed-div-classes> + + <!-- The class attribute of p elements will only be retained if they have one of the classes listed belowed. --> + <allowed-para-classes> + <class>note</class> + <class>warn</class> + <class>fixme</class> + </allowed-para-classes> + + <!-- The class attribute of pre elements will only be retained if they have one of the classes listed belowed. --> + <allowed-pre-classes> + <class>query</class> + <class>include</class> + <class>query-and-include</class> + </allowed-pre-classes> + + <img-alternate-src-attr name="title"/> + + <!-- Lists the allowed elements and their allowed attributes. + + For the correct worker of the cleaner, some elements cannot be removed, + usch as html, body, p, some others... + --> + <allowed-elements> + <element name="html"/> + <element name="body"/> + + <element name="div"> + <attribute name="class"/> + </element> + <element name="span"> + <attribute name="class"/> + </element> + + <element name="p"> + <attribute name="align"/> + <attribute name="class"/> + </element> + <element name="br"/> + <element name="pre"> + <attribute name="class"/> + </element> + + <!-- titles --> + <element name="h1"/> + <element name="h2"/> + <element name="h3"/> + <element name="h4"/> + <element name="h5"/> + + <!-- linking --> + <element name="a"> + <attribute name="href"/> + </element> + + <!-- inline styles --> + <element name="strong"/> + <element name="em"/> + <element name="sup"/> + <element name="sub"/> + + <!-- lists --> + <element name="ul"/> + <element name="ol"/> + <element name="li"/> + + <element name="img"> + <attribute name="src"/> + <attribute name="align"/> + </element> + + <!-- tables --> + <element name="table"> + <attribute name="class"/> + </element> + <element name="tbody"/> + <element name="tr"/> + <element name="td"> + <attribute name="colspan"/> + <attribute name="rowspan"/> + <attribute name="valign"/> + </element> + <element name="th"> + <attribute name="colspan"/> + <attribute name="rowspan"/> + <attribute name="valign"/> + </element> + <element name="hr"/> + </allowed-elements> + </cleanup> + + <serialization> + <linewidth value="80"/> + <elements> + <!-- Note: to avoid unexpected results, mention all block-type tags here, + and NO inline tags. --> + <element name="html" afterOpen="1" beforeClose="1"/> + <element name="body" afterOpen="1" beforeClose="1"/> + <element name="p" beforeOpen="1" afterClose="1"/> + <element name="h1" beforeOpen="1" afterClose="1"/> + <element name="h2" beforeOpen="1" afterClose="1"/> + <element name="h3" beforeOpen="1" afterClose="1"/> + <element name="h4" beforeOpen="1" afterClose="1"/> + <element name="h5" beforeOpen="1" afterClose="1"/> + <element name="pre" beforeOpen="1" afterClose="1"/> + <element name="div" beforeOpen="1" afterClose="1"/> + <element name="ul" beforeOpen="1" beforeClose="1" afterClose="1"/> + <element name="ol" beforeOpen="1" beforeClose="1" afterClose="1"/> + <element name="li" beforeOpen="1"/> + <element name="table" beforeOpen="1" beforeClose="1" afterClose="1"/> + <element name="tbody" beforeOpen="1" beforeClose="1"/> + <element name="tr" beforeOpen="1" beforeClose="1"/> + <element name="td" beforeOpen="1"/> + <element name="th" beforeOpen="1"/> + <element name="br" afterClose="1"/> + + </elements> + </serialization> + +</htmlcleaner> \ No newline at end of file Added: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertor.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertor.java?view=auto&rev=106652 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertor.java Fri Nov 26 01:57:02 2004 @@ -0,0 +1,68 @@ +/* + * Copyright 2004 Outerthought bvba and Schaubroeck nv + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.forms.datatype.convertor; + +import org.apache.cocoon.forms.datatype.convertor.Convertor; +import org.apache.cocoon.forms.datatype.convertor.ConversionResult; +import org.apache.cocoon.forms.validation.ValidationError; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; +import org.outerj.daisy.htmlcleaner.HtmlCleanerTemplate; +import org.outerj.daisy.htmlcleaner.HtmlCleaner; + +import java.util.Locale; + +/** + * A CForms convertor doing string-to-string conversion by utilizing + * the Daisy HtmlCleaner component. + */ +public class HtmlCleaningConvertor implements Convertor { + HtmlCleanerTemplate template; + + public HtmlCleaningConvertor(HtmlCleanerTemplate template) { + this.template = template; + } + + public ConversionResult convertFromString(String value, Locale locale, Convertor.FormatCache formatCache) { + HtmlCleaner cleaner = template.newHtmlCleaner(); + try { + String result = cleaner.cleanToString(value); + return new ConversionResult(result); + } catch (Exception e) { + Throwable t = ExceptionUtils.getRootCause(e); + if (t == null) + t = e; + String message = t.getMessage(); + if (message == null) + message = t.toString(); + ValidationError validationError = new ValidationError(message, false); + return new ConversionResult(validationError); + } + } + + public String convertToString(Object object, Locale locale, Convertor.FormatCache formatCache) { + return (String)object; + } + + public Class getTypeClass() { + return java.lang.String.class; + } + + public void generateSaxFragment(ContentHandler contentHandler, Locale locale) throws SAXException { + // nothing to say about me + } +} Added: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertorBuilder.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertorBuilder.java?view=auto&rev=106652 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/HtmlCleaningConvertorBuilder.java Fri Nov 26 01:57:02 2004 @@ -0,0 +1,73 @@ +/* + * Copyright 2004 Outerthought bvba and Schaubroeck nv + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.forms.datatype.convertor; + +import org.apache.cocoon.forms.datatype.convertor.ConvertorBuilder; +import org.apache.cocoon.forms.datatype.convertor.Convertor; +import org.apache.cocoon.forms.util.DomHelper; +import org.apache.cocoon.forms.CacheManager; +import org.apache.cocoon.components.source.SourceUtil; +import org.apache.avalon.framework.service.Serviceable; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.excalibur.source.SourceResolver; +import org.apache.excalibur.source.Source; +import org.w3c.dom.Element; +import org.outerj.daisy.htmlcleaner.HtmlCleanerTemplate; +import org.outerj.daisy.htmlcleaner.HtmlCleanerFactory; +import org.xml.sax.InputSource; + +/** + * Builds [EMAIL PROTECTED] HtmlCleaningConvertor}s. + */ +public class HtmlCleaningConvertorBuilder implements ConvertorBuilder, Serviceable { + private ServiceManager serviceManager; + + public void service(ServiceManager serviceManager) throws ServiceException { + this.serviceManager = serviceManager; + } + + public Convertor build(Element element) throws Exception { + String config = DomHelper.getAttribute(element, "config"); + + Source source = null; + SourceResolver sourceResolver = null; + CacheManager cacheManager = null; + try { + cacheManager = (CacheManager)serviceManager.lookup(CacheManager.ROLE); + sourceResolver = (SourceResolver)serviceManager.lookup(SourceResolver.ROLE); + source = sourceResolver.resolveURI(config); + + String prefix = HtmlCleanerTemplate.class.getName(); + HtmlCleanerTemplate template = (HtmlCleanerTemplate)cacheManager.get(source, prefix); + if (template == null) { + HtmlCleanerFactory factory = new HtmlCleanerFactory(); + InputSource is = SourceUtil.getInputSource(source); + template = factory.buildTemplate(is); + cacheManager.set(template, source, prefix); + } + + return new HtmlCleaningConvertor(template); + } finally { + if (source != null) + sourceResolver.release(source); + if (sourceResolver != null) + serviceManager.release(sourceResolver); + if (cacheManager != null) + serviceManager.release(cacheManager); + } + } +}
