de.lemo.dms.test.TestDataCreatorMoodle.java Source code

Java tutorial

Introduction

Here is the source code for de.lemo.dms.test.TestDataCreatorMoodle.java

Source

/**
 * File ./src/main/java/de/lemo/dms/test/TestDataCreatorMoodle.java
 * Lemo-Data-Management-Server for learning analytics.
 * Copyright (C) 2013
 * Leonard Kappe, Andreas Pursian, Sebastian Schwarzrock, Boris Wenzlaff
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
**/

/**
 * File ./main/java/de/lemo/dms/test/TestDataCreatorMoodle.java
 * Date 2013-01-24
 * Project Lemo Learning Analytics
 */

package de.lemo.dms.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import org.hibernate.Session;

import de.lemo.dms.connectors.moodle_1_9.mapping.AssignmentLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.AssignmentSubmissionsLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ChatLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ChatLogLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ContextLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.CourseCategoriesLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.CourseLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ForumDiscussionsLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ForumLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ForumPostsLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.GradeGradesLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.GradeItemsLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.GroupsLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.GroupsMembersLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.LogLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.QuestionLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.QuestionStatesLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.QuizGradesLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.QuizLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.QuizQuestionInstancesLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ResourceLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.RoleAssignmentsLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.RoleLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.ScormLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.UserLMS;
import de.lemo.dms.connectors.moodle_1_9.mapping.WikiLMS;
import de.lemo.dms.core.config.ServerConfiguration;
import de.lemo.dms.db.IDBHandler;
import de.lemo.dms.db.mapping.AssignmentLogMining;
import de.lemo.dms.db.mapping.AssignmentMining;
import de.lemo.dms.db.mapping.ChatLogMining;
import de.lemo.dms.db.mapping.ChatMining;
import de.lemo.dms.db.mapping.CourseAssignmentMining;
import de.lemo.dms.db.mapping.CourseForumMining;
import de.lemo.dms.db.mapping.CourseGroupMining;
import de.lemo.dms.db.mapping.CourseLogMining;
import de.lemo.dms.db.mapping.CourseMining;
import de.lemo.dms.db.mapping.CourseQuizMining;
import de.lemo.dms.db.mapping.CourseResourceMining;
import de.lemo.dms.db.mapping.CourseScormMining;
import de.lemo.dms.db.mapping.CourseUserMining;
import de.lemo.dms.db.mapping.CourseWikiMining;
import de.lemo.dms.db.mapping.LevelCourseMining;
import de.lemo.dms.db.mapping.LevelMining;
import de.lemo.dms.db.mapping.LevelAssociationMining;
import de.lemo.dms.db.mapping.ForumLogMining;
import de.lemo.dms.db.mapping.ForumMining;
import de.lemo.dms.db.mapping.GroupMining;
import de.lemo.dms.db.mapping.GroupUserMining;
import de.lemo.dms.db.mapping.QuestionLogMining;
import de.lemo.dms.db.mapping.QuestionMining;
import de.lemo.dms.db.mapping.QuizLogMining;
import de.lemo.dms.db.mapping.QuizMining;
import de.lemo.dms.db.mapping.QuizQuestionMining;
import de.lemo.dms.db.mapping.QuizUserMining;
import de.lemo.dms.db.mapping.ResourceLogMining;
import de.lemo.dms.db.mapping.ResourceMining;
import de.lemo.dms.db.mapping.RoleMining;
import de.lemo.dms.db.mapping.ScormLogMining;
import de.lemo.dms.db.mapping.ScormMining;
import de.lemo.dms.db.mapping.UserMining;
import de.lemo.dms.db.mapping.WikiLogMining;
import de.lemo.dms.db.mapping.WikiMining;
import de.lemo.dms.db.mapping.abstractions.ILogMining;

/**
 * Class to test the moodle data creator
 * @author Sebastian Schwarzrock
 *
 */
public class TestDataCreatorMoodle {

    private List<AssignmentMining> assignmentList;
    private List<AssignmentLogMining> assignmentLogList;
    private List<ChatMining> chatList;
    private List<ChatLogMining> chatLogList;
    private List<CourseMining> courseList;
    private List<CourseLogMining> courseLogList;
    private List<CourseAssignmentMining> courseAssignmentList;
    private List<CourseForumMining> courseForumList;
    private List<CourseGroupMining> courseGroupList;
    private List<CourseQuizMining> courseQuizList;
    private List<CourseResourceMining> courseResourceList;
    private List<CourseScormMining> courseScormList;
    private List<CourseUserMining> courseUserList;
    private List<CourseWikiMining> courseWikiList;
    private List<ForumMining> forumList;
    private List<ForumLogMining> forumLogList;
    private List<GroupMining> groupList;
    private List<GroupUserMining> groupUserList;
    private List<QuestionMining> questionList;
    private List<QuestionLogMining> questionLogList;
    private List<QuizMining> quizList;
    private List<QuizLogMining> quizLogList;
    private List<QuizQuestionMining> quizQuestionList;
    private List<QuizUserMining> quizUserList;
    private List<ResourceLogMining> resourceLogList;
    private List<ResourceMining> resourceList;
    private List<RoleMining> roleList;
    private List<ScormMining> scormList;
    private List<ScormLogMining> scormLogList;
    private List<UserMining> userList;
    private List<WikiMining> wikiList;
    private List<WikiLogMining> wikiLogList;
    private List<LevelMining> departmentList;
    private List<LevelMining> degreeList;
    private List<LevelAssociationMining> departmentDegreeList;
    private List<LevelCourseMining> degreeCourseList;

    private static List<LogLMS> logLms = new ArrayList<LogLMS>();
    private static List<ResourceLMS> resourceLms = new ArrayList<ResourceLMS>();
    private static List<CourseLMS> courseLms = new ArrayList<CourseLMS>();
    private static List<ForumLMS> forumLms = new ArrayList<ForumLMS>();
    private static List<WikiLMS> wikiLms = new ArrayList<WikiLMS>();
    private static List<UserLMS> userLms = new ArrayList<UserLMS>();
    private static List<QuizLMS> quizLms = new ArrayList<QuizLMS>();
    private static List<QuizQuestionInstancesLMS> quizQuestionInstancesLms = new ArrayList<QuizQuestionInstancesLMS>();
    private static List<QuestionLMS> questionLms = new ArrayList<QuestionLMS>();
    private static List<GroupsLMS> groupLms = new ArrayList<GroupsLMS>();
    private static List<GroupsMembersLMS> groupMembersLms = new ArrayList<GroupsMembersLMS>();
    private static List<QuestionStatesLMS> questionStatesLms = new ArrayList<QuestionStatesLMS>();
    private static List<ForumPostsLMS> forumPostsLms = new ArrayList<ForumPostsLMS>();
    private static List<RoleLMS> roleLms = new ArrayList<RoleLMS>();
    private static List<ContextLMS> contextLms = new ArrayList<ContextLMS>();
    private static List<RoleAssignmentsLMS> roleAssignmentsLms = new ArrayList<RoleAssignmentsLMS>();
    private static List<AssignmentLMS> assignmentLms = new ArrayList<AssignmentLMS>();
    private static List<AssignmentSubmissionsLMS> assignmentSubmissionLms = new ArrayList<AssignmentSubmissionsLMS>();
    private static List<QuizGradesLMS> quizGradesLms = new ArrayList<QuizGradesLMS>();
    private static List<ForumDiscussionsLMS> forumDiscussionsLms = new ArrayList<ForumDiscussionsLMS>();
    private static List<ScormLMS> scormLms = new ArrayList<ScormLMS>();
    private static List<GradeGradesLMS> gradeGradesLms = new ArrayList<GradeGradesLMS>();
    private static List<GradeItemsLMS> gradeItemsLms = new ArrayList<GradeItemsLMS>();
    private static List<ChatLMS> chatLms = new ArrayList<ChatLMS>();
    private static List<ChatLogLMS> chatLogLms = new ArrayList<ChatLogLMS>();
    private static List<CourseCategoriesLMS> courseCategoriesLms = new ArrayList<CourseCategoriesLMS>();

    private Map<Long, CourseMining> couAssMap;
    private Map<Long, CourseMining> couForMap;
    private Map<Long, CourseMining> couGroMap;
    private Map<Long, CourseMining> couQuiMap;
    private Map<Long, CourseMining> couUseMap;
    private Map<Long, CourseMining> couResMap;
    private Map<Long, CourseMining> couScoMap;
    private Map<Long, CourseMining> couWikMap;

    private Map<Long, LevelMining> degCouMap;
    private Map<Long, LevelMining> depDegMap;

    private void generateUserLMS() {
        for (final UserMining item : this.userList) {
            final UserLMS lms = new UserLMS();

            lms.setId(item.getId());
            lms.setCurrentlogin(item.getCurrentLogin());
            lms.setLastaccess(item.getLastAccess());
            lms.setFirstaccess(item.getFirstAccess());
            lms.setLastlogin(item.getLastLogin());

            TestDataCreatorMoodle.userLms.add(lms);
        }
    }

    private void generateRoleLMS() {
        for (final RoleMining item : this.roleList) {
            final RoleLMS lms = new RoleLMS();

            lms.setId(item.getId());
            lms.setName(item.getName());
            lms.setShortname(item.getShortname());
            lms.setSortorder(item.getSortOrder());
            lms.setDescription(item.getDescription());

            TestDataCreatorMoodle.roleLms.add(lms);
        }
    }

    private void generateWikiLMS() {
        for (final WikiMining item : this.wikiList) {
            final WikiLMS lms = new WikiLMS();
            lms.setId(item.getId());
            lms.setName(item.getTitle());
            lms.setTimemodified(item.getTimeModified());
            lms.setSummary(item.getSummary());
            lms.setCourse(this.couWikMap.get(item.getId()).getId());

            TestDataCreatorMoodle.wikiLms.add(lms);
        }
    }

    private void generateScormLMS() {
        for (final ScormMining item : this.scormList) {
            final ScormLMS lms = new ScormLMS();
            lms.setId(item.getId());
            lms.setName(item.getTitle());
            lms.setTimemodified(item.getTimeModified());
            lms.setMaxgrade(item.getMaxGrade());
            lms.setTimemodified(item.getTimeModified());
            lms.setCourse(this.couScoMap.get(item.getId()).getId());

            TestDataCreatorMoodle.scormLms.add(lms);
        }
    }

    private void generateContextLMS() {

        final HashMap<Long, ContextLMS> depIdMap = new HashMap<Long, ContextLMS>();
        final HashMap<Long, ContextLMS> degIdMap = new HashMap<Long, ContextLMS>();
        final HashMap<Long, ContextLMS> couIdMap = new HashMap<Long, ContextLMS>();

        // Create entries (context, course_categories) for all departments
        for (final LevelMining item : this.departmentList) {
            final ContextLMS lms = new ContextLMS();
            final CourseCategoriesLMS lms2 = new CourseCategoriesLMS();

            lms2.setId(TestDataCreatorMoodle.courseCategoriesLms.size() + 1);
            lms2.setTitle(item.getTitle());
            lms2.setDepth(1);
            lms2.setPath("/" + item.getId());

            lms.setContextlevel(40);
            lms.setDepth(2);
            lms.setInstanceid(lms2.getId());
            lms.setId(TestDataCreatorMoodle.contextLms.size() + 1);
            lms.setPath("/1/" + lms.getId());

            TestDataCreatorMoodle.courseCategoriesLms.add(lms2);

            TestDataCreatorMoodle.contextLms.add(lms);
            depIdMap.put(item.getId(), lms);
        }

        // Create entries (context, course_categories) for all degrees
        for (final LevelMining item : this.degreeList) {
            final CourseCategoriesLMS lms2 = new CourseCategoriesLMS();

            final LevelMining dm = this.depDegMap.get(item.getId());

            lms2.setId(TestDataCreatorMoodle.courseCategoriesLms.size() + 1);
            lms2.setTitle(item.getTitle());
            lms2.setDepth(2);
            lms2.setPath("/" + depIdMap.get(dm.getId()).getId() + "/" + lms2.getId());

            final ContextLMS lms = new ContextLMS();
            lms.setContextlevel(40);
            lms.setDepth(3);
            lms.setInstanceid(lms2.getId());

            lms.setId(TestDataCreatorMoodle.contextLms.size() + 1);
            final ContextLMS cl = depIdMap.get(dm.getId());
            lms.setPath(cl.getPath() + "/" + lms.getId());

            degIdMap.put(item.getId(), lms);
            TestDataCreatorMoodle.contextLms.add(lms);

            TestDataCreatorMoodle.courseCategoriesLms.add(lms2);

        }
        // Create entries (context) for all courses
        for (final LevelCourseMining item : this.degreeCourseList) {
            final ContextLMS lms = new ContextLMS();

            lms.setId(TestDataCreatorMoodle.contextLms.size() + 1);
            lms.setDepth(4);
            lms.setContextlevel(50);
            lms.setInstanceid(item.getCourse().getId());
            final ContextLMS cl = degIdMap.get(item.getLevel().getId());
            lms.setPath(cl.getPath() + "/" + lms.getId());

            couIdMap.put(item.getId(), lms);

            TestDataCreatorMoodle.contextLms.add(lms);
        }
        // Create entries (role_assignments) for all users
        for (final CourseUserMining item : this.courseUserList) {
            final RoleAssignmentsLMS lms2 = new RoleAssignmentsLMS();

            lms2.setId(item.getId());
            lms2.setRoleid(item.getRole().getId());
            lms2.setUserid(item.getUser().getId());
            lms2.setTimeend(item.getEnrolend());
            lms2.setTimestart(item.getEnrolstart());
            lms2.setContextid(couIdMap.get(item.getCourse().getId()).getId());

            TestDataCreatorMoodle.roleAssignmentsLms.add(lms2);
        }

    }

    private void generateCourseLogs() {
        for (final CourseLogMining item : this.courseLogList) {
            final LogLMS lms = new LogLMS();
            lms.setId(item.getId());
            lms.setAction(item.getAction());
            lms.setModule("course");
            lms.setTime(item.getTimestamp());
            lms.setCourse(item.getCourse().getId());
            lms.setUserid(item.getUser().getId());

            TestDataCreatorMoodle.logLms.add(lms);
        }
    }

    private void generateLogLMS() {
        final List<ILogMining> logs = new ArrayList<ILogMining>();
        logs.addAll(this.resourceLogList);
        logs.addAll(this.assignmentLogList);
        logs.addAll(this.forumLogList);

        logs.addAll(this.quizLogList);
        logs.addAll(this.wikiLogList);
        logs.addAll(this.scormLogList);

        Collections.sort(logs);

        for (int i = 0; i < logs.size(); i++) {
            logs.get(i).setId(i + 1);
        }

        for (final ResourceLogMining item : this.resourceLogList) {
            final LogLMS lms = new LogLMS();

            lms.setId(item.getId());
            lms.setCourse(item.getCourse().getId());
            lms.setModule("resource");
            lms.setTime(item.getTimestamp());
            lms.setAction(item.getAction());
            lms.setInfo(item.getResource().getId() + "");
            lms.setUserid(item.getUser().getId());

            TestDataCreatorMoodle.logLms.add(lms);
        }
        final HashMap<Long, ForumDiscussionsLMS> forDisSet = new HashMap<Long, ForumDiscussionsLMS>();
        for (final ForumLogMining item : this.forumLogList) {
            final LogLMS lms = new LogLMS();
            final ForumPostsLMS lms2 = new ForumPostsLMS();

            lms2.setId(TestDataCreatorMoodle.forumPostsLms.size() + 1);
            lms2.setMessage(item.getMessage());
            lms2.setSubject(item.getSubject());
            lms2.setUserid(item.getUser().getId());
            lms2.setCreated(item.getTimestamp());
            lms2.setModified(item.getTimestamp());

            TestDataCreatorMoodle.forumPostsLms.add(lms2);

            if ((item.getAction().equals("add discussion") || item.getAction().equals("view discussion"))) {
                final ForumDiscussionsLMS lms3 = new ForumDiscussionsLMS();

                lms3.setId(item.getForum().getId());
                lms3.setForum(item.getForum().getId());

                forDisSet.put(lms3.getId(), lms3);

            }
            lms.setId(item.getId());
            lms.setAction(item.getAction());
            lms.setModule("forum");
            lms.setInfo(item.getForum().getId() + "");
            lms.setTime(item.getTimestamp());
            lms.setCourse(item.getCourse().getId());
            lms.setUserid(item.getUser().getId());

            TestDataCreatorMoodle.logLms.add(lms);
        }
        TestDataCreatorMoodle.forumDiscussionsLms.addAll(forDisSet.values());
        for (final AssignmentLogMining item : this.assignmentLogList) {
            final LogLMS lms = new LogLMS();

            lms.setId(item.getId());
            lms.setAction(item.getAction());
            lms.setModule("assignment");
            lms.setInfo(item.getAssignment().getId() + "");
            lms.setTime(item.getTimestamp());
            lms.setCourse(item.getCourse().getId());
            lms.setUserid(item.getUser().getId());

            TestDataCreatorMoodle.logLms.add(lms);

            if (item.getAction().equals("upload")) {
                final AssignmentSubmissionsLMS lms2 = new AssignmentSubmissionsLMS();

                lms2.setGrade(item.getGrade().longValue());
                lms2.setAssignment(item.getAssignment().getId());
                lms2.setUserid(item.getUser().getId() + "");
                lms2.setTimemodified(item.getTimestamp());
                lms2.setId(TestDataCreatorMoodle.assignmentSubmissionLms.size() + 1);

                TestDataCreatorMoodle.assignmentSubmissionLms.add(lms2);
            }
        }
        for (final QuizLogMining item : this.quizLogList) {
            final LogLMS lms = new LogLMS();
            lms.setId(item.getId());
            lms.setAction(item.getAction());
            lms.setModule("quiz");
            lms.setInfo(item.getQuiz().getId() + "");
            lms.setTime(item.getTimestamp());
            lms.setCourse(item.getCourse().getId());
            lms.setUserid(item.getUser().getId());

            if (!item.getAction().equals("review")) {
                final QuizGradesLMS lms2 = new QuizGradesLMS();
                lms2.setGrade(item.getGrade());
                lms2.setTimemodified(item.getTimestamp());
                lms2.setUserid(item.getUser().getId() + "");
                lms2.setQuiz(item.getQuiz().getId());
                lms2.setId(TestDataCreatorMoodle.quizGradesLms.size() + 1);

                TestDataCreatorMoodle.quizGradesLms.add(lms2);
            }

            TestDataCreatorMoodle.logLms.add(lms);
        }

        for (final ScormLogMining item : this.scormLogList) {
            final LogLMS lms = new LogLMS();
            lms.setId(item.getId());
            lms.setAction(item.getAction());
            lms.setModule("scorm");
            lms.setInfo(item.getScorm().getId() + "");
            lms.setTime(item.getTimestamp());
            lms.setCourse(item.getCourse().getId());
            lms.setUserid(item.getUser().getId());

            TestDataCreatorMoodle.logLms.add(lms);
        }
        for (final WikiLogMining item : this.wikiLogList) {
            final LogLMS lms = new LogLMS();
            lms.setId(item.getId());
            lms.setAction(item.getAction());
            lms.setModule("wiki");
            lms.setInfo(item.getWiki().getId() + "");
            lms.setTime(item.getTimestamp());
            lms.setCourse(item.getCourse().getId());
            lms.setUserid(item.getUser().getId());
            lms.setCmid(item.getWiki().getId());

            TestDataCreatorMoodle.logLms.add(lms);
        }
    }

    private void generateResourceLMS() {
        for (final ResourceMining item : this.resourceList) {
            final ResourceLMS lms = new ResourceLMS();
            lms.setId(item.getId());
            lms.setType(item.getType());
            lms.setName(item.getTitle());
            lms.setTimemodified(item.getTimeModified());
            if (this.couResMap.get(item.getId()) != null) {
                lms.setCourse(this.couResMap.get(item.getId()).getId());
            }

            TestDataCreatorMoodle.resourceLms.add(lms);
        }
    }

    private void generateForumLMS() {
        final HashMap<Long, Long> cFMap = new HashMap<Long, Long>();
        for (final Iterator<CourseForumMining> iter = this.courseForumList.iterator(); iter.hasNext();) {
            final CourseForumMining item = iter.next();
            cFMap.put(item.getForum().getId(), item.getCourse().getId());
        }
        for (final ForumMining item : this.forumList) {
            final ForumLMS lms = new ForumLMS();
            lms.setId(item.getId());
            lms.setTimemodified(item.getTimeModified());
            lms.setName(item.getTitle());
            lms.setIntro(item.getSummary());
            lms.setCourse(cFMap.get(lms.getId()));

            TestDataCreatorMoodle.forumLms.add(lms);

        }

    }

    private void generateCourseLMS() {

        for (final CourseMining item : this.courseList) {
            final CourseLMS lms = new CourseLMS();
            lms.setId(item.getId());
            lms.setFullname(item.getTitle());
            lms.setShortname(item.getShortname());
            lms.setTimemodified(item.getTimeModified());
            lms.setTimecreated(item.getTimeCreated());
            lms.setEnrolstartdate(item.getEnrolStart());
            lms.setEnrolenddate(item.getEnrolEnd());
            lms.setStartdate(item.getStartDate());

            TestDataCreatorMoodle.courseLms.add(lms);
        }
    }

    private void generateChatLogLMS() {
        final HashMap<Long, Long> couId = new HashMap<Long, Long>();

        for (final ChatLogMining item : this.chatLogList) {
            final ChatLogLMS lms = new ChatLogLMS();
            lms.setMessage(item.getMessage());

            lms.setTimestamp(item.getTimestamp());
            lms.setChat(item.getChat().getId());
            lms.setUser(item.getUser().getId());
            lms.setId(item.getId());

            couId.put(item.getChat().getId(), item.getCourse().getId());

            TestDataCreatorMoodle.chatLogLms.add(lms);
        }

        for (final ChatMining item : this.chatList) {
            final ChatLMS lms = new ChatLMS();
            lms.setId(item.getId());
            if (couId.get(item.getId()) != null) {
                lms.setCourse(couId.get(item.getId()));
            }
            lms.setTitle(item.getTitle());
            lms.setDescription(item.getDescription());
            lms.setChattime(item.getChatTime());

            TestDataCreatorMoodle.chatLms.add(lms);
        }
    }

    private void generateAssignmentLMS() {
        for (final AssignmentMining item : this.assignmentList) {
            final AssignmentLMS lms = new AssignmentLMS();
            lms.setId(item.getId());
            lms.setName(item.getTitle());
            lms.setTimeavailable(item.getTimeOpen());
            lms.setTimedue(item.getTimeClose());
            lms.setTimemodified(item.getTimeModified());
            lms.setDescription("description");
            if (this.couAssMap.get(item.getId()) != null) {
                lms.setCourse(this.couAssMap.get(item.getId()).getId());
            }

            final GradeItemsLMS lms2 = new GradeItemsLMS();
            lms2.setIteminstance(item.getId());
            lms2.setItemmodule("assignment");
            lms2.setGrademax(item.getMaxGrade());
            lms2.setId(TestDataCreatorMoodle.gradeItemsLms.size());

            TestDataCreatorMoodle.gradeItemsLms.add(lms2);
            TestDataCreatorMoodle.assignmentLms.add(lms);
        }
    }

    @SuppressWarnings("unchecked")
    public void getDataFromDB() {
        final IDBHandler dbHandler = ServerConfiguration.getInstance().getMiningDbHandler();

        // accessing DB by creating a session and a transaction using HibernateUtil
        final Session session = dbHandler.getMiningSession();
        session.clear();

        final Query assQuery = session.createQuery("from AssignmentMining x order by x.id asc");
        this.assignmentList = (ArrayList<AssignmentMining>) assQuery.list();

        final Query assLogQuery = session.createQuery("from AssignmentLogMining x order by x.id asc");
        this.assignmentLogList = (ArrayList<AssignmentLogMining>) assLogQuery.list();

        final Query chaQuery = session.createQuery("from ChatMining x order by x.id asc");
        this.chatList = (ArrayList<ChatMining>) chaQuery.list();

        final Query chaLogQuery = session.createQuery("from ChatLogMining x order by x.id asc");
        this.chatLogList = (ArrayList<ChatLogMining>) chaLogQuery.list();

        final Query couQuery = session.createQuery("from CourseMining x order by x.id asc");
        this.courseList = (ArrayList<CourseMining>) couQuery.list();

        final Query couLogQuery = session.createQuery("from CourseLogMining x order by x.id asc");
        this.courseLogList = (ArrayList<CourseLogMining>) couLogQuery.list();

        final Query couAssQuery = session.createQuery("from CourseAssignmentMining x order by x.id asc");
        this.courseAssignmentList = (ArrayList<CourseAssignmentMining>) couAssQuery.list();

        final Query couForumQuery = session.createQuery("from CourseForumMining x order by x.id asc");
        this.courseForumList = (ArrayList<CourseForumMining>) couForumQuery.list();

        final Query couGroupQuery = session.createQuery("from CourseGroupMining x order by x.id asc");
        this.courseGroupList = (ArrayList<CourseGroupMining>) couGroupQuery.list();

        final Query couQuizQuery = session.createQuery("from CourseQuizMining x order by x.id asc");
        this.courseQuizList = (ArrayList<CourseQuizMining>) couQuizQuery.list();

        final Query couResQuery = session.createQuery("from CourseResourceMining x order by x.id asc");
        this.courseResourceList = (ArrayList<CourseResourceMining>) couResQuery.list();

        final Query couScormQuery = session.createQuery("from CourseScormMining x order by x.id asc");
        this.courseScormList = (ArrayList<CourseScormMining>) couScormQuery.list();

        final Query couUserQuery = session.createQuery("from CourseUserMining x order by x.id asc");
        this.courseUserList = (ArrayList<CourseUserMining>) couUserQuery.list();

        final Query couWikiQuery = session.createQuery("from CourseWikiMining x order by x.id asc");
        this.courseWikiList = (ArrayList<CourseWikiMining>) couWikiQuery.list();

        final Query degQuery = session.createQuery("from DegreeMining x order by x.id asc");
        this.degreeList = (ArrayList<LevelMining>) degQuery.list();

        final Query degCouQuery = session.createQuery("from DegreeCourseMining x order by x.id asc");
        this.degreeCourseList = (ArrayList<LevelCourseMining>) degCouQuery.list();

        final Query depQuery = session.createQuery("from DepartmentMining x order by x.id asc");
        this.departmentList = (ArrayList<LevelMining>) depQuery.list();

        final Query depDegQuery = session.createQuery("from DepartmentDegreeMining x order by x.id asc");
        this.departmentDegreeList = (ArrayList<LevelAssociationMining>) depDegQuery.list();

        final Query forQuery = session.createQuery("from ForumMining x order by x.id asc");
        this.forumList = (ArrayList<ForumMining>) forQuery.list();

        final Query forLogQuery = session.createQuery("from ForumLogMining x order by x.id asc");
        this.forumLogList = (ArrayList<ForumLogMining>) forLogQuery.list();

        final Query groupQuery = session.createQuery("from GroupMining x order by x.id asc");
        this.groupList = (ArrayList<GroupMining>) groupQuery.list();

        final Query groupUserQuery = session.createQuery("from GroupUserMining x order by x.id asc");
        this.groupUserList = (ArrayList<GroupUserMining>) groupUserQuery.list();

        final Query queQuery = session.createQuery("from QuestionMining x order by x.id asc");
        this.questionList = (ArrayList<QuestionMining>) queQuery.list();

        final Query queLogQuery = session.createQuery("from QuestionLogMining x order by x.id asc");
        this.questionLogList = (ArrayList<QuestionLogMining>) queLogQuery.list();

        final Query quiLogQuery = session.createQuery("from QuizLogMining x order by x.id asc");
        this.quizLogList = (ArrayList<QuizLogMining>) quiLogQuery.list();

        final Query quiQuery = session.createQuery("from QuizMining x order by x.id asc");
        this.quizList = (ArrayList<QuizMining>) quiQuery.list();

        final Query quiQuestionQuery = session.createQuery("from QuizQuestionMining x order by x.id asc");
        this.quizQuestionList = (ArrayList<QuizQuestionMining>) quiQuestionQuery.list();

        final Query quiUserQuery = session.createQuery("from QuizUserMining x order by x.id asc");
        this.quizUserList = (ArrayList<QuizUserMining>) quiUserQuery.list();

        final Query resQuery = session.createQuery("from ResourceMining x order by x.id asc");
        this.resourceList = (ArrayList<ResourceMining>) resQuery.list();

        final Query resLogQuery = session.createQuery("from ResourceLogMining x order by x.id asc");
        this.resourceLogList = (ArrayList<ResourceLogMining>) resLogQuery.list();

        final Query roleQuery = session.createQuery("from RoleMining x order by x.id asc");
        this.roleList = (ArrayList<RoleMining>) roleQuery.list();

        final Query scormQuery = session.createQuery("from ScormMining x order by x.id asc");
        this.scormList = (ArrayList<ScormMining>) scormQuery.list();

        final Query scormLogQuery = session.createQuery("from ScormLogMining x order by x.id asc");
        this.scormLogList = (ArrayList<ScormLogMining>) scormLogQuery.list();

        final Query userQuery = session.createQuery("from UserMining x order by x.id asc");
        this.userList = (ArrayList<UserMining>) userQuery.list();

        final Query wikQuery = session.createQuery("from WikiMining x order by x.id asc");
        this.wikiList = (ArrayList<WikiMining>) wikQuery.list();

        final Query wikLogQuery = session.createQuery("from WikiLogMining x order by x.id asc");
        this.wikiLogList = (ArrayList<WikiLogMining>) wikLogQuery.list();

        this.couAssMap = new HashMap<Long, CourseMining>();
        this.couForMap = new HashMap<Long, CourseMining>();
        this.couGroMap = new HashMap<Long, CourseMining>();
        this.couQuiMap = new HashMap<Long, CourseMining>();
        this.couResMap = new HashMap<Long, CourseMining>();
        this.couScoMap = new HashMap<Long, CourseMining>();
        this.couUseMap = new HashMap<Long, CourseMining>();
        this.couWikMap = new HashMap<Long, CourseMining>();

        this.degCouMap = new HashMap<Long, LevelMining>();
        this.depDegMap = new HashMap<Long, LevelMining>();

        for (final CourseAssignmentMining ca : this.courseAssignmentList) {
            this.couAssMap.put(ca.getAssignment().getId(), ca.getCourse());
        }

        for (final CourseGroupMining ca : this.courseGroupList) {
            this.couGroMap.put(ca.getGroup().getId(), ca.getCourse());
        }

        for (final CourseQuizMining ca : this.courseQuizList) {
            this.couQuiMap.put(ca.getQuiz().getId(), ca.getCourse());
        }

        for (final CourseUserMining ca : this.courseUserList) {
            this.couUseMap.put(ca.getUser().getId(), ca.getCourse());
        }

        for (final CourseForumMining ca : this.courseForumList) {
            this.couForMap.put(ca.getForum().getId(), ca.getCourse());
        }

        for (final CourseResourceMining cr : this.courseResourceList) {
            this.couResMap.put(cr.getResource().getId(), cr.getCourse());
        }

        for (final CourseWikiMining cw : this.courseWikiList) {
            this.couWikMap.put(cw.getWiki().getId(), cw.getCourse());
        }

        for (final CourseScormMining cs : this.courseScormList) {
            this.couScoMap.put(cs.getScorm().getId(), cs.getCourse());
        }

        for (final LevelCourseMining dc : this.degreeCourseList) {
            this.degCouMap.put(dc.getCourse().getId(), dc.getLevel());
        }

        for (final LevelAssociationMining dd : this.departmentDegreeList) {
            this.depDegMap.put(dd.getLower().getId(), dd.getUpper());
        }

        session.clear();
        session.close();

    }

    private void generateGroupLMS() {
        for (final GroupMining item : this.groupList) {
            final GroupsLMS lms = new GroupsLMS();
            lms.setId(item.getId());
            lms.setCourseid(this.couGroMap.get(item.getId()).getId());
            lms.setTimecreated(item.getTimeCreated());
            lms.setTimemodified(item.getTimeModified());

            TestDataCreatorMoodle.groupLms.add(lms);

        }
    }

    private void generateGroupMembersLMS() {
        for (final GroupUserMining item : this.groupUserList) {
            final GroupsMembersLMS lms = new GroupsMembersLMS();

            lms.setId(item.getId());
            lms.setGroupid(item.getGroup().getId());
            lms.setUserid(item.getUser().getId());
            lms.setTimeadded(item.getTimestamp());

            TestDataCreatorMoodle.groupMembersLms.add(lms);
        }
    }

    private void generateQuizLMS() {
        final HashMap<Long, Long> qQMap = new HashMap<Long, Long>();
        for (final Iterator<CourseQuizMining> iter = this.courseQuizList.iterator(); iter.hasNext();) {
            final CourseQuizMining item = iter.next();
            qQMap.put(item.getQuiz().getId(), item.getCourse().getId());
        }
        for (final QuizMining item : this.quizList) {
            final QuizLMS lms = new QuizLMS();
            final GradeItemsLMS lms2 = new GradeItemsLMS();

            lms.setId(item.getId());
            lms.setCourse(qQMap.get(lms.getId()));
            lms.setName(item.getTitle());
            lms.setTimeopen(item.getTimeOpen());
            lms.setTimeclose(item.getTimeClose());
            lms.setTimecreated(item.getTimeCreated());
            lms.setTimemodified(item.getTimeModified());

            lms2.setId(TestDataCreatorMoodle.gradeItemsLms.size() + 1);
            lms2.setGrademax(item.getMaxGrade());
            lms2.setIteminstance(item.getId());
            lms2.setItemmodule("quiz");

            TestDataCreatorMoodle.gradeItemsLms.add(lms2);
            TestDataCreatorMoodle.quizLms.add(lms);
        }
    }

    private void generateQuestionLMS() {
        for (final QuestionMining item : this.questionList) {
            final QuestionLMS lms = new QuestionLMS();

            lms.setId(item.getId());
            lms.setName(item.getTitle());
            lms.setQuestiontext(item.getText());
            lms.setQtype(item.getType());
            lms.setTimecreated(item.getTimeCreated());
            lms.setTimemodified(item.getTimeModified());

            TestDataCreatorMoodle.questionLms.add(lms);
        }
    }

    private void generateQuizQuestionInstancesLMS() {
        for (final QuizQuestionMining item : this.quizQuestionList) {
            final QuizQuestionInstancesLMS lms = new QuizQuestionInstancesLMS();

            lms.setId(item.getId());
            lms.setQuestion(item.getQuestion().getId());
            lms.setQuiz(item.getQuiz().getId());

            TestDataCreatorMoodle.quizQuestionInstancesLms.add(lms);

        }
    }

    private void generateGradeGradesLMS() {
        for (final QuizUserMining item : this.quizUserList) {
            final GradeGradesLMS lms = new GradeGradesLMS();

            lms.setId(item.getId());
            lms.setRawgrade(item.getRawGrade());
            lms.setFinalgrade(item.getFinalGrade());
            lms.setUserid(item.getUser().getId());
            lms.setTimemodified(item.getTimeModified());
            lms.setItemid(TestDataCreatorMoodle.gradeItemsLms.size() + 1);

            final GradeItemsLMS lms2 = new GradeItemsLMS();
            lms2.setCourseid(item.getCourse().getId());
            lms2.setIteminstance(item.getQuiz().getId());
            lms2.setId(lms.getItemid());

            TestDataCreatorMoodle.gradeItemsLms.add(lms2);
            TestDataCreatorMoodle.gradeGradesLms.add(lms);
        }
    }

    private void generateQuestionStatesLMS() {
        for (final QuestionLogMining item : this.questionLogList) {
            final QuestionStatesLMS lms = new QuestionStatesLMS();

            lms.setId(item.getId());
            lms.setAnswer(item.getAnswers());
            lms.setQuestion(item.getQuestion().getId());
            lms.setPenalty(item.getPenalty());
            lms.setTimestamp(item.getTimestamp());

            if (item.getAction().equals("OPEN")) {
                lms.setEvent((short) 0);
            } else if (item.getAction().equals("NAVIGATE")) {
                lms.setEvent((short) 1);
            } else if (item.getAction().equals("SAVE")) {
                lms.setEvent((short) 2);
            } else if (item.getAction().equals("GRADE")) {
                lms.setEvent((short) 3);
            } else if (item.getAction().equals("DUPLICATE")) {
                lms.setEvent((short) 4);
            } else if (item.getAction().equals("VALIDATE")) {
                lms.setEvent((short) 5);
            } else if (item.getAction().equals("CLOSEANDGRADE")) {
                lms.setEvent((short) 6);
            } else if (item.getAction().equals("SUBMIT")) {
                lms.setEvent((short) 7);
            } else if (item.getAction().equals("CLOSE")) {
                lms.setEvent((short) 8);
            } else if (item.getAction().equals("MANUALGRADE")) {
                lms.setEvent((short) 9);
            }

            TestDataCreatorMoodle.questionStatesLms.add(lms);
        }
    }

    public void writeSourceDB() {
        final List<Collection<?>> all = new ArrayList<Collection<?>>();

        this.generateUserLMS();
        this.generateAssignmentLMS();
        this.generateResourceLMS();
        this.generateForumLMS();
        this.generateCourseLMS();
        this.generateGroupLMS();
        this.generateRoleLMS();

        this.generateScormLMS();
        this.generateWikiLMS();
        this.generateGroupMembersLMS();
        this.generateQuizLMS();
        this.generateQuestionLMS();
        this.generateQuizQuestionInstancesLMS();
        this.generateGradeGradesLMS();
        this.generateQuestionStatesLMS();

        this.generateLogLMS();
        this.generateCourseLogs();
        this.generateContextLMS();
        this.generateChatLogLMS();

        all.add(TestDataCreatorMoodle.userLms);
        all.add(TestDataCreatorMoodle.quizLms);
        all.add(TestDataCreatorMoodle.quizQuestionInstancesLms);
        all.add(TestDataCreatorMoodle.questionLms);
        all.add(TestDataCreatorMoodle.assignmentLms);
        all.add(TestDataCreatorMoodle.chatLms);
        all.add(TestDataCreatorMoodle.groupMembersLms);
        all.add(TestDataCreatorMoodle.groupLms);
        all.add(TestDataCreatorMoodle.resourceLms);
        all.add(TestDataCreatorMoodle.roleLms);

        all.add(TestDataCreatorMoodle.forumLms);
        all.add(TestDataCreatorMoodle.courseLms);
        all.add(TestDataCreatorMoodle.scormLms);
        all.add(TestDataCreatorMoodle.wikiLms);
        all.add(TestDataCreatorMoodle.chatLogLms);
        all.add(TestDataCreatorMoodle.logLms);
        all.add(TestDataCreatorMoodle.forumPostsLms);
        all.add(TestDataCreatorMoodle.forumDiscussionsLms);
        all.add(TestDataCreatorMoodle.contextLms);
        all.add(TestDataCreatorMoodle.courseCategoriesLms);
        all.add(TestDataCreatorMoodle.roleAssignmentsLms);
        all.add(TestDataCreatorMoodle.gradeItemsLms);
        all.add(TestDataCreatorMoodle.gradeGradesLms);
        all.add(TestDataCreatorMoodle.questionStatesLms);
        all.add(TestDataCreatorMoodle.quizGradesLms);
        all.add(TestDataCreatorMoodle.assignmentSubmissionLms);

        final IDBHandler dbHandler = new HibernateDBHandler();
        final Session session = dbHandler.getMiningSession();
        dbHandler.saveCollectionToDB(session, all);
        dbHandler.closeSession(session);
    }
}