/*
* Copyright 2005-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.openuap.cms.publish.manager.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openuap.base.util.QueryInfo;
import org.openuap.base.util.context.PageBuilder;
import org.openuap.cms.node.cache.NodeCache;
import org.openuap.cms.node.model.Node;
import org.openuap.cms.psn.manager.PsnManager;
import org.openuap.cms.publish.dao.ExtraPublishDao;
import org.openuap.cms.publish.manager.ExtraPublishManager;
import org.openuap.cms.publish.model.ExtraPublish;
import org.openuap.cms.util.ui.AutoRefreshMode;
/**
* <p>
* 附加发布管理实现.
* </p>
*
* <p>
* $Id: ExtraPublishManagerDBImpl.java 4086 2012-11-26 04:25:05Z orangeforjava $
* </p>
*
* @author Joseph
* @version 1.0
*/
public class ExtraPublishManagerDBImpl implements ExtraPublishManager {
private ExtraPublishDao extraPublishDao;
private PsnManager psnManager;
public void setPsnManager(PsnManager psnManager) {
this.psnManager = psnManager;
}
public ExtraPublishManagerDBImpl() {
}
public void setExtraPublishDao(ExtraPublishDao publishDao) {
extraPublishDao = publishDao;
}
public Long addPublish(ExtraPublish publish) {
return extraPublishDao.addPublish(publish);
}
public void savePublish(ExtraPublish publish) {
extraPublishDao.savePublish(publish);
}
public void deletePublish(Long publishId) {
extraPublishDao.deletePublish(publishId);
}
public ExtraPublish getPublishById(Long publishId) {
return extraPublishDao.getPublishById(publishId);
}
public List getPublishes(Long nodeId) {
return extraPublishDao.getPublishes(nodeId);
}
public ExtraPublish getPublishByGuid(String guid) {
return extraPublishDao.getPublishByGuid(guid);
}
public String getExtraPublishPath(String id) {
if (id != null) {
Long publishId = new Long(id);
ExtraPublish publish = this.getPublishById(publishId);
if (publish != null) {
String path = null;
String psnUrl = publish.getSelfPsnUrl();
String fileName = publish.getPublishFileName();
String pattern = "(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)*(:[a-zA-Z0-9]*)?([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?";
String psnUrlInfo = getPsnManager().getPsnUrlInfo(psnUrl);
Pattern p = Pattern.compile(pattern);
// System.out.println("psnUrlInfo=" + psnUrlInfo);
Matcher m = p.matcher(psnUrlInfo);
boolean found = m.find();
if (found) {
path = m.group(4);
// System.out.println("path="+path);
//
}
if (path == null) {
path = "";
}
path = "/" + path + "/" + fileName;
path = path.replaceAll("\\/\\/", "/");
//
return path;
}
}
return "";
}
/**
* TODO 这种方式会导致无法把两个同样的CMS部署在一起
* @return
*/
public PsnManager getPsnManager(){
// PsnManager psnManager = (PsnManager) ObjectLocator.lookup(
// "psnManager", CmsPlugin.PLUGIN_ID);
return psnManager;
}
public List<ExtraPublish> getAutoRefreshPublish(Long nodeId) {
return getNodeAutoReRefreshPublish(nodeId);
}
/**
* TODO 附加发布需要加入缓存机制
* @param nodeId
* @return
*/
protected List<ExtraPublish> getNodeAutoReRefreshPublish(Long nodeId) {
//
List<ExtraPublish> rs=new ArrayList<ExtraPublish>();
//
List<ExtraPublish> publishes=this.extraPublishDao.getNodeAutoRefreshPublish(nodeId,AutoRefreshMode.SELF_REFRESH_MODE.getMode());
for(ExtraPublish p:publishes){
if(!rs.contains(p)){
rs.add(p);
}
}
Node parentNode=NodeCache.getParentNode(nodeId);
while(parentNode!=null){
Long pid=parentNode.getNodeId();
List<ExtraPublish> publishes2=this.extraPublishDao.getNodeAutoRefreshPublish(pid,AutoRefreshMode.PARENT_REFRESH_MODE.getMode());
for(ExtraPublish p:publishes2){
if(!rs.contains(p)){
rs.add(p);
}
}
parentNode=NodeCache.getParentNode(pid);
}
//
List<ExtraPublish> publishes3=this.extraPublishDao.getGlobalAutoRefreshPublish();
for(ExtraPublish p:publishes3){
if(!rs.contains(p)){
rs.add(p);
}
}
return rs;
}
public List getPublishes(QueryInfo qi, PageBuilder pb) {
return extraPublishDao.getPublishes(qi, pb);
}
}