FECDealLinkRepositoryImpl.java
package com.tradecloud.repository.impl;
import com.tradecloud.domain.model.FECDealLink;
import com.tradecloud.domain.model.ForexGroup;
import com.tradecloud.domain.model.deal.Deal;
import com.tradecloud.domain.model.deal.OrderReference;
import com.tradecloud.domain.model.fec.IFEC;
import com.tradecloud.repository.FECDealLinkRepository;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;
import org.hibernate.transform.Transformers;
import org.hibernate.type.StandardBasicTypes;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Default implementation of the {@link FECDealLinkRepository} interface.
*
*/
@Repository(value = "fecDealLinkRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class FECDealLinkRepositoryImpl extends AbstractDealLinkRepository<FECDealLink> implements FECDealLinkRepository {
private static final long serialVersionUID = 1L;
@Override
public List<FECDealLink> findAllByDeal(Deal deal) {
return findAllByDeal(deal, FECDealLink.class.getSimpleName());
}
@Override
public List<FECDealLink> findAllByFEC(IFEC fec) {
@SuppressWarnings("unchecked")
List<FECDealLink> list =
(List<FECDealLink>) getSessionCustom().createQuery("from FECDealLink where fec_id = :fecId")
.setParameter("fecId", fec.getId()).list();
return list;
}
@Override
public FECDealLink find(FECDealLink fecDealLink) {
return (FECDealLink) getSessionCustom().createQuery("from FECDealLink where fec_id = :fecId and deal_id =:dealId")
.setParameter("fecId", fecDealLink.getFec().getId()).setParameter("dealId", fecDealLink.getDeal().getId()).uniqueResult();
}
@Override
public List<FECDealLink> findAll() {
return findAll(FECDealLink.class.getSimpleName());
}
@Override
public List<Deal> findAllDealsLinkedToFEC(IFEC fec) {
String hql = "select deal from Deal deal, FECDealLink fdl, FEC fec where fec.id = :fecId and fdl.fec.id = fec.id and deal.id = fdl.deal.id";
@SuppressWarnings("unchecked")
List<Deal> list = (List<Deal>) findByNamedParam(hql, "fecId", fec.getId());
return list;
}
@Override
public void deleteAllByDeal(Deal deal) {
deleteAllByDeal(deal, FECDealLink.class.getSimpleName());
}
@Override
public List<FECDealLink> findAllByOrderReference(OrderReference orderReference) {
String hql =
"select fdl from Deal deal, FECDealLink fdl, FEC fec" + " where deal.orderReference = :orderReference" + " and fdl.fec.id = fec.id"
+ " and deal.id = fdl.deal.id";
@SuppressWarnings("unchecked")
List<FECDealLink> list = (List<FECDealLink>) findByNamedParam(hql, "orderReference", orderReference);
return list;
}
@Override
public List<FECDealLink> findAll(OrderReference orderReference, ForexGroup forexGroup, String paymentType) {
String hql =
"select fdl from Deal deal, FECDealLink fdl, FEC fec" + " where deal.orderReference = :orderReference" + " and fdl.fec.id = fec.id"
+ " and deal.id = fdl.deal.id"+ " and deal.forexGroup=:forexGroup";
if(StringUtils.isNotEmpty(paymentType)) {
hql=hql+" and paymentType= :paymentType";
}
Query query = getSessionCustom().createQuery(hql).setParameter("orderReference", orderReference)
.setParameter("forexGroup", forexGroup);
if(StringUtils.isNotEmpty(paymentType)){
query =query.setParameter("paymentType",paymentType);
}
return query.list();
}
@Override
public List<FECDealLink> findAllByDealReference(Collection<String> references) {
String hql =
"select fdl from Deal deal, FECDealLink fdl, FEC fec" + " where deal.orderReference.reference in (:orderReference)" +
" and fdl.fec.id = fec.id and deal.id = fdl.deal.id" ;
Query query = getSessionCustom().createQuery(hql).setParameterList("orderReference", references);
return query.list();
}
@Override
public boolean isLinked(IFEC fec) {
Query query = getSessionCustom().createQuery("select count(*) from FECDealLink fdl where fdl.fec=:fecParam")
.setParameter("fecParam", fec);
return (Long) query.uniqueResult() > 0;
}
@Override
public boolean hasDealInState(List<String> dealStates, Long fecId) {
String hql =
"select count(*) from Deal deal, FECDealLink fdl, FEC fec" + " where fec.id= :fecId and fdl.fec.id = fec.id"
+ " and deal.id = fdl.deal.id" + " and deal.status.statusName in :dealStates";
Query query = getSessionCustom().createQuery(hql);
query.setParameter("fecId", fecId);
query.setParameterList("dealStates", dealStates);
return (Long) query.uniqueResult() > 0;
}
@Override
public List<Map<String, String>> findAmountDateLinked(IFEC fec) {
@SuppressWarnings("unchecked")
String query = "select fd.amount_value as amount,d.estimated_settlement_date from fec_deal_link " +
"fd join deal d on (d.id=fd.deal_id) where fec_id = :fecId";
@SuppressWarnings("unchecked")
List<Map<String, String>> results = getCurrentSession()
.createNativeQuery(query)
.addScalar("amount", StandardBasicTypes.STRING)
.addScalar("estimated_settlement_date", StandardBasicTypes.STRING)
.setParameter("fecId", fec.getId())
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
return results;
}
public boolean hasFecLinks(Set<Long> dealIds) {
Query query = getSessionCustom().createQuery("select count(*) from FECDealLink fdl where fdl.deal.id in (:dealIds)")
.setParameterList("dealIds", dealIds);
return (Long) query.uniqueResult() > 0;
}
@Override
public BigDecimal getLinkedAmount(Long dealId) {
Query query = getSessionCustom().createNativeQuery("select sum(fdl.amount_value) from fec_deal_link fdl where fdl.deal_id = :dealId ")
.setParameter("dealId", dealId);
return (BigDecimal) query.uniqueResult() ;
}
@Override
public List<FECDealLink> findAllByDealIdIn(List<Long> dealIds) {
String hql =
"select fdl from FECDealLink fdl where deal.id in (:dealIds)" ;
Query query = getSessionCustom().createQuery(hql).setParameterList("dealIds", dealIds);
return query.list();
}
@Override
public List getLinkedAmounts(List<Long> dealIds) {
Query query = getSessionCustom().createNativeQuery("select sum(fdl.amount_value),fdl.deal_id from fec_deal_link fdl where fdl.deal_id in (:dealIds) group by fdl.deal_id ")
.setParameter("dealIds", dealIds);
return query.list() ;
}
@Override
public void delete2(FECDealLink link) {
getCurrentSession().delete(link);
}
}