Java tutorial
/* * Copyright(C) 2014 * NEC Corporation All rights reserved. * * No permission to use, copy, modify and distribute this software * and its documentation for any purpose is granted. * This software is provided under applicable license agreement only. */ package com.nec.harvest.service.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hibernate.exception.GenericJDBCException; import org.hibernate.exception.SQLGrammarException; import org.hibernate.transform.AliasToBeanResultTransformer; import org.hibernate.transform.Transformers; import com.nec.core.exception.ObjectNotFoundException; import com.nec.core.exception.TooManyObjectsException; import com.nec.crud.hibernate.HibernateSessionManager; import com.nec.harvest.bean.mapping.OrganizationPaginationBean; import com.nec.harvest.constant.Constants; import com.nec.harvest.constant.SqlConstants; import com.nec.harvest.constant.TblConstants; import com.nec.harvest.exception.ServiceException; import com.nec.harvest.model.Organization; import com.nec.harvest.model.PettyCashBookReport; import com.nec.harvest.repository.OrganizationRepository; import com.nec.harvest.service.OrganizationService; /** * {@link OrganizationService} * * @author hungpd * */ public class OrganizationServiceImpl implements OrganizationService { private OrganizationRepository repository; public OrganizationServiceImpl(OrganizationRepository organizationRepository) { this.repository = organizationRepository; } /** {@inheritDoc} */ @Override public Organization findByOrgCode(String strCode) throws ServiceException { if (StringUtils.isEmpty(strCode)) { throw new IllegalArgumentException("The organization's code must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; Organization organization = null; try { tx = session.beginTransaction(); Criterion criterion = Restrictions.and(Restrictions.eq("strCode", strCode), Restrictions.eq("delKbn", Constants.STATUS_ACTIVE)); Criteria criteria = repository.getCriteria(session, Organization.class); criteria.add(criterion); List<Organization> organizations = repository.findByCriteria(criteria); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException("Could not find any organization matches with code " + strCode); } if (organizations.size() > 1) { throw new TooManyObjectsException("Too many organization objects are matches with code " + strCode); } organization = organizations.get(0); } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An exception occured while finding a organization by " + strCode + " and delKbn " + Constants.STATUS_ACTIVE, ex); } finally { HibernateSessionManager.closeSession(session); } return organization; } /** {@inheritDoc} */ @Override public Organization findByOrgCodeAndKaisoBango(String strCode, String kaisoBango) throws ServiceException { if (StringUtils.isEmpty(strCode)) { throw new IllegalArgumentException("The organization's code must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; Organization organization = null; try { tx = session.beginTransaction(); Criterion criterion = Restrictions.and(Restrictions.eq("strCode", strCode), Restrictions.eq("kaisoBango", kaisoBango), Restrictions.eq("delKbn", Constants.STATUS_ACTIVE)); Criteria criteria = repository.getCriteria(session, Organization.class); criteria.add(criterion); List<Organization> organizations = repository.findByCriteria(criteria); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException("Could not find any organization matches with code " + strCode + " and kaiso " + kaisoBango); } if (organizations.size() > 1) { throw new TooManyObjectsException("Too many organization objects are matches with code " + strCode + " and kaiso " + kaisoBango); } organization = organizations.get(0); } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An exception occured while finding a organization by code " + strCode + " and kaisoBango " + kaisoBango, ex); } finally { HibernateSessionManager.closeSession(session); } return organization; } /** {@inheritDoc} */ @Override public List<Organization> findByKaisoBango(String kaisoBango) throws ServiceException { if (StringUtils.isEmpty(kaisoBango)) { throw new IllegalArgumentException("The organization's code must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; List<Organization> organizations = new ArrayList<Organization>(); try { tx = session.beginTransaction(); Criteria criteria = repository.getCriteria(session, Organization.class) .setProjection(Projections.projectionList().add(Projections.property("strCode").as("strCode")) .add(Projections.property("strNameR").as("strNameR"))) .add(Restrictions.eq("kaisoBango", kaisoBango)) .add(Restrictions.eq("delKbn", Constants.STATUS_ACTIVE)) .setResultTransformer(Transformers.aliasToBean(Organization.class)); // organizations = repository.findByCriteria(criteria); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException("Could not find any Organization with kaisoBango " + kaisoBango); } // sort organizations by code value Collections.sort(organizations); } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException( "An exception occured while finding Organization list with kaisoBango " + kaisoBango, ex); } finally { HibernateSessionManager.closeSession(session); } return organizations; } /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public List<OrganizationPaginationBean> findByStrCodeUp(String strCodeUp) throws ServiceException { if (StringUtils.isEmpty(strCodeUp)) { throw new IllegalArgumentException("The organization's code must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; List<OrganizationPaginationBean> organizations = new ArrayList<OrganizationPaginationBean>(); try { tx = session.beginTransaction(); Criteria criteria = repository.getCriteria(session, Organization.class) .setProjection(Projections.projectionList().add(Projections.property("strCode").as("strCode")) .add(Projections.property("strNameR").as("strNameR")) .add(Projections.property("comName").as("comName"))) .add(Restrictions.eq("strCodeUp", strCodeUp)) .add(Restrictions.eq("delKbn", Constants.STATUS_ACTIVE)).addOrder(Order.asc("strCode")) .setResultTransformer(new AliasToBeanResultTransformer(OrganizationPaginationBean.class)); organizations = criteria.list(); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException("Could not find any Organization with strCodeUp " + strCodeUp); } } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException( "An exception occured while finding Organization list with strCodeUp " + strCodeUp, ex); } finally { HibernateSessionManager.closeSession(session); } return organizations; } /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public List<String> findByStrCodeAndKaisoBango(String strCode, String kaisoBango) throws ServiceException { if (StringUtils.isEmpty(strCode)) { throw new IllegalArgumentException("Can not find department with the strCode empty"); } if (StringUtils.isEmpty(kaisoBango)) { throw new IllegalArgumentException("Can not find department with the kaisoBango empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; List<String> organizations = new ArrayList<String>(); try { tx = session.beginTransaction(); StringBuilder sql = new StringBuilder("SELECT T1.StrCode "); sql.append(" FROM " + TblConstants.TBL_ORGANIZATION + " T1 "); sql.append(" LEFT JOIN " + TblConstants.TBL_ORGANIZATION + " T2 "); sql.append(" ON (T1.StrCodeUp = T2.StrCode AND T2.StrCode = :strCode) "); sql.append(" WHERE T1.KaisoBango = :kaisoBango"); sql.append(" AND T1.DelKbn = 2 "); // Query query = repository.getSQLQuery(session, sql.toString()); query.setString("strCode", strCode); query.setString("kaisoBango", kaisoBango); // organizations = query.list(); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException( "Can not find organizations with strCode " + strCode + " and KaisoBango " + kaisoBango); } } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An exception occured while finding Organization list with strCode " + strCode + " and KaisoBango " + kaisoBango, ex); } finally { HibernateSessionManager.closeSession(session); } return organizations; } /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public PettyCashBookReport findDistrictByShop(String shopID) throws ServiceException { if (StringUtils.isEmpty(shopID)) { throw new IllegalArgumentException("ShopID?NULL???????"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; PettyCashBookReport organization = null; try { tx = session.beginTransaction(); Query query = repository.getSQLQuery(session, SqlConstants.SQL_FIND_ORGANIZATION_BY_SHOP); query.setParameter("StrCode", shopID); query.setResultTransformer(Transformers.aliasToBean(PettyCashBookReport.class)); List<PettyCashBookReport> organizations = query.list(); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException( " " + shopID + "???????? "); } organization = organizations.get(0); } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An exception occured while finding Organization list with ShopID " + shopID, ex); } finally { HibernateSessionManager.closeSession(session); } return organization; } /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public List<String> findOrgsByDepartmentCode(String strCode) throws ServiceException { if (StringUtils.isEmpty(strCode)) { throw new IllegalArgumentException("Can not find department with the strCode empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; List<String> organizations = new ArrayList<String>(); try { tx = session.beginTransaction(); StringBuilder sql = new StringBuilder( "SELECT ifnull(t5.StrCode,ifnull(t4.StrCode,ifnull(t3.StrCode,ifnull(t2.StrCode,t1.StrCode)))) as strcode FROM at102 AS t1"); sql.append(" LEFT JOIN at102 AS t2 ON t2.StrCodeUp = t1.StrCode "); sql.append(" LEFT JOIN at102 AS t3 ON t3.StrCodeUp = t2.StrCode "); sql.append(" LEFT JOIN at102 AS t4 ON t4.StrCodeUp = t3.StrCode "); sql.append(" LEFT JOIN at102 AS t5 ON t5.StrCodeUp = t4.StrCode "); sql.append(" where t1.StrCode = :strcode "); // executed sql to get list data orgazation's codes with kaisobango = 5 Query query = repository.getSQLQuery(session, sql.toString()); query.setParameter("strcode", strCode); organizations = query.list(); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(organizations)) { throw new ObjectNotFoundException("Can not find organizations with strCode " + strCode); } } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException( "An exception occured while finding Organization list with strCode " + strCode, ex); } finally { HibernateSessionManager.closeSession(session); } return organizations; } }