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.odf.program.generators;
017
018import java.io.IOException;
019
020import org.apache.cocoon.components.source.impl.SitemapSource;
021import org.apache.cocoon.generation.Generator;
022import org.apache.cocoon.xml.AttributesImpl;
023import org.apache.cocoon.xml.XMLUtils;
024import org.xml.sax.SAXException;
025
026import org.ametys.cms.repository.Content;
027import org.ametys.core.util.IgnoreRootHandler;
028import org.ametys.odf.program.Program;
029import org.ametys.odf.program.SubProgram;
030import org.ametys.plugins.repository.UnknownAmetysObjectException;
031import org.ametys.runtime.parameter.ParameterHelper;
032
033/**
034 * {@link Generator} for rendering raw content data for a {@link Program}, to 
035 */
036public class ProgramPdfContentGenerator extends ProgramContentGenerator
037{
038    /**
039     * SAX a sub program
040     * @param subProgram the sub program to SAX
041     * @param parentPath the parent path
042     * @throws SAXException if an error occurs
043     */
044    @Override
045    protected void saxSubProgram (SubProgram subProgram, String parentPath) throws SAXException
046    {
047        try
048        {
049            AttributesImpl attrs = new AttributesImpl();
050            attrs.addCDATAAttribute("title", subProgram.getTitle());
051            attrs.addCDATAAttribute("code", subProgram.getCode());
052            attrs.addCDATAAttribute("id", subProgram.getId());
053            if (parentPath != null)
054            {
055                attrs.addCDATAAttribute("path", parentPath + "/" + subProgram.getName());
056            }
057            XMLUtils.startElement(contentHandler, "subprogram", attrs);
058            saxContent(subProgram, "abstract");  
059            XMLUtils.endElement(contentHandler, "subprogram");
060        }
061        catch (IOException e)
062        {
063            throw new SAXException(e);
064        }
065        catch (UnknownAmetysObjectException e)
066        {
067            throw new SAXException(e);
068        }
069    }
070    
071    
072    @Override
073    protected void saxContent (Content content, String metadataSetName) throws SAXException, IOException
074    {
075        AttributesImpl attrs = new AttributesImpl();
076        attrs.addCDATAAttribute("id", content.getId());
077        attrs.addCDATAAttribute("name", content.getName());
078        attrs.addCDATAAttribute("title", content.getTitle());
079        attrs.addCDATAAttribute("lastModifiedAt", ParameterHelper.valueToString(content.getLastModified()));
080        
081        XMLUtils.startElement(contentHandler, "content", attrs);
082        
083        String uri = "cocoon://_content.xml?contentId=" + content.getId() + "&output-format=xml";
084        SitemapSource src = null;
085        
086        try
087        {
088            src = (SitemapSource) _srcResolver.resolveURI(uri);
089            src.toSAX(new IgnoreRootHandler(contentHandler));
090        }
091        finally
092        {
093            _srcResolver.release(src);
094        }
095        
096        XMLUtils.endElement(contentHandler, "content");
097    }
098}