org.eurekastreams.server.persistence.mappers.db.GetOrganizationsByIdsDbMapper.java Source code

Java tutorial

Introduction

Here is the source code for org.eurekastreams.server.persistence.mappers.db.GetOrganizationsByIdsDbMapper.java

Source

/*
 * Copyright (c) 2009-2010 Lockheed Martin Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.eurekastreams.server.persistence.mappers.db;

import java.util.ArrayList;
import java.util.List;

import org.eurekastreams.commons.hibernate.ModelViewResultTransformer;
import org.eurekastreams.server.domain.Organization;
import org.eurekastreams.server.persistence.mappers.BaseArgDomainMapper;
import org.eurekastreams.server.search.factories.OrganizationModelViewFactory;
import org.eurekastreams.server.search.modelview.OrganizationModelView;
import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

/**
 * Gets a list of organization objects for a given list of org ids.
 */
public class GetOrganizationsByIdsDbMapper extends BaseArgDomainMapper<List<Long>, List<OrganizationModelView>> {
    /**
     * Looks in cache for the necessary DTOs and returns them if found. Otherwise, makes a database call, puts them in
     * cache, and returns them.
     * 
     * @param ids
     *            the list of ids that should be found.
     * @return list of DTO objects.
     */
    @SuppressWarnings("unchecked")
    public List<OrganizationModelView> execute(final List<Long> ids) {
        if (ids == null || ids.size() == 0) {
            return new ArrayList<OrganizationModelView>();
        }

        Criteria criteria = getHibernateSession().createCriteria(Organization.class);
        ProjectionList fields = Projections.projectionList();
        fields.add(getColumn("id"));
        fields.add(Projections.property("parentOrganization.id").as("parentOrganizationId"));
        fields.add(getColumn("description"));
        fields.add(getColumn("name"));
        fields.add(getColumn("shortName"));
        fields.add(getColumn("childOrganizationCount"));
        fields.add(getColumn("descendantGroupCount"));
        fields.add(getColumn("descendantEmployeeCount"));
        fields.add(Projections.property("employeeFollowerCount").as("followersCount"));
        fields.add(getColumn("updatesCount"));
        fields.add(getColumn("overview"));
        fields.add(Projections.property("stream.id").as("streamId"));
        fields.add(getColumn("bannerId"));
        fields.add(getColumn("url"));
        fields.add(getColumn("allUsersCanCreateGroups"));
        fields.add(getColumn("avatarId"));
        fields.add(getColumn("avatarCropSize"));
        fields.add(getColumn("avatarCropX"));
        fields.add(getColumn("avatarCropY"));
        criteria.setProjection(fields);

        criteria.createAlias("streamScope", "stream");

        // Creates the necessary "OR" clauses to get all uncached items
        Criterion restriction = null;
        for (Long orgId : ids) {
            if (restriction == null) {
                restriction = Restrictions.eq("this.id", orgId);
            } else {
                restriction = Restrictions.or(Restrictions.eq("this.id", orgId), restriction);
            }
        }
        criteria.add(restriction);

        ModelViewResultTransformer<OrganizationModelView> resultTransformer = //
                new ModelViewResultTransformer<OrganizationModelView>(new OrganizationModelViewFactory());
        criteria.setResultTransformer(resultTransformer);

        return criteria.list();
    }
}