Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package chiron.maxscore.service.impl; import chiron.maxscore.dao.CourseDAO; import chiron.maxscore.dao.OptionDAO; import chiron.maxscore.dao.OptionMappingDAO; import chiron.maxscore.entity.Course; import chiron.maxscore.entity.Option; import chiron.maxscore.entity.OptionMapping; import chiron.maxscore.service.OptionService; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class OptionServiceImpl implements OptionService { @Autowired private OptionDAO optionDAO; @Autowired private CourseDAO courseDAO; @Autowired private OptionMappingDAO optionMappingDAO; @Override public Option getById(int id) { return optionDAO.getById(id); } @Transactional @Override public void save(Option e) { optionDAO.save(e); } @Transactional @Override public void delete(Option e) { optionDAO.delete(e); } @Override public List<Option> getAll() { return optionDAO.getAll(); } @Override public List<Option> search(int page, int pageSize, Map<String, Object> condition) { return optionDAO.search((page - 1) * pageSize, pageSize, makeCriteria(condition)); } @Override public int count(Map<String, Object> condition) { return optionDAO.count(makeCriteria(condition)); } private DetachedCriteria makeCriteria(Map<String, Object> condition) { DetachedCriteria criteria = DetachedCriteria.forClass(Option.class); if (condition == null) { return criteria; } if (condition.containsKey("option_name")) { criteria.add( Restrictions.ilike("optionName", condition.get("option_name").toString(), MatchMode.ANYWHERE)); } return criteria; } @Override public List<Option> getSubByPid(int pid) { Option root = optionDAO.getById(pid); List<Option> options = new ArrayList<>(); for (OptionMapping om : root.getOptionMappingList()) { options.add(om.getOption()); } return options; } @Override public List<Option> getOptionsByCid(int cid) { Course course = courseDAO.getById(cid); List<Option> options = new ArrayList<>(); for (OptionMapping om : course.getOptionMappingList()) { options.add(om.getOption()); } return options; } @Override public List<Option> getRootOptionsByCidAndVer(int cid, int ver) { DetachedCriteria criteria = DetachedCriteria.forClass(OptionMapping.class); criteria.createAlias("course", "c"); criteria.createAlias("option", "o"); criteria.createAlias("parentOption", "p"); criteria.add(Restrictions.isNull("p")); criteria.add(Restrictions.eq("c.id", cid)); criteria.add(Restrictions.eq("optionVer", ver)); // criteria.setProjection(Projections.groupProperty("o.optionGroupId")); // criteria.setProjection(Projections.max("optionVer")); List<OptionMapping> oms = optionMappingDAO.search(0, Integer.MAX_VALUE, criteria); List<Option> options = new ArrayList<>(); for (OptionMapping om : oms) { options.add(om.getOption()); } return options; } @Override public List<Option> getOptionsByCidAndVer(int cid, int ver) { DetachedCriteria criteria = DetachedCriteria.forClass(OptionMapping.class); criteria.createAlias("course", "c"); criteria.createAlias("option", "o"); criteria.add(Restrictions.eq("c.id", cid)); criteria.add(Restrictions.eq("optionVer", ver)); // criteria.setProjection(Projections.groupProperty("o.optionGroupId")); // criteria.setProjection(Projections.max("optionVer")); List<OptionMapping> oms = optionMappingDAO.search(0, Integer.MAX_VALUE, criteria); List<Option> options = new ArrayList<>(); for (OptionMapping om : oms) { options.add(om.getOption()); } return options; } }