abstracttaskdaojdbc.java

来自「Java的框架」· Java 代码 · 共 211 行

JAVA
211
字号
package mcaps.apps.prrm.task.dao.jdbc;

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

import mcaps.apps.prrm.task.dao.TaskDAO;
import mcaps.apps.prrm.task.dao.jdbc.query.TaskByIdQuery;
import mcaps.apps.prrm.task.dao.jdbc.query.TaskInsert;
import mcaps.apps.prrm.task.dao.jdbc.query.TaskQuery;
import mcaps.apps.prrm.task.dao.jdbc.query.TaskUpdate;
import mcaps.apps.prrm.task.dao.util.TaskField;
import mcaps.apps.prrm.task.dao.util.TaskQueryUtil;
import mcaps.apps.prrm.task.model.Status;
import mcaps.apps.prrm.task.model.Task;
import mcap.core.base.dao.jdbc.SQLDelete;
import mcap.core.base.dao.util.SortOrder;
import mcap.core.base.model.BaseTimeObject;
import mcaps.apps.prrm.util.TableNameConstants;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;

/**
 * This class provides the abstract dao implementation for task using
 * JDBC. The dao operation like query, insert, update, delete, archive and purge
 * are supported.
 * 
 * @author jov
 * @date Oct 20, 2005
 * @version 1.0.1.0
 */
public abstract class AbstractTaskDAOJdbc extends JdbcDaoSupport implements TaskDAO {

	//Static Query
	private TaskQuery taskQuery;
	private TaskByIdQuery taskByIdQuery;
	private TaskInsert taskInsert;
	private TaskUpdate taskUpdate;

	private SQLDelete taskDelete;
		
	//Data Incrementer	
	private DataFieldMaxValueIncrementer taskIncrementer;

	/* (non-Javadoc)
	 * @see org.springframework.dao.support.DaoSupport#initDao()
	 */
	public void initDao() {
		this.taskQuery = new TaskQuery(
														getDataSource(),
														new int[]{TaskField.CREATIONTIME,TaskField.CATEGORY,TaskField.PRIORITY},
														new SortOrder[]{SortOrder.ASCENDING,SortOrder.ASCENDING,SortOrder.DESCENDING}
													);
		
		this.taskByIdQuery = new TaskByIdQuery(getDataSource(),TaskField.ID,SortOrder.ASCENDING);
		this.taskInsert = new TaskInsert(getDataSource());
		this.taskInsert.setIncrementer(this.taskIncrementer);
		this.taskUpdate = new TaskUpdate(getDataSource());
		
		initTaskDelete();
	}
	
	//========================================================================================

	/**
	 * Initialise the static query object for task delete operation. 
	 */
	private void initTaskDelete(){
		String table = TableNameConstants.TASK_TABLENAME;	
		String whereClause = null;
		StringBuffer sb = new StringBuffer();
		int paramTypes[] = null;
		
		sb = new StringBuffer();
		sb.append(TaskField.FIELDS[TaskField.ID]).append(" ")
			.append("= ?");
		whereClause = sb.toString();
			paramTypes = new int[]{
					TaskField.FIELDTYPES[TaskField.ID]};
			
			taskDelete = new SQLDelete(getDataSource(),table,
																					whereClause,paramTypes);
	}
	
//=====================================================================================================
//	DATA INCREMENTER
//=====================================================================================================
	
	/**
	 * Sets the taskIncrementer.
	 * @param taskIncrementer The task incrementer to set.
	 */
	public void setTaskIncrementer(DataFieldMaxValueIncrementer taskIncrementer){
		this.taskIncrementer = taskIncrementer;
	}

//=====================================================================================================
//	OPERATION METHODS, IMPLEMENTING THE ROADDEFECTDAO INTERFACE
//=====================================================================================================
	
	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.task.dao.TaskDAO#getTask(java.lang.Integer)
	 */
	public Task getTask(Integer taskID) throws DataAccessException {
		Object[] params = new Object[]{taskID};
		List taskList = taskByIdQuery.execute(params);
		if(taskList.size() > 0) {
	    Task task = (Task)taskList.get(0);
	    return task;
		}  
	  return null;		
	}

	//========================================================================================

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.task.dao.TaskDAO#getAllTasks()
	 */
	public List getAllTasks() throws DataAccessException {
		return taskQuery.execute();
	}

	//========================================================================================

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.task.dao.TaskDAO#getTasks(mcaps.apps.prrm.task.model.Task)
	 */
	public List getTasks(Task task) throws DataAccessException {
		Object[] obj = TaskQueryUtil.getWhereClauseAndParameterTypes(task);
		Object[] params = TaskQueryUtil.getParameters(task);
		TaskQuery taskQuery =
			new TaskQuery(getDataSource(),(String)obj[0],(int[])obj[1]);
		return taskQuery.execute(params);
	}

	//========================================================================================

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.task.dao.TaskDAO#saveTask(mcaps.apps.prrm.task.model.Task)
	 */
	public void saveTask(Task task) throws DataAccessException {
		System.out.println("Save Task  [AssignedUSerId] : " + task.getAssignedUserId());
		if (task.isNew()){
			 taskInsert.insert(task);
		}else{
			taskUpdate.update(task);
			
		}
	}

	//========================================================================================

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.task.dao.TaskDAO#removeTask(java.lang.Integer)
	 */
	public void removeTask(Task task) throws DataAccessException {
		// TODO Auto-generated method stub
		taskDelete.delete(new Object[]{task.getId()});
	}
	
	//========================================================================================

	/**
	 * @param taskID
	 * @param status
	 * @throws DataAccessException
	 */
	public void changeStatus(Integer taskID, String status)
			throws DataAccessException {
		Object[] params = new Object[]{taskID};
		Task task = (Task)taskByIdQuery.execute(params).get(0);
		if (task != null){
			task.setStatus(status);
			Date date = new Date();
			task.setLastModifiedTime(date);
//			if (status.equals(Status.CLOSED)){
//				task.setClosedDate(date);
//			}
			saveTask(task);
		}
	}
	
	//========================================================================================

	/**
	 * Retrieve and set the identity for the given entity,
	 * assuming that the last executed insert affected that entity
	 * and generated an auto-increment value for it.
	 * @param entity the entity object to retrieved the id for
	 * @see #getIdentityQuery
	 */
	protected void retrieveIdentity(BaseTimeObject entity) {
		entity.setId(new Integer(getJdbcTemplate().queryForInt(getIdentityQuery())));
	}

	//========================================================================================

	/**
	 * Return the identity query for the particular database:
	 * a query that can be used to retrieve the id of a row
	 * that has just been inserted.
	 * @return the identity query
	 */
	protected abstract String getIdentityQuery();


	//========================================================================================

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?