org.ednovo.gooru.infrastructure.persistence.hibernate.task.TaskRepositoryHibernate.java Source code

Java tutorial

Introduction

Here is the source code for org.ednovo.gooru.infrastructure.persistence.hibernate.task.TaskRepositoryHibernate.java

Source

/////////////////////////////////////////////////////////////
// TaskRepositoryHibernate.java
// gooru-api
// Created by Gooru on 2014
// Copyright (c) 2014 Gooru. All rights reserved.
// http://www.goorulearning.org/
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/////////////////////////////////////////////////////////////
package org.ednovo.gooru.infrastructure.persistence.hibernate.task;

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

import org.ednovo.gooru.core.api.model.CollectionTaskAssoc;
import org.ednovo.gooru.core.api.model.Resource;
import org.ednovo.gooru.core.api.model.Task;
import org.ednovo.gooru.core.api.model.TaskAssoc;
import org.ednovo.gooru.core.api.model.TaskHistoryItem;
import org.ednovo.gooru.core.api.model.TaskResourceAssoc;
import org.ednovo.gooru.core.api.model.TaskUserAssoc;
import org.ednovo.gooru.core.constant.ConstantProperties;
import org.ednovo.gooru.core.constant.ParameterProperties;
import org.ednovo.gooru.infrastructure.persistence.hibernate.BaseRepositoryHibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.type.StandardBasicTypes;
import org.springframework.stereotype.Repository;

@Repository
public class TaskRepositoryHibernate extends BaseRepositoryHibernate
        implements TaskRepository, ParameterProperties, ConstantProperties {

    @Override
    public Task getTask(String gooruOid) {
        Session session = getSession();
        String hql = " FROM Task task WHERE  task.gooruOid=:gooruOid  and task.contentType.name=:task and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("task."));
        query.setParameter("gooruOid", gooruOid);
        query.setParameter(TASK, TASK);
        addOrgAuthParameters(query);
        return (Task) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @Override
    public Task getTask(String gooruOid, String gooruUid) {
        Session session = getSession();
        String hql = " FROM Task task WHERE  task.gooruOid=:gooruOid  and task.creator.gooruUId =:gooruUid and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("task."));
        query.setParameter("gooruOid", gooruOid);
        query.setParameter("gooruUid", gooruUid);
        addOrgAuthParameters(query);
        return (Task) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Task> getTasks(Integer offset, Integer limit, Boolean skipPagination) {
        Session session = getSession();
        String hql = " select collectionTaskAssoc FROM CollectionTaskAssoc collectionTaskAssoc  where "
                + generateOrgAuthQuery("task.");
        Query query = session.createQuery(hql);
        addOrgAuthParameters(query);
        if (skipPagination) {
            query.setFirstResult(offset);
            query.setMaxResults(limit);
        }
        return query.list();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<CollectionTaskAssoc> getCollectionTaskAssoc(Integer offset, Integer limit, Boolean skipPagination,
            String taskGooruOid, String classpageId) {
        Session session = getSession();
        String hql = " FROM CollectionTaskAssoc collectionTaskAssoc where "
                + generateOrgAuthQuery("collectionTaskAssoc.task.");
        if (taskGooruOid != null) {
            hql += " and collectionTaskAssoc.task.gooruOid='" + taskGooruOid + "'";
        }
        if (classpageId != null) {
            hql += " and collectionTaskAssoc.collection.gooruOid='" + classpageId + "'";
        }
        Query query = session.createQuery(hql);
        addOrgAuthParameters(query);
        query.setFirstResult(offset);
        query.setMaxResults(limit != null ? (limit > MAX_LIMIT ? MAX_LIMIT : limit) : LIMIT);
        return query.list();
    }

    @Override
    public Long getCollectionClasspageAssocCount(String collectionId) {
        Session session = getSession();
        String sql = "select count(*) as count from classpage cc inner join resource car on car.content_id = cc.classpage_content_id inner join content cor on cor.content_id = car.content_id   inner join collection_item ci on cc.classpage_content_id = ci.collection_content_id inner join content c on c.content_id = ci.collection_content_id inner join resource r on  r.content_id = ci.resource_content_id inner join content cr on cr.content_id = r.content_id where cr.gooru_oid = '"
                + collectionId + "' and ci.associated_by_uid != cr.user_uid";

        Query query = session.createSQLQuery(sql).addScalar("count", StandardBasicTypes.LONG);
        return (Long) query.list().get(0);
    }

    @Override
    public CollectionTaskAssoc getCollectionTaskAssoc(String collectionId, String collectionTaskAssocId) {
        Session session = getSession();
        String hql = " FROM CollectionTaskAssoc collectionTaskAssoc WHERE  collectionTaskAssoc.collection.gooruOid=:collectionId and collectionTaskAssoc.collectionTaskAssocUid=:collectionTaskAssocUid and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("collectionTaskAssoc.collection."));
        query.setParameter("collectionId", collectionId);
        query.setParameter("collectionTaskAssocUid", collectionTaskAssocId);
        addOrgAuthParameters(query);
        return (CollectionTaskAssoc) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Map<Object, Object>> getCollectionClasspageAssoc(String collectionId, String gooruUid) {
        Session session = getSession();
        String sql = "select car.title as title, cor.gooru_oid as classpageId from classpage cc inner join resource car on car.content_id = cc.classpage_content_id inner join content cor on cor.content_id = car.content_id   inner join collection_item ci on cc.classpage_content_id = ci.collection_content_id inner join content c on c.content_id = ci.collection_content_id inner join resource r on  r.content_id = ci.resource_content_id inner join content cr on cr.content_id = r.content_id where cr.gooru_oid='"
                + collectionId + "'";
        if (gooruUid != null) {
            sql += "and ci.associated_by_uid='" + gooruUid + "'";
        }
        Query query = session.createSQLQuery(sql).addScalar("title", StandardBasicTypes.STRING)
                .addScalar("classpageId", StandardBasicTypes.STRING);
        return getClasspageData(query.list());
    }

    @Override
    public void deleteCollectionAssocInAssignment(String collectionId) {
        Session session = getSession();
        String sql = "delete ci.* from collection_item ci inner join collection c on c.content_id = ci.resource_content_id inner join content cc on cc.content_id = c.content_id inner join collection ccc on ccc.content_id = ci.collection_content_id  where cc.gooru_oid =:collectionId and ccc.collection_type = 'classpage'";
        Query query = session.createSQLQuery(sql).setParameter("collectionId", collectionId);
        query.executeUpdate();
    }

    private List<Map<Object, Object>> getClasspageData(List<Object[]> results) {
        List<Map<Object, Object>> listClasspageTitle = new ArrayList<Map<Object, Object>>();
        for (Object[] object : results) {
            Map<Object, Object> average = new HashMap<Object, Object>();
            average.put("classpageId", object[1]);
            average.put("title", object[0]);
            listClasspageTitle.add(average);
        }
        return listClasspageTitle;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<CollectionTaskAssoc> getCollectionTaskAssocs(String collectionId, String offset, String limit,
            String skipPagination, String orderBy) {
        Integer startAt = (offset != null) ? Integer.parseInt(offset) : OFFSET;
        Integer pageSize = (limit != null) ? Integer.parseInt(limit) : LIMIT;
        Session session = getSession();
        String hql = " FROM CollectionTaskAssoc collectionTaskAssoc WHERE   collectionTaskAssoc.collection.gooruOid=:collectionId and "
                + generateOrgAuthQuery("collectionTaskAssoc.collection.");
        if (orderBy != null && orderBy.equalsIgnoreCase(TITLE)) {
            hql += " order by collectionTaskAssoc.task.title ";
        } else {
            hql += " order by collectionTaskAssoc.task.createdOn desc ";
        }
        Query query = session.createQuery(hql);
        query.setParameter("collectionId", collectionId);
        addOrgAuthParameters(query);
        if (skipPagination == null || (skipPagination != null && skipPagination.equalsIgnoreCase(NO))) {
            query.setFirstResult(startAt).setMaxResults(pageSize);
        }
        return query.list();
    }

    public TaskResourceAssoc getTaskResourceAssocById(String taskGooruOid, String gooruOid) {
        Session session = getSession();
        String hql = " FROM TaskResourceAssoc tra WHERE tra.task.gooruOid =:taskGooruOid and tra.resource.gooruOid =:gooruOid and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("tra.task."));
        query.setParameter("taskGooruOid", taskGooruOid);
        query.setParameter("gooruOid", gooruOid);
        addOrgAuthParameters(query);
        return (TaskResourceAssoc) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<String> getTaskResourceAssocs(String taskGooruOid) {
        Session session = getSession();
        String hql = "select tra.resource.gooruOid FROM TaskResourceAssoc tra WHERE tra.task.gooruOid =:taskGooruOid and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("tra.task."));
        query.setParameter("taskGooruOid", taskGooruOid);
        addOrgAuthParameters(query);
        return query.list();
    }

    public TaskUserAssoc findByTaskUid(String gooruOid, String userUid) {
        Session session = getSession();
        String hql = " FROM TaskUserAssoc tua WHERE tua.task.gooruOid =:gooruOid and tua.user.partyUid =:userUid and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("tua.task."));
        query.setParameter("gooruOid", gooruOid);
        query.setParameter("userUid", userUid);
        addOrgAuthParameters(query);
        return (TaskUserAssoc) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @Override
    public TaskResourceAssoc getTaskResourceAssociatedItemId(String gooruOid, String resourceAssocId) {
        Session session = getSession();
        String hql = " FROM TaskResourceAssoc tra WHERE tra.taskResourceAssocUid =:resourceAssocId and ";
        if (gooruOid != null) {
            hql += "tra.task.gooruOid =:gooruOid and ";
        }
        Query query = session.createQuery(hql + generateOrgAuthQuery("tra.task."));
        query.setParameter("resourceAssocId", resourceAssocId);
        if (gooruOid != null) {
            query.setParameter("gooruOid", gooruOid);
        }
        addOrgAuthParameters(query);
        return (TaskResourceAssoc) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<TaskResourceAssoc> getTaskResourceId(String gooruOid, String resourceId) {
        Session session = getSession();
        String hql = " FROM TaskResourceAssoc tra WHERE tra.resource.gooruOid in (:resourceId) and ";
        if (gooruOid != null) {
            hql += "tra.task.gooruOid =:gooruOid and ";
        }

        Query query = session.createQuery(hql + generateOrgAuthQuery("tra.task."));
        if (resourceId != null) {
            query.setParameterList("resourceId", resourceId.split(","));
        }
        if (gooruOid != null) {
            query.setParameter("gooruOid", gooruOid);
        }
        addOrgAuthParameters(query);
        return query.list();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Resource> getTaskResourceAssociatedByTaskId(String gooruOid, Integer offset, Integer limit,
            String skipPagination, String orderBy, String sharing) {
        Session session = getSession();
        String hql = "select distinct(taskResourceAssocs.resource)  FROM Task task inner join task.taskResourceAssocs taskResourceAssocs where task.gooruOid=:gooruOid and "
                + generateOrgAuthQuery("task.");
        if (sharing != null) {
            hql += " and taskResourceAssocs.resource.sharing in (:sharing)";
        }

        if (orderBy != null && orderBy.equalsIgnoreCase(DATE)) {
            hql += " order by taskResourceAssocs.resource.createdOn desc";
        }
        if (orderBy != null && orderBy.equalsIgnoreCase(TITLE)) {
            hql += " order by taskResourceAssocs.resource.title";
        }
        Query query = session.createQuery(hql);
        query.setParameter("gooruOid", gooruOid);
        if (sharing != null) {
            query.setParameterList("sharing", sharing.split(","));
        }
        addOrgAuthParameters(query);
        if (skipPagination != null && skipPagination.equalsIgnoreCase(NO)) {
            query.setFirstResult(offset).setMaxResults(limit);

        }
        return query.list();
    }

    @Override
    public TaskAssoc getTaskAssocByUid(String taskAssocUid) {
        Session session = getSession();
        String hql = " FROM TaskAssoc taskAssoc WHERE taskAssoc.taskAssocUid =:taskAssocUid and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("taskAssoc.taskParent."));
        query.setParameter("taskAssocUid", taskAssocUid);
        addOrgAuthParameters(query);
        return (TaskAssoc) ((query.list().size() > 0) ? query.list().get(0) : null);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<TaskHistoryItem> getTaskHistory(String taskGooruOid) {
        Session session = getSession();
        String hql = "SELECT distinct(taskHistoryItems) FROM TaskHistory taskHistory inner join taskHistory.taskHistoryItems taskHistoryItems where taskHistory.taskContentId.gooruOid=:taskGooruOid  and ";
        Query query = session.createQuery(hql + generateOrgAuthQuery("taskHistory.taskContentId."));
        query.setParameter("taskGooruOid", taskGooruOid);
        addOrgAuthParameters(query);
        return query.list();
    }

    public Long getTaskResourceCount(String taskGooruOid, String sharing) {
        Session session = getSession();
        String hql = "select count(*)  FROM TaskResourceAssoc taskResourceAssoc where "
                + generateOrgAuthQuery("taskResourceAssoc.task.");
        if (taskGooruOid != null) {
            hql += " and taskResourceAssoc.task.gooruOid='" + taskGooruOid + "'";
        }
        if (sharing != null) {
            hql += " and taskResourceAssoc.resource.sharing in (:sharing)";
        }

        Query query = session.createQuery(hql);
        if (sharing != null) {
            query.setParameterList("sharing", sharing.split(","));
        }
        addOrgAuthParameters(query);
        return (Long) query.list().get(0);
    }

    @Override
    public Long getTaskCollectionCount(String taskGooruOid, String classpageId) {
        Session session = getSession();
        String hql = "select count(*)  FROM CollectionTaskAssoc collectionTaskAssoc WHERE "
                + generateOrgAuthQuery("collectionTaskAssoc.task.");
        if (taskGooruOid != null) {
            hql += " and collectionTaskAssoc.task.gooruOid='" + taskGooruOid + "'";
        }
        if (classpageId != null) {
            hql += " and collectionTaskAssoc.collection.gooruOid='" + classpageId + "'";
        }
        Query query = session.createQuery(hql);
        addOrgAuthParameters(query);
        return (Long) query.list().get(0);
    }

    @Override
    public Long getCollectionTaskCount(String collectionGooruOid) {
        Session session = getSession();
        String hql = "select count(*)  FROM CollectionTaskAssoc collectionTaskAssoc WHERE "
                + generateOrgAuthQuery("collectionTaskAssoc.task.");
        if (collectionGooruOid != null) {
            hql += " and collectionTaskAssoc.collection.gooruOid = '" + collectionGooruOid + "'";
        }
        Query query = session.createQuery(hql);
        addOrgAuthParameters(query);
        return (Long) query.list().get(0);
    }

}