KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ofbiz > content > content > ContentServices


1 /*
2  * $Id: ContentServices.java 7074 2006-03-25 00:04:33Z jonesde $
3  *
4  * Copyright (c) 2001-2005 The Open For Business Project - www.ofbiz.org
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
21  * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
22  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */

24 package org.ofbiz.content.content;
25
26 import java.io.ByteArrayOutputStream JavaDoc;
27 import java.io.FileNotFoundException JavaDoc;
28 import java.io.IOException JavaDoc;
29 import java.io.StringWriter JavaDoc;
30 import java.io.Writer JavaDoc;
31 import java.sql.Timestamp JavaDoc;
32 import java.util.ArrayList JavaDoc;
33 import java.util.HashMap JavaDoc;
34 import java.util.Iterator JavaDoc;
35 import java.util.List JavaDoc;
36 import java.util.Locale JavaDoc;
37 import java.util.Map JavaDoc;
38 import java.util.Set JavaDoc;
39
40 import javax.xml.parsers.ParserConfigurationException JavaDoc;
41
42 import org.apache.avalon.framework.logger.Log4JLogger;
43 import org.apache.avalon.framework.logger.Logger;
44 import org.apache.fop.apps.Driver;
45 import org.apache.fop.image.FopImageFactory;
46 import org.apache.fop.messaging.MessageHandler;
47 import org.apache.fop.tools.DocumentInputSource;
48 import org.ofbiz.base.util.Debug;
49 import org.ofbiz.base.util.GeneralException;
50 import org.ofbiz.base.util.StringUtil;
51 import org.ofbiz.base.util.UtilDateTime;
52 import org.ofbiz.base.util.UtilFormatOut;
53 import org.ofbiz.base.util.UtilHttp;
54 import org.ofbiz.base.util.UtilMisc;
55 import org.ofbiz.base.util.UtilValidate;
56 import org.ofbiz.base.util.UtilXml;
57 import org.ofbiz.entity.GenericDelegator;
58 import org.ofbiz.entity.GenericEntityException;
59 import org.ofbiz.entity.GenericValue;
60 import org.ofbiz.entity.condition.EntityConditionList;
61 import org.ofbiz.entity.condition.EntityExpr;
62 import org.ofbiz.entity.condition.EntityOperator;
63 import org.ofbiz.entity.util.ByteWrapper;
64 import org.ofbiz.entity.util.EntityUtil;
65 import org.ofbiz.security.Security;
66 import org.ofbiz.service.DispatchContext;
67 import org.ofbiz.service.GenericServiceException;
68 import org.ofbiz.service.LocalDispatcher;
69 import org.ofbiz.service.ModelService;
70 import org.ofbiz.service.ServiceUtil;
71 import org.w3c.dom.Document JavaDoc;
72 import org.xml.sax.InputSource JavaDoc;
73 import org.xml.sax.SAXException JavaDoc;
74
75 /**
76  * ContentServices Class
77  *
78  * @author <a HREF="mailto:byersa@automationgroups.com">Al Byers</a>
79  * @version $Rev: 7074 $
80  * @since 2.2
81  *
82  *
83  */

84 public class ContentServices {
85
86     public static final String JavaDoc module = ContentServices.class.getName();
87
88     /**
89      * findRelatedContent Finds the related
90      */

91     public static Map JavaDoc findRelatedContent(DispatchContext dctx, Map JavaDoc context) {
92         LocalDispatcher dispatcher = dctx.getDispatcher();
93         Map JavaDoc results = new HashMap JavaDoc();
94
95         GenericValue currentContent = (GenericValue) context.get("currentContent");
96         String JavaDoc fromDate = (String JavaDoc) context.get("fromDate");
97         String JavaDoc thruDate = (String JavaDoc) context.get("thruDate");
98         String JavaDoc toFrom = (String JavaDoc) context.get("toFrom");
99         if (toFrom == null) {
100             toFrom = "TO";
101         } else {
102             toFrom = toFrom.toUpperCase();
103         }
104
105         List JavaDoc assocTypes = (List JavaDoc) context.get("contentAssocTypeList");
106         List JavaDoc targetOperations = (List JavaDoc) context.get("targetOperationList");
107         List JavaDoc contentList = null;
108         List JavaDoc contentTypes = (List JavaDoc) context.get("contentTypeList");
109
110         try {
111             contentList = ContentWorker.getAssociatedContent(currentContent, toFrom, assocTypes, contentTypes, fromDate, thruDate);
112         } catch (GenericEntityException e) {
113             return ServiceUtil.returnError("Error getting associated content: " + e.toString());
114         }
115
116         if (targetOperations == null || targetOperations.isEmpty()) {
117             results.put("contentList", contentList);
118             return results;
119         }
120
121         Map JavaDoc serviceInMap = new HashMap JavaDoc();
122         serviceInMap.put("userLogin", context.get("userLogin"));
123         serviceInMap.put("targetOperationList", targetOperations);
124         serviceInMap.put("entityOperation", context.get("entityOperation"));
125
126         List JavaDoc permittedList = new ArrayList JavaDoc();
127         Iterator JavaDoc it = contentList.iterator();
128         Map JavaDoc permResults = null;
129         while (it.hasNext()) {
130             GenericValue content = (GenericValue) it.next();
131             serviceInMap.put("currentContent", content);
132             try {
133                 permResults = dispatcher.runSync("checkContentPermission", serviceInMap);
134             } catch (GenericServiceException e) {
135                 Debug.logError(e, "Problem checking permissions", "ContentServices");
136                 return ServiceUtil.returnError("Problem checking permissions");
137             }
138
139             String JavaDoc permissionStatus = (String JavaDoc) permResults.get("permissionStatus");
140             if (permissionStatus != null && permissionStatus.equalsIgnoreCase("granted")) {
141                 permittedList.add(content);
142             }
143
144         }
145
146         results.put("contentList", permittedList);
147         return results;
148     }
149     /**
150      * This is a generic service for traversing a Content tree, typical of a blog response tree. It calls the ContentWorker.traverse method.
151      */

152     public static Map JavaDoc findContentParents(DispatchContext dctx, Map JavaDoc context) {
153         HashMap JavaDoc results = new HashMap JavaDoc();
154         List JavaDoc parentList = new ArrayList JavaDoc();
155         results.put("parentList", parentList);
156         LocalDispatcher dispatcher = dctx.getDispatcher();
157         String JavaDoc contentId = (String JavaDoc)context.get("contentId");
158         String JavaDoc contentAssocTypeId = (String JavaDoc)context.get("contentAssocTypeId");
159         String JavaDoc direction = (String JavaDoc)context.get("direction");
160         if (UtilValidate.isEmpty(direction)) direction="To";
161         Map JavaDoc traversMap = new HashMap JavaDoc();
162         traversMap.put("contentId", contentId);
163         traversMap.put("direction", direction);
164         traversMap.put("contentAssocTypeId", contentAssocTypeId);
165         try {
166             Map JavaDoc thisResults = dispatcher.runSync("traverseContent", traversMap);
167             String JavaDoc errorMsg = ServiceUtil.getErrorMessage(thisResults);
168             if (UtilValidate.isNotEmpty(errorMsg) ) {
169                 Debug.logError( "Problem in traverseContent. " + errorMsg, module);
170                 return ServiceUtil.returnError(errorMsg);
171             }
172             Map JavaDoc nodeMap = (Map JavaDoc)thisResults.get("nodeMap");
173             walkParentTree(nodeMap, parentList);
174         } catch (GenericServiceException e) {
175             return ServiceUtil.returnFailure(e.getMessage());
176         }
177         return results;
178     }
179     
180     private static void walkParentTree(Map JavaDoc nodeMap, List JavaDoc parentList) {
181         List JavaDoc kids = (List JavaDoc)nodeMap.get("kids");
182         if (kids == null || kids.size() == 0) {
183             parentList.add(nodeMap.get("contentId"));
184         } else {
185             Iterator JavaDoc iter = kids.iterator();
186             while (iter.hasNext()) {
187                 Map JavaDoc node = (Map JavaDoc) iter.next();
188                 walkParentTree(node, parentList);
189             }
190         }
191     }
192     /**
193      * This is a generic service for traversing a Content tree, typical of a blog response tree. It calls the ContentWorker.traverse method.
194      */

195     public static Map JavaDoc traverseContent(DispatchContext dctx, Map JavaDoc context) {
196         GenericDelegator delegator = dctx.getDelegator();
197         HashMap JavaDoc results = new HashMap JavaDoc();
198
199         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
200         String JavaDoc direction = (String JavaDoc) context.get("direction");
201         if (direction != null && direction.equalsIgnoreCase("From")) {
202             direction = "From";
203         } else {
204             direction = "To";
205         }
206
207         if (contentId == null) {
208             contentId = "PUBLISH_ROOT";
209         }
210
211         GenericValue content = null;
212         try {
213             content = delegator.findByPrimaryKey("Content", UtilMisc.toMap("contentId", contentId));
214         } catch (GenericEntityException e) {
215             System.out.println("Entity Error:" + e.getMessage());
216             return ServiceUtil.returnError("Error in retrieving Content. " + e.getMessage());
217         }
218
219         String JavaDoc fromDateStr = (String JavaDoc) context.get("fromDateStr");
220         String JavaDoc thruDateStr = (String JavaDoc) context.get("thruDateStr");
221         Timestamp JavaDoc fromDate = null;
222         if (fromDateStr != null && fromDateStr.length() > 0) {
223             fromDate = UtilDateTime.toTimestamp(fromDateStr);
224         }
225
226         Timestamp JavaDoc thruDate = null;
227         if (thruDateStr != null && thruDateStr.length() > 0) {
228             thruDate = UtilDateTime.toTimestamp(thruDateStr);
229         }
230
231         Map JavaDoc whenMap = new HashMap JavaDoc();
232         whenMap.put("followWhen", context.get("followWhen"));
233         whenMap.put("pickWhen", context.get("pickWhen"));
234         whenMap.put("returnBeforePickWhen", context.get("returnBeforePickWhen"));
235         whenMap.put("returnAfterPickWhen", context.get("returnAfterPickWhen"));
236
237         String JavaDoc startContentAssocTypeId = (String JavaDoc) context.get("contentAssocTypeId");
238         if (startContentAssocTypeId != null) {
239             startContentAssocTypeId = "PUBLISH";
240         }
241
242         Map JavaDoc nodeMap = new HashMap JavaDoc();
243         List JavaDoc pickList = new ArrayList JavaDoc();
244         ContentWorker.traverse(delegator, content, fromDate, thruDate, whenMap, 0, nodeMap, startContentAssocTypeId, pickList, direction);
245
246         results.put("nodeMap", nodeMap);
247         results.put("pickList", pickList);
248         return results;
249     }
250
251     /**
252      * Create a Content service. The work is done in a separate method so that complex services that need this functionality do not need to incur the
253      * reflection performance penalty.
254      */

255     public static Map JavaDoc createContent(DispatchContext dctx, Map JavaDoc context) {
256         /*
257         context.put("entityOperation", "_CREATE");
258         List targetOperationList = ContentWorker.prepTargetOperationList(context, "_CREATE");
259
260         List contentPurposeList = ContentWorker.prepContentPurposeList(context);
261         context.put("targetOperationList", targetOperationList);
262         context.put("contentPurposeList", contentPurposeList); // for checking permissions
263         //context.put("skipPermissionCheck", null);
264         */

265
266         Map JavaDoc result = createContentMethod(dctx, context);
267         return result;
268     }
269
270     /**
271      * Create a Content method. The work is done in this separate method so that complex services that need this functionality do not need to incur the
272      * reflection performance penalty.
273      */

274     public static Map JavaDoc createContentMethod(DispatchContext dctx, Map JavaDoc context) {
275         context.put("entityOperation", "_CREATE");
276         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_CREATE");
277         if (Debug.infoOn()) Debug.logInfo("in createContentMethod, targetOperationList: " + targetOperationList, null);
278
279         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
280         context.put("targetOperationList", targetOperationList);
281         context.put("contentPurposeList", contentPurposeList);
282
283         Timestamp JavaDoc nowTimestamp = UtilDateTime.nowTimestamp();
284         Map JavaDoc result = new HashMap JavaDoc();
285         GenericDelegator delegator = dctx.getDelegator();
286         LocalDispatcher dispatcher = dctx.getDispatcher();
287         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
288         //String contentTypeId = (String) context.get("contentTypeId");
289

290         if (UtilValidate.isEmpty(contentId)) {
291             contentId = delegator.getNextSeqId("Content");
292         }
293
294         GenericValue content = delegator.makeValue("Content", UtilMisc.toMap("contentId", contentId));
295         content.setNonPKFields(context);
296
297         GenericValue userLogin = (GenericValue) context.get("userLogin");
298         String JavaDoc userLoginId = (String JavaDoc) userLogin.get("userLoginId");
299
300         content.put("createdByUserLogin", userLoginId);
301         content.put("lastModifiedByUserLogin", userLoginId);
302         content.put("createdDate", nowTimestamp);
303         content.put("lastModifiedDate", nowTimestamp);
304
305         context.put("currentContent", content);
306         if (Debug.infoOn()) Debug.logInfo("in createContentMethod, context: " + context, null);
307
308         Map JavaDoc permResults = ContentWorker.callContentPermissionCheckResult(delegator, dispatcher, context);
309         String JavaDoc permissionStatus = (String JavaDoc) permResults.get("permissionStatus");
310         if (permissionStatus != null && permissionStatus.equalsIgnoreCase("granted")) {
311             try {
312                 content.create();
313             } catch (GenericEntityException e) {
314                 return ServiceUtil.returnError(e.getMessage());
315             } catch (Exception JavaDoc e2) {
316                 return ServiceUtil.returnError(e2.getMessage());
317             }
318
319             result.put("contentId", contentId);
320         } else {
321             String JavaDoc errorMsg = (String JavaDoc) permResults.get(ModelService.ERROR_MESSAGE);
322             result.put(ModelService.ERROR_MESSAGE, errorMsg);
323             return ServiceUtil.returnFailure(errorMsg);
324         }
325
326         context.remove("currentContent");
327         return result;
328     }
329
330     /**
331      * Create a ContentAssoc service. The work is done in a separate method so that complex services that need this functionality do not need to incur the
332      * reflection performance penalty.
333      */

334     public static Map JavaDoc createContentAssoc(DispatchContext dctx, Map JavaDoc context) {
335         context.put("entityOperation", "_CREATE");
336         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_CREATE");
337
338         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
339         context.put("targetOperationList", targetOperationList);
340         context.put("contentPurposeList", contentPurposeList);
341         context.put("skipPermissionCheck", null);
342
343         Map JavaDoc result = null;
344         try {
345             result = createContentAssocMethod(dctx, context);
346         } catch (GenericServiceException e) {
347             return ServiceUtil.returnError(e.getMessage());
348         } catch (GenericEntityException e2) {
349             return ServiceUtil.returnError(e2.getMessage());
350         } catch (Exception JavaDoc e3) {
351             return ServiceUtil.returnError(e3.getMessage());
352         }
353         return result;
354     }
355
356     /**
357      * Create a ContentAssoc method. The work is done in this separate method so that complex services that need this functionality do not need to incur the
358      * reflection performance penalty.
359      */

360     public static Map JavaDoc createContentAssocMethod(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException, GenericEntityException {
361         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_CREATE");
362         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
363         context.put("targetOperationList", targetOperationList);
364         context.put("contentPurposeList", contentPurposeList);
365
366         GenericDelegator delegator = dctx.getDelegator();
367         LocalDispatcher dispatcher = dctx.getDispatcher();
368         Map JavaDoc result = new HashMap JavaDoc();
369
370         // This section guesses how contentId should be used (From or To) if
371
// only a contentIdFrom o contentIdTo is passed in
372
String JavaDoc contentIdFrom = (String JavaDoc) context.get("contentIdFrom");
373         String JavaDoc contentIdTo = (String JavaDoc) context.get("contentIdTo");
374         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
375         int contentIdCount = 0;
376         if (UtilValidate.isNotEmpty(contentIdFrom))
377             contentIdCount++;
378         if (UtilValidate.isNotEmpty(contentIdTo))
379             contentIdCount++;
380         if (UtilValidate.isNotEmpty(contentId))
381             contentIdCount++;
382         if (contentIdCount < 2) {
383             Debug.logError("Not 2 out of ContentId/To/From.", "ContentServices");
384             return ServiceUtil.returnError("Not 2 out of ContentId/To/From");
385         }
386
387         if (UtilValidate.isNotEmpty(contentIdFrom)) {
388             if (UtilValidate.isEmpty(contentIdTo))
389                 contentIdTo = contentId;
390         }
391         if (UtilValidate.isNotEmpty(contentIdTo)) {
392             if (UtilValidate.isEmpty(contentIdFrom))
393                 contentIdFrom = contentId;
394         }
395
396         /*
397         String deactivateExisting = (String) context.get("deactivateExisting");
398         if (deactivateExisting != null && deactivateExisting.equalsIgnoreCase("true")) {
399             Map andMap = new HashMap();
400             andMap.put("contentIdTo", contentIdTo);
401             andMap.put("contentAssocTypeId", context.get("contentAssocTypeId"));
402
403             String mapKey = (String) context.get("mapKey");
404             if (UtilValidate.isNotEmpty(mapKey)) {
405                 andMap.put("mapKey", mapKey);
406             }
407             if (Debug.infoOn()) Debug.logInfo("DEACTIVATING CONTENTASSOC andMap: " + andMap, null);
408
409             List assocList = delegator.findByAnd("ContentAssoc", andMap);
410             Iterator iter = assocList.iterator();
411             while (iter.hasNext()) {
412                 GenericValue val = (GenericValue) iter.next();
413                 if (Debug.infoOn()) Debug.logInfo("DEACTIVATING CONTENTASSOC val: " + val, null);
414
415                 val.set("thruDate", UtilDateTime.nowTimestamp());
416                 val.store();
417             }
418         }
419         */

420
421         GenericValue contentAssoc = delegator.makeValue("ContentAssoc", new HashMap JavaDoc());
422         contentAssoc.put("contentId", contentIdFrom);
423         contentAssoc.put("contentIdTo", contentIdTo);
424         contentAssoc.put("contentAssocTypeId", context.get("contentAssocTypeId"));
425         contentAssoc.put("contentAssocPredicateId", context.get("contentAssocPredicateIdFrom"));
426         contentAssoc.put("dataSourceId", context.get("dataSourceId"));
427
428         Timestamp JavaDoc fromDate = (Timestamp JavaDoc) context.get("fromDate");
429         if (fromDate == null) {
430             contentAssoc.put("fromDate", UtilDateTime.nowTimestamp());
431         } else {
432             contentAssoc.put("fromDate", fromDate);
433         }
434
435         Timestamp JavaDoc thruDate = (Timestamp JavaDoc) context.get("thruDate");
436         if (thruDate == null) {
437             contentAssoc.put("thruDate", null);
438         } else {
439             contentAssoc.put("thruDate", thruDate);
440         }
441
442         contentAssoc.put("sequenceNum", context.get("sequenceNum"));
443         contentAssoc.put("mapKey", context.get("mapKey"));
444
445         String JavaDoc upperCoordinateStr = (String JavaDoc) context.get("upperCoordinate");
446         if (UtilValidate.isEmpty(upperCoordinateStr)) {
447             contentAssoc.put("upperCoordinate", null);
448         } else {
449             contentAssoc.put("upperCoordinate", upperCoordinateStr);
450         }
451
452         String JavaDoc leftCoordinateStr = (String JavaDoc) context.get("leftCoordinate");
453         if (UtilValidate.isEmpty(leftCoordinateStr)) {
454             contentAssoc.put("leftCoordinate", null);
455         } else {
456             contentAssoc.put("leftCoordinate", leftCoordinateStr);
457         }
458
459         GenericValue userLogin = (GenericValue) context.get("userLogin");
460         String JavaDoc userLoginId = (String JavaDoc) userLogin.get("userLoginId");
461         String JavaDoc createdByUserLogin = userLoginId;
462         String JavaDoc lastModifiedByUserLogin = userLoginId;
463
464         Timestamp JavaDoc createdDate = UtilDateTime.nowTimestamp();
465         Timestamp JavaDoc lastModifiedDate = UtilDateTime.nowTimestamp();
466
467         contentAssoc.put("createdByUserLogin", createdByUserLogin);
468         contentAssoc.put("lastModifiedByUserLogin", lastModifiedByUserLogin);
469         contentAssoc.put("createdDate", createdDate);
470         contentAssoc.put("lastModifiedDate", lastModifiedDate);
471
472         Map JavaDoc serviceInMap = new HashMap JavaDoc();
473         String JavaDoc permissionStatus = null;
474         serviceInMap.put("userLogin", context.get("userLogin"));
475         serviceInMap.put("targetOperationList", targetOperationList);
476         serviceInMap.put("contentPurposeList", contentPurposeList);
477         serviceInMap.put("entityOperation", context.get("entityOperation"));
478         serviceInMap.put("contentAssocPredicateId", context.get("contentAssocPredicateId"));
479         serviceInMap.put("contentIdTo", contentIdTo);
480         serviceInMap.put("contentIdFrom", contentIdFrom);
481         serviceInMap.put("statusId", context.get("statusId"));
482         serviceInMap.put("privilegeEnumId", context.get("privilegeEnumId"));
483         serviceInMap.put("roleTypeList", context.get("roleTypeList"));
484         serviceInMap.put("displayFailCond", context.get("displayFailCond"));
485
486         Map JavaDoc permResults = null;
487         permResults = dispatcher.runSync("checkAssocPermission", serviceInMap);
488         permissionStatus = (String JavaDoc) permResults.get("permissionStatus");
489
490         if (permissionStatus != null && permissionStatus.equals("granted")) {
491             contentAssoc.create();
492         } else {
493             String JavaDoc errorMsg = (String JavaDoc)permResults.get(ModelService.ERROR_MESSAGE);
494             result.put(ModelService.ERROR_MESSAGE, errorMsg);
495             return ServiceUtil.returnFailure(errorMsg);
496         }
497
498         result.put("contentIdTo", contentIdTo);
499         result.put("contentIdFrom", contentIdFrom);
500         result.put("fromDate", contentAssoc.get("fromDate"));
501         result.put("contentAssocTypeId", contentAssoc.get("contentAssocTypeId"));
502         //Debug.logInfo("result:" + result, module);
503
//Debug.logInfo("contentAssoc:" + contentAssoc, module);
504

505         return result;
506     }
507
508     /**
509      * A service wrapper for the updateContentMethod method. Forces permissions to be checked.
510      */

511     public static Map JavaDoc updateContent(DispatchContext dctx, Map JavaDoc context) {
512         context.put("entityOperation", "_UPDATE");
513         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_UPDATE");
514
515         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
516         context.put("targetOperationList", targetOperationList);
517         context.put("contentPurposeList", contentPurposeList);
518         context.put("skipPermissionCheck", null);
519
520         Map JavaDoc result = updateContentMethod(dctx, context);
521         return result;
522     }
523
524     /**
525      * Update a Content method. The work is done in this separate method so that complex services that need this functionality do not need to incur the
526      * reflection performance penalty of calling a service.
527      */

528     public static Map JavaDoc updateContentMethod(DispatchContext dctx, Map JavaDoc context) {
529         GenericDelegator delegator = dctx.getDelegator();
530         LocalDispatcher dispatcher = dctx.getDispatcher();
531         Map JavaDoc result = new HashMap JavaDoc();
532
533         context.put("entityOperation", "_UPDATE");
534         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_UPDATE");
535
536         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
537         context.put("targetOperationList", targetOperationList);
538         context.put("contentPurposeList", contentPurposeList);
539
540         GenericValue content = null;
541         //Locale locale = (Locale) context.get("locale");
542
String JavaDoc contentId = (String JavaDoc) context.get("contentId");
543         try {
544             content = delegator.findByPrimaryKey("Content", UtilMisc.toMap("contentId", contentId));
545         } catch (GenericEntityException e) {
546             Debug.logWarning(e, module);
547             return ServiceUtil.returnError("content.update.read_failure" + e.getMessage());
548         }
549         context.put("currentContent", content);
550
551         Map JavaDoc permResults = ContentWorker.callContentPermissionCheckResult(delegator, dispatcher, context);
552         String JavaDoc permissionStatus = (String JavaDoc) permResults.get("permissionStatus");
553         if (permissionStatus != null && permissionStatus.equalsIgnoreCase("granted")) {
554             GenericValue userLogin = (GenericValue) context.get("userLogin");
555             String JavaDoc userLoginId = (String JavaDoc) userLogin.get("userLoginId");
556             String JavaDoc lastModifiedByUserLogin = userLoginId;
557             Timestamp JavaDoc lastModifiedDate = UtilDateTime.nowTimestamp();
558
559             content.setNonPKFields(context);
560             content.put("lastModifiedByUserLogin", lastModifiedByUserLogin);
561             content.put("lastModifiedDate", lastModifiedDate);
562             try {
563                 content.store();
564             } catch (GenericEntityException e) {
565                 return ServiceUtil.returnError(e.getMessage());
566             }
567         } else {
568             String JavaDoc errorMsg = ContentWorker.prepPermissionErrorMsg(permResults);
569             return ServiceUtil.returnError(errorMsg);
570         }
571
572         return result;
573     }
574
575     /**
576      * Update a ContentAssoc service. The work is done in a separate method so that complex services that need this functionality do not need to incur the
577      * reflection performance penalty.
578      */

579     public static Map JavaDoc updateContentAssoc(DispatchContext dctx, Map JavaDoc context) {
580         context.put("entityOperation", "_UPDATE");
581         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_UPDATE");
582
583         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
584         context.put("targetOperationList", targetOperationList);
585         context.put("contentPurposeList", contentPurposeList);
586         context.put("skipPermissionCheck", null);
587
588         Map JavaDoc result = updateContentAssocMethod(dctx, context);
589         return result;
590     }
591
592     /**
593      * Update a ContentAssoc method. The work is done in this separate method so that complex services that need this functionality do not need to incur the
594      * reflection performance penalty.
595      */

596     public static Map JavaDoc updateContentAssocMethod(DispatchContext dctx, Map JavaDoc context) {
597         GenericDelegator delegator = dctx.getDelegator();
598         LocalDispatcher dispatcher = dctx.getDispatcher();
599         Map JavaDoc result = new HashMap JavaDoc();
600
601         context.put("entityOperation", "_UPDATE");
602         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_UPDATE");
603
604         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
605         context.put("targetOperationList", targetOperationList);
606         context.put("contentPurposeList", contentPurposeList);
607
608         // This section guesses how contentId should be used (From or To) if
609
// only a contentIdFrom o contentIdTo is passed in
610
String JavaDoc contentIdFrom = (String JavaDoc) context.get("contentId");
611         String JavaDoc contentIdTo = (String JavaDoc) context.get("contentIdTo");
612         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
613         String JavaDoc contentAssocTypeId = (String JavaDoc) context.get("contentAssocTypeId");
614         Timestamp JavaDoc fromDate = (Timestamp JavaDoc) context.get("fromDate");
615
616         GenericValue contentAssoc = null;
617         try {
618             contentAssoc = delegator.findByPrimaryKey("ContentAssoc", UtilMisc.toMap("contentId", contentId, "contentIdTo", contentIdTo, "contentAssocTypeId", contentAssocTypeId, "fromDate", fromDate));
619         } catch (GenericEntityException e) {
620             System.out.println("Entity Error:" + e.getMessage());
621             return ServiceUtil.returnError("Error in retrieving Content. " + e.getMessage());
622         }
623         if (contentAssoc == null) {
624             return ServiceUtil.returnError("Error in updating ContentAssoc. Entity is null.");
625         }
626
627         contentAssoc.put("contentAssocPredicateId", context.get("contentAssocPredicateId"));
628         contentAssoc.put("dataSourceId", context.get("dataSourceId"));
629         contentAssoc.set("thruDate", context.get("thruDate"));
630         contentAssoc.set("sequenceNum", context.get("sequenceNum"));
631         contentAssoc.put("mapKey", context.get("mapKey"));
632
633         String JavaDoc upperCoordinateStr = (String JavaDoc) context.get("upperCoordinate");
634         if (UtilValidate.isEmpty(upperCoordinateStr)) {
635             contentAssoc.put("upperCoordinate", null);
636         } else {
637             contentAssoc.setString("upperCoordinate", upperCoordinateStr);
638         }
639
640         String JavaDoc leftCoordinateStr = (String JavaDoc) context.get("leftCoordinate");
641         if (UtilValidate.isEmpty(leftCoordinateStr)) {
642             contentAssoc.put("leftCoordinate", null);
643         } else {
644             contentAssoc.setString("leftCoordinate", leftCoordinateStr);
645         }
646
647         GenericValue userLogin = (GenericValue) context.get("userLogin");
648         String JavaDoc userLoginId = (String JavaDoc) userLogin.get("userLoginId");
649         String JavaDoc lastModifiedByUserLogin = userLoginId;
650         Timestamp JavaDoc lastModifiedDate = UtilDateTime.nowTimestamp();
651         contentAssoc.put("lastModifiedByUserLogin", lastModifiedByUserLogin);
652         contentAssoc.put("lastModifiedDate", lastModifiedDate);
653
654         String JavaDoc permissionStatus = null;
655         Map JavaDoc serviceInMap = new HashMap JavaDoc();
656         serviceInMap.put("userLogin", context.get("userLogin"));
657         serviceInMap.put("targetOperationList", targetOperationList);
658         serviceInMap.put("contentPurposeList", contentPurposeList);
659         serviceInMap.put("entityOperation", context.get("entityOperation"));
660         serviceInMap.put("contentIdTo", contentIdTo);
661         serviceInMap.put("contentIdFrom", contentIdFrom);
662
663         Map JavaDoc permResults = null;
664         try {
665             permResults = dispatcher.runSync("checkAssocPermission", serviceInMap);
666         } catch (GenericServiceException e) {
667             Debug.logError(e, "Problem checking permissions", "ContentServices");
668             return ServiceUtil.returnError("Problem checking association permissions");
669         }
670         permissionStatus = (String JavaDoc) permResults.get("permissionStatus");
671
672         if (permissionStatus != null && permissionStatus.equals("granted")) {
673             try {
674                 contentAssoc.store();
675             } catch (GenericEntityException e) {
676                 return ServiceUtil.returnError(e.getMessage());
677             }
678         } else {
679             String JavaDoc errorMsg = ContentWorker.prepPermissionErrorMsg(permResults);
680             return ServiceUtil.returnError(errorMsg);
681         }
682
683         return result;
684     }
685
686     /**
687      * Update a ContentAssoc service. The work is done in a separate method so that complex services that need this functionality do not need to incur the
688      * reflection performance penalty.
689      */

690     public static Map JavaDoc deactivateContentAssoc(DispatchContext dctx, Map JavaDoc context) {
691         context.put("entityOperation", "_UPDATE");
692         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_UPDATE");
693
694         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
695         context.put("targetOperationList", targetOperationList);
696         context.put("contentPurposeList", contentPurposeList);
697         context.put("skipPermissionCheck", null);
698
699         Map JavaDoc result = deactivateContentAssocMethod(dctx, context);
700         return result;
701     }
702
703     /**
704      * Update a ContentAssoc method. The work is done in this separate method so that complex services that need this functionality do not need to incur the
705      * reflection performance penalty.
706      */

707     public static Map JavaDoc deactivateContentAssocMethod(DispatchContext dctx, Map JavaDoc context) {
708         GenericDelegator delegator = dctx.getDelegator();
709         LocalDispatcher dispatcher = dctx.getDispatcher();
710         Map JavaDoc result = new HashMap JavaDoc();
711
712         context.put("entityOperation", "_UPDATE");
713         List JavaDoc targetOperationList = ContentWorker.prepTargetOperationList(context, "_UPDATE");
714
715         List JavaDoc contentPurposeList = ContentWorker.prepContentPurposeList(context);
716         context.put("targetOperationList", targetOperationList);
717         context.put("contentPurposeList", contentPurposeList);
718
719         GenericValue pk = delegator.makeValue("ContentAssoc",null);
720         pk.setAllFields(context, false, null, new Boolean JavaDoc(true));
721         pk.setAllFields(context, false, "ca", new Boolean JavaDoc(true));
722         //String contentIdFrom = (String) context.get("contentId");
723
//String contentIdTo = (String) context.get("contentIdTo");
724
//String contentId = (String) context.get("contentId");
725
//String contentAssocTypeId = (String) context.get("contentAssocTypeId");
726
//Timestamp fromDate = (Timestamp) context.get("fromDate");
727

728         GenericValue contentAssoc = null;
729         try {
730             //contentAssoc = delegator.findByPrimaryKey("ContentAssoc", UtilMisc.toMap("contentId", contentId, "contentIdTo", contentIdTo, "contentAssocTypeId", contentAssocTypeId, "fromDate", fromDate));
731
contentAssoc = delegator.findByPrimaryKey("ContentAssoc", pk);
732         } catch (GenericEntityException e) {
733             System.out.println("Entity Error:" + e.getMessage());
734             return ServiceUtil.returnError("Error in retrieving Content. " + e.getMessage());
735         }
736
737         if (contentAssoc == null) {
738             return ServiceUtil.returnError("Error in deactivating ContentAssoc. Entity is null.");
739         }
740
741         GenericValue userLogin = (GenericValue) context.get("userLogin");
742         String JavaDoc userLoginId = (String JavaDoc) userLogin.get("userLoginId");
743         String JavaDoc lastModifiedByUserLogin = userLoginId;
744         Timestamp JavaDoc lastModifiedDate = UtilDateTime.nowTimestamp();
745         contentAssoc.put("lastModifiedByUserLogin", lastModifiedByUserLogin);
746         contentAssoc.put("lastModifiedDate", lastModifiedDate);
747         contentAssoc.put("thruDate", UtilDateTime.nowTimestamp());
748
749         String JavaDoc permissionStatus = null;
750         Map JavaDoc serviceInMap = new HashMap JavaDoc();
751         serviceInMap.put("userLogin", context.get("userLogin"));
752         serviceInMap.put("targetOperationList", targetOperationList);
753         serviceInMap.put("contentPurposeList", contentPurposeList);
754         serviceInMap.put("entityOperation", context.get("entityOperation"));
755         serviceInMap.put("contentIdTo", contentAssoc.get("contentIdTo"));
756         serviceInMap.put("contentIdFrom", contentAssoc.get("contentId"));
757
758         Map JavaDoc permResults = null;
759         try {
760             permResults = dispatcher.runSync("checkAssocPermission", serviceInMap);
761         } catch (GenericServiceException e) {
762             Debug.logError(e, "Problem checking permissions", "ContentServices");
763             return ServiceUtil.returnError("Problem checking association permissions");
764         }
765         permissionStatus = (String JavaDoc) permResults.get("permissionStatus");
766
767         if (permissionStatus != null && permissionStatus.equals("granted")) {
768             try {
769                 contentAssoc.store();
770             } catch (GenericEntityException e) {
771                 return ServiceUtil.returnError(e.getMessage());
772             }
773         } else {
774             String JavaDoc errorMsg = ContentWorker.prepPermissionErrorMsg(permResults);
775             return ServiceUtil.returnError(errorMsg);
776         }
777
778         return result;
779     }
780
781     /**
782      * Deactivates any active ContentAssoc (except the current one) that is associated with the passed in template/layout contentId and mapKey.
783      */

784     public static Map JavaDoc deactivateAssocs(DispatchContext dctx, Map JavaDoc context) {
785         GenericDelegator delegator = dctx.getDelegator();
786         String JavaDoc contentIdTo = (String JavaDoc) context.get("contentIdTo");
787         String JavaDoc mapKey = (String JavaDoc) context.get("mapKey");
788         String JavaDoc contentAssocTypeId = (String JavaDoc) context.get("contentAssocTypeId");
789         String JavaDoc activeContentId = (String JavaDoc) context.get("activeContentId");
790         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
791         Timestamp JavaDoc fromDate = (Timestamp JavaDoc) context.get("fromDate");
792         Timestamp JavaDoc nowTimestamp = UtilDateTime.nowTimestamp();
793         String JavaDoc sequenceNum = null;
794         Map JavaDoc results = new HashMap JavaDoc();
795
796         try {
797             GenericValue activeAssoc = null;
798             if (fromDate != null) {
799                 activeAssoc = delegator.findByPrimaryKey("ContentAssoc", UtilMisc.toMap("contentId", activeContentId, "contentIdTo", contentIdTo, "fromDate", fromDate, "contentAssocTypeId", contentAssocTypeId));
800                 if (activeAssoc == null) {
801                     return ServiceUtil.returnError("No association found for contentId=" + activeContentId + " and contentIdTo=" + contentIdTo
802                             + " and contentAssocTypeId=" + contentAssocTypeId + " and fromDate=" + fromDate);
803                 }
804                 sequenceNum = (String JavaDoc) activeAssoc.get("sequenceNum");
805             }
806
807             List JavaDoc exprList = new ArrayList JavaDoc();
808             exprList.add(new EntityExpr("mapKey", EntityOperator.EQUALS, mapKey));
809             if (sequenceNum != null) {
810                 exprList.add(new EntityExpr("sequenceNum", EntityOperator.EQUALS, sequenceNum));
811             }
812             exprList.add(new EntityExpr("mapKey", EntityOperator.EQUALS, mapKey));
813             exprList.add(new EntityExpr("thruDate", EntityOperator.EQUALS, null));
814             exprList.add(new EntityExpr("contentIdTo", EntityOperator.EQUALS, contentIdTo));
815             exprList.add(new EntityExpr("contentAssocTypeId", EntityOperator.EQUALS, contentAssocTypeId));
816
817             if (UtilValidate.isNotEmpty(activeContentId)) {
818                 exprList.add(new EntityExpr("contentId", EntityOperator.NOT_EQUAL, activeContentId));
819             }
820             if (UtilValidate.isNotEmpty(contentId)) {
821                 exprList.add(new EntityExpr("contentId", EntityOperator.EQUALS, contentId));
822             }
823
824             EntityConditionList assocExprList = new EntityConditionList(exprList, EntityOperator.AND);
825             List JavaDoc relatedAssocs = delegator.findByCondition("ContentAssoc", assocExprList, new ArrayList JavaDoc(), UtilMisc.toList("fromDate"));
826             //if (Debug.infoOn()) Debug.logInfo("in deactivateAssocs, relatedAssocs:" + relatedAssocs, module);
827
List JavaDoc filteredAssocs = EntityUtil.filterByDate(relatedAssocs);
828             //if (Debug.infoOn()) Debug.logInfo("in deactivateAssocs, filteredAssocs:" + filteredAssocs, module);
829

830             Iterator JavaDoc it = filteredAssocs.iterator();
831             while (it.hasNext()) {
832                 GenericValue val = (GenericValue) it.next();
833                 val.set("thruDate", nowTimestamp);
834                 val.store();
835                 //if (Debug.infoOn()) Debug.logInfo("in deactivateAssocs, val:" + val, module);
836
}
837             results.put("deactivatedList", filteredAssocs);
838         } catch (GenericEntityException e) {
839             return ServiceUtil.returnError(e.getMessage());
840         }
841
842         return results;
843     }
844
845     /**
846      * Get and render subcontent associated with template id and mapkey. If subContentId is supplied, that content will be rendered without searching for other
847      * matching content.
848      */

849     public static Map JavaDoc renderSubContentAsText(DispatchContext dctx, Map JavaDoc context) {
850         Map JavaDoc results = new HashMap JavaDoc();
851         GenericDelegator delegator = dctx.getDelegator();
852         //LocalDispatcher dispatcher = dctx.getDispatcher();
853

854         Map JavaDoc templateContext = (Map JavaDoc) context.get("templateContext");
855         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
856         Timestamp JavaDoc fromDate = (Timestamp JavaDoc) context.get("fromDate");
857         GenericValue userLogin = (GenericValue) context.get("userLogin");
858
859         if (templateContext != null && UtilValidate.isEmpty(contentId)) {
860             contentId = (String JavaDoc) templateContext.get("contentId");
861         }
862         String JavaDoc mapKey = (String JavaDoc) context.get("mapKey");
863         if (templateContext != null && UtilValidate.isEmpty(mapKey)) {
864             mapKey = (String JavaDoc) templateContext.get("mapKey");
865         }
866         //String subContentId = (String) context.get("subContentId");
867
//if (templateContext != null && UtilValidate.isEmpty(subContentId)) {
868
//subContentId = (String) templateContext.get("subContentId");
869
//}
870
String JavaDoc mimeTypeId = (String JavaDoc) context.get("mimeTypeId");
871         if (templateContext != null && UtilValidate.isEmpty(mimeTypeId)) {
872             mimeTypeId = (String JavaDoc) templateContext.get("mimeTypeId");
873         }
874         Locale JavaDoc locale = (Locale JavaDoc) context.get("locale");
875         if (templateContext != null && locale == null) {
876             locale = (Locale JavaDoc) templateContext.get("locale");
877         }
878         GenericValue subContentDataResourceView = (GenericValue) context.get("subContentDataResourceView");
879         if (subContentDataResourceView != null && subContentDataResourceView == null) {
880             subContentDataResourceView = (GenericValue) templateContext.get("subContentDataResourceView");
881         }
882
883         Writer JavaDoc out = (Writer JavaDoc) context.get("outWriter");
884         Writer JavaDoc outWriter = new StringWriter JavaDoc();
885
886         if (templateContext == null) {
887             templateContext = new HashMap JavaDoc();
888         }
889
890         try {
891             results = ContentWorker.renderSubContentAsTextCache(delegator, contentId, outWriter, mapKey, subContentDataResourceView, templateContext, locale, mimeTypeId, userLogin, fromDate);
892             out.write(outWriter.toString());
893             results.put("textData", outWriter.toString());
894         } catch (GeneralException e) {
895             Debug.logError(e, "Error rendering sub-content text", module);
896             return ServiceUtil.returnError(e.toString());
897         } catch (IOException JavaDoc e) {
898             Debug.logError(e, "Error rendering sub-content text", module);
899             return ServiceUtil.returnError(e.toString());
900         }
901
902         return results;
903
904     }
905
906     /**
907      * Get and render subcontent associated with template id and mapkey. If subContentId is supplied, that content will be rendered without searching for other
908      * matching content.
909      */

910     public static Map JavaDoc renderContentAsText(DispatchContext dctx, Map JavaDoc context) {
911         Map JavaDoc results = new HashMap JavaDoc();
912         GenericDelegator delegator = dctx.getDelegator();
913         Writer JavaDoc out = (Writer JavaDoc) context.get("outWriter");
914
915         Map JavaDoc templateContext = (Map JavaDoc) context.get("templateContext");
916         //GenericValue userLogin = (GenericValue)context.get("userLogin");
917
String JavaDoc contentId = (String JavaDoc) context.get("contentId");
918         if (templateContext != null && UtilValidate.isEmpty(contentId)) {
919             contentId = (String JavaDoc) templateContext.get("contentId");
920         }
921         String JavaDoc mimeTypeId = (String JavaDoc) context.get("mimeTypeId");
922         if (templateContext != null && UtilValidate.isEmpty(mimeTypeId)) {
923             mimeTypeId = (String JavaDoc) templateContext.get("mimeTypeId");
924         }
925         Locale JavaDoc locale = (Locale JavaDoc) context.get("locale");
926         if (templateContext != null && locale == null) {
927             locale = (Locale JavaDoc) templateContext.get("locale");
928         }
929
930         if (templateContext == null) {
931             templateContext = new HashMap JavaDoc();
932         }
933
934         Writer JavaDoc outWriter = new StringWriter JavaDoc();
935         GenericValue view = (GenericValue)context.get("subContentDataResourceView");
936         try {
937             Map JavaDoc thisResults = ContentWorker.renderContentAsTextCache(delegator, contentId, outWriter, templateContext, view, locale, mimeTypeId);
938             out.write(outWriter.toString());
939             results.put("textData", outWriter.toString());
940         } catch (GeneralException e) {
941             Debug.logError(e, "Error rendering sub-content text", module);
942             return ServiceUtil.returnError(e.toString());
943         } catch (IOException JavaDoc e) {
944             Debug.logError(e, "Error rendering sub-content text", module);
945             return ServiceUtil.returnError(e.toString());
946         }
947         return results;
948     }
949
950     public static Map JavaDoc linkContentToPubPt(DispatchContext dctx, Map JavaDoc context) {
951         Map JavaDoc results = new HashMap JavaDoc();
952         GenericDelegator delegator = dctx.getDelegator();
953         LocalDispatcher dispatcher = dctx.getDispatcher();
954
955         String JavaDoc contentId = (String JavaDoc) context.get("contentId");
956         String JavaDoc contentIdTo = (String JavaDoc) context.get("contentIdTo");
957         String JavaDoc contentAssocTypeId = (String JavaDoc) context.get("contentAssocTypeId");
958         String JavaDoc statusId = (String JavaDoc) context.get("statusId");
959         String JavaDoc privilegeEnumId = (String JavaDoc) context.get("privilegeEnumId");
960         GenericValue userLogin = (GenericValue) context.get("userLogin");
961
962         if (Debug.infoOn()) Debug.logInfo("in publishContent, statusId:" + statusId, module);
963         if (Debug.infoOn()) Debug.logInfo("in publishContent, userLogin:" + userLogin, module);
964
965         Map JavaDoc mapIn = new HashMap JavaDoc();
966         mapIn.put("contentId", contentId);
967         mapIn.put("contentIdTo", contentIdTo);
968         mapIn.put("contentAssocTypeId", contentAssocTypeId);
969         String JavaDoc publish = (String JavaDoc) context.get("publish");
970
971         try {
972             boolean isPublished = false;
973             GenericValue contentAssocViewFrom = ContentWorker.getContentAssocViewFrom(delegator, contentIdTo, contentId, contentAssocTypeId, statusId, privilegeEnumId);
974             if (contentAssocViewFrom != null)
975                 isPublished = true;
976             if (Debug.infoOn()) Debug.logInfo("in publishContent, contentId:" + contentId + " contentIdTo:" + contentIdTo + " contentAssocTypeId:" + contentAssocTypeId + " publish:" + publish + " isPublished:" + isPublished, module);
977             if (UtilValidate.isNotEmpty(publish) && publish.equalsIgnoreCase("Y")) {
978                 GenericValue content = delegator.findByPrimaryKey("Content", UtilMisc.toMap("contentId", contentId));
979                 String JavaDoc contentStatusId = (String JavaDoc) content.get("statusId");
980                 String JavaDoc contentPrivilegeEnumId = (String JavaDoc) content.get("privilegeEnumId");
981
982                 if (Debug.infoOn()) Debug.logInfo("in publishContent, statusId:" + statusId + " contentStatusId:" + contentStatusId + " privilegeEnumId:" + privilegeEnumId + " contentPrivilegeEnumId:" + contentPrivilegeEnumId, module);
983                 // Don't do anything if link was already there
984
if (!isPublished) {
985                     //Map thisResults = dispatcher.runSync("deactivateAssocs", mapIn);
986
//String errorMsg = ServiceUtil.getErrorMessage(thisResults);
987
//if (UtilValidate.isNotEmpty(errorMsg) ) {
988
//Debug.logError( "Problem running deactivateAssocs. " + errorMsg, "ContentServices");
989
//return ServiceUtil.returnError(errorMsg);
990
//}
991
content.put("privilegeEnumId", privilegeEnumId);
992                     content.put("statusId", statusId);
993                     content.store();
994
995                     mapIn = new HashMap JavaDoc();
996                     mapIn.put("contentId", contentId);
997                     mapIn.put("contentIdTo", contentIdTo);
998                     mapIn.put("contentAssocTypeId", contentAssocTypeId);
999                     mapIn.put("mapKey", context.get("mapKey"));
1000                    mapIn.put("fromDate", UtilDateTime.nowTimestamp());
1001                    mapIn.put("createdDate", UtilDateTime.nowTimestamp());
1002                    mapIn.put("lastModifiedDate", UtilDateTime.nowTimestamp());
1003                    mapIn.put("createdByUserLogin", userLogin.get("userLoginId"));
1004                    mapIn.put("lastModifiedByUserLogin", userLogin.get("userLoginId"));
1005                    delegator.create("ContentAssoc", mapIn);
1006                }
1007            } else {
1008                // Only deactive if currently published
1009
if (isPublished) {
1010                    Map JavaDoc thisResults = dispatcher.runSync("deactivateAssocs", mapIn);
1011                    String JavaDoc errorMsg = ServiceUtil.getErrorMessage(thisResults);
1012                    if (UtilValidate.isNotEmpty(errorMsg)) {
1013                        Debug.logError("Problem running deactivateAssocs. " + errorMsg, "ContentServices");
1014                        return ServiceUtil.returnError(errorMsg);
1015                    }
1016                }
1017            }
1018        } catch (GenericEntityException e) {
1019            Debug.logError(e, "Problem getting existing content", "ContentServices");
1020            return ServiceUtil.returnError(e.getMessage());
1021        } catch (GenericServiceException e) {
1022            Debug.logError(e, "Problem running deactivateAssocs", "ContentServices");
1023            return ServiceUtil.returnError(e.getMessage());
1024        }
1025
1026        return results;
1027    }
1028    
1029    public static Map JavaDoc publishContent(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException{
1030        
1031        Map JavaDoc result = new HashMap JavaDoc();
1032        GenericDelegator delegator = dctx.getDelegator();
1033        GenericValue content = (GenericValue)context.get("content");
1034        GenericValue userLogin = (GenericValue)context.get("userLogin");
1035        Security security = dctx.getSecurity();
1036        if (!security.hasEntityPermission("CONTENTMGR", "_ADMIN", userLogin)) {
1037            return ServiceUtil.returnError("Permission denied.");
1038        }
1039        
1040        try {
1041            content.put("statusId", "BLOG_PUBLISHED");
1042            content.store();
1043        } catch(GenericEntityException e) {
1044            Debug.logError(e.getMessage(), module);
1045            return ServiceUtil.returnError(e.getMessage());
1046        }
1047        return result;
1048    }
1049    
1050    public static Map JavaDoc getPrefixedMembers(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException{
1051        
1052        Map JavaDoc result = new HashMap JavaDoc();
1053        Map JavaDoc mapIn = (Map JavaDoc)context.get("mapIn");
1054        String JavaDoc prefix = (String JavaDoc)context.get("prefix");
1055        Map JavaDoc mapOut = new HashMap JavaDoc();
1056        result.put("mapOut", mapOut);
1057        if (mapIn != null) {
1058            Set JavaDoc entrySet = mapIn.entrySet();
1059            Iterator JavaDoc iter = entrySet.iterator();
1060            while (iter.hasNext()) {
1061                Map.Entry JavaDoc entry = (Map.Entry JavaDoc)iter.next();
1062                String JavaDoc key = (String JavaDoc)entry.getKey();
1063                if (key.startsWith(prefix)) {
1064                    String JavaDoc keyBase = key.substring(prefix.length());
1065                    Object JavaDoc value = entry.getValue();
1066                    mapOut.put(key, value);
1067                }
1068            }
1069        }
1070        return result;
1071    }
1072    
1073    public static Map JavaDoc splitString(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException{
1074        Map JavaDoc result = new HashMap JavaDoc();
1075        List JavaDoc outputList = new ArrayList JavaDoc();
1076        String JavaDoc delimiter = UtilFormatOut.checkEmpty((String JavaDoc)context.get("delimiter"), "|");
1077        String JavaDoc inputString = (String JavaDoc)context.get("inputString");
1078        if (UtilValidate.isNotEmpty(inputString)) {
1079            outputList = StringUtil.split(inputString, delimiter);
1080        }
1081        result.put("outputList", outputList);
1082        return result;
1083    }
1084    
1085    public static Map JavaDoc joinString(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException{
1086        Map JavaDoc result = new HashMap JavaDoc();
1087        String JavaDoc outputString = null;
1088        String JavaDoc delimiter = UtilFormatOut.checkEmpty((String JavaDoc)context.get("delimiter"), "|");
1089        List JavaDoc inputList = (List JavaDoc)context.get("inputList");
1090        if (inputList != null) {
1091            outputString = StringUtil.join(inputList, delimiter);
1092        }
1093        result.put("outputString", outputString);
1094        return result;
1095    }
1096    
1097    public static Map JavaDoc urlEncodeArgs(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException{
1098        
1099        Map JavaDoc result = new HashMap JavaDoc();
1100        Map JavaDoc mapFiltered = new HashMap JavaDoc();
1101        Map JavaDoc mapIn = (Map JavaDoc)context.get("mapIn");
1102        if (mapIn != null) {
1103            Set JavaDoc entrySet = mapIn.entrySet();
1104            Iterator JavaDoc iter = entrySet.iterator();
1105            while (iter.hasNext()) {
1106                Map.Entry JavaDoc entry = (Map.Entry JavaDoc)iter.next();
1107                String JavaDoc key = (String JavaDoc)entry.getKey();
1108                Object JavaDoc value = entry.getValue();
1109                if (value instanceof String JavaDoc ) {
1110                    if (UtilValidate.isNotEmpty((String JavaDoc)value)) {
1111                        mapFiltered.put(key, value);
1112                    }
1113                } else if (value != null) {
1114                    mapFiltered.put(key, value);
1115                }
1116            }
1117            String JavaDoc outputString = UtilHttp.urlEncodeArgs(mapFiltered);
1118            result.put("outputString", outputString );
1119        }
1120        return result;
1121    }
1122    
1123    /**
1124     * foFileIn - path to FO template, can be null if template is in the CMS
1125     * Normally, this parameter will only be used once to get the template
1126     * into the CMS, as this option will create a new entry in CMS each time.
1127     * inputDataResourceTypeId - can be LOCAL_FILE or OFBIZ_FILE. Used if foFileIn is not null.
1128     * pdfFileOut - path to where output PDF will be stored.Can be null if either PDF will be
1129     * stored as ELECTRONIC_TEXT or not stored at all, but returned as pdfByteWrapper
1130     * outputDataResourceTypeId - can be LOCAL_FILE, OFBIZ_FILE or ELECTRONIC_TEXT.
1131     * outputContentId - The CMS id of PDF output Content entity. Type is INOUT, but can be null,
1132     * in which case it will be generated.
1133     * foContentId - The CMS id of FO template Content entity. Type is INOUT, but can be null,
1134     * in which case it will be generated.
1135     * If not null, then foFileIn will be ignored.
1136     * There is no current way to specify what you want the generated FO template ID to be.
1137     * This is the preferred way to use the template - it should be in the CMS,
1138     * else it will be created each time.
1139     * fmContext - the Map that will be used in processing the FO template.
1140     * fmPrefixMap - If fmContext is null, this Map will be used. It is generated by using the
1141     * prefix, "CTX_" on form parameters. Allows this service to be used as
1142     * in request event handler.
1143     * @param dctx
1144     * @param context
1145     * @return
1146     * @throws GenericServiceException
1147     */

1148    public static Map JavaDoc foToPdf(DispatchContext dctx, Map JavaDoc context) throws GenericServiceException{
1149            
1150        LocalDispatcher dispatcher = dctx.getDispatcher();
1151        GenericValue userLogin = (GenericValue)context.get("userLogin");
1152        Map JavaDoc result = new HashMap JavaDoc();
1153        String JavaDoc foFileIn = (String JavaDoc)context.get("foFileIn");
1154        String JavaDoc pdfFileOut = (String JavaDoc)context.get("pdfFileOut");
1155        String JavaDoc outputDataResourceTypeId = (String JavaDoc)context.get("outputDataResourceTypeId");
1156        String JavaDoc inputDataResourceTypeId = (String JavaDoc)context.get("inputDataResourceTypeId");
1157        if (UtilValidate.isEmpty(inputDataResourceTypeId)) {
1158            inputDataResourceTypeId = "LOCAL_FILE";
1159        }
1160        String JavaDoc outputContentId = (String JavaDoc)context.get("outputContentId");
1161        String JavaDoc foContentId = (String JavaDoc)context.get("foContentId");
1162        String JavaDoc templateDataResourceId = (String JavaDoc)context.get("templateDataResourceId");
1163        Map JavaDoc fmContext = (Map JavaDoc)context.get("fmContext");
1164        Map JavaDoc fmPrefixMap = (Map JavaDoc)context.get("fmPrefixMap");
1165        // configure logging for the FOP
1166
Logger logger = new Log4JLogger(Debug.getLogger(module));
1167        MessageHandler.setScreenLogger(logger);
1168                          
1169        // Get input FO. Process thru template, if required.
1170
String JavaDoc processedFo = null;
1171        // If the FO template is not already in the CMS, put it there,
1172
// else, if the FTL template id is not there in the exisiting content, add it.
1173
if (UtilValidate.isEmpty(foContentId)) {
1174            if (UtilValidate.isEmpty(foFileIn)) {
1175                return ServiceUtil.returnError("No FO file or contentId available.");
1176            }
1177            Map JavaDoc mapIn = new HashMap JavaDoc();
1178            mapIn.put("drObjectInfo", foFileIn);
1179            mapIn.put("drDataResourceTypeId", inputDataResourceTypeId);
1180            mapIn.put("contentTypeId", "DOCUMENT");
1181            //mapIn.put("contentPurposeString", "SOURCE");
1182
mapIn.put("templateDataResourceId", templateDataResourceId);
1183            mapIn.put("drDataTemplateTypeId", "FTL");
1184            mapIn.put("userLogin", userLogin);
1185            try {
1186                Map JavaDoc thisResult = dispatcher.runSync("persistContentAndAssoc", mapIn);
1187                foContentId = (String JavaDoc)thisResult.get("contentId");
1188                if (UtilValidate.isEmpty(foContentId)) {
1189                    Debug.logError("Could not add FO content - foContentId is null.", "ContentServices");
1190                    return ServiceUtil.returnError("Could not add FO conten - foContentId is null.");
1191                }
1192                result.put("foContentId", foContentId);
1193            } catch (GenericServiceException e) {
1194                Debug.logError(e, "Problem adding FO content.", "ContentServices");
1195                return ServiceUtil.returnError("Problem adding FO content.");
1196            }
1197            
1198        } else {
1199            if (UtilValidate.isNotEmpty(templateDataResourceId)) {
1200                try {
1201                    GenericDelegator delegator = dctx.getDelegator();
1202                    GenericValue content = delegator.findByPrimaryKeyCache("Content", UtilMisc.toMap("contentId", foContentId));
1203                    String JavaDoc thisTemplateDataResourceId = content.getString("templateDataResourceId");
1204                    if (thisTemplateDataResourceId == null || !thisTemplateDataResourceId.equals(templateDataResourceId)) {
1205                         content.put("templateDataResourceId", templateDataResourceId);
1206                         content.store();
1207                    }
1208                } catch(GenericEntityException e) {
1209                    Debug.logError(e, "ContentServices");
1210                    return ServiceUtil.returnError(e.getMessage());
1211                }
1212            }
1213        }
1214        
1215        // Now that the FO file is in the CMS and the FTL template Id is in place
1216
// Get the processed FO file by running "renderContentAsText" file
1217
Map JavaDoc mapIn = new HashMap JavaDoc();
1218        mapIn.put("contentId", foContentId);
1219        if (fmContext != null) {
1220            mapIn.put("templateContext", fmContext);
1221        } else {
1222            mapIn.put("templateContext", fmPrefixMap);
1223        }
1224        StringWriter JavaDoc sw = new StringWriter JavaDoc();
1225        mapIn.put("outWriter", sw);
1226        try {
1227            Map JavaDoc thisResult = dispatcher.runSync("renderContentAsText", mapIn);
1228            processedFo = (String JavaDoc)thisResult.get("textData");
1229            if (UtilValidate.isEmpty(processedFo)) {
1230                Debug.logError("Could not get FO text", "ContentServices");
1231                return ServiceUtil.returnError("Could not get FO text");
1232            }
1233        } catch (GenericServiceException e) {
1234            Debug.logError(e, "Problem getting FO text", "ContentServices");
1235            return ServiceUtil.returnError("Problem getting FO text");
1236        }
1237        
1238        // load the FOP driver
1239
Driver driver = new Driver();
1240        driver.setRenderer(Driver.RENDER_PDF);
1241        driver.setLogger(logger);
1242                                        
1243        // get the XSL-FO XML in Document format
1244
Document JavaDoc xslfo = null;
1245        try {
1246            xslfo = UtilXml.readXmlDocument(processedFo);
1247        } catch (FileNotFoundException JavaDoc e) {
1248            return ServiceUtil.returnError("Error getting FO file: " + e.toString());
1249        } catch (IOException JavaDoc e2) {
1250            return ServiceUtil.returnError("Error getting FO file: " + e2.toString());
1251        } catch (ParserConfigurationException JavaDoc e3) {
1252            return ServiceUtil.returnError("Error getting FO file: " + e3.toString());
1253        } catch (SAXException JavaDoc e4) {
1254            return ServiceUtil.returnError("Error getting FO file: " + e4.toString());
1255        }
1256        
1257        // create the output stream for the PDF
1258
ByteArrayOutputStream JavaDoc out = new ByteArrayOutputStream JavaDoc();
1259        driver.setOutputStream(out);
1260                
1261        // set the input source (XSL-FO) and generate the PDF
1262
InputSource is = new DocumentInputSource(xslfo);
1263        driver.setInputSource(is);
1264        try {
1265            driver.run();
1266            FopImageFactory.resetCache();
1267        } catch (Throwable JavaDoc t) {
1268            Debug.logError("Error processing PDF." + t.getMessage(), "ContentServices");
1269            return ServiceUtil.returnError("Error processing PDF." + t.getMessage());
1270        }
1271        ByteWrapper pdfByteWrapper = new ByteWrapper(out.toByteArray());
1272        result.put("pdfByteWrapper", pdfByteWrapper );
1273                  
1274        // Put output into CMS if dataResourceTypeId is present
1275
// else, just write it to a file
1276
if (UtilValidate.isNotEmpty(outputDataResourceTypeId)) {
1277            if (pdfByteWrapper != null) {
1278                Map JavaDoc mapIn2 = new HashMap JavaDoc();
1279                mapIn2.put("contentId", outputContentId);
1280                mapIn2.put("drDataResourceTypeId", outputDataResourceTypeId);
1281                mapIn2.put("contentTypeId", "DOCUMENT");
1282                mapIn2.put("imageData", pdfByteWrapper);
1283                mapIn2.put("_imageData_contentType", "application/pdf");
1284                mapIn2.put("_imageData_fileName", pdfFileOut);
1285                mapIn2.put("drObjectInfo", pdfFileOut);
1286                mapIn2.put("userLogin", userLogin);
1287                try {
1288                    Map JavaDoc thisResult = dispatcher.runSync("persistContentAndAssoc", mapIn2);
1289                    outputContentId = (String JavaDoc)thisResult.get("contentId");
1290                    if (UtilValidate.isEmpty(foContentId)) {
1291                        Debug.logError("Could not add PDF content - contentId is null.", "ContentServices");
1292                        return ServiceUtil.returnError("Could not add PDF conten - contentId is null.");
1293                    }
1294                    result.put("outputContentId", outputContentId);
1295                } catch (GenericServiceException e) {
1296                    Debug.logError(e, "Problem adding FO content.", module);
1297                    return ServiceUtil.returnError("Problem adding FO content.");
1298                }
1299                result.put("outputContentId", outputContentId);
1300            }
1301        } else {
1302            if (UtilValidate.isEmpty(pdfFileOut)) {
1303                String JavaDoc outputPath = null;
1304                String JavaDoc thisDataResourceTypeId = null;
1305                String JavaDoc ofbizHome = System.getProperty("ofbiz.home");
1306                int pos = pdfFileOut.indexOf("${OFBIZ_HOME}");
1307                if (pos > 0 ) {
1308                    outputPath = pdfFileOut.substring(pos + 13);
1309                    thisDataResourceTypeId = "OFBIZ_FILE";
1310                } else {
1311                    outputPath = pdfFileOut;
1312                    thisDataResourceTypeId = "LOCAL_FILE";
1313                }
1314                Map JavaDoc mapIn3 = new HashMap JavaDoc();
1315                mapIn3.put("objectInfo", outputPath);
1316                mapIn3.put("drDataResourceTypeId", thisDataResourceTypeId);
1317                mapIn3.put("binData", pdfByteWrapper);
1318                try {
1319                    Map JavaDoc thisResult = dispatcher.runSync("createFile", mapIn3);
1320                } catch (GenericServiceException e) {
1321                    Debug.logError(e, "Problem writing FO content.", module);
1322                    return ServiceUtil.returnError("Problem adding FO content.");
1323                }
1324            }
1325        }
1326        return result;
1327    }
1328}
1329
Popular Tags