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.docbook.DocbookEnhancementExtensionPoint;
037
038/**
039 * This cocoon transformer use the DocbookEnhancementExtensionPoint to be based upon a serie of EnhancementHandler
040 */
041public class HTMLEditorHandlers2DocbookTransformer 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 DocbookEnhancementExtensionPoint _docbookEnhancementExtensionPoint;
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 : _docbookEnhancementExtensionPoint.getHTMLEditor2DocbookHandlers())
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        _docbookEnhancementExtensionPoint = (DocbookEnhancementExtensionPoint) manager.lookup(DocbookEnhancementExtensionPoint.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}