/*
* Copyright 2002-2006 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.engine.impl;
import java.io.File;
import java.util.List;
import org.openuap.cms.engine.PublishEngine;
import org.openuap.cms.engine.PublishEngineMode;
import org.openuap.cms.engine.content.ContentPublishEngine;
import org.openuap.cms.engine.generate.CmsStaticFileGenerateEngine;
import org.openuap.cms.engine.profile.PublishProfileInfoHolder;
import org.openuap.cms.engine.resource.ResourcePublishEngine;
import org.openuap.cms.node.manager.NodeManager;
import org.openuap.cms.node.model.Node;
/**
* <p>
* 缺省发布引擎实现.
* </p>
*
* <p>
* $Id: DefaultPublishEngine.java 4086 2012-11-26 04:25:05Z orangeforjava $
* </p>
*
* @author Joseph
* @version 1.0
*/
public class DefaultPublishEngine implements PublishEngine {
/** 内容发布引擎. */
private ContentPublishEngine contentPublishEngine;
/** 静态文件产生引擎. */
//
/** 资源发布引擎. */
private ResourcePublishEngine resourcePublishEngine;
/** 结点管理服务. */
private NodeManager nodeManager;
/** 静态文件产生引擎. */
private CmsStaticFileGenerateEngine cmsStaticFileGenerateEngine;
public void setCmsStaticFileGenerateEngine(
CmsStaticFileGenerateEngine cmsStaticFileGenerateEngine) {
this.cmsStaticFileGenerateEngine = cmsStaticFileGenerateEngine;
}
/**
*
*/
public DefaultPublishEngine() {
}
/**
* 发布内容页
*
* @param nodeId
* 结点Id
* @param indexId
* 索引Id
* @param errors
* 发布过程中的错误
* @return boolean 若无错误返回true,若有错误返回false
*/
public boolean publishContent(Long nodeId, Long indexId,
boolean refreshContent, List errors) {
boolean forward = true;
// 发布内容,处理内容
try {
if (PublishProfileInfoHolder.isEnableProfile()) {
//
PublishProfileInfoHolder.getProfile().setStartActionTime(
System.currentTimeMillis());
PublishProfileInfoHolder.getProfile().setActionName(
"publishContent-[node=" + nodeId + ";indexId="
+ indexId + "]");
}
//调用内容发布引擎发布内容
forward = contentPublishEngine.contentPublish(nodeId, indexId,
refreshContent, errors);
// if (forward && refreshContent) {
// // 产生静态文件
// try {
// //调用静态文件产生引擎产生静态文件或内容
// cmsStaticFileGenerateEngine.generateContentStaticFile(
// nodeId, indexId, errors);
// } catch (Exception e) {
// forward = false;
// e.printStackTrace();
// }
// }
// if (forward && refreshContent) {
// // 调用资源发布引擎发布相关的资源
// forward = resourcePublishEngine.publishContentResource(nodeId,
// indexId, errors);
// }
} catch (Exception e) {
e.printStackTrace();
} finally {
if (PublishProfileInfoHolder.isEnableProfile()) {
PublishProfileInfoHolder.getProfile().setStartRenderTime(
System.currentTimeMillis());
PublishProfileInfoHolder.logProfile();
PublishProfileInfoHolder.clearProfile();
}
}
return forward;
}
/**
* by Weiping Ju history: 1)add some logic process the nodeId=0
*
* @todo 这个需要改进,否则跟这个架构不一致,也就是说要首先取出所有的需要发布的内容Id<br/>
* 以后的操作都基于这些id,这样也能提高处理速度 发布结点内容
* @param parentId
* 结点Id
* @param mode
* 发布模式
* @param errors
* 发布过程中的错误.
* @return boolean 若没有错误,则发挥true,否则返回false
*/
public boolean publishAllNodeContent(Long parentId, PublishEngineMode mode,
List errors) {
boolean success = true;
if (parentId.intValue() == 0) {
// it is root node
// 如果是根结点,则返回根结点下的所有一级子结点,分别调用相关的方法
List firstLevelNodes = nodeManager.getNodes(parentId, new Long(0),
new Integer("0"));
if (firstLevelNodes != null) {
for (int i = 0; i < firstLevelNodes.size(); i++) {
Node childNode = (Node) firstLevelNodes.get(i);
success = contentPublishEngine.nodeAllContentPublish(
childNode.getNodeId(), mode, errors);
}
}
} else {
// 发布结点下的所有内容
success = contentPublishEngine.nodeAllContentPublish(parentId,
mode, errors);
}
// success=staticFileGenerateEngine.generateAllNodeStaticFile(parentId,mode,errors);
return success;
}
public void setResourcePublishEngine(
ResourcePublishEngine resourcePublishEngine) {
this.resourcePublishEngine = resourcePublishEngine;
}
public void setContentPublishEngine(
ContentPublishEngine contentPublishEngine) {
this.contentPublishEngine = contentPublishEngine;
}
public void setNodeManager(NodeManager nodeManager) {
this.nodeManager = nodeManager;
}
/**
* 删除发布后的静态文件
*
* @param nodeId
* Long
* @param indexId
* Long
* @param errors
* List
* @return boolean
*/
public boolean deletePublishedFile(Long nodeId, Long indexId, List errors) {
try {
File destFile = cmsStaticFileGenerateEngine.getDestFile(nodeId,
indexId);
if (destFile!=null&&destFile.exists()) {
destFile.delete();
}
} catch (Exception ex) {
errors.add(ex);
return false;
}
return true;
}
public boolean refreshNodeIndex(Long nodeId, List errors) {
try {
if (PublishProfileInfoHolder.isEnableProfile()) {
//
PublishProfileInfoHolder.getProfile().setStartActionTime(
System.currentTimeMillis());
PublishProfileInfoHolder.getProfile().setActionName(
"refreshNodeIndex-[" + nodeId + "]");
}
cmsStaticFileGenerateEngine.generateNodeIndexStaticFile(nodeId,
errors);
} catch (Exception e) {
return false;
} finally {
if (PublishProfileInfoHolder.isEnableProfile()) {
PublishProfileInfoHolder.getProfile().setStartRenderTime(
System.currentTimeMillis());
PublishProfileInfoHolder.logProfile();
}
}
return true;
}
public boolean refreshNodeExtraIndex(Long nodeId, Long publishId,
List errors) {
try {
if (PublishProfileInfoHolder.isEnableProfile()) {
//
PublishProfileInfoHolder.getProfile().setStartActionTime(
System.currentTimeMillis());
PublishProfileInfoHolder.getProfile().setActionName(
"refreshNodeExtraIndex-{node=[" + nodeId + "]"+","+"publishId=["+publishId+"]}");
}
//静态渲染引擎
cmsStaticFileGenerateEngine.generateNodeExtraIndexStaticFile(
nodeId, publishId, errors);
} catch (Exception e) {
return false;
}finally {
if (PublishProfileInfoHolder.isEnableProfile()) {
PublishProfileInfoHolder.getProfile().setStartRenderTime(
System.currentTimeMillis());
PublishProfileInfoHolder.logProfile();
PublishProfileInfoHolder.clearProfile();
}
}
return true;
}
@SuppressWarnings("unchecked")
public boolean refreshNodeAllExtraIndex(Long nodeId, List errors) {
try {
if (PublishProfileInfoHolder.isEnableProfile()) {
//
PublishProfileInfoHolder.getProfile().setStartActionTime(
System.currentTimeMillis());
PublishProfileInfoHolder.getProfile().setActionName(
"refreshNodeIndex-[" + nodeId + "]");
}
cmsStaticFileGenerateEngine.generateNodeAllExtraIndexStaticFile(
nodeId, errors);
} catch (Exception e) {
return false;
}finally {
if (PublishProfileInfoHolder.isEnableProfile()) {
PublishProfileInfoHolder.getProfile().setStartRenderTime(
System.currentTimeMillis());
PublishProfileInfoHolder.logProfile();
}
}
return true;
}
/**
* 更新内容
*
* @param nodeId
*
* @param indexId
*
* @param errors
*
* @return
*/
public boolean refreshContent(Long nodeId, Long indexId, List errors) {
boolean success = true;
try {
if (PublishProfileInfoHolder.isEnableProfile()) {
//
PublishProfileInfoHolder.getProfile().setStartActionTime(
System.currentTimeMillis());
PublishProfileInfoHolder.getProfile().setActionName(
"refreshContent-[node=" + nodeId + ";indexId="
+ indexId + "]");
}
if (success) {
// 静态文件发布
try {
//
cmsStaticFileGenerateEngine.generateContentStaticFile(
nodeId, indexId, errors);
} catch (Exception e) {
e.printStackTrace();
success = false;
e.printStackTrace();
errors.add(e);
}
}
if (success) {
// 资源发布
success = resourcePublishEngine.publishContentResource(nodeId,
indexId, errors);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (PublishProfileInfoHolder.isEnableProfile()) {
PublishProfileInfoHolder.getProfile().setStartRenderTime(
System.currentTimeMillis());
PublishProfileInfoHolder.logProfile();
}
}
return success;
}
public boolean refreshAllNodeContent(Long parentId, PublishEngineMode mode,
List errors) {
boolean success = true;
if (parentId.intValue() == 0) {
// it is root node
List firstLevelNodes = nodeManager.getNodes(parentId, new Long(0),
new Integer("0"));
if (firstLevelNodes != null) {
for (int i = 0; i < firstLevelNodes.size(); i++) {
Node childNode = (Node) firstLevelNodes.get(i);
cmsStaticFileGenerateEngine.generateAllNodeStaticFile(
childNode.getNodeId(), mode, errors);
success = resourcePublishEngine.refreshAllNodeResource(
childNode.getNodeId(), mode, errors);
}
}
} else {
cmsStaticFileGenerateEngine.generateAllNodeStaticFile(parentId,
mode, errors);
success = resourcePublishEngine.refreshAllNodeResource(parentId,
mode, errors);
}
return success;
}
public boolean unPublishContent(Long nodeId, Long indexId, List errors) {
boolean success = true;
success = contentPublishEngine
.contentUnPublish(nodeId, indexId, errors);
//删除静态文件
success = deletePublishedFile(nodeId, indexId, errors);
return success;
}
/**
*
* @param nodeId
* Integer
* @param indexId
* Integer
* @param extraPublishId
* Integer
* @param type
* int
* @param tplContent
* String
* @param page
* int
* @param errors
* List
* @return String
*/
public String previewTemplate(Long nodeId, Long indexId,
Long extraPublishId, int type, String tplContent, int page,
List errors) {
return cmsStaticFileGenerateEngine.previewTemplate(nodeId, indexId,
tplContent, extraPublishId, type, page, errors);
}
public boolean republishAllNodeContent(Long parentId,
PublishEngineMode mode, List errors) {
boolean success = true;
if (parentId.intValue() == 0) {
// it is root node
List firstLevelNodes = nodeManager.getNodes(parentId, new Long(0),
new Integer("0"));
if (firstLevelNodes != null) {
for (int i = 0; i < firstLevelNodes.size(); i++) {
Node childNode = (Node) firstLevelNodes.get(i);
success = contentPublishEngine.nodeAllContentRePublish(
childNode.getNodeId(), mode, errors);
}
}
} else {
success = contentPublishEngine.nodeAllContentRePublish(parentId,
mode, errors);
}
return success;
}
public boolean unpublishAllNodeContent(Long parentId,
PublishEngineMode mode, List errors) {
boolean success = true;
if (parentId.intValue() == 0) {
// it is root node
List firstLevelNodes = nodeManager.getNodes(parentId, new Long(0),
new Integer("0"));
if (firstLevelNodes != null) {
for (int i = 0; i < firstLevelNodes.size(); i++) {
Node childNode = (Node) firstLevelNodes.get(i);
success = contentPublishEngine.nodeAllContentUnPublish(
childNode.getNodeId(), mode, errors);
}
}
} else {
success = contentPublishEngine.nodeAllContentUnPublish(parentId,
mode, errors);
}
return success;
}
public String getContent(Long nodeId, Long indexId, int page, List errors) {
return cmsStaticFileGenerateEngine.getContent(nodeId, indexId, page,
errors,false);
}
public String getNodeIndex(Long nodeId, int page, List errors) {
return cmsStaticFileGenerateEngine.getNodeIndex(nodeId, page, errors);
}
public String getExtraContent(Long nodeId, Long publishId, int page,
List errors) {
return cmsStaticFileGenerateEngine.getExtraContent(nodeId, publishId,
page, errors);
}
public String getPreviewContent(Long nodeId, Long indexId, int page,
List errors) {
return cmsStaticFileGenerateEngine.getContent(nodeId, indexId, page,
errors,true);
}
}