Example usage for org.hibernate.criterion Restrictions gt

List of usage examples for org.hibernate.criterion Restrictions gt

Introduction

In this page you can find the example usage for org.hibernate.criterion Restrictions gt.

Prototype

public static SimpleExpression gt(String propertyName, Object value) 

Source Link

Document

Apply a "greater than" constraint to the named property

Usage

From source file:de.lemo.dms.connectors.moodle_1_9.ExtractAndMapMoodle.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public void getLMStables(final DBConfigObject dbConf, final long readingfromtimestamp, List<Long> courses,
        List<String> logins) {
    final Session session = HibernateUtil.getSessionFactory(dbConf).openSession();
    final Transaction tx = session.beginTransaction();

    boolean hasCR = false;
    if (courses != null && courses.size() > 0)
        hasCR = true;/* w  w  w  . j ava 2  s.c o m*/

    boolean empty = false;

    //Read Context
    Criteria criteria = session.createCriteria(ContextLMS.class, "obj");
    List<Long> contextLevels = new ArrayList<Long>();
    contextLevels.add(40L);
    contextLevels.add(50L);

    criteria.add(Restrictions.in("obj.contextlevel", contextLevels));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.contextLms = criteria.list();
    logger.info("ContextLMS tables: " + this.contextLms.size());

    if (logins != null && !logins.isEmpty()) {
        List<String> archetypes = new ArrayList<String>();
        List<Long> roleIds = new ArrayList<Long>();
        List<String> userIds = new ArrayList<String>();

        archetypes.add("%manager%");
        archetypes.add("%coursecreator%");
        archetypes.add("%teacher%");
        archetypes.add("%editingteacher%");

        criteria = session.createCriteria(RoleLMS.class, "obj");
        criteria.add(Restrictions.in("obj.shortname", archetypes));
        for (RoleLMS role : (List<RoleLMS>) criteria.list())
            roleIds.add(role.getId());

        criteria = session.createCriteria(UserLMS.class, "obj");
        criteria.add(Restrictions.in("obj.username", logins));
        for (UserLMS user : (List<UserLMS>) criteria.list())
            userIds.add(user.getId() + "");

        criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
        criteria.add(Restrictions.in("obj.userid", userIds));
        criteria.add(Restrictions.in("obj.roleid", roleIds));
        for (ContextLMS c : this.contextLms) {
            for (RoleAssignmentsLMS ra : (List<RoleAssignmentsLMS>) criteria.list()) {
                if (c.getContextlevel() == 50 && c.getId() == ra.getContextid()) {
                    courses.add(c.getInstanceid());
                    hasCR = true;
                }
            }
        }

    }

    // reading the LMS Database, create tables as lists of instances of the DB-table classes

    criteria = session.createCriteria(LogLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.add(Restrictions.gt("obj.time", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.logLms = criteria.list();
    logger.info("LogLMS tables: " + this.logLms.size());

    criteria = session.createCriteria(ResourceLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.resourceLms = criteria.list();
    logger.info("ResourceLMS tables: " + this.resourceLms.size());

    criteria = session.createCriteria(CourseModulesLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseModulesLms = criteria.list();
    logger.info("CourseModulesLMS tables: " + this.courseModulesLms.size());

    criteria = session.createCriteria(ChatLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.chatLms = criteria.list();
    logger.info("ChatLMS tables: " + this.chatLms.size());

    criteria = session.createCriteria(ChatLogLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ChatLMS e : this.chatLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.chat", ids));
    }
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.chatLogLms = new ArrayList<ChatLogLMS>();
    else
        this.chatLogLms = criteria.list();
    logger.info("ChatLogLMS tables: " + this.chatLogLms.size());

    criteria = session.createCriteria(CourseCategoriesLMS.class, "obj");

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseCategoriesLms = criteria.list();
    logger.info("CourseCategoriesLMS tables: " + this.courseCategoriesLms.size());

    criteria = session.createCriteria(CourseLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.id", courses));

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseLms = criteria.list();
    logger.info("CourseLMS tables: " + this.courseLms.size());

    final Query forumPosts;
    if (!hasCR) {
        forumPosts = session
                .createQuery("from ForumPostsLMS x where x.modified>=:readingtimestamp order by x.id asc");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        this.forumPostsLms = forumPosts.list();
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPosts = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message,posts.discussion from mdl_forum_posts as posts JOIN mdl_log as logs ON posts.userid = logs.userid Where logs.course in "
                        + courseClause
                        + " and (posts.created = logs.time or posts.modified = logs.time) AND posts.modified>=:readingtimestamp ");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        List<Object[]> tmpl = forumPosts.list();
        this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setId(((BigInteger) obj[0]).longValue());
            } else {
                p.setId(((Integer) obj[0]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setUserid(((BigInteger) obj[1]).longValue());
            } else {
                p.setUserid(((Integer) obj[1]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setCreated(((BigInteger) obj[2]).longValue());
            } else {
                p.setCreated(((Integer) obj[2]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setModified(((BigInteger) obj[3]).longValue());
            } else {
                p.setModified(((Integer) obj[3]).longValue());
            }
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setDiscussion(((BigInteger) obj[6]).longValue());
            } else {
                p.setDiscussion(((Integer) obj[6]).longValue());
            }
            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsLMS tables: " + this.forumPostsLms.size());

    criteria = session.createCriteria(ForumLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.add(Restrictions.ge("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.forumLms = criteria.list();
    logger.info("ForumLMS tables: " + this.forumLms.size());

    criteria = session.createCriteria(GroupsLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.courseid", courses));
    criteria.add(Restrictions.ge("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.groupLms = criteria.list();
    logger.info("GroupsLMS tables: " + this.groupLms.size());

    criteria = session.createCriteria(QuizLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.add(Restrictions.ge("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.quizLms = criteria.list();
    logger.info("QuizLMS tables: " + this.quizLms.size());

    criteria = session.createCriteria(WikiLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.add(Restrictions.ge("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.wikiLms = criteria.list();
    logger.info("WikiLMS tables: " + this.wikiLms.size());

    criteria = session.createCriteria(GroupsMembersLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GroupsLMS e : this.groupLms)
            ids.add(e.getId());
        empty = ids.isEmpty();
        if (!empty)
            criteria.add(Restrictions.in("obj.groupid", ids));
    }
    criteria.add(Restrictions.ge("obj.timeadded", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.groupMembersLms = new ArrayList<GroupsMembersLMS>();
    else
        this.groupMembersLms = criteria.list();
    logger.info("GroupsMembersLMS tables: " + this.groupMembersLms.size());

    criteria = session.createCriteria(QuizQuestionInstancesLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        empty = ids.isEmpty();
        if (!empty)
            criteria.add(Restrictions.in("obj.quiz", ids));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.quizQuestionInstancesLms = new ArrayList<QuizQuestionInstancesLMS>();
    else
        this.quizQuestionInstancesLms = criteria.list();
    logger.info("QuizQuestionInstancesLMS tables: " + this.quizQuestionInstancesLms.size());

    criteria = session.createCriteria(QuestionStatesLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
            ids.add(e.getQuestion());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.question", ids));
    }
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.questionStatesLms = new ArrayList<QuestionStatesLMS>();
    else
        this.questionStatesLms = criteria.list();
    logger.info("QuestionStatesLMS tables: " + this.questionStatesLms.size());

    criteria = session.createCriteria(QuestionLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
            ids.add(e.getQuestion());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.id", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.questionLms = new ArrayList<QuestionLMS>();
    else
        this.questionLms = criteria.list();
    logger.info("QuestionLMS tables: " + this.questionLms.size());

    criteria = session.createCriteria(ContextLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.instanceid", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.contextLms = criteria.list();
    logger.info("ContextLMS tables: " + this.contextLms.size());

    criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ContextLMS c : this.contextLms) {
            if (c.getContextlevel() == 50 && courses.contains(c.getInstanceid()))
                ids.add(c.getId());
        }
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.contextid", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.roleAssignmentsLms = new ArrayList<RoleAssignmentsLMS>();
    else
        this.roleAssignmentsLms = criteria.list();
    logger.info("RoleAssignmentsLMS tables: " + this.roleAssignmentsLms.size());

    criteria = session.createCriteria(UserLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (RoleAssignmentsLMS e : this.roleAssignmentsLms)
            ids.add(e.getUserid());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.id", ids));
    }

    if (readingfromtimestamp > 0) {
        criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.userLms = new ArrayList<UserLMS>();
    else
        this.userLms = criteria.list();
    logger.info("UserLMS tables: " + this.userLms.size());

    criteria = session.createCriteria(RoleLMS.class, "obj");
    criteria.addOrder(Property.forName("obj.id").asc());
    this.roleLms = criteria.list();
    logger.info("RoleLMS tables: " + this.roleLms.size());

    criteria = session.createCriteria(AssignmentLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.course", courses));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.assignmentLms = criteria.list();
    logger.info("AssignmentLMS tables: " + this.assignmentLms.size());

    criteria = session.createCriteria(AssignmentSubmissionsLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (AssignmentLMS e : this.assignmentLms)
            ids.add(e.getId());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.assignment", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.assignmentSubmissionLms = new ArrayList<AssignmentSubmissionsLMS>();
    else
        this.assignmentSubmissionLms = criteria.list();
    logger.info("AssignmentSubmissionsLMS tables: " + this.assignmentSubmissionLms.size());

    criteria = session.createCriteria(QuizGradesLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.quiz", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.quizGradesLms = new ArrayList<QuizGradesLMS>();
    else
        this.quizGradesLms = criteria.list();
    logger.info("QuizGradesLMS tables: " + this.quizGradesLms.size());

    criteria = session.createCriteria(ForumDiscussionsLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ForumLMS e : this.forumLms)
            ids.add(e.getId());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.forum", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.forumDiscussionsLms = new ArrayList<ForumDiscussionsLMS>();
    else
        this.forumDiscussionsLms = criteria.list();
    logger.info("ForumDiscussionsLMS tables: " + this.forumDiscussionsLms.size());

    criteria = session.createCriteria(ScormLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.course", courses));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.scormLms = criteria.list();
    logger.info("ScormLMS tables: " + this.scormLms.size());

    criteria = session.createCriteria(GradeItemsLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.courseid", courses));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.gradeItemsLms = criteria.list();
    logger.info("GradeItemsLMS tables: " + this.gradeItemsLms.size());

    criteria = session.createCriteria(GradeGradesLMS.class, "obj");
    empty = false;
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GradeItemsLMS e : this.gradeItemsLms)
            ids.add(e.getId());
        if (empty = ids.isEmpty())
            ;
        criteria.add(Restrictions.in("obj.itemid", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (hasCR && empty)
        this.gradeGradesLms = new ArrayList<GradeGradesLMS>();
    else
        this.gradeGradesLms = criteria.list();
    logger.info("GradeGradesLMS tables: " + this.gradeGradesLms.size());

    // hibernate session finish and close
    tx.commit();
    session.close();

}

From source file:de.lemo.dms.connectors.moodle_2_3.ExtractAndMapMoodle.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public void getLMStables(final DBConfigObject dbConfig, final long readingfromtimestamp, List<Long> courses,
        List<String> logins) {

    // accessing DB by creating a session and a transaction using HibernateUtil
    final Session session = HibernateUtil.getSessionFactory(dbConfig).openSession();
    session.clear();// w ww.j av a2 s  .c om
    final Transaction tx = session.beginTransaction();

    boolean hasCR = false;
    if (courses != null && courses.size() > 0)
        hasCR = true;
    else
        courses = new ArrayList<Long>();

    boolean empty = false;

    //Read Context
    Criteria criteria = session.createCriteria(ContextLMS.class, "obj");
    List<Long> contextLevels = new ArrayList<Long>();
    contextLevels.add(40L);
    contextLevels.add(50L);

    //Read ContextLevels
    criteria.add(Restrictions.in("obj.contextlevel", contextLevels));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.contextLms = criteria.list();
    logger.info("ContextLMS tables: " + this.contextLms.size());

    if (logins != null && !logins.isEmpty()) {
        List<String> archetypes = new ArrayList<String>();
        List<Long> roleIds = new ArrayList<Long>();
        List<String> userIds = new ArrayList<String>();

        archetypes.add("manager");
        archetypes.add("coursecreator");
        archetypes.add("teacher");
        archetypes.add("editingteacher");

        criteria = session.createCriteria(RoleLMS.class, "obj");
        criteria.add(Restrictions.in("obj.archetype", archetypes));
        for (RoleLMS role : (List<RoleLMS>) criteria.list())
            roleIds.add(role.getId());

        criteria = session.createCriteria(UserLMS.class, "obj");
        criteria.add(Restrictions.in("obj.username", logins));
        for (UserLMS user : (List<UserLMS>) criteria.list())
            userIds.add(user.getId() + "");

        criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
        criteria.add(Restrictions.in("obj.userid", userIds));
        criteria.add(Restrictions.in("obj.roleid", roleIds));
        for (ContextLMS c : this.contextLms) {
            for (RoleAssignmentsLMS ra : (List<RoleAssignmentsLMS>) criteria.list()) {
                if (c.getContextlevel() == 50 && c.getId() == ra.getContextid()) {
                    courses.add(c.getInstanceid());
                    hasCR = true;
                }
            }
        }
    }

    // reading the LMS Database, create tables as lists of instances of the DB-table classes
    criteria = session.createCriteria(AssignLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.assignLms = criteria.list();
    logger.info("AssignLMS tables: " + this.assignLms.size());

    //Read RoleAssignments
    criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ContextLMS c : this.contextLms) {
            if (c.getContextlevel() == 50 && courses.contains(c.getInstanceid()))
                ids.add(c.getId());
        }
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.contextid", ids));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.roleAssignmentsLms = criteria.list();
    else
        this.roleAssignmentsLms = new ArrayList<RoleAssignmentsLMS>();
    logger.info("RoleAssignmentsLMS tables: " + this.roleAssignmentsLms.size());

    //Read AssignGrades
    criteria = session.createCriteria(AssignGradesLMS.class, "obj");
    if (hasCR) {
        List<Long> tmp = new ArrayList<Long>();
        for (AssignLMS assign : assignLms) {
            tmp.add(assign.getId());
        }
        if (!(empty = tmp.isEmpty()))
            criteria.add(Restrictions.in("obj.assignment", tmp));
    }
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.assignGradesLms = criteria.list();
    else
        this.assignGradesLms = new ArrayList<AssignGradesLMS>();
    logger.info("AssignGradesLMS tables: " + this.assignGradesLms.size());

    //Read Enrol
    criteria = session.createCriteria(EnrolLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.courseid", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.enrolLms = criteria.list();
    logger.info("EnrolLMS tables: " + this.enrolLms.size());

    //Read Modules
    criteria = session.createCriteria(ModulesLMS.class, "obj");
    criteria.addOrder(Property.forName("obj.id").asc());
    this.modulesLms = criteria.list();
    logger.info("ModulesLMS tables: " + this.modulesLms.size());

    //Read UserEnrolments
    criteria = session.createCriteria(UserEnrolmentsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (EnrolLMS e : this.enrolLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.enrolid", ids));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.userEnrolmentsLms = criteria.list();
    else
        this.userEnrolmentsLms = new ArrayList<UserEnrolmentsLMS>();
    logger.info("UserEnrolmentsLMS tables: " + this.userEnrolmentsLms.size());

    //Read CourseModules
    criteria = session.createCriteria(CourseModulesLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseModulesLms = criteria.list();
    logger.info("CourseModulesLMS tables: " + this.courseModulesLms.size());

    //Read Log
    criteria = session.createCriteria(LogLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.course", courses));
    }
    criteria.add(Restrictions.gt("obj.time", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.logLms = criteria.list();
    logger.info("LogLMS tables: " + this.logLms.size());

    //Read Resource
    criteria = session.createCriteria(ResourceLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.resourceLms = criteria.list();
    logger.info("ResourceLMS tables: " + this.resourceLms.size());

    //Read Urls
    criteria = session.createCriteria(UrlLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.urlLms = criteria.list();
    logger.info("UrlLMS tables: " + this.urlLms.size());

    //Read Pages
    criteria = session.createCriteria(PageLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.pageLms = criteria.list();
    logger.info("UrlLMS tables: " + this.pageLms.size());

    //Read Quiz
    criteria = session.createCriteria(QuizLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.quizLms = criteria.list();
    logger.info("QuizLMS tables: " + this.quizLms.size());

    //Read QuizAttempts
    criteria = session.createCriteria(QuizAttemptsLMS.class, "obj");
    if (hasCR)
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (QuizLMS e : this.quizLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.quiz", ids));
        }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizAttemptsLms = criteria.list();
    else
        this.quizAttemptsLms = new ArrayList<QuizAttemptsLMS>();
    logger.info("QuizAttemptsLMS tables: " + this.quizAttemptsLms.size());

    //Read Chats
    criteria = session.createCriteria(ChatLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.chatLms = criteria.list();
    logger.info("ChatLMS tables: " + this.chatLms.size());

    //Read ChatLog
    criteria = session.createCriteria(ChatLogLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ChatLMS e : this.chatLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.chat", ids));
    }
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.chatLogLms = criteria.list();
    else
        this.chatLogLms = new ArrayList<ChatLogLMS>();
    logger.info("ChatLogLMS tables: " + this.chatLogLms.size());

    criteria = session.createCriteria(CourseCategoriesLMS.class, "obj");

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseCategoriesLms = criteria.list();
    logger.info("CourseCategoriesLMS tables: " + this.courseCategoriesLms.size());

    criteria = session.createCriteria(CourseLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.id", courses));

    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseLms = criteria.list();
    logger.info("CourseLMS tables: " + this.courseLms.size());

    final Query forumPosts;
    if (!hasCR) {
        forumPosts = session
                .createQuery("from ForumPostsLMS x where x.modified>=:readingtimestamp order by x.id asc");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        this.forumPostsLms = forumPosts.list();
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPosts = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message,posts.discussion from mdl_forum_posts as posts JOIN mdl_log as logs ON posts.userid = logs.userid Where logs.course in "
                        + courseClause
                        + " and (posts.created = logs.time or posts.modified = logs.time) AND posts.modified>=:readingtimestamp");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        List<Object[]> tmpl = forumPosts.list();
        this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setId(((BigInteger) obj[0]).longValue());
            } else {
                p.setId(((Integer) obj[0]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setUserid(((BigInteger) obj[1]).longValue());
            } else {
                p.setUserid(((Integer) obj[1]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setCreated(((BigInteger) obj[2]).longValue());
            } else {
                p.setCreated(((Integer) obj[2]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setModified(((BigInteger) obj[3]).longValue());
            } else {
                p.setModified(((Integer) obj[3]).longValue());
            }
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setDiscussion(((BigInteger) obj[6]).longValue());
            } else {
                p.setDiscussion(((Integer) obj[6]).longValue());
            }
            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsLMS tables: " + this.forumPostsLms.size());

    criteria = session.createCriteria(ForumLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.forumLms = criteria.list();
    logger.info("ForumLMS tables: " + this.forumLms.size());

    criteria = session.createCriteria(GroupsLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.courseid", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.groupLms = criteria.list();
    logger.info("GroupsLMS tables: " + this.groupLms.size());

    criteria = session.createCriteria(WikiLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.wikiLms = criteria.list();
    logger.info("WikiLMS tables: " + this.wikiLms.size());

    criteria = session.createCriteria(GroupsMembersLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GroupsLMS e : this.groupLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.groupid", ids));
    }
    //criteria.add(Restrictions.gt("obj.timeadded", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.groupMembersLms = criteria.list();
    else
        this.groupMembersLms = new ArrayList<GroupsMembersLMS>();
    logger.info("GroupsMembersLMS tables: " + this.groupMembersLms.size());

    criteria = session.createCriteria(QuizQuestionInstancesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.quiz", ids));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizQuestionInstancesLms = criteria.list();
    else
        this.quizQuestionInstancesLms = new ArrayList<QuizQuestionInstancesLMS>();
    logger.info("QuizQuestionInstancesLMS tables: " + this.quizQuestionInstancesLms.size());

    criteria = session.createCriteria(QuestionStatesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
            ids.add(e.getQuestion());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.question", ids));
    }
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.questionStatesLms = criteria.list();
    else
        this.questionStatesLms = new ArrayList<QuestionStatesLMS>();
    logger.info("QuestionStatesLMS tables: " + this.questionStatesLms.size());

    criteria = session.createCriteria(QuestionLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
            ids.add(e.getQuestion());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.id", ids));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.questionLms = criteria.list();
    else
        this.questionLms = new ArrayList<QuestionLMS>();
    logger.info("QuestionLMS tables: " + this.questionLms.size());

    criteria = session.createCriteria(UserLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (RoleAssignmentsLMS e : this.roleAssignmentsLms)
            ids.add(Long.valueOf(e.getUserid()));
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.id", ids));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.userLms = criteria.list();
    else
        this.userLms = new ArrayList<UserLMS>();
    logger.info("UserLMS tables: " + this.userLms.size());

    criteria = session.createCriteria(RoleLMS.class, "obj");
    criteria.addOrder(Property.forName("obj.id").asc());
    this.roleLms = criteria.list();
    logger.info("RoleLMS tables: " + this.roleLms.size());

    criteria = session.createCriteria(QuizGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.quiz", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizGradesLms = criteria.list();
    else
        this.quizGradesLms = new ArrayList<QuizGradesLMS>();
    logger.info("QuizGradesLMS tables: " + this.quizGradesLms.size());

    criteria = session.createCriteria(ForumDiscussionsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ForumLMS e : this.forumLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.forum", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.forumDiscussionsLms = criteria.list();
    else
        this.forumDiscussionsLms = new ArrayList<ForumDiscussionsLMS>();
    logger.info("ForumDiscussionsLMS tables: " + this.forumDiscussionsLms.size());

    criteria = session.createCriteria(ScormLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.course", courses));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.scormLms = criteria.list();
    logger.info("ScormLMS tables: " + this.scormLms.size());

    criteria = session.createCriteria(GradeItemsLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.courseid", courses));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.gradeItemsLms = criteria.list();
    logger.info("GradeItemsLMS tables: " + this.gradeItemsLms.size());

    criteria = session.createCriteria(GradeGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GradeItemsLMS e : this.gradeItemsLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.itemid", ids));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.gradeGradesLms = criteria.list();
    else
        this.gradeGradesLms = new ArrayList<GradeGradesLMS>();
    logger.info("GradeGradesLMS tables: " + this.gradeGradesLms.size());

    // hibernate session finish and close
    tx.commit();
    session.close();

}

From source file:de.lemo.dms.connectors.moodle_2_3.ExtractAndMapMoodle.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public void getLMStables(final DBConfigObject dbConf, final long readingfromtimestamp,
        final long readingtotimestamp, List<Long> courses, List<String> logins) {

    // accessing DB by creating a session and a transaction using HibernateUtil
    final Session session = HibernateUtil.getSessionFactory(dbConf).openSession();
    // Session session = HibernateUtil.getDynamicSourceDBFactoryMoodle("jdbc:mysql://localhost/moodle19",
    session.clear();/*from   ww  w .  j a  v  a 2s  . c o  m*/
    final Transaction tx = session.beginTransaction();

    // reading the LMS Database, create tables as lists of instances of the DB-table classes
    Criteria criteria;
    boolean hasCR = false;
    if (courses != null && courses.size() > 0)
        hasCR = true;

    boolean empty = false;

    if (this.userLms == null) {

        //Read Context
        criteria = session.createCriteria(ContextLMS.class, "obj");
        List<Long> contextLevels = new ArrayList<Long>();
        contextLevels.add(40L);
        contextLevels.add(50L);

        criteria.add(Restrictions.in("obj.contextlevel", contextLevels));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.contextLms = criteria.list();
        logger.info("ContextLMS tables: " + this.contextLms.size());

        if (logins != null && !logins.isEmpty()) {
            List<String> archetypes = new ArrayList<String>();
            List<Long> roleIds = new ArrayList<Long>();
            List<String> userIds = new ArrayList<String>();

            archetypes.add("manager");
            archetypes.add("coursecreator");
            archetypes.add("teacher");
            archetypes.add("editingteacher");

            criteria = session.createCriteria(RoleLMS.class, "obj");
            criteria.add(Restrictions.in("obj.archetype", archetypes));
            for (RoleLMS role : (List<RoleLMS>) criteria.list())
                roleIds.add(role.getId());

            criteria = session.createCriteria(UserLMS.class, "obj");
            criteria.add(Restrictions.in("obj.username", logins));
            for (UserLMS user : (List<UserLMS>) criteria.list())
                userIds.add(user.getId() + "");

            criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
            criteria.add(Restrictions.in("obj.userid", userIds));
            criteria.add(Restrictions.in("obj.roleid", roleIds));
            for (ContextLMS c : this.contextLms) {
                for (RoleAssignmentsLMS ra : (List<RoleAssignmentsLMS>) criteria.list()) {
                    if (c.getContextlevel() == 50 && c.getId() == ra.getContextid()) {
                        courses.add(c.getInstanceid());
                        hasCR = true;
                    }
                }
            }

        }

        criteria = session.createCriteria(AssignLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.assignLms = criteria.list();
        logger.info("AssignLMS tables: " + this.assignLms.size());

        criteria = session.createCriteria(EnrolLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.courseid", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.enrolLms = criteria.list();
        logger.info("EnrolLMS tables: " + this.enrolLms.size());

        criteria = session.createCriteria(ModulesLMS.class, "obj");
        criteria.addOrder(Property.forName("obj.id").asc());
        this.modulesLms = criteria.list();
        logger.info("ModulesLMS tables: " + this.modulesLms.size());

        criteria = session.createCriteria(UserEnrolmentsLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (EnrolLMS e : this.enrolLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.enrolid", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.userEnrolmentsLms = criteria.list();
        else
            this.userEnrolmentsLms = new ArrayList<UserEnrolmentsLMS>();
        logger.info("UserEnrolmentsLMS tables: " + this.userEnrolmentsLms.size());

        criteria = session.createCriteria(CourseModulesLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.courseModulesLms = criteria.list();
        logger.info("CourseModulesLMS tables: " + this.courseModulesLms.size());

        criteria = session.createCriteria(ResourceLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.resourceLms = criteria.list();
        logger.info("ResourceLMS tables: " + this.resourceLms.size());

        //Read Urls
        criteria = session.createCriteria(UrlLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));

        criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.urlLms = criteria.list();
        logger.info("UrlLMS tables: " + this.urlLms.size());

        //Read Pages
        criteria = session.createCriteria(PageLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));

        criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.pageLms = criteria.list();
        logger.info("UrlLMS tables: " + this.pageLms.size());

        criteria = session.createCriteria(CourseLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.id", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.courseLms = criteria.list();
        logger.info("CourseLMS tables: " + this.courseLms.size());

        criteria = session.createCriteria(ChatLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.chatLms = criteria.list();
        logger.info("ChatLMS tables: " + this.chatLms.size());

        criteria = session.createCriteria(CourseCategoriesLMS.class, "obj");
        criteria.addOrder(Property.forName("obj.id").asc());
        this.courseCategoriesLms = criteria.list();
        logger.info("CourseCategoriesLMS tables: " + this.courseCategoriesLms.size());

        criteria = session.createCriteria(ForumLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.forumLms = criteria.list();
        logger.info("ForumLMS tables: " + this.forumLms.size());

        criteria = session.createCriteria(GroupsLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.courseid", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.groupLms = criteria.list();
        logger.info("GroupsLMS tables: " + this.groupLms.size());

        criteria = session.createCriteria(QuizLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.quizLms = criteria.list();
        logger.info("QuizLMS tables: " + this.quizLms.size());

        criteria = session.createCriteria(WikiLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.wikiLms = criteria.list();
        logger.info("WikiLMS tables: " + this.wikiLms.size());

        criteria = session.createCriteria(QuizQuestionInstancesLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (QuizLMS e : this.quizLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.quiz", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.quizQuestionInstancesLms = criteria.list();
        else
            this.quizQuestionInstancesLms = new ArrayList<QuizQuestionInstancesLMS>();
        logger.info("QuizQuestionInstancesLMS tables: " + this.quizQuestionInstancesLms.size());

        criteria = session.createCriteria(QuestionLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
                ids.add(e.getQuestion());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.id", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.questionLms = criteria.list();
        else
            this.questionLms = new ArrayList<QuestionLMS>();
        logger.info("QuestionLMS tables: " + this.questionLms.size());

        criteria = session.createCriteria(RoleLMS.class, "obj");
        criteria.addOrder(Property.forName("obj.id").asc());
        this.roleLms = criteria.list();
        logger.info("RoleLMS tables: " + this.roleLms.size());

        session.clear();

        /*
        criteria = session.createCriteria(AssignmentLMS.class, "obj");
        if(hasCR)
        {
           criteria.add(Restrictions.in("obj.course", courses));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        this.assignmentLms = criteria.list();
        logger.info("AssignmentLMS tables: " + this.assignmentLms.size());
        */
        criteria = session.createCriteria(ScormLMS.class, "obj");
        if (hasCR) {
            criteria.add(Restrictions.in("obj.course", courses));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        this.scormLms = criteria.list();
        logger.info("ScormLMS tables: " + this.scormLms.size());

        criteria = session.createCriteria(GradeItemsLMS.class, "obj");
        if (hasCR) {
            criteria.add(Restrictions.in("obj.courseid", courses));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        this.gradeItemsLms = criteria.list();
        logger.info("GradeItemsLMS tables: " + this.gradeItemsLms.size());

        criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (ContextLMS c : this.contextLms) {
                if (c.getContextlevel() == 50 && courses.contains(c.getInstanceid()))
                    ids.add(c.getId());
            }
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.contextid", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.roleAssignmentsLms = criteria.list();
        else
            this.roleAssignmentsLms = new ArrayList<RoleAssignmentsLMS>();
        logger.info("RoleAssignmentsLMS tables: " + this.roleAssignmentsLms.size());

        criteria = session.createCriteria(UserLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (RoleAssignmentsLMS e : this.roleAssignmentsLms)
                ids.add(Long.valueOf(e.getUserid()));
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.id", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.userLms = criteria.list();
        else
            this.userLms = new ArrayList<UserLMS>();
        logger.info("UserLMS tables: " + this.userLms.size());
    }

    criteria = session.createCriteria(QuizAttemptsLMS.class, "obj");
    if (hasCR)
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (QuizLMS e : this.quizLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.quiz", ids));
        }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizAttemptsLms = criteria.list();
    else
        this.quizAttemptsLms = new ArrayList<QuizAttemptsLMS>();
    logger.info("QuizAttemptsLMS tables: " + this.quizAttemptsLms.size());

    criteria = session.createCriteria(LogLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.add(Restrictions.lt("obj.time", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.time", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.logLms = criteria.list();
    logger.info("LogLMS tables: " + this.logLms.size());

    criteria = session.createCriteria(ChatLogLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ChatLMS e : this.chatLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.chat", ids));
    }
    criteria.add(Restrictions.lt("obj.timestamp", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.chatLogLms = criteria.list();
    else
        this.chatLogLms = new ArrayList<ChatLogLMS>();
    logger.info("ChatLogLMS tables: " + this.chatLogLms.size());

    final Query forumPosts;
    if (!hasCR) {
        forumPosts = session.createQuery(
                "from ForumPostsLMS x where x.created>=:readingtimestamp and x.created<=:ceiling order by x.id asc");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        forumPosts.setParameter("ceiling", readingtotimestamp);
        this.forumPostsLms = forumPosts.list();
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPosts = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message,posts.discussion from forum_posts as posts JOIN log as logs ON posts.userid = logs.userid Where logs.course in "
                        + courseClause
                        + " and (posts.created = logs.time or posts.modified = logs.time) AND posts.created>=:readingtimestamp and posts.created<=:ceiling");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        forumPosts.setParameter("ceiling", readingtotimestamp);
        List<Object[]> tmpl = forumPosts.list();
        if (this.forumPostsLms == null)
            this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setId(((BigInteger) obj[0]).longValue());
            } else {
                p.setId(((Integer) obj[0]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setUserid(((BigInteger) obj[1]).longValue());
            } else {
                p.setUserid(((Integer) obj[1]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setCreated(((BigInteger) obj[2]).longValue());
            } else {
                p.setCreated(((Integer) obj[2]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setModified(((BigInteger) obj[3]).longValue());
            } else {
                p.setModified(((Integer) obj[3]).longValue());
            }
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setDiscussion(((BigInteger) obj[6]).longValue());
            } else {
                p.setDiscussion(((Integer) obj[6]).longValue());
            }
            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsLMS tables: " + this.forumPostsLms.size());

    final Query forumPostsModified;
    if (!hasCR) {
        forumPostsModified = session.createQuery(
                "from ForumPostsLMS x where x.modified>=:readingtimestamp and x.modified<=:ceiling order by x.id asc");
        this.forumPostsLms.addAll(forumPostsModified.list());
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPostsModified = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message from mdl_forum_posts as posts JOIN mdl_log as logs ON posts.userid = logs.userid Where logs.course in "
                        + courseClause
                        + " and (posts.created = logs.time or posts.modified = logs.time) AND posts.modified>=:readingtimestamp and posts.modified<=:ceiling");
        forumPostsModified.setParameter("readingtimestamp", readingfromtimestamp);
        forumPostsModified.setParameter("ceiling", readingtotimestamp);
        List<Object[]> tmpl = forumPostsModified.list();
        if (this.forumPostsLms == null)
            this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            p.setId(((Integer) obj[0]).longValue());
            p.setUserid(((Integer) obj[1]).longValue());
            p.setCreated(((Integer) obj[2]).longValue());
            p.setModified(((Integer) obj[3]).longValue());
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);

            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsModifiedLMS tables: " + this.forumPostsLms.size());

    session.clear();

    criteria = session.createCriteria(AssignGradesLMS.class, "obj");
    if (hasCR) {
        List<Long> tmp = new ArrayList<Long>();
        for (AssignLMS assign : assignLms) {
            tmp.add(assign.getId());
        }

        if (!(empty = tmp.isEmpty()))
            criteria.add(Restrictions.in("obj.assignment", tmp));
    }
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.assignGradesLms = criteria.list();
    else
        this.assignGradesLms = new ArrayList<AssignGradesLMS>();
    logger.info("AssignGradesLMS tables: " + this.assignGradesLms.size());

    criteria = session.createCriteria(GroupsMembersLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GroupsLMS e : this.groupLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.groupid", ids));
    }
    criteria.add(Restrictions.lt("obj.timeadded", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timeadded", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.groupMembersLms = criteria.list();
    else
        this.groupMembersLms = new ArrayList<GroupsMembersLMS>();
    logger.info("GroupsMembersLMS tables: " + this.groupMembersLms.size());

    criteria = session.createCriteria(QuestionStatesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
            ids.add(e.getQuestion());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.question", ids));
    }
    criteria.add(Restrictions.lt("obj.timestamp", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.questionStatesLms = criteria.list();
    else
        this.questionStatesLms = new ArrayList<QuestionStatesLMS>();
    logger.info("QuestionStatesLMS tables: " + this.questionStatesLms.size());

    /*
    criteria = session.createCriteria(AssignmentSubmissionsLMS.class, "obj");
    if(hasCR)
    {
       ArrayList<Long> ids = new ArrayList<Long>();
        for(AssignmentLMS e : this.assignmentLms)
     ids.add(e.getId());
        if(!(empty = ids.isEmpty()))
     criteria.add(Restrictions.in("obj.id", ids));
    }
    criteria.add(Restrictions.lt("obj.timecreated", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timecreated", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if(!(hasCR && empty))
       this.assignmentSubmissionLms = criteria.list();
    else
       this.assignmentSubmissionLms = new ArrayList<AssignmentSubmissionsLMS>();
    logger.info("AssignmentSubmissionsLMS tables: " + this.userLms.size());
     */

    criteria = session.createCriteria(QuizGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.quiz", ids));
    }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizGradesLms = criteria.list();
    else
        this.quizGradesLms = new ArrayList<QuizGradesLMS>();
    logger.info("QuizGradesLMS tables: " + this.quizGradesLms.size());

    criteria = session.createCriteria(ForumDiscussionsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ForumLMS e : this.forumLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.forum", ids));
    }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.forumDiscussionsLms = criteria.list();
    else
        this.forumDiscussionsLms = new ArrayList<ForumDiscussionsLMS>();
    logger.info("ForumDiscussionsLMS tables: " + this.forumDiscussionsLms.size());

    criteria = session.createCriteria(GradeGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GradeItemsLMS e : this.gradeItemsLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.itemid", ids));
    }
    //criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.gradeGradesLms = criteria.list();
    else
        this.gradeGradesLms = new ArrayList<GradeGradesLMS>();
    logger.info("GradeGradesLMS tables: " + this.gradeGradesLms.size());

    session.clear();

    // hibernate session finish and close
    tx.commit();
    session.close();

}

From source file:de.lemo.dms.connectors.moodle_2_7.ExtractAndMapMoodle.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public void getLMStables(final DBConfigObject dbConfig, final long readingfromtimestamp, List<Long> courses,
        List<String> logins) {

    // accessing DB by creating a session and a transaction using HibernateUtil
    final Session session = HibernateUtil.getSessionFactory(dbConfig).openSession();
    session.clear();//from   ww w  .  j  a  va  2 s. c  o  m
    final Transaction tx = session.beginTransaction();

    boolean hasCR = false;
    if (courses != null && courses.size() > 0)
        hasCR = true;
    else
        courses = new ArrayList<Long>();

    boolean empty = false;

    //Read Context
    Criteria criteria = session.createCriteria(ContextLMS.class, "obj");
    List<Long> contextLevels = new ArrayList<Long>();
    contextLevels.add(40L);
    contextLevels.add(50L);

    criteria.add(Restrictions.in("obj.contextlevel", contextLevels));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.contextLms = criteria.list();
    logger.info("ContextLMS tables: " + this.contextLms.size());

    if (logins != null && !logins.isEmpty()) {
        List<String> archetypes = new ArrayList<String>();
        List<Long> roleIds = new ArrayList<Long>();
        List<String> userIds = new ArrayList<String>();

        archetypes.add("manager");
        archetypes.add("coursecreator");
        archetypes.add("teacher");
        archetypes.add("editingteacher");

        criteria = session.createCriteria(RoleLMS.class, "obj");
        criteria.add(Restrictions.in("obj.archetype", archetypes));
        for (RoleLMS role : (List<RoleLMS>) criteria.list())
            roleIds.add(role.getId());

        criteria = session.createCriteria(UserLMS.class, "obj");
        criteria.add(Restrictions.in("obj.username", logins));
        for (UserLMS user : (List<UserLMS>) criteria.list())
            userIds.add(user.getId() + "");

        criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
        criteria.add(Restrictions.in("obj.userid", userIds));
        criteria.add(Restrictions.in("obj.roleid", roleIds));
        for (ContextLMS c : this.contextLms) {
            for (RoleAssignmentsLMS ra : (List<RoleAssignmentsLMS>) criteria.list()) {
                if (c.getContextlevel() == 50 && c.getId() == ra.getContextid()) {
                    courses.add(c.getInstanceid());
                    hasCR = true;
                }
            }
        }
    }

    // reading the LMS Database, create tables as lists of instances of the DB-table classes
    criteria = session.createCriteria(AssignLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.assignLms = criteria.list();
    logger.info("AssignLMS tables: " + this.assignLms.size());

    //Read RoleAssignments
    criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ContextLMS c : this.contextLms) {
            if (c.getContextlevel() == 50 && courses.contains(c.getInstanceid()))
                ids.add(c.getId());
        }
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.contextid", ids));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.roleAssignmentsLms = criteria.list();
    else
        this.roleAssignmentsLms = new ArrayList<RoleAssignmentsLMS>();
    logger.info("RoleAssignmentsLMS tables: " + this.roleAssignmentsLms.size());

    //Read Assign
    criteria = session.createCriteria(AssignGradesLMS.class, "obj");
    if (hasCR) {
        List<Long> tmp = new ArrayList<Long>();
        for (AssignLMS assign : assignLms) {
            tmp.add(assign.getId());
        }
        if (!(empty = tmp.isEmpty()))
            criteria.add(Restrictions.in("obj.assignment", tmp));
    }
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.assignGradesLms = criteria.list();
    else
        this.assignGradesLms = new ArrayList<AssignGradesLMS>();
    logger.info("AssignGradesLMS tables: " + this.assignGradesLms.size());

    //Read Enrol
    criteria = session.createCriteria(EnrolLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.courseid", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.enrolLms = criteria.list();
    logger.info("EnrolLMS tables: " + this.enrolLms.size());

    //Read Modules
    criteria = session.createCriteria(ModulesLMS.class, "obj");
    criteria.addOrder(Property.forName("obj.id").asc());
    this.modulesLms = criteria.list();
    logger.info("ModulesLMS tables: " + this.modulesLms.size());

    //Read UserEnrolments
    criteria = session.createCriteria(UserEnrolmentsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (EnrolLMS e : this.enrolLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.enrolid", ids));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.userEnrolmentsLms = criteria.list();
    else
        this.userEnrolmentsLms = new ArrayList<UserEnrolmentsLMS>();
    logger.info("UserEnrolmentsLMS tables: " + this.userEnrolmentsLms.size());

    //Read CourseModules
    criteria = session.createCriteria(CourseModulesLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseModulesLms = criteria.list();
    logger.info("CourseModulesLMS tables: " + this.courseModulesLms.size());

    //Read Log
    criteria = session.createCriteria(LogstoreStandardLogLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.course", courses));
    }
    criteria.add(Restrictions.gt("obj.timecreated", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.timecreated").asc());
    this.logstoreLms = criteria.list();
    logger.info("LogLMS tables: " + this.logstoreLms.size());

    //Read Resource
    criteria = session.createCriteria(ResourceLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.resourceLms = criteria.list();
    logger.info("ResourceLMS tables: " + this.resourceLms.size());

    //Read Urls
    criteria = session.createCriteria(UrlLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.urlLms = criteria.list();
    logger.info("UrlLMS tables: " + this.urlLms.size());

    //Read Pages
    criteria = session.createCriteria(PageLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.pageLms = criteria.list();
    logger.info("PageLMS tables: " + this.pageLms.size());

    //Read Quiz
    criteria = session.createCriteria(QuizLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.quizLms = criteria.list();
    logger.info("QuizLMS tables: " + this.quizLms.size());

    //Read QuizAttempts
    criteria = session.createCriteria(QuizAttemptsLMS.class, "obj");
    if (hasCR)
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (QuizLMS e : this.quizLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.quiz", ids));
        }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizAttemptsLms = criteria.list();
    else
        this.quizAttemptsLms = new ArrayList<QuizAttemptsLMS>();
    logger.info("QuizAttemptsLMS tables: " + this.quizAttemptsLms.size());

    //Read Chats
    criteria = session.createCriteria(ChatLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.chatLms = criteria.list();
    logger.info("ChatLMS tables: " + this.chatLms.size());

    //Read ChatLog
    criteria = session.createCriteria(ChatLogLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ChatLMS e : this.chatLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.chat", ids));
    }
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.chatLogLms = criteria.list();
    else
        this.chatLogLms = new ArrayList<ChatLogLMS>();
    logger.info("ChatLogLMS tables: " + this.chatLogLms.size());

    criteria = session.createCriteria(CourseCategoriesLMS.class, "obj");

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseCategoriesLms = criteria.list();
    logger.info("CourseCategoriesLMS tables: " + this.courseCategoriesLms.size());

    criteria = session.createCriteria(CourseLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.id", courses));

    criteria.addOrder(Property.forName("obj.id").asc());
    this.courseLms = criteria.list();
    logger.info("CourseLMS tables: " + this.courseLms.size());

    final Query forumPosts;
    if (!hasCR) {
        forumPosts = session
                .createQuery("from ForumPostsLMS x where x.modified>=:readingtimestamp order by x.id asc");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        this.forumPostsLms = forumPosts.list();
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPosts = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message,posts.discussion from mdl_forum_posts as posts JOIN mdl_logstore_standard_log as logs ON posts.userid = logs.userid Where logs.courseid in "
                        + courseClause
                        + " and (posts.created = logs.timecreated or posts.modified = logs.timecreated) AND posts.modified>=:readingtimestamp");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        List<Object[]> tmpl = forumPosts.list();
        this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setId(((BigInteger) obj[0]).longValue());
            } else {
                p.setId(((Integer) obj[0]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setUserid(((BigInteger) obj[1]).longValue());
            } else {
                p.setUserid(((Integer) obj[1]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setCreated(((BigInteger) obj[2]).longValue());
            } else {
                p.setCreated(((Integer) obj[2]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setModified(((BigInteger) obj[3]).longValue());
            } else {
                p.setModified(((Integer) obj[3]).longValue());
            }
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setDiscussion(((BigInteger) obj[6]).longValue());
            } else {
                p.setDiscussion(((Integer) obj[6]).longValue());
            }
            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsLMS tables: " + this.forumPostsLms.size());

    criteria = session.createCriteria(ForumLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.forumLms = criteria.list();
    logger.info("ForumLMS tables: " + this.forumLms.size());

    criteria = session.createCriteria(GroupsLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.courseid", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.groupLms = criteria.list();
    logger.info("GroupsLMS tables: " + this.groupLms.size());

    criteria = session.createCriteria(WikiLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.wikiLms = criteria.list();
    logger.info("WikiLMS tables: " + this.wikiLms.size());

    criteria = session.createCriteria(WikiPagesLMS.class, "obj");
    if (hasCR && !this.wikiLms.isEmpty()) {
        Set<Long> wikiids = new HashSet<Long>();
        for (WikiLMS wiki : this.wikiLms) {
            wikiids.add(wiki.getId());
        }
        criteria.add(Restrictions.in("obj.subwikiid", wikiids));
    }
    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.wikiPagesLms = criteria.list();
    logger.info("WikiPagesLMS tables: " + this.wikiPagesLms.size());

    criteria = session.createCriteria(GroupsMembersLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GroupsLMS e : this.groupLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.groupid", ids));
    }
    //criteria.add(Restrictions.gt("obj.timeadded", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.groupMembersLms = criteria.list();
    else
        this.groupMembersLms = new ArrayList<GroupsMembersLMS>();
    logger.info("GroupsMembersLMS tables: " + this.groupMembersLms.size());

    /*      criteria = session.createCriteria(QuestionStatesLMS.class, "obj");
          if(hasCR)
          {
             ArrayList<Long> ids = new ArrayList<Long>();
              for(QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
     ids.add(e.getQuestion());
              if(!(empty = ids.isEmpty()))
     criteria.add(Restrictions.in("obj.question", ids));
          }
          criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
          criteria.addOrder(Property.forName("obj.id").asc());
          if(!(hasCR && empty))
             this.questionStatesLms = criteria.list();
          else
             this.questionStatesLms = new ArrayList<QuestionStatesLMS>();
          logger.info("QuestionStatesLMS tables: " + this.questionStatesLms.size());
          */

    /*
          criteria = session.createCriteria(QuestionLMS.class, "obj");
          if(hasCR)
          {
             ArrayList<Long> ids = new ArrayList<Long>();
              for(QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
     ids.add(e.getQuestion());
              if(!(empty = ids.isEmpty()))
     criteria.add(Restrictions.in("obj.id", ids));
          }
                  
          //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
          criteria.addOrder(Property.forName("obj.id").asc());
          if(!(hasCR && empty))
             this.questionLms = criteria.list();
          else
             this.questionLms = new ArrayList<QuestionLMS>();
          logger.info("QuestionLMS tables: " + this.questionLms.size());
                  
    */

    criteria = session.createCriteria(UserLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (RoleAssignmentsLMS e : this.roleAssignmentsLms)
            ids.add(Long.valueOf(e.getUserid()));
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.id", ids));
    }
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.userLms = criteria.list();
    else
        this.userLms = new ArrayList<UserLMS>();
    logger.info("UserLMS tables: " + this.userLms.size());

    criteria = session.createCriteria(RoleLMS.class, "obj");
    criteria.addOrder(Property.forName("obj.id").asc());
    this.roleLms = criteria.list();
    logger.info("RoleLMS tables: " + this.roleLms.size());

    criteria = session.createCriteria(QuizGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.quiz", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizGradesLms = criteria.list();
    else
        this.quizGradesLms = new ArrayList<QuizGradesLMS>();
    logger.info("QuizGradesLMS tables: " + this.quizGradesLms.size());

    criteria = session.createCriteria(ForumDiscussionsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ForumLMS e : this.forumLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.forum", ids));
    }

    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.forumDiscussionsLms = criteria.list();
    else
        this.forumDiscussionsLms = new ArrayList<ForumDiscussionsLMS>();
    logger.info("ForumDiscussionsLMS tables: " + this.forumDiscussionsLms.size());

    criteria = session.createCriteria(ScormLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.course", courses));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.scormLms = criteria.list();
    logger.info("ScormLMS tables: " + this.scormLms.size());

    criteria = session.createCriteria(GradeItemsLMS.class, "obj");
    if (hasCR) {
        criteria.add(Restrictions.in("obj.courseid", courses));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.gradeItemsLms = criteria.list();
    logger.info("GradeItemsLMS tables: " + this.gradeItemsLms.size());

    criteria = session.createCriteria(GradeGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GradeItemsLMS e : this.gradeItemsLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.itemid", ids));
    }

    //criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.gradeGradesLms = criteria.list();
    else
        this.gradeGradesLms = new ArrayList<GradeGradesLMS>();
    logger.info("GradeGradesLMS tables: " + this.gradeGradesLms.size());

    // hibernate session finish and close
    tx.commit();
    session.close();

}

From source file:de.lemo.dms.connectors.moodle_2_7.ExtractAndMapMoodle.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public void getLMStables(final DBConfigObject dbConf, final long readingfromtimestamp,
        final long readingtotimestamp, List<Long> courses, List<String> logins) {

    // accessing DB by creating a session and a transaction using HibernateUtil
    final Session session = HibernateUtil.getSessionFactory(dbConf).openSession();
    // Session session = HibernateUtil.getDynamicSourceDBFactoryMoodle("jdbc:mysql://localhost/moodle19",
    session.clear();/*from w w  w .ja  va  2s.c om*/
    final Transaction tx = session.beginTransaction();

    // reading the LMS Database, create tables as lists of instances of the DB-table classes
    Criteria criteria;
    boolean hasCR = false;
    if (courses != null && courses.size() > 0)
        hasCR = true;

    boolean empty = false;

    if (this.userLms == null) {

        //Read Context
        criteria = session.createCriteria(ContextLMS.class, "obj");
        List<Long> contextLevels = new ArrayList<Long>();
        contextLevels.add(40L);
        contextLevels.add(50L);

        criteria.add(Restrictions.in("obj.contextlevel", contextLevels));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.contextLms = criteria.list();
        logger.info("ContextLMS tables: " + this.contextLms.size());

        if (logins != null && !logins.isEmpty()) {
            List<String> archetypes = new ArrayList<String>();
            List<Long> roleIds = new ArrayList<Long>();
            List<String> userIds = new ArrayList<String>();

            archetypes.add("manager");
            archetypes.add("coursecreator");
            archetypes.add("teacher");
            archetypes.add("editingteacher");

            criteria = session.createCriteria(RoleLMS.class, "obj");
            criteria.add(Restrictions.in("obj.archetype", archetypes));
            for (RoleLMS role : (List<RoleLMS>) criteria.list())
                roleIds.add(role.getId());

            criteria = session.createCriteria(UserLMS.class, "obj");
            criteria.add(Restrictions.in("obj.username", logins));
            for (UserLMS user : (List<UserLMS>) criteria.list())
                userIds.add(user.getId() + "");

            criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
            criteria.add(Restrictions.in("obj.userid", userIds));
            criteria.add(Restrictions.in("obj.roleid", roleIds));
            for (ContextLMS c : this.contextLms) {
                for (RoleAssignmentsLMS ra : (List<RoleAssignmentsLMS>) criteria.list()) {
                    if (c.getContextlevel() == 50 && c.getId() == ra.getContextid()) {
                        courses.add(c.getInstanceid());
                        hasCR = true;
                    }
                }
            }

        }

        criteria = session.createCriteria(AssignLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.assignLms = criteria.list();
        logger.info("AssignLMS tables: " + this.assignLms.size());

        criteria = session.createCriteria(EnrolLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.courseid", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.enrolLms = criteria.list();
        logger.info("EnrolLMS tables: " + this.enrolLms.size());

        criteria = session.createCriteria(ModulesLMS.class, "obj");
        criteria.addOrder(Property.forName("obj.id").asc());
        this.modulesLms = criteria.list();
        logger.info("ModulesLMS tables: " + this.modulesLms.size());

        criteria = session.createCriteria(UserEnrolmentsLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (EnrolLMS e : this.enrolLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.enrolid", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.userEnrolmentsLms = criteria.list();
        else
            this.userEnrolmentsLms = new ArrayList<UserEnrolmentsLMS>();
        logger.info("UserEnrolmentsLMS tables: " + this.userEnrolmentsLms.size());

        criteria = session.createCriteria(CourseModulesLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.courseModulesLms = criteria.list();
        logger.info("CourseModulesLMS tables: " + this.courseModulesLms.size());

        criteria = session.createCriteria(ResourceLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.resourceLms = criteria.list();
        logger.info("ResourceLMS tables: " + this.resourceLms.size());

        //Read Urls
        criteria = session.createCriteria(UrlLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));

        criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.urlLms = criteria.list();
        logger.info("UrlLMS tables: " + this.urlLms.size());

        //Read Pages
        criteria = session.createCriteria(PageLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));

        criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.pageLms = criteria.list();
        logger.info("UrlLMS tables: " + this.pageLms.size());

        criteria = session.createCriteria(CourseLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.id", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.courseLms = criteria.list();
        logger.info("CourseLMS tables: " + this.courseLms.size());

        criteria = session.createCriteria(ChatLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.chatLms = criteria.list();
        logger.info("ChatLMS tables: " + this.chatLms.size());

        criteria = session.createCriteria(CourseCategoriesLMS.class, "obj");
        criteria.addOrder(Property.forName("obj.id").asc());
        this.courseCategoriesLms = criteria.list();
        logger.info("CourseCategoriesLMS tables: " + this.courseCategoriesLms.size());

        criteria = session.createCriteria(ForumLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.forumLms = criteria.list();
        logger.info("ForumLMS tables: " + this.forumLms.size());

        criteria = session.createCriteria(GroupsLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.courseid", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.groupLms = criteria.list();
        logger.info("GroupsLMS tables: " + this.groupLms.size());

        criteria = session.createCriteria(QuizLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.quizLms = criteria.list();
        logger.info("QuizLMS tables: " + this.quizLms.size());

        criteria = session.createCriteria(WikiLMS.class, "obj");
        if (hasCR)
            criteria.add(Restrictions.in("obj.course", courses));
        criteria.addOrder(Property.forName("obj.id").asc());
        this.wikiLms = criteria.list();
        logger.info("WikiLMS tables: " + this.wikiLms.size());

        /*
        criteria = session.createCriteria(QuizQuestionInstancesLMS.class, "obj");
        if(hasCR)
        {
           ArrayList<Long> ids = new ArrayList<Long>();
            for(QuizLMS e : this.quizLms)
        ids.add(e.getId());
            if(!(empty = ids.isEmpty()))
        criteria.add(Restrictions.in("obj.quiz", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if(!(hasCR && empty))
           this.quizQuestionInstancesLms = criteria.list();
        else
           this.quizQuestionInstancesLms = new ArrayList<QuizQuestionInstancesLMS>();
        logger.info("QuizQuestionInstancesLMS tables: " + this.quizQuestionInstancesLms.size());
        */
        /*
                 criteria = session.createCriteria(QuestionLMS.class, "obj");
                 if(hasCR)
                 {
                    ArrayList<Long> ids = new ArrayList<Long>();
                     for(QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
        ids.add(e.getQuestion());
                     if(!(empty = ids.isEmpty()))
        criteria.add(Restrictions.in("obj.id", ids));
                 }
                 criteria.addOrder(Property.forName("obj.id").asc());
                 if(!(hasCR && empty))
                    this.questionLms = criteria.list();
                 else
                    this.questionLms = new ArrayList<QuestionLMS>();
                 logger.info("QuestionLMS tables: " + this.questionLms.size());
        */

        criteria = session.createCriteria(RoleLMS.class, "obj");
        criteria.addOrder(Property.forName("obj.id").asc());
        this.roleLms = criteria.list();
        logger.info("RoleLMS tables: " + this.roleLms.size());

        session.clear();

        /*
        criteria = session.createCriteria(AssignmentLMS.class, "obj");
        if(hasCR)
        {
           criteria.add(Restrictions.in("obj.course", courses));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        this.assignmentLms = criteria.list();
        logger.info("AssignmentLMS tables: " + this.assignmentLms.size());
        */
        criteria = session.createCriteria(ScormLMS.class, "obj");
        if (hasCR) {
            criteria.add(Restrictions.in("obj.course", courses));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        this.scormLms = criteria.list();
        logger.info("ScormLMS tables: " + this.scormLms.size());

        criteria = session.createCriteria(GradeItemsLMS.class, "obj");
        if (hasCR) {
            criteria.add(Restrictions.in("obj.courseid", courses));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        this.gradeItemsLms = criteria.list();
        logger.info("GradeItemsLMS tables: " + this.gradeItemsLms.size());

        criteria = session.createCriteria(RoleAssignmentsLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (ContextLMS c : this.contextLms) {
                if (c.getContextlevel() == 50 && courses.contains(c.getInstanceid()))
                    ids.add(c.getId());
            }
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.contextid", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.roleAssignmentsLms = criteria.list();
        else
            this.roleAssignmentsLms = new ArrayList<RoleAssignmentsLMS>();
        logger.info("RoleAssignmentsLMS tables: " + this.roleAssignmentsLms.size());

        criteria = session.createCriteria(UserLMS.class, "obj");
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (RoleAssignmentsLMS e : this.roleAssignmentsLms)
                ids.add(Long.valueOf(e.getUserid()));
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.id", ids));
        }
        criteria.addOrder(Property.forName("obj.id").asc());
        if (!(hasCR && empty))
            this.userLms = criteria.list();
        else
            this.userLms = new ArrayList<UserLMS>();
        logger.info("UserLMS tables: " + this.userLms.size());
    }

    criteria = session.createCriteria(QuizAttemptsLMS.class, "obj");
    if (hasCR)
        if (hasCR) {
            ArrayList<Long> ids = new ArrayList<Long>();
            for (QuizLMS e : this.quizLms)
                ids.add(e.getId());
            if (!(empty = ids.isEmpty()))
                criteria.add(Restrictions.in("obj.quiz", ids));
        }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizAttemptsLms = criteria.list();
    else
        this.quizAttemptsLms = new ArrayList<QuizAttemptsLMS>();
    logger.info("QuizAttemptsLMS tables: " + this.quizAttemptsLms.size());

    criteria = session.createCriteria(LogstoreStandardLogLMS.class, "obj");
    if (hasCR)
        criteria.add(Restrictions.in("obj.course", courses));
    criteria.add(Restrictions.lt("obj.time", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.time", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    this.logstoreLms = criteria.list();
    logger.info("LogLMS tables: " + this.logstoreLms.size());

    criteria = session.createCriteria(ChatLogLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ChatLMS e : this.chatLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.chat", ids));
    }
    criteria.add(Restrictions.lt("obj.timestamp", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.chatLogLms = criteria.list();
    else
        this.chatLogLms = new ArrayList<ChatLogLMS>();
    logger.info("ChatLogLMS tables: " + this.chatLogLms.size());

    final Query forumPosts;
    if (!hasCR) {
        forumPosts = session.createQuery(
                "from ForumPostsLMS x where x.created>=:readingtimestamp and x.created<=:ceiling order by x.id asc");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        forumPosts.setParameter("ceiling", readingtotimestamp);
        this.forumPostsLms = forumPosts.list();
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPosts = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message,posts.discussion from forum_posts as posts JOIN logstore_standard_log as logs ON posts.userid = logs.userid Where logs.courseid in "
                        + courseClause
                        + " and (posts.created = logs.timecreated or posts.modified = logs.timecreated) AND posts.created>=:readingtimestamp and posts.created<=:ceiling");
        forumPosts.setParameter("readingtimestamp", readingfromtimestamp);
        forumPosts.setParameter("ceiling", readingtotimestamp);
        List<Object[]> tmpl = forumPosts.list();
        if (this.forumPostsLms == null)
            this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setId(((BigInteger) obj[0]).longValue());
            } else {
                p.setId(((Integer) obj[0]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setUserid(((BigInteger) obj[1]).longValue());
            } else {
                p.setUserid(((Integer) obj[1]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setCreated(((BigInteger) obj[2]).longValue());
            } else {
                p.setCreated(((Integer) obj[2]).longValue());
            }
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setModified(((BigInteger) obj[3]).longValue());
            } else {
                p.setModified(((Integer) obj[3]).longValue());
            }
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);
            if (obj[0].getClass().equals(BigInteger.class)) {
                p.setDiscussion(((BigInteger) obj[6]).longValue());
            } else {
                p.setDiscussion(((Integer) obj[6]).longValue());
            }
            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsLMS tables: " + this.forumPostsLms.size());

    final Query forumPostsModified;
    if (!hasCR) {
        forumPostsModified = session.createQuery(
                "from ForumPostsLMS x where x.modified>=:readingtimestamp and x.modified<=:ceiling order by x.id asc");
        this.forumPostsLms.addAll(forumPostsModified.list());
    } else {
        String courseClause = "(";
        for (int i = 0; i < courses.size(); i++) {
            courseClause += courses.get(i);
            if (i < courses.size() - 1)
                courseClause += ",";
            else
                courseClause += ")";
        }
        forumPostsModified = session.createSQLQuery(
                "SELECT posts.id,posts.userid,posts.created,posts.modified,posts.subject,posts.message from mdl_forum_posts as posts JOIN mdl_log as logs ON posts.userid = logs.userid Where logs.course in "
                        + courseClause
                        + " and (posts.created = logs.time or posts.modified = logs.time) AND posts.modified>=:readingtimestamp and posts.modified<=:ceiling");
        forumPostsModified.setParameter("readingtimestamp", readingfromtimestamp);
        forumPostsModified.setParameter("ceiling", readingtotimestamp);
        List<Object[]> tmpl = forumPostsModified.list();
        if (this.forumPostsLms == null)
            this.forumPostsLms = new ArrayList<ForumPostsLMS>();
        for (Object[] obj : tmpl) {
            ForumPostsLMS p = new ForumPostsLMS();
            p.setId(((Integer) obj[0]).longValue());
            p.setUserid(((Integer) obj[1]).longValue());
            p.setCreated(((Integer) obj[2]).longValue());
            p.setModified(((Integer) obj[3]).longValue());
            p.setSubject((String) obj[4]);
            p.setMessage((String) obj[5]);

            this.forumPostsLms.add(p);

        }
    }
    logger.info("ForumPostsModifiedLMS tables: " + this.forumPostsLms.size());

    session.clear();

    criteria = session.createCriteria(AssignGradesLMS.class, "obj");
    if (hasCR) {
        List<Long> tmp = new ArrayList<Long>();
        for (AssignLMS assign : assignLms) {
            tmp.add(assign.getId());
        }

        if (!(empty = tmp.isEmpty()))
            criteria.add(Restrictions.in("obj.assignment", tmp));
    }
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.assignGradesLms = criteria.list();
    else
        this.assignGradesLms = new ArrayList<AssignGradesLMS>();
    logger.info("AssignGradesLMS tables: " + this.assignGradesLms.size());

    criteria = session.createCriteria(GroupsMembersLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GroupsLMS e : this.groupLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.groupid", ids));
    }
    criteria.add(Restrictions.lt("obj.timeadded", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timeadded", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.groupMembersLms = criteria.list();
    else
        this.groupMembersLms = new ArrayList<GroupsMembersLMS>();
    logger.info("GroupsMembersLMS tables: " + this.groupMembersLms.size());

    /*
    criteria = session.createCriteria(QuestionStatesLMS.class, "obj");
    if(hasCR)
    {
       ArrayList<Long> ids = new ArrayList<Long>();
        for(QuizQuestionInstancesLMS e : this.quizQuestionInstancesLms)
     ids.add(e.getQuestion());
        if(!(empty = ids.isEmpty()))
     criteria.add(Restrictions.in("obj.question", ids));
    }
    criteria.add(Restrictions.lt("obj.timestamp", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timestamp", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if(!(hasCR && empty))
       this.questionStatesLms = criteria.list();
    else
       this.questionStatesLms = new ArrayList<QuestionStatesLMS>();
    logger.info("QuestionStatesLMS tables: " + this.questionStatesLms.size());
    */

    /*
    criteria = session.createCriteria(AssignmentSubmissionsLMS.class, "obj");
    if(hasCR)
    {
       ArrayList<Long> ids = new ArrayList<Long>();
        for(AssignmentLMS e : this.assignmentLms)
     ids.add(e.getId());
        if(!(empty = ids.isEmpty()))
     criteria.add(Restrictions.in("obj.id", ids));
    }
    criteria.add(Restrictions.lt("obj.timecreated", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timecreated", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if(!(hasCR && empty))
       this.assignmentSubmissionLms = criteria.list();
    else
       this.assignmentSubmissionLms = new ArrayList<AssignmentSubmissionsLMS>();
    logger.info("AssignmentSubmissionsLMS tables: " + this.userLms.size());
     */

    criteria = session.createCriteria(QuizGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (QuizLMS e : this.quizLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.quiz", ids));
    }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.quizGradesLms = criteria.list();
    else
        this.quizGradesLms = new ArrayList<QuizGradesLMS>();
    logger.info("QuizGradesLMS tables: " + this.quizGradesLms.size());

    criteria = session.createCriteria(ForumDiscussionsLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (ForumLMS e : this.forumLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.forum", ids));
    }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.forumDiscussionsLms = criteria.list();
    else
        this.forumDiscussionsLms = new ArrayList<ForumDiscussionsLMS>();
    logger.info("ForumDiscussionsLMS tables: " + this.forumDiscussionsLms.size());

    criteria = session.createCriteria(GradeGradesLMS.class, "obj");
    if (hasCR) {
        ArrayList<Long> ids = new ArrayList<Long>();
        for (GradeItemsLMS e : this.gradeItemsLms)
            ids.add(e.getId());
        if (!(empty = ids.isEmpty()))
            criteria.add(Restrictions.in("obj.itemid", ids));
    }
    criteria.add(Restrictions.lt("obj.timemodified", readingtotimestamp));
    criteria.add(Restrictions.gt("obj.timemodified", readingfromtimestamp));
    criteria.addOrder(Property.forName("obj.id").asc());
    if (!(hasCR && empty))
        this.gradeGradesLms = criteria.list();
    else
        this.gradeGradesLms = new ArrayList<GradeGradesLMS>();
    logger.info("GradeGradesLMS tables: " + this.gradeGradesLms.size());

    session.clear();

    // hibernate session finish and close
    tx.commit();
    session.close();

}

From source file:de.sub.goobi.forms.AktuelleSchritteForm.java

License:Open Source License

/**
 * Report the problem./*  w  w w.  j a v a  2  s . c o m*/
 *
 * @return problem as String
 */
@SuppressWarnings("unchecked")
public String ReportProblem() {
    User ben = (User) Helper.getManagedBeanValue("#{LoginForm.myBenutzer}");
    if (ben == null) {
        Helper.setFehlerMeldung("userNotFound");
        return "";
    }
    if (myLogger.isDebugEnabled()) {
        myLogger.debug("mySchritt.ID: " + this.mySchritt.getId());
        myLogger.debug("Korrekturschritt.ID: " + this.myProblemID);
    }
    this.myDav.UploadFromHome(this.mySchritt.getProcess());
    Date myDate = new Date();
    this.mySchritt.setProcessingStatusEnum(TaskStatus.LOCKED);
    this.mySchritt.setEditTypeEnum(TaskEditType.MANUAL_SINGLE);
    mySchritt.setProcessingTime(new Date());
    mySchritt.setProcessingUser(ben);
    this.mySchritt.setProcessingBegin(null);

    try {
        Task temp = serviceManager.getTaskService().find(this.myProblemID);
        temp.setProcessingStatusEnum(TaskStatus.OPEN);
        temp = serviceManager.getTaskService().setCorrectionStep(temp);
        temp.setProcessingEnd(null);

        org.kitodo.data.database.beans.ProcessProperty pe = new org.kitodo.data.database.beans.ProcessProperty();
        pe.setTitle(Helper.getTranslation("Korrektur notwendig"));
        pe.setValue("[" + this.formatter.format(new Date()) + ", "
                + serviceManager.getUserService().getFullName(ben) + "] " + this.problemMessage);
        pe.setType(PropertyType.messageError);
        pe.setProcess(this.mySchritt.getProcess());
        this.mySchritt.getProcess().getProperties().add(pe);

        String message = Helper.getTranslation("KorrekturFuer") + " " + temp.getTitle() + ": "
                + this.problemMessage + " (" + serviceManager.getUserService().getFullName(ben) + ")";
        this.mySchritt.getProcess().setWikiField(WikiFieldHelper.getWikiMessage(this.mySchritt.getProcess(),
                this.mySchritt.getProcess().getWikiField(), "error", message));
        serviceManager.getTaskService().save(temp);
        serviceManager.getProcessService().getHistoryInitialized(this.mySchritt.getProcess())
                .add(new History(myDate, temp.getOrdering().doubleValue(), temp.getTitle(),
                        HistoryType.taskError, temp.getProcess()));
        /*
         * alle Schritte zwischen dem aktuellen und dem Korrekturschritt
         * wieder schliessen
         */
        List<Task> alleSchritteDazwischen = Helper.getHibernateSession().createCriteria(Task.class)
                .add(Restrictions.le("ordering", this.mySchritt.getOrdering()))
                .add(Restrictions.gt("ordering", temp.getOrdering())).addOrder(Order.asc("ordering"))
                .createCriteria("process").add(Restrictions.idEq(this.mySchritt.getProcess().getId())).list();
        for (Iterator<Task> iter = alleSchritteDazwischen.iterator(); iter.hasNext();) {
            Task step = iter.next();
            step.setProcessingStatusEnum(TaskStatus.LOCKED);
            step = serviceManager.getTaskService().setCorrectionStep(step);
            step.setProcessingEnd(null);
            serviceManager.getTaskService().save(step);
        }

        /*
         * den Prozess aktualisieren, so dass der Sortierungshelper
         * gespeichert wird
         */
        this.serviceManager.getProcessService().save(this.mySchritt.getProcess());
    } catch (DAOException | IOException | ResponseException e) {
        myLogger.error("task couldn't get saved/inserted", e);
    }

    this.problemMessage = "";
    this.myProblemID = 0;
    return FilterAlleStart();
}

From source file:de.sub.goobi.forms.AktuelleSchritteForm.java

License:Open Source License

/**
 * Problem-behoben-Meldung an nachfolgende Schritte.
 */// www .j  a  v a2 s .  c  om
@SuppressWarnings("unchecked")
public List<Task> getNextStepsForProblemSolution() {
    List<Task> alleNachfolgendenSchritte = Helper.getHibernateSession().createCriteria(Task.class)
            .add(Restrictions.gt("ordering", this.mySchritt.getOrdering())).add(Restrictions.eq("priority", 10))
            .addOrder(Order.asc("ordering")).createCriteria("process")
            .add(Restrictions.idEq(this.mySchritt.getProcess().getId())).list();
    return alleNachfolgendenSchritte;
}

From source file:de.sub.goobi.helper.BatchStepHelper.java

License:Open Source License

private void reportProblem() {
    Date myDate = new Date();
    this.currentStep.setProcessingStatusEnum(TaskStatus.LOCKED);
    this.currentStep.setEditTypeEnum(TaskEditType.MANUAL_SINGLE);
    currentStep.setProcessingTime(new Date());
    User ben = (User) Helper.getManagedBeanValue("#{LoginForm.myBenutzer}");
    if (ben != null) {
        currentStep.setProcessingUser(ben);
    }/*from   w  w  w .j a v  a 2 s.c o  m*/
    this.currentStep.setProcessingBegin(null);

    try {
        Task temp = null;
        for (Task s : this.currentStep.getProcess().getTasks()) {
            if (s.getTitle().equals(this.myProblemStep)) {
                temp = s;
            }
        }
        if (temp != null) {
            temp.setProcessingStatusEnum(TaskStatus.OPEN);
            temp = serviceManager.getTaskService().setCorrectionStep(temp);
            temp.setProcessingEnd(null);

            Property processProperty = new Property();
            processProperty.setTitle(Helper.getTranslation("Korrektur notwendig"));
            processProperty.setValue("[" + this.formatter.format(new Date()) + ", "
                    + serviceManager.getUserService().getFullName(ben) + "] " + this.problemMessage);
            processProperty.setType(PropertyType.messageError);
            processProperty.getProcesses().add(this.currentStep.getProcess());
            this.currentStep.getProcess().getProperties().add(processProperty);

            String message = Helper.getTranslation("KorrekturFuer") + " " + temp.getTitle() + ": "
                    + this.problemMessage + " (" + serviceManager.getUserService().getFullName(ben) + ")";
            this.currentStep.getProcess()
                    .setWikiField(WikiFieldHelper.getWikiMessage(this.currentStep.getProcess(),
                            this.currentStep.getProcess().getWikiField(), "error", message));

            this.serviceManager.getTaskService().save(temp);
            this.serviceManager.getProcessService().getHistoryInitialized(this.currentStep.getProcess())
                    .add(new History(myDate, temp.getOrdering().doubleValue(), temp.getTitle(),
                            HistoryTypeEnum.taskError, temp.getProcess()));
            /*
             * alle Schritte zwischen dem aktuellen und dem Korrekturschritt
             * wieder schliessen
             */
            @SuppressWarnings("unchecked")
            List<Task> alleSchritteDazwischen = Helper.getHibernateSession().createCriteria(Task.class)
                    .add(Restrictions.le("ordering", this.currentStep.getOrdering()))
                    .add(Restrictions.gt("ordering", temp.getOrdering())).addOrder(Order.asc("ordering"))
                    .createCriteria("process").add(Restrictions.idEq(this.currentStep.getProcess().getId()))
                    .list();
            for (Task task : alleSchritteDazwischen) {
                task.setProcessingStatusEnum(TaskStatus.LOCKED);
                task = serviceManager.getTaskService().setCorrectionStep(task);
                task.setProcessingEnd(null);
            }
        }
        /*
         * den Prozess aktualisieren, so dass der Sortierungshelper
         * gespeichert wird
         */
    } catch (DataException e) {
        logger.error(e);
    }
}

From source file:de.sub.goobi.helper.BatchStepHelper.java

License:Open Source License

/**
 * Get next tasks for problem solution.// w  ww.j a  va2  s  . c  om
 *
 * @return list of selected items
 */
@SuppressWarnings("unchecked")
public List<SelectItem> getNextStepsForProblemSolution() {
    List<SelectItem> answer = new ArrayList<>();
    List<Task> alleNachfolgendenSchritte = Helper.getHibernateSession().createCriteria(Task.class)
            .add(Restrictions.gt("ordering", this.currentStep.getOrdering()))
            .add(Restrictions.eq("priority", 10)).addOrder(Order.asc("ordering")).createCriteria("process")
            .add(Restrictions.idEq(this.currentStep.getProcess().getId())).list();
    for (Task s : alleNachfolgendenSchritte) {
        answer.add(new SelectItem(s.getTitle(), serviceManager.getTaskService().getTitleWithUserName(s)));
    }
    return answer;
}

From source file:de.tuclausthal.submissioninterface.persistence.dao.impl.SubmissionDAO.java

License:Open Source License

@Override
public Submission getUngradedSubmission(Task task, int lastSubmissionID) {
    return (Submission) getSession().createCriteria(Submission.class, "sub")
            .add(Restrictions.gt("submissionid", lastSubmissionID)).add(Restrictions.eq("task", task))
            .createCriteria("submitters").add(Restrictions.isNull("sub.points"))
            .addOrder(Order.asc("sub.submissionid")).setMaxResults(1).uniqueResult();
}