roaddefectdaohibernate.java

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

JAVA
376
字号
package mcaps.apps.prrm.roaddefect.dao.hibernate;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;


import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.hibernate.criterion.Restrictions;
import org.hibernate.exception.DataException;

import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataRetrievalFailureException;
//import org.springframework.orm.hibernate.SessionFactoryUtils;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import mcap.core.logging.Log;
import mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO;
import mcaps.apps.prrm.roaddefect.model.RoadDefect;
import mcaps.apps.prrm.roaddefect.model.RoadDefectStatus;
import mcaps.apps.prrm.util.TableNameConstants;

 

/**
 * This is an implementation of RoadDefectDAO using Hibernate. It interacts with
 * Spring's HibernateTemplate to save/delete and retrieve RoadDefect objects.
 * 
 * @author jov
 * @date Jan 4, 2006
 * @version 1.0.1.0
 */
public class RoadDefectDAOHibernate extends HibernateDaoSupport implements RoadDefectDAO{

	private final static String className="mcaps.apps.prrm.roaddefect.dao.hibernate.";
	

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefect(java.lang.Integer)
	 */
	public RoadDefect getRoadDefect(Integer roadDefectID){
		HibernateTemplate template = getHibernateTemplate ();
		RoadDefect roadDefect = (RoadDefect) template.get (RoadDefect.class, roadDefectID);
		
		if (roadDefect == null) {
			Log.warn ("Road Defect with specified identifier [" +
					roadDefectID + "] not found.");
			
			throw new DataRetrievalFailureException ("Road Defect with specified identifier [" +
					roadDefectID + "] not found.");
			
		}
		
		return roadDefect;
	}

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefects(mcaps.apps.prrm.roaddefect.model.RoadDefect)
	 */
	public List getRoadDefects (RoadDefect roadDefect) {
		int cnt = 0;
		if (roadDefect == null) return getAllRoadDefects();
		Criteria c = this.getSession().createCriteria(RoadDefect.class);
		
		String defectDetail = roadDefect.getDefectDetail();
		if (defectDetail != null){
			if (defectDetail.trim().length() > 0){
				c.add(Restrictions.like("defectDetail", "%" + defectDetail + "%"));
				cnt++;
			}
		}
		String location = roadDefect.getLocation();
		if (location != null){
			if (location.trim().length() > 0){
				c.add(Restrictions.like("location", "%" + location + "%"));
				cnt++;
			}
		}
		String defectType = roadDefect.getDefectType();
		if (defectType != null){
			if (defectType.trim().length() > 0){
				c.add(Restrictions.eq("defectType", defectType));
				cnt++;
			}
		}
		String severity = roadDefect.getSeverity();
		if (severity != null){
			if (severity.trim().length() > 0){
				c.add(Restrictions.eq("severity", severity));
				cnt++;
			}
		}
		String status = roadDefect.getStatus();
		if (status != null){
			if (status.trim().length() > 0){
				c.add(Restrictions.eq("status", status));
				cnt++;
			}
		}
		//Return empty list else all records will be returned if 
		//no restriction is applied.
		if (cnt > 0){
			return c.list();
		}
		return new ArrayList();
	}

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getAllRoadDefects()
	 */
	public List getAllRoadDefects () {
		return getHibernateTemplate ().find ("from RoadDefect");
	}

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#saveRoadDefect(mcaps.apps.prrm.roaddefect.model.RoadDefect)
	 */
	public void saveRoadDefect (RoadDefect roadDefect) {

		
		Log.info(className + " saveRoadDefect() before saveOrUpdate");
		getHibernateTemplate ().saveOrUpdate (roadDefect);
		Log.info(className + " saveRoadDefect() after saveOrUpdate");
		getHibernateTemplate ().flush ();
		Log.info(className + " saveRoadDefect() after flush");
	
	}

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#removeRoadDefect(java.lang.Integer)
	 */
	public void removeRoadDefect (RoadDefect roadDefect) {
		getHibernateTemplate ().delete (roadDefect);
	}

	/* (non-Javadoc)
	 * @see mcaps.apps.prrm.roaddefect.dao.RoadDefectDAO#getRoadDefectsByContactID(java.lang.Integer)
	 */
	public List getRoadDefectsByContactID (Integer contactID) {
		Criteria c = this.getSession().createCriteria(RoadDefect.class);
		c.add(Restrictions.eq("contactID", contactID));
			return c.list();
	}

	public int purgeRoadDefect (Date startDate, Date endDate) {
		int count;
		List list = this.getClosedRoadDefects(startDate, endDate);
		count = list.size();
		
		HibernateTemplate template = getHibernateTemplate ();
		Session sess=template.getSessionFactory().openSession();
		
		
		try {
			Connection con=sess.connection() ;
			Statement stat;
			stat=con.createStatement();
			
			String criteria=null;
			int i=0;
			Iterator iter=list.iterator();
			while(iter.hasNext())
			{
				RoadDefect roadDefect=(RoadDefect)iter.next() ;
				if(i==0)
				{
					criteria=" roadDefectId = '" + roadDefect.getId() + "' ";
				}
				else
				{
					criteria=criteria + " or roadDefectId = '" + roadDefect.getId() + "' ";
				}
				i=i+1;
				
			}
			
			//purge task
			if(criteria !=null)
			{
				Log.info("Purge Task = " + "delete from " + TableNameConstants.TASK_TABLENAME + " where " + criteria);
				stat.execute("delete from " + TableNameConstants.TASK_TABLENAME + " where " + criteria );
			}
			
			//purge road inspection
			if(criteria !=null)
			{
				Log.info("Purge Task = " + "delete from " + TableNameConstants.ROADINSPECTION_TABLENAME + " where " + criteria);
				stat.execute("delete from " + TableNameConstants.ROADINSPECTION_TABLENAME + " where " + criteria );
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new DataAccessResourceFailureException ("Exception occured when purge Task and Road Inspection.");
			
		}
		
		Log.info("mcaps.apps.prrm.roaddefect.dao.hibernate.RoadDefectDAOHibernate purgeRoadDefect Count =" + count);
		//purge road defect
		getHibernateTemplate ().deleteAll (list);
		
		return count;
	}

	public int copyRoadDefectToFile (Date startDate, Date endDate) {
		// TODO Auto-generated method stub
		String roadDefectTable = TableNameConstants.ROADDEFECT_TABLENAME;
		String contactTable = TableNameConstants.CONTACT_TABLENAME;
		String taskTable=TableNameConstants.TASK_TABLENAME;
		String roadInspectionTable=TableNameConstants.ROADINSPECTION_TABLENAME;
		StringBuffer sb = new StringBuffer();
		
		//Get the file name prefix
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
		dateFormat.setLenient(false);

		sb.append(dateFormat.format(new Date())).append("_");
		String roadDefectFile = sb.toString() + roadDefectTable + ".dat";
		String contactFile = sb.toString() + contactTable  + ".dat";
		String taskFile=sb.toString() + taskTable  + ".dat";
		String roadInspectionFile=sb.toString() + roadInspectionTable  + ".dat";

		if(startDate ==null)
		{
			Calendar cal=Calendar.getInstance();
			cal.set(0,0,0);
			startDate= new Date(cal.getTimeInMillis());
		}

		if(endDate ==null)
		{
			Calendar cal=Calendar.getInstance();
			cal.set(9999,0,0);
			endDate= new Date(cal.getTimeInMillis());
		}
		
		HibernateTemplate template = getHibernateTemplate ();
		Session sess=template.getSessionFactory().openSession();
		SQLQuery query;
		
		List roadDefects=this.getClosedRoadDefects(startDate,endDate);
		
		try{
			 query=sess.createSQLQuery("select " + roadDefectTable + ".* into outfile '" + roadDefectFile + "' from " + roadDefectTable + " where " +
				" lastModifiedTime between :begin and :end  and status='" + RoadDefectStatus.CLOSED + "'");
		// Export RoadDefect
		query.setDate("begin",startDate);
		query.setDate("end",endDate);
		query.list();
		}
		catch(org.hibernate.exception.GenericJDBCException ex)
		{//do nothing
			
		}
		
		try{
		query=sess.createSQLQuery("select " + contactTable + ".* into outfile '" + contactFile + "' from " + contactTable + " where " +
		" lastModifiedTime between :begin and :end");
		// Export RoadDefect
		query.setDate("begin",startDate);
		query.setDate("end",endDate);
		query.list(); 
		}catch(org.hibernate.exception.GenericJDBCException ex)
		{
			//do nothing
		}
		
		//Export Task
		Iterator iter=roadDefects.iterator();
		while(iter.hasNext())
		{
			RoadDefect roadDefect=(RoadDefect)iter.next();
		try{
			query=sess.createSQLQuery("select " + taskTable + ".* into outfile '" + taskFile + "' from " + taskTable + " where " +
			" roadDefectId = :roadDefectId");
			// Export RoadDefect
			query.setInteger("roadDefectId",roadDefect.getId().intValue() );
			
			
			query.list(); 
			}catch(org.hibernate.exception.GenericJDBCException ex)
			{
				//do nothing
			}
		 }
		
		//Export Inspection Report
		iter=roadDefects.iterator();
		while(iter.hasNext())
		{
			RoadDefect roadDefect=(RoadDefect)iter.next();
		try{
			query=sess.createSQLQuery("select " + roadInspectionTable + ".* into outfile '" + roadInspectionFile + "' from " + roadInspectionTable + " where " +
			" roadDefectId = :roadDefectId");
			// Export RoadDefect
			query.setInteger("roadDefectId",roadDefect.getId().intValue() );
			
			query.list(); 
			}catch(org.hibernate.exception.GenericJDBCException ex)
			{
				//do nothing
			}
		 }
				
		
		return purgeRoadDefect(startDate,endDate);
	
		
		
	}

	public List getClosedRoadDefects (Date startLastModifiedTime, Date endLastModifiedTime) {
		// TODO Auto-generated method stub
		String roadDefectTable = TableNameConstants.ROADDEFECT_TABLENAME;
		HibernateTemplate template = getHibernateTemplate ();
		
		if(startLastModifiedTime ==null)
		{
			Calendar cal=Calendar.getInstance();
			cal.set(0,0,0);
			startLastModifiedTime= new Date(cal.getTimeInMillis());
		}

		if(endLastModifiedTime ==null)
		{
			Calendar cal=Calendar.getInstance();
			cal.set(9999,0,0);
			endLastModifiedTime= new Date(cal.getTimeInMillis());
		}

		Log.info("mcaps.apps.prrm.roaddefect.dao.hibernate.RoadDefectDAOHibernate getRoadDefects startLastModifiedTime =" + startLastModifiedTime);
		Log.info("mcaps.apps.prrm.roaddefect.dao.hibernate.RoadDefectDAOHibernate getRoadDefects endLastModifiedTime =" + endLastModifiedTime);

		
		Session sess=template.getSessionFactory().openSession();
		
		Query query=sess.createQuery(" from " + roadDefectTable + " where " +
				" lastModifiedTime between :begin and :end and status='" + RoadDefectStatus.CLOSED + "'");
		query.setDate("begin",startLastModifiedTime);
		query.setDate("end",endLastModifiedTime);
		List list=query.list();
		
		return list;
	}

	public void changeRoadDefectStatus (Integer roadDefectID, String status) {

	
		RoadDefect roadDefect=this.getRoadDefect(roadDefectID);
		roadDefect.setStatus(status);
		Date date = new Date();
		
		roadDefect.setLastModifiedTime(date);
		this.saveRoadDefect(roadDefect);
		
	}


}

⌨️ 快捷键说明

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