package com.jspxcms.core.service.impl; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.commons.lang3.ArrayUtils; import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jspxcms.common.orm.Limitable; import com.jspxcms.common.orm.SearchFilter; import com.jspxcms.common.util.RowSide; import com.jspxcms.core.domain.Role; import com.jspxcms.core.domain.Site; import com.jspxcms.core.listener.RoleDeleteListener; import com.jspxcms.core.listener.SiteDeleteListener; import com.jspxcms.core.repository.RoleDao; import com.jspxcms.core.service.RoleService; import com.jspxcms.core.service.RoleSiteService; import com.jspxcms.core.service.SiteService; import com.jspxcms.core.support.DeleteException; /** * RoleServiceImpl * * @author liufang * */ @Service @Transactional(readOnly = true) public class RoleServiceImpl implements RoleService, SiteDeleteListener { public List<Role> findList(Map<String, String[]> params, Sort sort) { return dao.findAll(spec(params), sort); } public RowSide<Role> findSide(Map<String, String[]> params, Role bean, Integer position, Sort sort) { if (position == null) { return new RowSide<Role>(); } Limitable limit = RowSide.limitable(position, sort); List<Role> list = dao.findAll(spec(params), limit); return RowSide.create(list, bean); } private Specification<Role> spec(Map<String, String[]> params) { Collection<SearchFilter> filters = SearchFilter.parse(params).values(); Specification<Role> sp = SearchFilter.spec(filters, Role.class); return sp; } public List<Role> findList(Integer siteId) { return dao.findBySiteId(siteId); } public Role get(Integer id) { return dao.findOne(id); } @Transactional public Role save(Role bean, Boolean allPerm, String perms, Boolean allInfo, Integer[] infoRightIds, Boolean allNode, Integer[] nodeRightIds, Integer infoRightType, Integer siteId) { Site site = siteService.get(siteId); bean.setSite(site); bean.applyDefaultValue(); bean = dao.save(bean); roleSiteService.save(bean, site, allPerm, perms, allInfo, infoRightIds, allNode, nodeRightIds, infoRightType); return bean; } @Transactional public Role update(Role bean, Boolean allPerm, String perms, Boolean allInfo, Integer[] infoRightIds, Boolean allNode, Integer[] nodeRightIds, Integer infoRightType) { Site site = bean.getSite(); bean.applyDefaultValue(); bean = dao.save(bean); roleSiteService.update(bean, site, allPerm, perms, allInfo, infoRightIds, allNode, nodeRightIds, infoRightType); return bean; } private Role doDelete(Integer id) { Role entity = dao.findOne(id); if (entity != null) { dao.delete(entity); } return entity; } @Transactional public Role delete(Integer id) { firePreDelete(new Integer[] { id }); return doDelete(id); } @Transactional public Role[] delete(Integer[] ids) { firePreDelete(ids); Role[] beans = new Role[ids.length]; for (int i = 0; i < ids.length; i++) { beans[i] = doDelete(ids[i]); } return beans; } public void preSiteDelete(Integer[] ids) { if (ArrayUtils.isNotEmpty(ids)) { if (dao.countBySiteId(Arrays.asList(ids)) > 0) { throw new DeleteException("role.management"); } } } private void firePreDelete(Integer[] ids) { if (!CollectionUtils.isEmpty(deleteListeners)) { for (RoleDeleteListener listener : deleteListeners) { listener.preRoleDelete(ids); } } } private List<RoleDeleteListener> deleteListeners; @Autowired(required = false) public void setDeleteListeners(List<RoleDeleteListener> deleteListeners) { this.deleteListeners = deleteListeners; } private RoleSiteService roleSiteService; private SiteService siteService; @Autowired public void setRoleSiteService(RoleSiteService roleSiteService) { this.roleSiteService = roleSiteService; } @Autowired public void setSiteService(SiteService siteService) { this.siteService = siteService; } private RoleDao dao; @Autowired public void setDao(RoleDao dao) { this.dao = dao; } }