📄 contentworker.java
字号:
/*
* $Id: ContentWorker.java,v 1.16 2004/01/11 06:27:04 byersa Exp $
*
* Copyright (c) 2001, 2002 The Open For Business Project - www.ofbiz.org
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package org.ofbiz.content.content;
import java.io.IOException;
import java.io.Writer;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.ofbiz.base.util.BshUtil;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.FlexibleStringExpander;
import org.ofbiz.base.util.GeneralException;
import org.ofbiz.base.util.UtilDateTime;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.content.data.DataResourceWorker;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.condition.EntityConditionList;
import org.ofbiz.entity.condition.EntityExpr;
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.util.EntityUtil;
import org.ofbiz.minilang.MiniLangException;
import org.ofbiz.minilang.SimpleMapProcessor;
import org.ofbiz.service.GenericServiceException;
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.content.webapp.ftl.FreeMarkerWorker;
import bsh.EvalError;
/**
* ContentWorker Class
*
* @author <a href="mailto:byersa@automationgroups.com">Al Byers</a>
* @version $Revision: 1.16 $
* @since 2.2
*
*
*/
public class ContentWorker {
public static final String module = ContentWorker.class.getName();
public static GenericValue findAlternateLocaleContent(GenericDelegator delegator, GenericValue view, Locale locale) {
GenericValue contentAssocDataResourceViewFrom = view;
if (locale == null) {
return contentAssocDataResourceViewFrom;
}
String localeStr = locale.toString();
boolean isTwoLetterLocale = localeStr.length() == 2;
List alternateViews = null;
try {
alternateViews = view.getRelated("ContentAssocDataResourceViewTo", UtilMisc.toMap("caContentAssocTypeId", "ALTERNATE_LOCALE"), UtilMisc.toList("-caFromDate"));
} catch (GenericEntityException e) {
Debug.logError(e, "Error finding alternate locale content: " + e.toString(), module);
return contentAssocDataResourceViewFrom;
}
alternateViews = EntityUtil.filterByDate(alternateViews, UtilDateTime.nowTimestamp(), "caFromDate", "caThruDate", true);
Iterator alternateViewIter = alternateViews.iterator();
while (alternateViewIter.hasNext()) {
GenericValue thisView = (GenericValue) alternateViewIter.next();
String currentLocaleString = thisView.getString("localeString");
if (UtilValidate.isEmpty(currentLocaleString)) {
continue;
}
int currentLocaleLength = currentLocaleString.length();
// could be a 2 letter or 5 letter code
if (isTwoLetterLocale) {
if (currentLocaleLength == 2) {
// if the currentLocaleString is only a two letter code and the current one is a two and it matches, we are done
if (localeStr.equals(currentLocaleString)) {
contentAssocDataResourceViewFrom = thisView;
break;
}
} else if (currentLocaleLength == 5) {
// if the currentLocaleString is only a two letter code and the current one is a five, match up but keep going
if (localeStr.equals(currentLocaleString.substring(0, 2))) {
contentAssocDataResourceViewFrom = thisView;
}
}
} else {
if (currentLocaleLength == 2) {
// if the currentLocaleString is a five letter code and the current one is a two and it matches, keep going
if (localeStr.substring(0, 2).equals(currentLocaleString)) {
contentAssocDataResourceViewFrom = thisView;
}
} else if (currentLocaleLength == 5) {
// if the currentLocaleString is a five letter code and the current one is a five, if it matches we are done
if (localeStr.equals(currentLocaleString)) {
contentAssocDataResourceViewFrom = thisView;
break;
}
}
}
}
return contentAssocDataResourceViewFrom;
}
public static void traverse(GenericDelegator delegator, GenericValue content, Timestamp fromDate, Timestamp thruDate, Map whenMap, int depthIdx, Map masterNode, String contentAssocTypeId, List pickList, String direction) {
//if (Debug.verboseOn()) Debug.logVerbose("contentId(traverse - 0):" + content.get("contentId") + " depth:" + depthIdx,null);
//if (Debug.verboseOn()) Debug.logVerbose("masterNode(traverse -0):" + masterNode,null);
//if (Debug.verboseOn()) Debug.logVerbose("traverse, fromDate:" + fromDate,null);
//if (Debug.verboseOn()) Debug.logVerbose("traverse, thruDate:" + thruDate,null);
//String startContentAssocTypeId = null;
String contentTypeId = null;
String contentId = null;
try {
if (contentAssocTypeId == null) {
contentAssocTypeId = "";
}
contentId = (String) content.get("contentId");
contentTypeId = (String) content.get("contentTypeId");
//if (Debug.verboseOn()) Debug.logVerbose("contentTypeId(traverse):" + contentTypeId,null);
List topicList = content.getRelatedByAnd("ToContentAssoc", UtilMisc.toMap("contentAssocTypeId", "TOPIC"));
List topics = new ArrayList();
for (int i = 0; i < topicList.size(); i++) {
GenericValue assoc = (GenericValue) topicList.get(i);
topics.add(assoc.get("contentId"));
}
//if (Debug.verboseOn()) Debug.logVerbose("topics(traverse):" + topics,null);
List keywordList = content.getRelatedByAnd("ToContentAssoc", UtilMisc.toMap("contentAssocTypeId", "KEYWORD"));
List keywords = new ArrayList();
for (int i = 0; i < keywordList.size(); i++) {
GenericValue assoc = (GenericValue) keywordList.get(i);
keywords.add(assoc.get("contentId"));
}
//if (Debug.verboseOn()) Debug.logVerbose("keywords(traverse):" + keywords,null);
List purposeValueList = content.getRelatedCache("ContentPurpose");
List purposes = new ArrayList();
for (int i = 0; i < purposeValueList.size(); i++) {
GenericValue purposeValue = (GenericValue) purposeValueList.get(i);
purposes.add(purposeValue.get("contentPurposeTypeId"));
}
//if (Debug.verboseOn()) Debug.logVerbose("purposes(traverse):" + purposes,null);
List contentTypeAncestry = new ArrayList();
getContentTypeAncestry(delegator, contentTypeId, contentTypeAncestry);
Map context = new HashMap();
context.put("content", content);
context.put("contentAssocTypeId", contentAssocTypeId);
//if (Debug.verboseOn()) Debug.logVerbose("contentAssocTypeId(traverse):" + contentAssocTypeId,null);
//context.put("related", related);
context.put("purposes", purposes);
context.put("topics", topics);
context.put("keywords", keywords);
context.put("typeAncestry", contentTypeAncestry);
//if (Debug.verboseOn()) Debug.logVerbose("context(traverse):" + context,null);
boolean isPick = checkWhen(context, (String) whenMap.get("pickWhen"));
//if (Debug.verboseOn()) Debug.logVerbose("isPick(traverse):" + isPick,null);
boolean isReturnBefore = checkReturnWhen(context, (String) whenMap.get("returnBeforePickWhen"));
//if (Debug.verboseOn()) Debug.logVerbose("isReturnBefore:" + isReturnBefore,null);
Map thisNode = null;
if (isPick || !isReturnBefore) {
//if (Debug.verboseOn()) Debug.logVerbose("masterNode(traverse -1):" + masterNode,null);
thisNode = new HashMap();
thisNode.put("contentId", contentId);
thisNode.put("contentTypeId", contentTypeId);
thisNode.put("contentAssocTypeId", contentAssocTypeId);
//if (Debug.verboseOn()) Debug.logVerbose("thisNode(traverse):" + thisNode,null);
List kids = (List) masterNode.get("kids");
if (kids == null) {
kids = new ArrayList();
masterNode.put("kids", kids);
}
kids.add(thisNode);
//if (Debug.verboseOn()) Debug.logVerbose("masterNode(traverse -2):" + masterNode,null);
}
if (isPick) {
pickList.add(content);
thisNode.put("value", content);
//if (Debug.verboseOn()) Debug.logVerbose("thisNode2(traverse):" + thisNode,null);
//if (Debug.verboseOn()) Debug.logVerbose("masterNode(traverse -3):" + masterNode,null);
}
boolean isReturnAfter = checkReturnWhen(context, (String) whenMap.get("returnAfterPickWhen"));
//if (Debug.verboseOn()) Debug.logVerbose("isReturnAfter:" + isReturnAfter,null);
if (!isReturnAfter) {
//if (Debug.verboseOn()) Debug.logVerbose("traverse, getContentAssocs, contentId:" + contentId,null);
List relatedAssocs = getContentAssocsWithId(delegator, contentId, fromDate, thruDate, direction, new ArrayList());
//if (Debug.verboseOn()) Debug.logVerbose("traverse, relatedAssocs:" + relatedAssocs,null);
Iterator it = relatedAssocs.iterator();
Map assocContext = new HashMap();
assocContext.put("related", relatedAssocs);
while (it.hasNext()) {
GenericValue assocValue = (GenericValue) it.next();
if (Debug.verboseOn()) Debug.logVerbose("assocValue, Id:" + assocValue.get("contentId") + " To:" + assocValue.get("contentIdTo") + " AssocTypeId:" + assocValue.get("contentAssocTypeId"), null);
contentAssocTypeId = (String) assocValue.get("contentAssocTypeId");
assocContext.put("contentAssocTypeId", contentAssocTypeId);
//assocContext.put("contentTypeId", assocValue.get("contentTypeId") );
assocContext.put("parentContent", content);
String assocRelation = null;
// This needs to be the opposite
String relatedDirection = null;
if (direction != null && direction.equalsIgnoreCase("From")) {
assocContext.put("contentIdFrom", assocValue.get("contentId"));
assocRelation = "ToContent";
relatedDirection = "From";
} else {
assocContext.put("contentIdTo", assocValue.get("contentId"));
assocRelation = "FromContent";
relatedDirection = "To";
}
//if (Debug.verboseOn()) Debug.logVerbose("assocContext(traverse - 2):" + assocContext,null);
boolean isFollow = checkWhen(assocContext, (String) whenMap.get("followWhen"));
//if (Debug.verboseOn()) Debug.logVerbose("isFollow:" + isFollow,null);
//if (Debug.verboseOn()) Debug.logVerbose("assocRelation:" + assocRelation,null);
//if (Debug.verboseOn()) Debug.logVerbose("relatedDirection:" + relatedDirection,null);
if (isFollow) {
GenericValue thisContent = assocValue.getRelatedOne(assocRelation);
//if (Debug.verboseOn()) Debug.logVerbose("thisContent, id:" + thisContent.get("contentId"),null);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -