Package org.eurekastreams.server.persistence.strategies

Source Code of org.eurekastreams.server.persistence.strategies.DomainGroupQueryStrategy

/*
* Copyright (c) 2009-2011 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.strategies;

import org.eurekastreams.commons.hibernate.ModelViewResultTransformer;
import org.eurekastreams.server.domain.DomainGroup;
import org.eurekastreams.server.search.factories.DomainGroupModelViewFactory;
import org.eurekastreams.server.search.modelview.DomainGroupModelView;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

/**
* Strategy for building up a DomainGroupModelView from the DomainGroup entity.
*/
public class DomainGroupQueryStrategy
{
    /**
     * Build the base Criteria object.
     *
     * @param hibernateSession
     *            the hibernate session used to create the criteria.
     * @return the base criteria object.
     */
    public Criteria getCriteria(final Session hibernateSession)
    {
        Criteria criteria = hibernateSession.createCriteria(DomainGroup.class);
        ProjectionList fields = Projections.projectionList();
        fields.add(getColumn("id"));
        fields.add(getColumn("description"));
        fields.add(getColumn("name"));
        fields.add(getColumn("shortName"));
        fields.add(Projections.property("publicGroup").as("isPublic"));
        fields.add(getColumn("updatesCount"));
        fields.add(getColumn("followersCount"));
        fields.add(getColumn("dateAdded"));
        fields.add(getColumn("avatarId"));
        fields.add(getColumn("avatarCropSize"));
        fields.add(getColumn("avatarCropX"));
        fields.add(getColumn("avatarCropY"));
        fields.add(getColumn("bannerId"));
        fields.add(getColumn("overview"));
        fields.add(getColumn("commentable"));
        fields.add(getColumn("streamPostable"));
        fields.add(getColumn("url"));
        fields.add(getColumn("stickyActivityId"));
        fields.add(Projections.property("cb.accountId").as("personCreatedByAccountId"));
        fields.add(Projections.property("cb.displayName").as("personCreatedByDisplayName"));
        fields.add(Projections.property("cb.companyName").as("personCreatedByCompanyName"));
        fields.add(Projections.property("stream.id").as("streamId"));
        criteria.setProjection(fields);
        criteria.createAlias("createdBy", "cb");
        criteria.createAlias("streamScope", "stream");

        // We don't currently cache pending groups
        // TODO: this needs to change - we should figure out how to remove this rule
        criteria.add(Restrictions.eq("isPending", false));

        ModelViewResultTransformer<DomainGroupModelView> resultTransformer = //
        new ModelViewResultTransformer<DomainGroupModelView>(new DomainGroupModelViewFactory());
        criteria.setResultTransformer(resultTransformer);

        return criteria;
    }

    /**
     * Build the PropertyProjection with alias.
     *
     * @param propertyName
     *            the property name
     * @return the PropertyProjection with alias
     */
    private Projection getColumn(final String propertyName)
    {
        return Projections.property(propertyName).as(propertyName);
    }
}
TOP

Related Classes of org.eurekastreams.server.persistence.strategies.DomainGroupQueryStrategy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.