Package com.sparc.knappsack.components.dao

Source Code of com.sparc.knappsack.components.dao.OrganizationDaoImpl

package com.sparc.knappsack.components.dao;

import com.mysema.query.jpa.JPASubQuery;
import com.mysema.query.types.expr.BooleanExpression;
import com.mysema.query.types.query.ListSubQuery;
import com.sparc.knappsack.components.entities.*;
import com.sparc.knappsack.enums.UserRole;
import org.springframework.stereotype.Repository;

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

@Repository("organizationDao")
public class OrganizationDaoImpl extends BaseDao implements OrganizationDao {

    QOrganization organization = QOrganization.organization;
    QApplication application = QApplication.application;
    QApplicationVersion applicationVersion = QApplicationVersion.applicationVersion;
    QCategory category = QCategory.category;
    QGroup group = QGroup.group;
    QUserDomain userDomain = QUserDomain.userDomain;
    QUser user = QUser.user;

    @Override
    public void add(Organization organization) {
        getEntityManager().persist(organization);
    }

    @Override
    public Organization get(Long id) {
        return getEntityManager().find(Organization.class, id);
    }

    @Override
    public List<Organization> get(List<Long> organizationIds) {
        return query().from(organization).where(organization.id.in(organizationIds)).list(organization);
    }

    @Override
    public void delete(Organization organization) {
        getEntityManager().remove(getEntityManager().merge(organization));
    }

    @Override
    public void update(Organization organization) {
        getEntityManager().merge(organization);
    }

    @Override
    public List<Organization> getAll() {
        return query().from(organization).list(organization);
    }

    @Override
    public Organization get(String name) {
        return query().from(organization).where(organization.name.equalsIgnoreCase(name)).uniqueResult(organization);
    }

    @Override
    public long countAll() {
        return query().from(organization).count();
    }

    @Override
    public long countOrganizationGroups(Long orgId) {
        return cacheableQuery().from(organization).innerJoin(organization.groups, group).where(organization.id.eq(orgId)).count();
    }

    @Override
    public long countOrganizationUsers(Long orgId, boolean includeGroups) {

        List<BooleanExpression> expressions = new ArrayList<BooleanExpression>();
        expressions.add(userDomain.domain.id.eq(orgId));

        if (includeGroups) {
            JPASubQuery groupSubQuery = subQuery().from(group).where(group.organization.id.eq(orgId));
            JPASubQuery groupUserDomainsSubQuery = subQuery().from(userDomain).where(userDomain.domain.in(groupSubQuery.list(group)));

            expressions.add(userDomain.in(groupUserDomainsSubQuery.list(userDomain)));
        }

        JPASubQuery userIdSubQuery = subQuery().from(userDomain).where(BooleanExpression.anyOf(expressions.toArray(new BooleanExpression[expressions.size()]))).groupBy(userDomain.user.id);
        ListSubQuery<Long> userIds = userIdSubQuery.list(userDomain.user.id);

        return cacheableQuery().from(user)
                .where(user.id.in(userIds))
                .distinct().count();
    }

    @Override
    public long countOrganizationApps(Long orgId) {
        return cacheableQuery().from(organization, application, category).where(organization.id.eq(orgId).and(category.in(organization.categories)).and(category.eq(application.category))).count();
    }

    @Override
    public long countOrganizationAppVersions(Long orgId) {
        return cacheableQuery().from(organization, application, applicationVersion, category).where(organization.id.eq(orgId).and(category.in(organization.categories).and(category.eq(application.category).and(application.eq(applicationVersion.application))))).count();
    }

    @Override
    public List<Organization> getAllForCreateDateRange(Date minDate, Date maxDate) {
        return query().from(organization).where(organization.createDate.between(minDate, maxDate)).list(organization);
    }

    @Override
    public List<Organization> getAdministeredOrganizationsForUser(User user) {
        return cacheableQuery().from(organization)
                .where(organization.in(
                        subQuery().from(userDomain)
                                .where(userDomain.user.eq(user), userDomain.role.authority.eq(UserRole.ROLE_ORG_ADMIN.toString()))
                                .list(userDomain.domain.as(organization.getClass()))
                )).list(organization);
    }

    @Override
    public Organization getForGroupId(long groupId) {
        return query().from(group)
                .where(group.id.eq(groupId)).uniqueResult(group.organization);
    }
}
TOP

Related Classes of com.sparc.knappsack.components.dao.OrganizationDaoImpl

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.