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.plugins.explorer.dublincore;
017
018import java.io.IOException;
019import java.util.Map;
020
021import org.apache.avalon.framework.service.ServiceException;
022import org.apache.avalon.framework.service.ServiceManager;
023import org.apache.cocoon.ProcessingException;
024import org.apache.cocoon.generation.ServiceableGenerator;
025import org.apache.cocoon.xml.XMLUtils;
026import org.xml.sax.SAXException;
027
028import org.ametys.runtime.i18n.I18nizableText;
029
030/**
031 * SAX the enumerated values for a DublinCore metadata
032 */
033public class EnumeratedValuesGenerator extends ServiceableGenerator
034{
035    private DublinCoreMetadataProvider _dcProvider;
036    
037    @Override
038    public void service(ServiceManager smanager) throws ServiceException
039    {
040        super.service(smanager);
041        _dcProvider = (DublinCoreMetadataProvider) smanager.lookup(DublinCoreMetadataProvider.ROLE);
042    }
043    
044    @Override
045    public void generate() throws IOException, SAXException, ProcessingException
046    {
047        String metadataName = parameters.getParameter("metadataName", null);
048
049        contentHandler.startDocument();
050        XMLUtils.startElement(contentHandler, "enumeration");
051        
052        if (metadataName != null && _dcProvider.isEnumerated(metadataName))
053        {
054            Map<String, I18nizableText> entries = _dcProvider.getEntries(metadataName);
055            
056            for (String value : entries.keySet())
057            {
058                XMLUtils.startElement(contentHandler, "entry");
059                XMLUtils.createElement(contentHandler, "value", value);
060                I18nizableText label = entries.get(value);
061                if (label != null)
062                {
063                    label.toSAX(contentHandler, "label");
064                }
065                else
066                {
067                    XMLUtils.createElement(contentHandler, "label", value);
068                }
069                XMLUtils.endElement(contentHandler, "entry");
070            }
071        }
072        XMLUtils.endElement(contentHandler, "enumeration");
073        contentHandler.endDocument();
074    }
075
076}