de.escidoc.core.oai.business.persistence.hibernate.HibernateSetDefinitionDao.java Source code

Java tutorial

Introduction

Here is the source code for de.escidoc.core.oai.business.persistence.hibernate.HibernateSetDefinitionDao.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 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.persistence.hibernate;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;

import de.escidoc.core.aa.business.persistence.UserGroupDaoInterface;
import de.escidoc.core.common.business.Constants;
import de.escidoc.core.common.exceptions.application.invalid.InvalidSearchQueryException;
import de.escidoc.core.common.exceptions.system.SqlDatabaseSystemException;
import de.escidoc.core.common.persistence.hibernate.AbstractHibernateDao;
import de.escidoc.core.common.util.list.ListSorting;
import de.escidoc.core.oai.business.filter.SetDefinitionFilter;
import de.escidoc.core.oai.business.persistence.SetDefinition;
import de.escidoc.core.oai.business.persistence.SetDefinitionDaoInterface;

/**
 * @author Rozita Friedman
 */
public class HibernateSetDefinitionDao extends AbstractHibernateDao implements SetDefinitionDaoInterface {

    private static final Logger LOGGER = LoggerFactory.getLogger(HibernateSetDefinitionDao.class);

    private Map<String, Object[]> criteriaMap = new HashMap<String, Object[]>();

    private Map<String, String> propertiesNamesMap = new HashMap<String, String>();

    /**
     * Constructor to initialize filter-names with RoleFilter-Class.
     */
    public HibernateSetDefinitionDao() {
        try {
            final SetDefinitionFilter setDefinitionFilter = new SetDefinitionFilter(null);
            this.criteriaMap = setDefinitionFilter.getCriteriaMap();
            this.propertiesNamesMap = setDefinitionFilter.getPropertyMap();
        } catch (final InvalidSearchQueryException e) {
            // Dont do anything because null-query is given
            if (LOGGER.isWarnEnabled()) {
                LOGGER.warn("Exception for null-query");
            }
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Exception for null-query", e);
            }
        }
    }

    /**
     * See Interface for functional description.
     *
     * @see UserGroupDaoInterface #delete(de.escidoc.core.aa.business.persistence.UserGroup)
     */
    @Override
    public void delete(final SetDefinition setDefinition) throws SqlDatabaseSystemException {
        super.delete(setDefinition);
    }

    @Override
    public SetDefinition findSetDefinitionBySpecification(final String specification)
            throws SqlDatabaseSystemException {
        final SetDefinition result;
        try {
            result = (SetDefinition) getUniqueResult(getHibernateTemplate().findByCriteria(DetachedCriteria
                    .forClass(SetDefinition.class).add(Restrictions.eq("specification", specification))));
        } catch (final DataAccessException e) {
            throw new SqlDatabaseSystemException(e);
        } catch (final HibernateException e) {
            // noinspection ThrowableResultOfMethodCallIgnored
            throw new SqlDatabaseSystemException(convertHibernateAccessException(e)); // Ignore FindBugs
        } catch (final IllegalStateException e) {
            throw new SqlDatabaseSystemException(e);
        }
        return result;
    }

    /**
     * See Interface for functional description.
     *
     * @see UserGroupDaoInterface #retrieveUserGroup(java.lang.String)
     */
    @Override
    public SetDefinition retrieveSetDefinition(final String id) throws SqlDatabaseSystemException {
        SetDefinition result = null;

        if (id != null) {
            try {
                result = getHibernateTemplate().get(SetDefinition.class, id);
            } catch (final DataAccessException e) {
                throw new SqlDatabaseSystemException(e);
            } catch (final IllegalStateException e) {
                throw new SqlDatabaseSystemException(e);
            } catch (final HibernateException e) {
                // noinspection ThrowableResultOfMethodCallIgnored
                throw new SqlDatabaseSystemException(convertHibernateAccessException(e)); // Ignore FindBugs
            }
        }
        return result;
    }

    /**
     * See Interface for functional description.
     *
     * @see UserGroupDaoInterface #retrieveSetDefinitions(java.util.Map, int, int, String, ListSorting)
     */
    @Override
    public List<SetDefinition> retrieveSetDefinitions(final Map<String, Object> criteria, final int offset,
            final int maxResults, final String orderBy, final ListSorting sorting)
            throws SqlDatabaseSystemException {
        final DetachedCriteria detachedCriteria = DetachedCriteria.forClass(SetDefinition.class);
        final Map<String, Object> clonedCriterias = new HashMap<String, Object>(criteria);

        // ids
        final Set<String> setIds = mergeSets((Set<String>) clonedCriterias.remove(Constants.DC_IDENTIFIER_URI),
                (Set<String>) clonedCriterias.remove(Constants.FILTER_PATH_ID));

        if (setIds != null) {
            detachedCriteria.add(Restrictions.in("id", setIds.toArray()));
        }

        for (final Entry<String, Object[]> stringEntry : criteriaMap.entrySet()) {
            final Object criteriaValue = clonedCriterias.remove(stringEntry.getKey());
            if (criteriaValue != null) {
                final Object[] parts = stringEntry.getValue();
                if (parts[0].equals(COMPARE_EQ)) {
                    detachedCriteria.add(Restrictions.eq((String) parts[1], criteriaValue));
                } else {
                    detachedCriteria.add(Restrictions.like((String) parts[1], criteriaValue));
                }
            }
        }
        if (orderBy != null) {
            if (sorting == ListSorting.ASCENDING) {
                detachedCriteria.addOrder(Order.asc(propertiesNamesMap.get(orderBy)));
            } else if (sorting == ListSorting.DESCENDING) {
                detachedCriteria.addOrder(Order.desc(propertiesNamesMap.get(orderBy)));
            }
        }
        final List<SetDefinition> result;
        if (clonedCriterias.isEmpty()) {
            try {
                result = getHibernateTemplate().findByCriteria(detachedCriteria, offset, maxResults);
            } catch (final DataAccessException e) {
                throw new SqlDatabaseSystemException(e);
            }
        } else {
            // unsupported filter criteria has been found, therefore the result
            // list must be empty.
            result = new ArrayList<SetDefinition>(0);
        }
        return result;
    }

    /**
     * See Interface for functional description.
     *
     * @see UserGroupDaoInterface #retrieveSetDefinitions(java.util.Map, int, int, String, ListSorting)
     */
    @Override
    public List<SetDefinition> retrieveSetDefinitions(final String criterias, final int offset,
            final int maxResults) throws InvalidSearchQueryException, SqlDatabaseSystemException {

        final List<SetDefinition> result;

        if (criterias != null && criterias.length() > 0) {
            result = getHibernateTemplate().findByCriteria(new SetDefinitionFilter(criterias).toSql(), offset,
                    maxResults);
        } else {
            try {
                final DetachedCriteria detachedCriteria = DetachedCriteria.forClass(SetDefinition.class);

                result = getHibernateTemplate().findByCriteria(detachedCriteria, offset, maxResults);
            } catch (final DataAccessException e) {
                throw new SqlDatabaseSystemException(e);
            }
        }
        return result;
    }

    /**
     * See Interface for functional description.
     *
     * @see UserGroupDaoInterface #save(de.escidoc.core.aa.business.persistence.UserGroup)
     */
    @Override
    public void save(final SetDefinition setDefinition) throws SqlDatabaseSystemException {
        super.save(setDefinition);
    }

    /**
     * See Interface for functional description.
     *
     * @see UserGroupDaoInterface #update(de.escidoc.core.aa.business.persistence.UserGroup)
     */
    @Override
    public void update(final SetDefinition setDefinition) throws SqlDatabaseSystemException {
        super.update(setDefinition);
    }

}