de.escidoc.core.oai.business.renderer.VelocityXmlSetDefinitionRenderer.java Source code

Java tutorial

Introduction

Here is the source code for de.escidoc.core.oai.business.renderer.VelocityXmlSetDefinitionRenderer.java

Source

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at license/ESCIDOC.LICENSE
 * or http://www.escidoc.de/license.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at license/ESCIDOC.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright 2006-2008 Fachinformationszentrum Karlsruhe Gesellschaft
 * fuer wissenschaftlich-technische Information mbH and Max-Planck-
 * Gesellschaft zur Foerderung der Wissenschaft e.V.  
 * All rights reserved.  Use is subject to license terms.
 */
package de.escidoc.core.oai.business.renderer;

import de.escidoc.core.aa.business.renderer.AbstractRenderer;
import de.escidoc.core.common.business.Constants;
import de.escidoc.core.common.business.filter.RecordPacking;
import de.escidoc.core.common.exceptions.system.SystemException;
import de.escidoc.core.common.util.xml.XmlUtility;
import de.escidoc.core.common.util.xml.factory.SetDefinitionXmlProvider;
import de.escidoc.core.common.util.xml.factory.XmlTemplateProviderConstants;
import de.escidoc.core.oai.business.persistence.SetDefinition;
import de.escidoc.core.oai.business.renderer.interfaces.SetDefinitionRendererInterface;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Set definition renderer implementation using the velocity template engine.
 *
 * @author Rozita Friedman
 */
@Service("eSciDoc.core.om.business.renderer.VelocityXmlSetDefinitionRenderer")
public final class VelocityXmlSetDefinitionRenderer extends AbstractRenderer
        implements SetDefinitionRendererInterface {

    /**
     * Protected constructor to prevent instantiation outside of the Spring-context.
     */
    protected VelocityXmlSetDefinitionRenderer() {
    }

    /**
     * See Interface for functional description.
     *
     */
    @Override
    public String render(final SetDefinition setDefinition) throws SystemException {
        final Map<String, Object> values = new HashMap<String, Object>();
        values.put("isRootSetDefinition", XmlTemplateProviderConstants.TRUE);
        addCommonValues(values);
        addSetDefinitionValues(setDefinition, values);
        return getSetDefinitionXmlProvider().getSetDefinitionXml(values);
    }

    /**
     * Adds the values of the {@link SetDefinition} to the provided {@link Map}.
     *
     * @param setDefinition The {@link SetDefinition}.
     * @param values        The {@link Map} to add the values to.
     * @throws SystemException Thrown in case of an internal error.
     */
    private static void addSetDefinitionValues(final SetDefinition setDefinition,
            final Map<String, Object> values) {
        final DateTime lmd = new DateTime(setDefinition.getLastModificationDate(), DateTimeZone.UTC);
        values.put("setDefinitionLastModificationDate", lmd.toString());
        values.put("setDefinitionHref", setDefinition.getHref());
        final DateTime creationDate = new DateTime(setDefinition.getCreationDate(), DateTimeZone.UTC);
        values.put("setDefinitionCreationDate", creationDate.toString());
        values.put("setDefinitionName", setDefinition.getName());
        values.put("setDefinitionSpecification", setDefinition.getSpecification());
        values.put("setDefinitionQuery", setDefinition.getQuery());
        values.put("setDefinitionDescription", setDefinition.getDescription());
        values.put("setDefinitionId", setDefinition.getId());
        values.put("setDefinitionCreatedByTitle", setDefinition.getCreatorTitle());
        final String createdById = setDefinition.getCreatorId();
        final String cratedByHref = XmlUtility.getUserAccountHref(createdById);
        values.put("setDefinitionCreatedByHref", cratedByHref);
        values.put("setDefinitionCreatedById", createdById);
        values.put("setDefinitionModifiedByTitle", setDefinition.getModifiedByTitle());
        values.put("setDefinitionModifiedByHref", XmlUtility.getUserAccountHref(setDefinition.getModifiedById()));
        values.put("setDefinitionModifiedById", setDefinition.getModifiedById());

    }

    /*
     * (non-Javadoc)
     * 
     * @see de.escidoc.core.oai.business.renderer.interfaces.
     * SetDefinitionRendererInterface#renderSetDefinitions(java.util.List)
     */
    @Override
    public String renderSetDefinitions(final List<SetDefinition> setDefinitions, final RecordPacking recordPacking)
            throws SystemException {
        final Map<String, Object> values = new HashMap<String, Object>();

        values.put("isRootSetDefinition", "false");
        values.put("recordPacking", recordPacking);
        addCommonValues(values);
        addSetDefinitionListValues(values);

        final Collection<Map<String, Object>> setDefinitionsValues = new ArrayList<Map<String, Object>>(
                setDefinitions.size());
        for (final SetDefinition setDefinition : setDefinitions) {
            final Map<String, Object> setDefinitionValues = new HashMap<String, Object>();
            addSetDefinitionValues(setDefinition, setDefinitionValues);
            setDefinitionsValues.add(setDefinitionValues);
        }
        values.put("setDefinitions", setDefinitionsValues);
        return getSetDefinitionXmlProvider().getSetDefinitionsSrwXml(values);
    }

    /**
     * Adds the common values to the provided map.
     *
     * @param values The map to add values to.
     */
    private void addCommonValues(final Map<String, Object> values) {

        addSetDefinitionNamespaceValues(values);
        addPropertiesNamespaceValues(values);
        addStructuralRelationNamespaceValues(values);
        addEscidocBaseUrl(values);
    }

    /**
     * Adds the structural relations name space values to the provided map.
     *
     * @param values The map to add values to.
     */
    @Override
    protected void addStructuralRelationNamespaceValues(final Map<String, Object> values) {

        values.put(XmlTemplateProviderConstants.ESCIDOC_SREL_NS_PREFIX, Constants.STRUCTURAL_RELATIONS_NS_PREFIX);
        values.put(XmlTemplateProviderConstants.ESCIDOC_SREL_NS, Constants.STRUCTURAL_RELATIONS_NS_URI);
    }

    /**
     * Adds the set definition name space values.
     *
     * @param values The {@link Map} to that the values shall be added.
     */
    private static void addSetDefinitionNamespaceValues(final Map<String, Object> values) {
        values.put("setDefinitionNamespacePrefix", Constants.SET_DEFINITION_NS_PREFIX);
        values.put("setDefinitionNamespace", Constants.SET_DEFINITION_NS_URI);
    }

    /**
     * Adds the set definition list values to the provided map.
     *
     * @param values The map to add values to.
     */
    private static void addSetDefinitionListValues(final Map<String, Object> values) {

        values.put("searchResultNamespace", Constants.SEARCH_RESULT_NS_URI);
        values.put("setDefinitionListTitle", "Set Definition List");
    }

    /**
     * Adds the escidoc base URL to the provided map.
     *
     * @param values The map to add values to.
     */
    private static void addEscidocBaseUrl(final Map<String, Object> values) {

        values.put(XmlTemplateProviderConstants.VAR_ESCIDOC_BASE_URL, XmlUtility.getEscidocBaseUrl());
    }

    /**
     * Gets the {@code SetDefinitionXmlProvider} object.
     *
     * @return Returns the {@code SetDefinitionXmlProvider} object.
     */
    private static SetDefinitionXmlProvider getSetDefinitionXmlProvider() {

        return SetDefinitionXmlProvider.getInstance();
    }
}