001/* 002 * Copyright 2010 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.cms.transformation.htmledition; 017 018import java.io.IOException; 019import java.util.Map; 020 021import org.apache.avalon.excalibur.pool.Recyclable; 022import org.apache.avalon.framework.parameters.Parameters; 023import org.apache.avalon.framework.service.ServiceException; 024import org.apache.avalon.framework.service.ServiceManager; 025import org.apache.avalon.framework.service.Serviceable; 026import org.apache.cocoon.ProcessingException; 027import org.apache.cocoon.environment.SourceResolver; 028import org.apache.cocoon.transformation.Transformer; 029import org.apache.cocoon.xml.XMLConsumer; 030import org.xml.sax.Attributes; 031import org.xml.sax.ContentHandler; 032import org.xml.sax.Locator; 033import org.xml.sax.SAXException; 034import org.xml.sax.ext.LexicalHandler; 035 036import org.ametys.cms.transformation.html.HTMLEnhancementExtensionPoint; 037 038/** 039 * This cocoon transformer use the DocbookEnhancementExtensionPoint to be based upon a serie of EnhancementHandler 040 */ 041public class HTMLEditorHandlers2HTMLTransformer implements Transformer, Serviceable, Recyclable 042{ 043 /** The service manager */ 044 protected ServiceManager _manager; 045 /** The content handler */ 046 protected ContentHandler _contentHandler; 047 /** The lexical handler */ 048 protected LexicalHandler _lexicalHandler; 049 /** The htmledition extension point */ 050 protected HTMLEditionHandlerExtensionPoint _htmlEditionExtensionPoint; 051 /** The docbook enhancement extension point */ 052 protected HTMLEnhancementExtensionPoint _htmlEnhancementExtensionPoint; 053 054 @Override 055 public void recycle() 056 { 057 _contentHandler = null; 058 _lexicalHandler = null; 059 } 060 061 @Override 062 public void setConsumer(XMLConsumer consumer) 063 { 064 _contentHandler = consumer; 065 _lexicalHandler = consumer; 066 067 for (String handlerRole : _htmlEnhancementExtensionPoint.getHtmleditor2HTMLHandlers()) 068 { 069 AbstractHTMLEditionHandler handler = _htmlEditionExtensionPoint.getExtension(handlerRole); 070 071 handler.setContentHandler(_contentHandler); 072 _contentHandler = handler; 073 074 handler.setLexicalHandler(_lexicalHandler); 075 _lexicalHandler = handler; 076 } 077 } 078 079 public void service(ServiceManager manager) throws ServiceException 080 { 081 _manager = manager; 082 _htmlEditionExtensionPoint = (HTMLEditionHandlerExtensionPoint) manager.lookup(HTMLEditionHandlerExtensionPoint.ROLE); 083 _htmlEnhancementExtensionPoint = (HTMLEnhancementExtensionPoint) manager.lookup(HTMLEnhancementExtensionPoint.ROLE); 084 } 085 086 @Override 087 public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) throws ProcessingException, SAXException, IOException 088 { 089 // empty 090 } 091 092 @Override 093 public void startDocument() throws SAXException 094 { 095 _contentHandler.startDocument(); 096 } 097 @Override 098 public void endDocument() throws SAXException 099 { 100 _contentHandler.endDocument(); 101 } 102 103 @Override 104 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException 105 { 106 _contentHandler.startElement(uri, localName, qName, atts); 107 } 108 @Override 109 public void endElement(String uri, String localName, String qName) throws SAXException 110 { 111 _contentHandler.endElement(uri, localName, qName); 112 } 113 114 @Override 115 public void characters(char[] ch, int start, int length) throws SAXException 116 { 117 _contentHandler.characters(ch, start, length); 118 } 119 @Override 120 public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException 121 { 122 _contentHandler.ignorableWhitespace(ch, start, length); 123 } 124 125 @Override 126 public void startPrefixMapping(String prefix, String uri) throws SAXException 127 { 128 _contentHandler.startPrefixMapping(prefix, uri); 129 } 130 @Override 131 public void endPrefixMapping(String prefix) throws SAXException 132 { 133 _contentHandler.endPrefixMapping(prefix); 134 } 135 136 @Override 137 public void processingInstruction(String target, String data) throws SAXException 138 { 139 _contentHandler.processingInstruction(target, data); 140 } 141 142 @Override 143 public void setDocumentLocator(Locator locator) 144 { 145 _contentHandler.setDocumentLocator(locator); 146 } 147 148 @Override 149 public void skippedEntity(String name) throws SAXException 150 { 151 _contentHandler.skippedEntity(name); 152 } 153 154 @Override 155 public void comment(char[] ch, int start, int length) throws SAXException 156 { 157 _lexicalHandler.comment(ch, start, length); 158 } 159 160 @Override 161 public void startCDATA() throws SAXException 162 { 163 _lexicalHandler.startCDATA(); 164 } 165 @Override 166 public void endCDATA() throws SAXException 167 { 168 _lexicalHandler.endCDATA(); 169 } 170 171 @Override 172 public void startDTD(String name, String publicId, String systemId) throws SAXException 173 { 174 _lexicalHandler.startDTD(name, publicId, systemId); 175 } 176 @Override 177 public void endDTD() throws SAXException 178 { 179 _lexicalHandler.endDTD(); 180 } 181 182 @Override 183 public void startEntity(String name) throws SAXException 184 { 185 _lexicalHandler.startEntity(name); 186 } 187 @Override 188 public void endEntity(String name) throws SAXException 189 { 190 _lexicalHandler.endEntity(name); 191 } 192}