/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ /** * */ package com.ewcms.core.site.service; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ewcms.core.site.dao.TemplateSourceDAO; import com.ewcms.core.site.model.Site; import com.ewcms.core.site.model.TemplateSource; import com.ewcms.core.site.model.TemplatesrcEntity; import com.ewcms.web.util.EwcmsContextUtil; /** * @author 周冬初 * */ @Service public class TemplateSourceService implements TemplateSourceServiceable{ @Autowired private TemplateSourceDAO templateSourceDAO; public TemplateSource getTemplateSource(Integer id){ return templateSourceDAO.get(id); } public Integer addTemplateSource(TemplateSource vo){ templateSourceDAO.persist(vo); return vo.getId(); } public Integer updTemplateSource(TemplateSource vo){ updPubPath(vo); return vo.getId(); } /** * 模板目录发生修改,需要更新模板发布路径,并且包括其子模板路径 * * @param channel * 模板 */ private void updPubPath(final TemplateSource vo) { for (TemplateSource child : templateSourceDAO.getTemplateSourceChildren(vo.getId(), getCurSite().getId())) { child.setPath(null); updPubPath(child); } templateSourceDAO.merge(vo); } public void delTemplateSource(Integer id){ delTemplateSourceChildren(id); templateSourceDAO.removeByPK(id); } private void delTemplateSourceChildren(Integer id){ List<TemplateSource> templateSources = templateSourceDAO.getTemplateSourceChildren(id, getCurSite().getId()); if (templateSources != null && !templateSources.isEmpty()){ for (TemplateSource templateSource : templateSources){ List<TemplateSource> templateSourceChildrens = templateSourceDAO.getTemplateSourceChildren(templateSource.getId(), getCurSite().getId()); if (templateSourceChildrens != null && !templateSourceChildrens.isEmpty()){ delTemplateSourceChildren(templateSource.getId()); }else{ templateSourceDAO.remove(templateSource); } } } } /** * 获取跟模板资源集 * */ public List<TemplateSource> getTemplaeSourceTreeList(Boolean channelEnable){ return getTemplateSourceChildren(null,channelEnable); } /** * 获取模板资源子资源集 * */ public List<TemplateSource> getTemplaeSourceTreeList(Integer parentId,Boolean channelEnable){ return getTemplateSourceChildren(parentId,channelEnable); } private List<TemplateSource> getTemplateSourceChildren(Integer parentId,Boolean channelEnable){ List<TemplateSource> srcList = templateSourceDAO.getTemplateSourceChildren(parentId,EwcmsContextUtil.getCurrentSite().getId()); List<TemplateSource> validateList = new ArrayList<TemplateSource>(); for(TemplateSource vo:srcList){ if(!channelEnable&&vo.getName().equals(getSiteSrcName())){ continue; } validateList.add(vo); } return validateList; } /** * 获取站点专栏资源根目录 * */ public TemplateSource channelSRCRoot(){ return channelTemplateSource(null); } public TemplateSource channelTemplateSource(String srcName){ if(srcName==null||srcName.length()==0){ TemplateSource vo = templateSourceDAO.getChannelTemplateSource(getSiteSrcName(),getCurSite().getId(),null); if(vo == null){//没有站点专栏模板节点,就创建 vo = new TemplateSource(); vo.setDescribe(getCurSite().getSiteName()+"专栏资源目录"); vo.setName(getSiteSrcName()); vo.setSite(getCurSite()); vo.setSize("0KB"); vo.setPath(getSiteSrcName()); templateSourceDAO.persist(vo); } return vo; }else{ Integer parentId = channelSRCRoot().getId(); TemplateSource vo = templateSourceDAO.getChannelTemplateSource(srcName,getCurSite().getId(),parentId); if(vo == null){//没有站点专栏模板节点,就创建 vo = new TemplateSource(); vo.setDescribe(srcName+"专栏资源目录"); vo.setName(srcName); vo.setSite(getCurSite()); vo.setSize("0KB"); vo.setParent(channelSRCRoot()); vo.setPath(getSiteSrcName()+"/"+srcName); templateSourceDAO.persist(vo); } return vo; } } private Site getCurSite(){ return EwcmsContextUtil.getCurrentSite(); } private String getSiteSrcName(){ return getCurSite().getId()+"src"; } @Override public List<TemplateSource> findPublishTemplateSources(Integer siteId, Boolean forceAgain) { return templateSourceDAO.getPublishTemplateSources(siteId, forceAgain); } @Override public List<TemplateSource> getTemplateSourceChildren(Integer id) { return templateSourceDAO.getTemplateSourceChildren(id, getCurSite().getId()); } @Override public void publishTemplateSourceSuccess(Integer id) { TemplateSource vo = getTemplateSource(id); vo.setRelease(true); templateSourceDAO.persist(vo); } @Override public TemplateSource getTemplateSourceByUniquePath(String path) { return templateSourceDAO.getTemplateSourceByPath(getCurSite().getId()+path); } @Override public void exportTemplateSourceZip(Integer templateSourceId, ZipOutputStream zos, String templateSourcePath) { try{ TemplateSource templateSource = getTemplateSource(templateSourceId); if (templateSource == null) return; TemplatesrcEntity templatesrcEntity = templateSource.getSourceEntity(); String filePath = templateSourcePath + templateSource.getName(); ZipEntry zipEntry; if (templatesrcEntity == null){ filePath += "/"; //创建栏目目录 zipEntry = new ZipEntry(filePath); zipEntry.setUnixMode(755); zos.putNextEntry(zipEntry); List<TemplateSource> templateSourceChildrens = templateSourceDAO.getTemplateSourceChildren(templateSource.getId(), getCurSite().getId()); for (TemplateSource templateSourceChildren : templateSourceChildrens){ exportTemplateSourceZip(templateSourceChildren.getId(), zos, filePath); } }else{ zipEntry = new ZipEntry(filePath); zipEntry.setUnixMode(644); zos.putNextEntry(zipEntry); BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(templatesrcEntity.getSrcEntity())); int b; while((b = bis.read())!=-1){ zos.write(b); } zos.closeEntry(); bis.close(); } }catch(Exception e){ } } }