package com.jspxcms.core.service.impl; import java.util.Arrays; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jspxcms.core.domain.ScoreGroup; import com.jspxcms.core.domain.ScoreItem; import com.jspxcms.core.listener.ScoreItemDeleteListener; import com.jspxcms.core.repository.ScoreItemDao; import com.jspxcms.core.service.ScoreItemService; @Service @Transactional(readOnly = true) public class ScoreItemServiceImpl implements ScoreItemService { public ScoreItem get(Integer id) { return dao.findOne(id); } @Transactional public ScoreItem[] save(String[] name, Integer[] score, String[] icon, ScoreGroup group) { int len = name != null ? name.length : 0; ScoreItem[] beans = new ScoreItem[len]; ScoreItem bean; for (int i = 0; i < len; i++) { bean = new ScoreItem(); bean.setGroup(group); bean.setSite(group.getSite()); bean.setName(name[i]); bean.setScore(score[i]); bean.setIcon(icon[i]); bean.setSeq(i); bean.applyDefaultValue(); dao.save(bean); beans[i] = bean; } group.setItems(Arrays.asList(beans)); return beans; } @Transactional public ScoreItem[] update(Integer[] id, String[] name, Integer[] score, String[] icon, ScoreGroup group) { int len = id != null ? id.length : 0; ScoreItem[] beans = new ScoreItem[len]; ScoreItem bean; // 修改和新增 for (int i = 0; i < len; i++) { if (id[i] != null) { bean = dao.findOne(id[i]); } else { bean = new ScoreItem(); } bean.setGroup(group); bean.setSite(group.getSite()); bean.setName(name[i]); bean.setScore(score[i]); bean.setIcon(icon[i]); bean.setSeq(i); bean.applyDefaultValue(); dao.save(bean); beans[i] = bean; } // 删除 for (ScoreItem item : group.getItems()) { if (!ArrayUtils.contains(id, item.getId())) { delete(item); } } group.setItems(Arrays.asList(beans)); return beans; } @Transactional public ScoreItem delete(ScoreItem bean) { firePreDelete(new Integer[] { bean.getId() }); dao.delete(bean); return bean; } private void firePreDelete(Integer[] ids) { if (!CollectionUtils.isEmpty(deleteListeners)) { for (ScoreItemDeleteListener listener : deleteListeners) { listener.preScoreItemDelete(ids); } } } private List<ScoreItemDeleteListener> deleteListeners; @Autowired(required = false) public void setDeleteListeners(List<ScoreItemDeleteListener> deleteListeners) { this.deleteListeners = deleteListeners; } private ScoreItemDao dao; @Autowired public void setDao(ScoreItemDao dao) { this.dao = dao; } }