com.rta.vsd.data.service.impl.OwnerInfoDataServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.rta.vsd.data.service.impl.OwnerInfoDataServiceImpl.java

Source

/**<pre> 
 *==========================================================================
 *
 * Copyright: (C) IBM Corporation 2010 -- IBM Internal Use Only
 *
 *==========================================================================
 *
 *    FILE: OwnerInfoDataServiceImpl.java
 *    CREATOR: Eldon Barrows
 *    DEPT: GBS PAK
 *    DATE: 01/05/2011
 *
 *-PURPOSE-----------------------------------------------------------------
 * This is the implementation of IOwnerInfoDataService
 * 
 *-------------------------------------------------------------------------
 *
 *
 *-CHANGE LOG--------------------------------------------------------------
 * 01/05/2011 Eldon Initial coding.         
 *==========================================================================
 * </pre> */

package com.rta.vsd.data.service.impl;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.AliasToBeanResultTransformer;

import com.rta.vsd.data.DataServiceContext;
import com.rta.vsd.data.service.IDataService;
import com.rta.vsd.data.service.IOwnerInfoDataService;
import com.rta.vsd.dto.VsdOwnerInfo;
import com.rta.vsd.dto.VsdVehicleInfo;
import com.rta.vsd.dto.custom.CustomOperatorDTO;
import com.rta.vsd.dto.custom.VehiclePlate;
import com.rta.vsd.exception.data.VSDDataAccessException;
import com.rta.vsd.utility.VSDLogger;

/**
 * This is the implementation of IOwnerInfoDataService
 * 
 * @author Eldon Barrows
 *
 */
public class OwnerInfoDataServiceImpl extends DataServiceImpl implements IOwnerInfoDataService {

    private static Logger logger = VSDLogger.init(OwnerInfoDataServiceImpl.class.getName());

    /**
     * 
     * Save an owners information
     * 
     * @author Eldon Barrows
     * @param dsContext
     * @param retrieveArabicData
     * @param vsdVehicleInfo
     * @return VsdOwnerInfo
     * @throws VSDDataAccessException
     */
    public VsdOwnerInfo saveOwnerInfo(DataServiceContext dsContext, boolean retrieveArabicData,
            VsdOwnerInfo vsdOwnerInfo) throws VSDDataAccessException {
        logger.info("saveOwnerInfo -- START");
        try {
            Session session = (Session) dsContext.getInternalContext();
            session.save(vsdOwnerInfo);
        } catch (Exception ex) {
            logger.error("An error occured in saveOwnerInfo()");
            throw new VSDDataAccessException(ex.getMessage(), ex);
        }
        logger.info("saveOwnerInfo -- END");
        return vsdOwnerInfo;
    }

    /**
     * 
     * Gets a list of operators with the most violations between two specified dates. 
     * 
     * @author Eldon Barrows
     * @param dsContext
     * @param retrieveArabicData
     * @param fromDate
     * @param toDate
     * @param top
     * @return List<CustomOperatorDTO>
     * @throws VSDDataAccessException
     */
    public List<CustomOperatorDTO> getViolatingOperatorsByDateRange(DataServiceContext dsContext,
            boolean retrieveArabicData, Date fromDate, Date toDate, int top) throws VSDDataAccessException {
        logger.info("getViolatingOperatorsByDateRange -- START");
        /*SELECT
         *
           FROM
         (
             SELECT
                 COUNT(DISTINCT(v.VIOLATION_ID)) AS "violationCount",
                 oi.OWNER_NAME                     AS "operatorName",
                 oi.OWNER_NAME_A             AS \"operatorNameA\", 
                 oi.TRAFFIC_FILE_NUMBER       AS \"trafficFileNumber\"
             FROM
                 VSD_VIOLATION v
             JOIN VSD_INSPECTION i
             ON
                 v.VIOLATION_ID = i.VIOLATION_ID AND i.IS_DELETED = 'F'
             JOIN VSD_VEHICLE_INFO vi
             ON
                 i.VEHICLE_INFO_ID = vi.VEHICLE_INFO_ID AND vi.IS_DELETED = 'F'
             JOIN VSD_OWNER_INFO oi
             ON
                 vi.VEHICLE_INFO_ID = oi.VEHICLE_INFO_ID  AND oi.IS_DELETED = 'F'
             WHERE
                v.IS_DELETED = 'F' AND
                 v.REPORTED_DATE BETWEEN to_date('2011-05-15','YYYY-MM-DD') AND to_date('2011-11-30',
                 'YYYY-MM-DD')
             GROUP BY
                 oi.OWNER_NAME, oi.OWNER_NAME_A, oi.TRAFFIC_FILE_NUMBER
             ORDER BY
                 COUNT(DISTINCT(i.VIOLATION_ID)) DESC
         )
           WHERE
         rownum < 11*/
        try {
            Session session = (Session) dsContext.getInternalContext();
            String defaultSchema = DataServiceImpl.DEFAULT_SCHEMA_NAME;
            StringBuffer query = new StringBuffer(
                    "SELECT * FROM ( SELECT COUNT(DISTINCT(v.VIOLATION_ID)) AS \"violationCount\", oi.OWNER_NAME AS \"operatorName\", oi.OWNER_NAME_A AS \"operatorNameA\", oi.TRAFFIC_FILE_NUMBER AS \"trafficFileNumber\" "
                            + " FROM " + defaultSchema + ".VSD_VIOLATION v JOIN " + defaultSchema
                            + ".VSD_INSPECTION i ON v.VIOLATION_ID = i.VIOLATION_ID AND i.IS_DELETED = '"
                            + IDataService.BOOL_FALSE + "' " + " JOIN " + defaultSchema
                            + ".VSD_VEHICLE_INFO vi ON i.VEHICLE_INFO_ID = vi.VEHICLE_INFO_ID AND vi.IS_DELETED = '"
                            + IDataService.BOOL_FALSE + "' " + " JOIN " + defaultSchema
                            + ".VSD_OWNER_INFO oi ON vi.VEHICLE_INFO_ID = oi.VEHICLE_INFO_ID AND oi.IS_DELETED = '"
                            + IDataService.BOOL_FALSE + "' " + " WHERE v.IS_DELETED = '" + IDataService.BOOL_FALSE
                            + "' ");
            if (fromDate != null && toDate != null) {
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                query.append(" AND to_date(to_char(v.REPORTED_DATE,'YYYY-MM-DD'),'YYYY-MM-DD') BETWEEN to_date('"
                        + dateFormat.format(fromDate) + "','YYYY-MM-DD') AND to_date('" + dateFormat.format(toDate)
                        + "','YYYY-MM-DD') ");
            }
            query.append(
                    " GROUP BY oi.OWNER_NAME, oi.OWNER_NAME_A, oi.TRAFFIC_FILE_NUMBER ORDER BY COUNT(DISTINCT(i.VIOLATION_ID)) DESC ) WHERE rownum <  "
                            + (top + 1));
            List<CustomOperatorDTO> results = session.createSQLQuery(query.toString())
                    .addScalar("violationCount", Hibernate.LONG).addScalar("operatorName")
                    .addScalar("operatorNameA").addScalar("trafficFileNumber")
                    .setResultTransformer(new AliasToBeanResultTransformer(CustomOperatorDTO.class)).list();
            logger.info("getViolatingOperatorsByDateRange -- END");
            return results;
        } catch (Exception ex) {
            logger.error("An error occured in getViolatingOperatorsByDateRange()");
            logger.error(ex);
            throw new VSDDataAccessException(ex.getMessage(), ex);
        }
    }

    /**
     * 
     * Gets the owner info from the latest plate details provided.
     * 
     * @author Eldon Barrows
     * @param dsContext
     * @param retrieveArabicData
     * @param plateDetails
     * @return 
     * @throws VSDDataAccessException
     */
    public VsdOwnerInfo getOwnerInfoByLatestPlateDetails(DataServiceContext dsContext, boolean retrieveArabicData,
            VehiclePlate plateDetails) throws VSDDataAccessException {
        logger.info("getOwnerInfoByLatestPlateDetails -- START");
        try {
            Session session = (Session) dsContext.getInternalContext();
            DetachedCriteria dc = DetachedCriteria.forClass(VsdVehicleInfo.class, "vi")
                    .add(Restrictions.eq("vi.isDeleted", IDataService.BOOL_FALSE))
                    .createCriteria("vi.vsdOwnerInfos", "oi", Criteria.INNER_JOIN)
                    .add(Restrictions.eq("oi.isDeleted", IDataService.BOOL_FALSE));
            dc.setProjection(Projections.max("vi.createdTimestamp"));
            if (plateDetails != null && plateDetails.getPlateCategory() != null
                    && !plateDetails.getPlateCategory().equals("")) {
                dc.add(Restrictions.eq("vi.vehiclePlateCategory", plateDetails.getPlateCategory()));
            }
            if (plateDetails != null && plateDetails.getPlateCode() != null
                    && !plateDetails.getPlateCode().equals("")) {
                dc.add(Restrictions.eq("vi.vehiclePlateCode", plateDetails.getPlateCode()));
            }
            if (plateDetails != null && plateDetails.getPlateNumber() != null
                    && !plateDetails.getPlateNumber().equals("")) {
                dc.add(Restrictions.eq("vi.vehiclePlateNumber", plateDetails.getPlateNumber()));
            }
            if (plateDetails != null && plateDetails.getPlateSource() != null
                    && !plateDetails.getPlateSource().equals("")) {
                dc.add(Restrictions.eq("vi.vehiclePlateSource", plateDetails.getPlateSource()));
            }

            Criteria crit = session.createCriteria(VsdVehicleInfo.class, "vInfo")
                    .createCriteria("vInfo.vsdOwnerInfos", "oi", Criteria.INNER_JOIN,
                            Restrictions.eq("oi.isDeleted", IDataService.BOOL_FALSE))
                    .add(Restrictions.eq("vInfo.isDeleted", IDataService.BOOL_FALSE))
                    .add(Property.forName("vInfo.createdTimestamp").in(dc));
            //                     crit.setProjection(Projections.property("vInfo.vehicleInfoId"));                     
            if (plateDetails != null && plateDetails.getPlateCategory() != null
                    && !plateDetails.getPlateCategory().equals("")) {
                crit.add(Restrictions.eq("vInfo.vehiclePlateCategory", plateDetails.getPlateCategory()));
            }
            if (plateDetails != null && plateDetails.getPlateCode() != null
                    && !plateDetails.getPlateCode().equals("")) {
                crit.add(Restrictions.eq("vInfo.vehiclePlateCode", plateDetails.getPlateCode()));
            }
            if (plateDetails != null && plateDetails.getPlateNumber() != null
                    && !plateDetails.getPlateNumber().equals("")) {
                crit.add(Restrictions.eq("vInfo.vehiclePlateNumber", plateDetails.getPlateNumber()));
            }
            if (plateDetails != null && plateDetails.getPlateSource() != null
                    && !plateDetails.getPlateSource().equals("")) {
                crit.add(Restrictions.eq("vInfo.vehiclePlateSource", plateDetails.getPlateSource()));
            }
            crit.addOrder(Order.desc("vInfo.createdTimestamp"));
            List<VsdVehicleInfo> vehicles = crit.list();
            if (vehicles == null || vehicles.isEmpty())
                return null;
            Long vehicleInfoId = (Long) vehicles.get(0).getVehicleInfoId();
            System.out.println("vehicleInfoId " + vehicleInfoId);
            VsdOwnerInfo ownerInfo = (VsdOwnerInfo) session.createCriteria(VsdOwnerInfo.class, "oi")
                    .add(Restrictions.eq("oi.isDeleted", IDataService.BOOL_FALSE))
                    .add(Restrictions.eq("oi.vehicleInfoId", vehicleInfoId)).uniqueResult();

            logger.info("getOwnerInfoByLatestPlateDetails -- END");
            return ownerInfo;
        } catch (Exception ex) {
            logger.error("An error occured in getOwnerInfoByLatestPlateDetails()");
            throw new VSDDataAccessException(ex.getMessage(), ex);
        }
    }

    //   /**
    //    * 
    //    * Searches for the fleet operator based on the criteria provided
    //    * 
    //    * @author Eldon Barrows
    //    * @param dsContext
    //    * @param retrieveArabicData
    //    * @param fleetSearchCriteria
    //    * @return List<FleetSearchResult>
    //    * @throws VSDDataAccessException
    //    */
    //   public List<FleetSearchResult> searchFleetOperator(DataServiceContext dsContext, boolean retrieveArabicData, FleetSearchCriteria fleetSearchCriteria) throws VSDDataAccessException {
    //      logger.info("searchFleetOperator -- START");
    //      List<FleetSearchResult> result = null;
    //      try {
    //         Session session = (Session) dsContext.getInternalContext();
    //         logger.info("got context");
    //         ProjectionList projectionList = Projections.projectionList();
    //         projectionList.add(Projections.property("owner.ownerName"), "operatorName");
    //         projectionList.add(Projections.property("owner.tradeLicenseNumber"), "tradeLicenseNumber");
    //         projectionList.add(Projections.property("owner.trafficFileNumber"), "trafficFileNumber");
    ////         projectionList.add(Projections.countDistinct("vehicleInfo"), "totalNumOfVehicles");
    ////         projectionList.add(Projections.countDistinct("vehicleInfo"), "totalNumOfViolations");
    //         logger.info("made projections");
    //         Criteria criteria = session.createCriteria(VsdVehicleInfo.class, "vehicleInfo")
    //                        .add(Restrictions.eq("vehicleInfo.isDeleted", IDataService.BOOL_FALSE));
    //                        if(fleetSearchCriteria.getPlateNumber() != null && fleetSearchCriteria.getPlateNumber() != "") {
    //                           criteria.add(Restrictions.eq("vehicleInfo.vehiclePlateNumber", fleetSearchCriteria.getPlateNumber()));
    //                        }
    //                        if(fleetSearchCriteria.getPlateCategory() != null && fleetSearchCriteria.getPlateCategory() != "") {
    //                           criteria.add(Restrictions.eq("vehicleInfo.vehiclePlateCategory", fleetSearchCriteria.getPlateCategory()));
    //                        }
    //                        if(fleetSearchCriteria.getPlateCode() != null && fleetSearchCriteria.getPlateCode() != "") {
    //                           criteria.add(Restrictions.eq("vehicleInfo.vehiclePlateCode", fleetSearchCriteria.getPlateCode()));
    //                        }
    //                        if(fleetSearchCriteria.getEmirate() != null && fleetSearchCriteria.getEmirate() != "") {
    //                           criteria.add(Restrictions.eq("vehicleInfo.vehicleCountry", fleetSearchCriteria.getEmirate()));
    //                        }
    //                        criteria.createCriteria("vehicleInfo.vsdOwnerInfos", "owner")
    //                        .add(Restrictions.or(Restrictions.eq("owner.isDeleted", IDataService.BOOL_FALSE), Restrictions.isNull("owner.isDeleted")));
    //                        if(fleetSearchCriteria.getOperatorName() != null && fleetSearchCriteria.getOperatorName()!= "") {
    //                           criteria.add(Restrictions.ilike("owner.ownerName", fleetSearchCriteria.getOperatorName()));
    //                        }
    //                        if(fleetSearchCriteria.getTradeLicenseNumber() != null && fleetSearchCriteria.getTradeLicenseNumber() != "") {
    //                           criteria.add(Restrictions.ilike("owner.tradeLicenseNumber", fleetSearchCriteria.getTradeLicenseNumber()));
    //                        }
    //                        if(fleetSearchCriteria.getTrafficFileNumber() != null && fleetSearchCriteria.getTrafficFileNumber() != "") {
    //                           criteria.add(Restrictions.ilike("owner.trafficFileNumber", fleetSearchCriteria.getTrafficFileNumber()));
    //                        }
    //                        criteria.createCriteria("vehicleInfo.vsdInspections","inspections")
    //                        .add(Restrictions.or(Restrictions.eq("inspections.isDeleted", IDataService.BOOL_FALSE), Restrictions.isNull("inspections.isDeleted")))
    //                        .createCriteria("inspections.vsdViolation", "violations")
    //                        .add(Restrictions.or(Restrictions.eq("violations.isDeleted", IDataService.BOOL_FALSE), Restrictions.isNull("violations.isDeleted")));
    //                        logger.info("after criteria");
    //                        
    //                        criteria.setProjection(projectionList);
    //                        logger.info("after setprojection");
    //         result = criteria.setResultTransformer(new AliasToBeanResultTransformer(FleetSearchResult.class)).list();
    //
    //      }catch(Exception ex) {
    //         logger.error("An error occured in searchFleetOperator()");
    //         throw new VSDDataAccessException(ex.getMessage(),ex);
    //      }
    //      logger.info("searchFleetOperator -- END");
    //      return result;
    //   }

}