package com.jspxcms.core.service.impl;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
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.Global;
import com.jspxcms.core.domain.Site;
import com.jspxcms.core.listener.OrgDeleteListener;
import com.jspxcms.core.listener.SiteDeleteListener;
import com.jspxcms.core.repository.SiteDao;
import com.jspxcms.core.service.SiteService;
import com.jspxcms.core.support.Configurable;
import com.jspxcms.core.support.DeleteException;
/**
* SiteServiceImpl
*
* @author liufang
*
*/
@Service
@Transactional(readOnly = true)
public class SiteServiceImpl implements SiteService, OrgDeleteListener {
public List<Site> findList() {
List<Site> list = dao.findAll();
return list;
}
public Site findUniqueSite() {
// Site site = dao.findUniqueSite();
Site site = dao.findOne(1);
return site;
}
public Site get(Integer id) {
Site entity = dao.findOne(id);
return entity;
}
@Transactional
public Site save(Site bean) {
bean.applyDefaultValue();
bean = dao.save(bean);
return bean;
}
@Transactional
public Site update(Site bean) {
bean.applyDefaultValue();
bean = dao.save(bean);
return bean;
}
@Transactional
public void updateConf(Site site, Configurable conf) {
Map<String, String> customs = site.getCustoms();
Global.removeAttr(customs, conf.getPrefix());
customs.putAll(conf.getCustoms());
}
@Transactional
public void updateCustoms(Site site, String prefix, Map<String, String> map) {
Map<String, String> customs = site.getCustoms();
Global.removeAttr(customs, prefix);
customs.putAll(map);
}
private Site doDelete(Integer id) {
Site entity = dao.findOne(id);
if (entity != null) {
dao.delete(entity);
}
return entity;
}
@Transactional
public Site delete(Integer id) {
firePreDelete(new Integer[] { id });
return doDelete(id);
}
@Transactional
public Site[] delete(Integer[] ids) {
firePreDelete(ids);
Site[] beans = new Site[ids.length];
for (int i = 0, len = beans.length; i < len; i++) {
beans[i] = doDelete(ids[i]);
}
return beans;
}
public void preOrgDelete(Integer[] ids) {
if (ArrayUtils.isNotEmpty(ids)) {
if (dao.countByOrgId(Arrays.asList(ids)) > 0) {
throw new DeleteException("site.management");
}
}
}
private void firePreDelete(Integer[] ids) {
if (!CollectionUtils.isEmpty(deleteListeners)) {
for (SiteDeleteListener listener : deleteListeners) {
listener.preSiteDelete(ids);
}
}
}
private List<SiteDeleteListener> deleteListeners;
@Autowired(required = false)
public void setDeleteListeners(List<SiteDeleteListener> deleteListeners) {
this.deleteListeners = deleteListeners;
}
private SiteDao dao;
@Autowired
public void setSiteDao(SiteDao dao) {
this.dao = dao;
}
}