de.iteratec.iteraplan.persistence.dao.BusinessMappingDAOImpl.java Source code

Java tutorial

Introduction

Here is the source code for de.iteratec.iteraplan.persistence.dao.BusinessMappingDAOImpl.java

Source

/*
 * iteraplan is an IT Governance web application developed by iteratec, GmbH
 * Copyright (C) 2004 - 2014 iteratec, GmbH
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY ITERATEC, ITERATEC DISCLAIMS THE
 * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 *
 * You can contact iteratec GmbH headquarters at Inselkammerstr. 4
 * 82008 Munich - Unterhaching, Germany, or at email address info@iteratec.de.
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "iteraplan" logo. If the display of the logo is not reasonably
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by iteraplan".
 */
package de.iteratec.iteraplan.persistence.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Junction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;

import de.iteratec.iteraplan.common.Logger;
import de.iteratec.iteraplan.common.error.IteraplanErrorMessages;
import de.iteratec.iteraplan.common.error.IteraplanTechnicalException;
import de.iteratec.iteraplan.model.BusinessMapping;

/**
 * Implementation of the DAO interface {@link BusinessMappingDAO}.
 */
public class BusinessMappingDAOImpl extends GenericBaseDAO<BusinessMapping, Integer> implements BusinessMappingDAO {

    private static final Logger LOGGER = Logger.getIteraplanLogger(BusinessMappingDAOImpl.class);

    /**
     * @param connectionProperty
     *          from which side are the business mappings identified
     * @param id
     *          the Building block ID
     */
    private List<BusinessMapping> getBusinessMappingsConnectedTo(final String connectionProperty,
            final Integer id) {
        Criterion c = Restrictions.eq(connectionProperty + ".id", id);
        return getBusinessMappings(c);
    }

    private List<BusinessMapping> getBusinessMappings(final Criterion restrictions) {
        HibernateCallback<List<BusinessMapping>> callback = new BusinessMappingsCallback(restrictions);
        return getHibernateTemplate().execute(callback);
    }

    public List<BusinessMapping> getBusinessMappingsConnectedToISR(final Integer id) {
        return getBusinessMappingsConnectedTo("informationSystemRelease", id);
    }

    public List<BusinessMapping> getBusinessMappingsConnectedToBU(final Integer id) {
        return getBusinessMappingsConnectedTo("businessUnit", id);
    }

    public List<BusinessMapping> getBusinessMappingsConnectedToBP(final Integer id) {
        return getBusinessMappingsConnectedTo("businessProcess", id);
    }

    public List<BusinessMapping> getBusinessMappingsConnectedToProduct(final Integer id) {
        return getBusinessMappingsConnectedTo("product", id);
    }

    public BusinessMapping getBusinessMappingConnectedToProductAndBUAndBPAndISR(final Integer prodId,
            final Integer buId, final Integer bpId, final Integer isrId) {
        Criterion c = Restrictions.and(Restrictions.eq("product.id", prodId),
                Restrictions.and(Restrictions.eq("businessUnit.id", buId),
                        Restrictions.and(Restrictions.eq("businessProcess.id", bpId),
                                Restrictions.eq("informationSystemRelease.id", isrId))));
        List<BusinessMapping> mappings = getBusinessMappings(c);
        if (mappings.size() > 1) {
            LOGGER.error("Found more than one assigned business mapping with product id '" + prodId
                    + "' and business unit id '" + buId + "' and business process id '" + bpId
                    + "' and information system release id '" + isrId
                    + "'. A maximum of one business mapping is logically allowed.");
            throw new IteraplanTechnicalException(IteraplanErrorMessages.INTERNAL_ERROR);
        }

        return mappings.isEmpty() ? null : mappings.get(0);
    }

    /** {@inheritDoc} */
    @Override
    protected String getNameAttribute() {
        throw new UnsupportedOperationException("This operation is not supported for this type.");
    }

    /** {@inheritDoc} */
    public int deleteOrphanedBusinessMappings() {
        Criterion isrNull = Restrictions.isNull("informationSystemRelease.id");
        Criterion buNull = Restrictions.isNull("businessUnit.id");
        Criterion bpNull = Restrictions.isNull("businessProcess.id");
        Criterion prodNull = Restrictions.isNull("product.id");
        Junction invalidBusinessMappings = Restrictions.disjunction().add(isrNull).add(buNull).add(bpNull)
                .add(prodNull);

        List<BusinessMapping> orphanedMappings = getBusinessMappings(invalidBusinessMappings);
        for (BusinessMapping orphan : orphanedMappings) {
            delete(orphan);
        }

        return orphanedMappings.size();
    }

    private static final class BusinessMappingsCallback implements HibernateCallback<List<BusinessMapping>> {
        private final Criterion restrictions;

        public BusinessMappingsCallback(Criterion restrictions) {
            this.restrictions = restrictions;
        }

        @SuppressWarnings("unchecked")
        public List<BusinessMapping> doInHibernate(Session session) {
            Criteria c = session.createCriteria(BusinessMapping.class);
            c.add(restrictions);
            return c.list();
        }
    }

}