abstractroaddefectdaojdbc.java

来自「Java的框架」· Java 代码 · 共 577 行 · 第 1/2 页

JAVA
577
字号
package mcaps.apps.prrm.roaddefect.dao.jdbc;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.sql.Timestamp;

import javax.sql.DataSource;

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

import mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.ContactByIdQuery;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.ContactExport;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.ContactInsert;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.ContactUpdate;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.RoadDefectByIdQuery;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.RoadDefectExport;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.RoadDefectInsert;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.RoadDefectQuery;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.RoadDefectUpdate;
import mcaps.apps.prrm.roaddefect.dao.jdbc.query.RoadQuery;
import mcaps.apps.prrm.roaddefect.dao.util.ContactField;
import mcaps.apps.prrm.roaddefect.dao.util.RoadDefectField;
import mcaps.apps.prrm.roaddefect.dao.util.RoadDefectQueryUtil;
import mcaps.apps.prrm.roaddefect.dao.util.RoadField;
import mcaps.apps.prrm.roaddefect.model.Contact;
import mcaps.apps.prrm.roaddefect.model.RoadDefect;
import mcaps.apps.prrm.roaddefect.model.RoadDefectStatus;
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;


/**
 * This class provides the abstract dao implementation for road defect using
 * JDBC. The dao operation like query, insert, update, delete, archive and purge
 * are supported.
 * 
 * @author jov
 * @date Sept 27, 2005
 * @version 1.0.1.0
 */
public abstract class AbstractRoadDefectDAOJdbc extends JdbcDaoSupport implements RoadDefectDAO {

	private DataSource roadMapDataSource;
	
	//Static Query
	private RoadQuery roadQuery;
	private RoadDefectQuery roadDefectQuery;
	private RoadDefectByIdQuery roadDefectByIdQuery;
	private RoadDefectInsert roadDefectInsert;
	private RoadDefectUpdate roadDefectUpdate;
	private SQLDelete roadDefectPurgeStartEnd;
	private SQLDelete roadDefectPurgeStart;
	private SQLDelete roadDefectPurgeEnd;
	private SQLDelete roadDefectDelete;
	private ContactByIdQuery contactByIdQuery;
	private ContactInsert contactInsert;
	private ContactUpdate contactUpdate;
		
	//Dynamic Query
	private RoadDefectExport roadDefectExport;
	private ContactExport contactExport;
	
	//Data Incrementer	
	private DataFieldMaxValueIncrementer roadDefectIncrementer;
	private DataFieldMaxValueIncrementer contactIncrementer;

	//Setting up the static query object
	/* (non-Javadoc)
	 * @see org.springframework.dao.support.DaoSupport#initDao()
	 */
	public void initDao() {
		
		this.roadQuery = new RoadQuery(roadMapDataSource,
				RoadField.FIELDS[RoadField.GID] + " = ?",
				new int[] {RoadField.FIELDTYPES[RoadField.GID]},
				new int[]{RoadField.ROADNAME},
				new SortOrder[]{SortOrder.ASCENDING}
		);
		
		this.contactByIdQuery = new ContactByIdQuery(getDataSource());
		this.roadDefectQuery = new RoadDefectQuery(
														getDataSource(),
														new int[]{RoadDefectField.CREATIONTIME,RoadDefectField.SEVERITY},
														new SortOrder[]{SortOrder.ASCENDING,SortOrder.ASCENDING}
													);
		
		this.roadDefectQuery.setContactByIdQuery(contactByIdQuery);
		this.roadDefectQuery.setRoadQuery(roadQuery);
		
		this.roadDefectByIdQuery = new RoadDefectByIdQuery(getDataSource(),RoadDefectField.ID,SortOrder.ASCENDING);
		this.roadDefectByIdQuery.setContactByIdQuery(contactByIdQuery);
		this.roadDefectByIdQuery.setRoadQuery(roadQuery);

		this.roadDefectInsert = new RoadDefectInsert(getDataSource());
		this.roadDefectInsert.setIncrementer(this.roadDefectIncrementer);
		
		this.contactInsert = new ContactInsert(getDataSource());
		this.contactInsert.setIncrementer(this.contactIncrementer);
		
		this.roadDefectUpdate = new RoadDefectUpdate(getDataSource());
		this.contactUpdate = new ContactUpdate(getDataSource());
		
		initRoadDefectDelete();
		initRoadDefectPurge();
	}
	
	//========================================================================================

	/**
	 * Initialise the static query object for road defect delete operation. 
	 */
	private void initRoadDefectDelete(){
		String roadDefectTable = TableNameConstants.ROADDEFECT_TABLENAME;
		String contactTable = TableNameConstants.CONTACT_TABLENAME;
		
		String whereClause = null;
		StringBuffer sb = new StringBuffer();
		int paramTypes[] = null;
		
		//Create the last conditional statement of the whereClause
		//so that it can be appended in the if statement.
		sb.append("AND").append(" ")
			.append(roadDefectTable).append(".")
			.append(RoadDefectField.FIELDS[RoadDefectField.CONTACTID]).append(" ")
			.append("=").append(" ")
			.append(contactTable).append(".")
			.append(ContactField.FIELDS[ContactField.ID]);
		String tempStr = sb.toString();
		
		//Create full qualified LastModifiedTime field name 
		//in terms of <table>.<field> due to existence of the 
		//same field in both select tables.
		sb = new StringBuffer();
		sb.append(roadDefectTable).append(".")
		.append(RoadDefectField.FIELDS[RoadDefectField.ID]);
		String roadDefectId = sb.toString();
		
		sb = new StringBuffer();
			sb.append(roadDefectId).append(" ")
				.append("= ?").append(" ")
				.append(tempStr);
			whereClause = sb.toString();
			paramTypes = new int[]{
											RoadDefectField.FIELDTYPES[RoadDefectField.ID]};
			
		roadDefectDelete = new SQLDelete(getDataSource(),
														new String[]{roadDefectTable, contactTable},
														new String[]{roadDefectTable, contactTable},
														whereClause,paramTypes);
	}
	
	//========================================================================================

	/**
	 * Initialise the static query object for road defect purge operation. 
	 */
	private void initRoadDefectPurge(){
		String roadDefectTable = TableNameConstants.ROADDEFECT_TABLENAME;
		String contactTable = TableNameConstants.CONTACT_TABLENAME;
		
		StringBuffer sb = new StringBuffer();
		int paramTypes[] = null;
		
		//Create the last conditional statement of the whereClause
		//so that it can be appended in the if statement.
		sb.append("AND").append(" ")
			.append(roadDefectTable).append(".")
			.append(RoadDefectField.FIELDS[RoadDefectField.CONTACTID]).append(" ")
			.append("=").append(" ")
			.append(contactTable).append(".")
			.append(ContactField.FIELDS[ContactField.ID]);
		String tempStr = sb.toString();
		
		//Create full qualified LastModifiedTime field name in terms of 
		//<table>.<field> due to existence of the same field in both select tables.
		sb = new StringBuffer();
		sb.append(roadDefectTable).append(".")
		.append(RoadDefectField.FIELDS[RoadDefectField.LASTMODIFIEDTIME]);
		String lastModifiedTime = sb.toString();
		
		//roadDefectPurgeStartEnd
		sb = new StringBuffer();
		sb.append(lastModifiedTime).append(" ")
			.append(">= ?").append(" ")
			.append("AND").append(" ")
			.append(lastModifiedTime).append(" ")
			.append("<= ?").append(" ")
		.append(tempStr);
		paramTypes = new int[]{
											RoadDefectField.FIELDTYPES[RoadDefectField.LASTMODIFIEDTIME],
											RoadDefectField.FIELDTYPES[RoadDefectField.LASTMODIFIEDTIME]
											};
		roadDefectPurgeStartEnd = new SQLDelete(getDataSource(),
			new String[]{roadDefectTable, contactTable},
			new String[]{roadDefectTable, contactTable},
			sb.toString(),paramTypes);
			
		//roadDefectPurgeStart
		sb = new StringBuffer();
		sb.append(lastModifiedTime).append(" ")
		.append(">= ?").append(" ")
		.append(tempStr);
		paramTypes = new int[]{RoadDefectField.FIELDTYPES[RoadDefectField.LASTMODIFIEDTIME]};
		
		roadDefectPurgeStart = new SQLDelete(getDataSource(),
			new String[]{roadDefectTable, contactTable},
			new String[]{roadDefectTable, contactTable},
			sb.toString(),paramTypes);

		//roadDefectPurgeEnd
		sb = new StringBuffer();
		sb.append(lastModifiedTime).append(" ")
		.append("<= ?").append(" ")
		.append(tempStr);
		paramTypes = new int[]{RoadDefectField.FIELDTYPES[RoadDefectField.LASTMODIFIEDTIME]};
		
		roadDefectPurgeEnd = new SQLDelete(getDataSource(),
			new String[]{roadDefectTable, contactTable},
			new String[]{roadDefectTable, contactTable},
			sb.toString(),paramTypes);
	}



//=====================================================================================================
//	DATA INCREMENTER
//=====================================================================================================
	
	/**
	 * Sets the contactIncrementer.
	 * @param contactIncrementer The contactIncrementer to set.
	 */
	public void setContactIncrementer (
			DataFieldMaxValueIncrementer contactIncrementer) {
		this.contactIncrementer = contactIncrementer;
	}

	
	/**
	 * Sets the roadDefectIncrementer.
	 * @param roadDefectIncrementer The roadDefectIncrementer to set.
	 */
	public void setRoadDefectIncrementer (
			DataFieldMaxValueIncrementer roadDefectIncrementer) {
		this.roadDefectIncrementer = roadDefectIncrementer;
	}
	
//=====================================================================================================
//	OPERATION METHODS, IMPLEMENTING THE ROADDEFECTDAO INTERFACE
//=====================================================================================================
	
	/* (non-Javadoc)
	 * @see mcapss.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefect(java.lang.Integer)
	 */
	public RoadDefect getRoadDefect(Integer roadDefectID) throws DataAccessException {
		Object[] params = new Object[]{roadDefectID};
		List roadDefectList = roadDefectByIdQuery.execute(params);
		if(roadDefectList.size() > 0) {
	    RoadDefect roadDefect = (RoadDefect)roadDefectList.get(0);
	    if (roadDefect != null){
	    	params = new Object[]{roadDefect.getContact().getId()};
	    	List contactList = contactByIdQuery.execute(params);
	    	if(contactList.size() > 0){
	    		Contact contact = (Contact)contactList.get(0);
	    		roadDefect.setContact(contact);
	    	}
	    }
    	return roadDefect;	    	
		}  
	  return null;		
	}

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

	/* (non-Javadoc)
	 * @see mcapss.prrm.roaddefect.dao.RoadDefectDAO#getAllRoadDefects()
	 */
	public List getAllRoadDefects() throws DataAccessException {
		return roadDefectQuery.execute();
	}

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

⌨️ 快捷键说明

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