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.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.exception.GenericJDBCException; import org.hibernate.exception.SQLGrammarException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.nec.core.exception.ObjectNotFoundException; import com.nec.crud.hibernate.HibernateSessionManager; import com.nec.harvest.bean.mapping.MoveTransferBean; import com.nec.harvest.bean.mapping.json.JSONBean; import com.nec.harvest.bean.mapping.json.JSONHelp; import com.nec.harvest.constant.Constants; import com.nec.harvest.constant.MsgConstants; import com.nec.harvest.exception.ServiceException; import com.nec.harvest.helper.MessageHelper; import com.nec.harvest.helper.ProductHelper; import com.nec.harvest.model.User; import com.nec.harvest.repository.HelpRepository; import com.nec.harvest.service.HelpService; import com.nec.harvest.service.SerialNumberService; import com.nec.harvest.userdetails.AuthenticatedUserDetails; /** * {@link HelpService} * * @author sondn * */ public class HelpServiceImpl implements HelpService { private static final Logger logger = LoggerFactory.getLogger(HelpServiceImpl.class); private final int STATE_DELETE = 1; private final int STATE_UPDATE = 2; private final int STATE_INSERT = 3; private final HelpRepository repository; private final SerialNumberService serialNumberService; public HelpServiceImpl(HelpRepository helpRepository, SerialNumberService serialNumberService) { this.repository = helpRepository; this.serialNumberService = serialNumberService; } /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public List<MoveTransferBean> findByOrgCodeAndMonthly(String orgCode, String monthly) throws ServiceException { if (StringUtils.isEmpty(orgCode)) { throw new IllegalArgumentException("Orginazation's code must not be null or empty"); } if (StringUtils.isEmpty(monthly)) { throw new IllegalArgumentException("Month must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; List<MoveTransferBean> moveTransferes = new ArrayList<>(); try { tx = session.beginTransaction(); Query query = repository.getQuery(session, " SELECT " + " new com.nec.harvest.bean.mapping.MoveTransferBean(a.recID, a.srDate, " + " a.strCodeU, ( SELECT b.strNameR FROM Organization b WHERE b.kaisoBango = :kaisoBango AND b.delKbn = :delKbn AND b.strCode = a.strCodeU) as strNameRU, " + " a.account.kmkCode, a.account.kmkNameR, " + " a.strCodeH, ( SELECT c.strNameR FROM Organization c WHERE c.kaisoBango = :kaisoBango AND c.delKbn = :delKbn AND c.strCode = a.strCodeH) as strNameRH, " + " a.kmkCodeH, ( SELECT d.kmkNameR FROM Account d WHERE d.helpKbn = :helpKbn AND d.delKbn = :delKbn AND d.kmkCode = a.kmkCodeH) as kmkNameRH, " + " a.tekiyo, a.jikan, a.kingaku, a.updNo) " + " FROM Help a " + " WHERE a.getSudo = :getSudo AND a.organization.strCode = :strCode AND a.delKbn = :delKbn " + " ORDER BY a.srDate ASC, a.strCodeU ASC, a.account.kmkCode ASC, a.strCodeH ASC, a.kmkCodeH ASC "); query.setParameter("strCode", orgCode); query.setParameter("getSudo", monthly); query.setParameter("kaisoBango", Constants.DEFAULT_KAISOBANGO); query.setParameter("helpKbn", Constants.DEFAULT_KBN); query.setParameter("delKbn", Constants.STATUS_ACTIVE); moveTransferes = query.list(); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(moveTransferes)) { throw new ObjectNotFoundException( "Could not find any Help by organization " + orgCode + " and monthly " + monthly); } } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An error occurred while finding the Help by organization " + orgCode + " and monthly " + monthly); } finally { HibernateSessionManager.closeSession(session); } return moveTransferes; } /** {@inheritDoc} */ @Override public boolean updateHelp(JSONHelp jsonHelp) throws ServiceException { if (jsonHelp == null) { throw new IllegalArgumentException("Help must not be null or empty"); } if (StringUtils.isEmpty(jsonHelp.getRecID())) { throw new IllegalArgumentException("Help ID must not be null or empty"); } User user = AuthenticatedUserDetails.getUserPrincipal(); if (user == null) { throw new IllegalArgumentException( "Sorry, you don't have a permission to use this. Please login with right permission"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; boolean isUpdated = Boolean.FALSE; try { StringBuilder sql = new StringBuilder(); sql.append(" UPDATE AT013"); sql.append( " SET srDate=:srDate, strCodeU=:strCodeU, kmkCode=:kmkCode, strCodeH=:strCodeH, kmkCodeH=:kmkCodeH, jikan=:jikan,"); sql.append(" tekiyo=:tekiyo, kingaku=:kingaku, tanCode=:tanCode, recCKbn=:recCKbn, aPInf2=:aPInf2,"); sql.append(" stfCodeU=:stfCodeU, prdNoU=:prdNoU, timeU=NOW(), updNo = (:updNo + 1)"); sql.append(" WHERE recID=:recID AND delKbn=:delKbn AND updNo=:updNo"); tx = session.beginTransaction(); Query query = repository.getSQLQuery(session, sql.toString()) .setParameter("srDate", jsonHelp.getSrDate()).setParameter("strCodeU", jsonHelp.getStrCodeU()) .setParameter("strCodeH", jsonHelp.getStrCodeH()).setParameter("kmkCode", jsonHelp.getKmkCode()) .setParameter("kmkCodeH", jsonHelp.getKmkCodeH()).setParameter("jikan", jsonHelp.getJikan()) .setParameter("tekiyo", jsonHelp.getTekiyo()).setParameter("kingaku", jsonHelp.getKingaku()) .setParameter("tanCode", user.getUsrCode()).setParameter("aPInf2", user.getUsrCode()) .setParameter("stfCodeU", user.getUsrCode()).setParameter("recCKbn", Constants.DEFAULT_KBN); try { query.setParameter("prdNoU", ProductHelper.getProductInfor().getVersion()); } catch (IOException e) { logger.warn("Can not get product informations when update help record"); } query.setParameter("recID", jsonHelp.getRecID()).setParameter("delKbn", Constants.STATUS_ACTIVE) .setParameter("updNo", jsonHelp.getUpdNo()); int result = query.executeUpdate(); isUpdated = (result > 0); tx.commit(); } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException( "An error occurred while update help record with id: " + jsonHelp.getRecID()); } finally { HibernateSessionManager.closeSession(session); } return isUpdated; } /** {@inheritDoc} */ @Override public boolean deleteByIDs(String... Ids) throws ServiceException { if (ArrayUtils.isEmpty(Ids)) { throw new IllegalArgumentException("Array help must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; boolean isDeleted = Boolean.FALSE; try { tx = session.beginTransaction(); String sql = " DELETE FROM Help a WHERE a.delKbn = :delKbn AND a.recID IN (:recIDs) "; Query query = repository.getQuery(session, sql).setParameterList("recIDs", Ids).setParameter("delKbn", Constants.STATUS_ACTIVE); int result = query.executeUpdate(); isDeleted = (result > 0); tx.commit(); } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An error occurred while delete help list"); } finally { HibernateSessionManager.closeSession(session); } return isDeleted; } /** {@inheritDoc} */ @Override public synchronized boolean insertHelp(String monthly, JSONHelp jsonHelp) throws ServiceException { if (StringUtils.isEmpty(monthly)) { throw new IllegalArgumentException("Monthly must not be null or empty"); } if (jsonHelp == null) { throw new IllegalArgumentException("Help object must not be null"); } User user = AuthenticatedUserDetails.getUserPrincipal(); if (user == null) { throw new IllegalArgumentException( "Sorry, you don't have a permission to use this. Please login with right permission"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; boolean isInserted = Boolean.FALSE; try { StringBuilder sql = new StringBuilder(); sql.append(" INSERT INTO at013 "); sql.append( " (RecID, StrCode, Getsudo, SrDate, StrCodeU, StrCodeH, Jikan, Tekiyo, Kingaku, UpdNo, DelKbn, TanCode, "); sql.append( " APInf1, APInf2, RecCkbn, StfCodeC, StfCodeU, KmkCode, KmkCodeH, PrdNoC, TimeC, PrdNoU, TimeU) "); sql.append( " VALUES(:recID, :strCode, :getSudo, :srDate, :strCodeU, :strCodeH, :jikan, :tekiyo, :kingaku, :updNo, :delKbn, :tanCode, "); sql.append( " :aPInf1, :aPInf2, :recCkbn, :stfCodeC, :stfCodeU, :kmkCode, :kmkCodeH, :prdNoC, now(), :prdNoU, now()) "); tx = session.beginTransaction(); Query query = repository.getSQLQuery(session, sql.toString()).setParameter("recID", jsonHelp.getRecID()) .setParameter("strCode", user.getOrganization().getStrCode()).setParameter("getSudo", monthly) .setParameter("srDate", jsonHelp.getSrDate()).setParameter("strCodeU", jsonHelp.getStrCodeU()) .setParameter("strCodeH", jsonHelp.getStrCodeH()).setParameter("jikan", jsonHelp.getJikan()) .setParameter("tekiyo", jsonHelp.getTekiyo()).setParameter("kingaku", jsonHelp.getKingaku()) .setParameter("tanCode", user.getUsrCode()).setParameter("aPInf1", user.getUsrCode()) .setParameter("aPInf2", user.getUsrCode()).setParameter("stfCodeC", user.getUsrCode()) .setParameter("stfCodeU", user.getUsrCode()).setParameter("kmkCode", jsonHelp.getKmkCode()) .setParameter("updNo", Constants.DEFAULT_INT_ONE) .setParameter("delKbn", Constants.STATUS_ACTIVE).setParameter("recCkbn", Constants.DEFAULT_KBN) .setParameter("kmkCodeH", jsonHelp.getKmkCodeH()); try { String version = ProductHelper.getProductInfor().getVersion(); query.setParameter("prdNoC", version); query.setParameter("prdNoU", version); } catch (IOException ex) { logger.warn(ex.getMessage()); } int result = query.executeUpdate(); isInserted = (result > 0); tx.commit(); } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An error occurred while create a new one help record", ex); } finally { HibernateSessionManager.closeSession(session); } return isInserted; } /** {@inheritDoc} */ @Override public JSONBean handleHelps(String monthly, List<JSONHelp> helps) throws ServiceException { if (logger.isDebugEnabled()) { logger.debug("Start handle help data to save"); } if (StringUtils.isEmpty(monthly)) { throw new IllegalArgumentException("Monthly must not be null or empty"); } if (CollectionUtils.isEmpty(helps)) { throw new IllegalArgumentException("Help object must not be null"); } User user = AuthenticatedUserDetails.getUserPrincipal(); if (user == null) { throw new IllegalArgumentException( "Sorry, you don't have a permission to use this. Please login with right permission"); } try { for (int i = 0; i < helps.size(); i++) { JSONHelp help = helps.get(i); int state = help.getState(); switch (state) { case STATE_DELETE: { boolean deleteState = deleteByIDs(help.getRecID()); if (!deleteState) { logger.warn("Could not delete the record with entity's code " + help.getRecID() + " and updNo " + help.getUpdNo()); // Update not successful return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M03)); } break; } case STATE_UPDATE: { boolean helpsState = updateHelp(help); if (!helpsState) { logger.warn("Could not update the record with entity's code " + help.getRecID() + " and updNo " + help.getUpdNo()); // Update not successful return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M01)); } break; } case STATE_INSERT: { String maximumSeqNo = null; try { final String REC_CODE = "AT013.RecID"; maximumSeqNo = serialNumberService.generateUUIDByRecID(REC_CODE); } catch (ServiceException ex) { logger.error(ex.getMessage(), ex); // Error while generate seq return new JSONBean(Boolean.FALSE, -1, MessageHelper.getSystemError()); } if (StringUtils.isEmpty(maximumSeqNo)) { logger.warn("Could not generate a sequence number at this time"); // Could not generate a sequence number at this time return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M03)); } logger.info("Old serial number is {} and maximum serial number is {}", help.getRecID(), maximumSeqNo); // Creating a new one move transfer for the given sequence number help.setRecID(maximumSeqNo); // Trying to insert... insertHelp(monthly, help); logger.info("Successfully created a new one help record"); break; } default: { break; } } } logger.info("Handle submission data from client successfuly"); return new JSONBean(Boolean.TRUE, 1, MessageHelper.get(MsgConstants.CM_UPD_M02)); } catch (IllegalArgumentException ex) { logger.warn(ex.getMessage()); // return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M03)); } catch (ServiceException ex) { logger.error(ex.getMessage(), ex); // return new JSONBean(Boolean.FALSE, -1, MessageHelper.getSystemError()); } } }