com.clican.pluto.fsm.dao.hibernate.TaskDaoHibernateImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.clican.pluto.fsm.dao.hibernate.TaskDaoHibernateImpl.java

Source

/**
 * The Clican-Pluto software suit is Copyright 2009, Clican Company and individual contributors, and is licensed under the GNU LGPL.
 *
 * @author wei.zhang
 *
 */
package com.clican.pluto.fsm.dao.hibernate;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;

import com.clican.pluto.common.dao.impl.CommonDaoSpringHibernateImpl;
import com.clican.pluto.fsm.dao.TaskDao;
import com.clican.pluto.fsm.model.State;
import com.clican.pluto.fsm.model.Task;
import com.clican.pluto.fsm.model.Variable;

public class TaskDaoHibernateImpl extends CommonDaoSpringHibernateImpl implements TaskDao {

    public Task findTaskById(Long taskId) {
        return (Task) this.getHibernateTemplate().get(Task.class, taskId);
    }

    @SuppressWarnings("unchecked")

    public List<Task> findActiveTasksByState(State state) {
        StringBuffer hql = new StringBuffer("from Task where state.id = :stateId and completeTime is null");
        Query query = this.getSession().createQuery(hql.toString());
        query.setParameter("stateId", state.getId());
        return query.list();
    }

    @SuppressWarnings("unchecked")

    public List<Task> findTasksByParams(String userId, String sessionName, String stateName, boolean completed) {
        StringBuffer hql = new StringBuffer("from Task where");
        if (completed) {
            hql.append(" completeTime is not null");
        } else {
            hql.append(" completeTime is null");
        }
        if (StringUtils.isNotEmpty(sessionName)) {
            hql.append(" and state.session.name = :sessionName");
        }
        if (StringUtils.isNotEmpty(userId)) {
            hql.append(" and assignee= :userId");
        }
        if (StringUtils.isNotEmpty(stateName)) {
            hql.append(" and state.name = :stateName");
        }
        Query query = this.getSession().createQuery(hql.toString());
        if (StringUtils.isNotEmpty(sessionName)) {
            query.setParameter("sessionName", sessionName);
        }
        if (StringUtils.isNotEmpty(userId)) {
            query.setParameter("userId", userId);
        }
        if (StringUtils.isNotEmpty(stateName)) {
            query.setParameter("stateName", stateName);
        }
        return query.list();
    }

    public void setVariable(Task task, String name, Serializable value) {
        Set<Variable> variableSet = task.getVariableSet();
        if (variableSet == null) {
            task.setVariableSet(new HashSet<Variable>());
        }

        boolean update = false;
        for (Variable org : task.getVariableSet()) {
            if (org.getName().equals(name)) {
                org.setValue(value);
                org.setChangeDate(new Date());
                update = true;
                break;
            }
        }
        if (!update) {
            Variable var = new Variable();
            var.setTask(task);
            var.setName(name);
            var.setValue(value);
            var.setChangeDate(new Date());
            task.getVariableSet().add(var);
        }
        save(task);
    }

    @SuppressWarnings("unchecked")

    public void completeTasksBySessionId(Long sessionId) {
        Calendar current = Calendar.getInstance();
        Query query = this.getSession()
                .createQuery("from Task where completeTime is null and state.session.id = :sessionId");
        query.setParameter("sessionId", sessionId);
        List<Task> tasks = query.list();
        for (Task task : tasks) {
            task.setCompleteTime(current.getTime());
            save(task);
        }
    }

    @SuppressWarnings("unchecked")

    public void completeTasksByStateId(Long stateId) {
        Calendar current = Calendar.getInstance();
        Query query = this.getSession().createQuery("from Task where completeTime is null and state.id = :stateId");
        query.setParameter("stateId", stateId);
        List<Task> tasks = query.list();
        for (Task task : tasks) {
            task.setCompleteTime(current.getTime());
            save(task);
        }
    }

}

// $Id$