Author: jonesde
Date: Fri Sep 24 07:47:05 2010 New Revision: 1000753 URL: http://svn.apache.org/viewvc?rev=1000753&view=rev Log: Changed sendMailFromScreen service to support a list of attachments instead of just one Modified: ofbiz/trunk/framework/common/servicedef/services_email.xml ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java Modified: ofbiz/trunk/framework/common/servicedef/services_email.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services_email.xml?rev=1000753&r1=1000752&r2=1000753&view=diff ============================================================================== --- ofbiz/trunk/framework/common/servicedef/services_email.xml (original) +++ ofbiz/trunk/framework/common/servicedef/services_email.xml Fri Sep 24 07:47:05 2010 @@ -83,6 +83,8 @@ under the License. <attribute name="bodyScreenUri" type="String" mode="IN" optional="true"/> <attribute name="xslfoAttachScreenLocation" type="String" mode="IN" optional="true"/> <attribute name="attachmentName" type="String" mode="IN" optional="true"/> + <attribute name="xslfoAttachScreenLocationList" type="List" mode="IN" optional="true"/> + <attribute name="attachmentNameList" type="List" mode="IN" optional="true"/> <attribute name="bodyParameters" type="Map" mode="IN" optional="true"/> <attribute name="webSiteId" type="String" mode="IN" optional="true"/> <attribute name="subject" type="String" mode="OUT" optional="true"/> Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java?rev=1000753&r1=1000752&r2=1000753&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/email/EmailServices.java Fri Sep 24 07:47:05 2010 @@ -414,8 +414,18 @@ public class EmailServices { String webSiteId = (String) serviceContext.remove("webSiteId"); String bodyText = (String) serviceContext.remove("bodyText"); String bodyScreenUri = (String) serviceContext.remove("bodyScreenUri"); - String xslfoAttachScreenLocation = (String) serviceContext.remove("xslfoAttachScreenLocation"); - String attachmentName = (String) serviceContext.remove("attachmentName"); + String xslfoAttachScreenLocationParam = (String) serviceContext.remove("xslfoAttachScreenLocation"); + String attachmentNameParam = (String) serviceContext.remove("attachmentName"); + List<String> xslfoAttachScreenLocationListParam = (List) serviceContext.remove("xslfoAttachScreenLocationList"); + List<String> attachmentNameListParam = (List) serviceContext.remove("attachmentNameList"); + + List<String> xslfoAttachScreenLocationList = FastList.newInstance(); + List<String> attachmentNameList = FastList.newInstance(); + if (UtilValidate.isNotEmpty(xslfoAttachScreenLocationParam)) xslfoAttachScreenLocationList.add(xslfoAttachScreenLocationParam); + if (UtilValidate.isNotEmpty(attachmentNameParam)) attachmentNameList.add(attachmentNameParam); + if (UtilValidate.isNotEmpty(xslfoAttachScreenLocationListParam)) xslfoAttachScreenLocationList.addAll(xslfoAttachScreenLocationListParam); + if (UtilValidate.isNotEmpty(attachmentNameListParam)) attachmentNameList.addAll(attachmentNameListParam); + Locale locale = (Locale) serviceContext.get("locale"); Map<String, Object> bodyParameters = UtilGenerics.checkMap(serviceContext.remove("bodyParameters")); if (bodyParameters == null) { @@ -437,9 +447,6 @@ public class EmailServices { NotificationServices.setBaseUrl(dctx.getDelegator(), webSiteId, bodyParameters); String contentType = (String) serviceContext.remove("contentType"); - if (UtilValidate.isEmpty(attachmentName)) { - attachmentName = "Details.pdf"; - } StringWriter bodyWriter = new StringWriter(); MapStack<String> screenContext = MapStack.create(); @@ -473,72 +480,82 @@ public class EmailServices { boolean isMultiPart = false; // check if attachment screen location passed in - if (UtilValidate.isNotEmpty(xslfoAttachScreenLocation)) { - isMultiPart = true; - // start processing fo pdf attachment - try { - Writer writer = new StringWriter(); - MapStack<String> screenContextAtt = MapStack.create(); - // substitute the freemarker variables... - ScreenRenderer screensAtt = new ScreenRenderer(writer, screenContext, foScreenRenderer); - screensAtt.populateContextForService(dctx, bodyParameters); - screenContextAtt.putAll(bodyParameters); - screensAtt.render(xslfoAttachScreenLocation); - - /* - try { // save generated fo file for debugging - String buf = writer.toString(); - java.io.FileWriter fw = new java.io.FileWriter(new java.io.File("/tmp/file1.xml")); - fw.write(buf.toString()); - fw.close(); - } catch (IOException e) { - Debug.logError(e, "Couldn't save xsl-fo xml debug file: " + e.toString(), module); + if (UtilValidate.isNotEmpty(xslfoAttachScreenLocationList)) { + List<Map<String, ? extends Object>> bodyParts = FastList.newInstance(); + if (bodyText != null) { + bodyText = FlexibleStringExpander.expandString(bodyText, screenContext, locale); + bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyText, "type", "text/html")); + } else { + bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyWriter.toString(), "type", "text/html")); + } + + for (int i = 0; i < xslfoAttachScreenLocationList.size(); i++) { + String xslfoAttachScreenLocation = xslfoAttachScreenLocationList.get(i); + String attachmentName = attachmentNameList.get(i); + if (UtilValidate.isEmpty(attachmentName)) { + attachmentName = "Details" + i + ".pdf"; } - */ - // create the input stream for the generation - StreamSource src = new StreamSource(new StringReader(writer.toString())); - - // create the output stream for the generation - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - Fop fop = ApacheFopWorker.createFopInstance(baos, MimeConstants.MIME_PDF); - ApacheFopWorker.transform(src, null, fop); - - // and generate the PDF - baos.flush(); - baos.close(); - - // store in the list of maps for sendmail.... - List<Map<String, ? extends Object>> bodyParts = FastList.newInstance(); - if (bodyText != null) { - bodyText = FlexibleStringExpander.expandString(bodyText, screenContext, locale); - bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyText, "type", "text/html")); - } else { - bodyParts.add(UtilMisc.<String, Object>toMap("content", bodyWriter.toString(), "type", "text/html")); + isMultiPart = true; + // start processing fo pdf attachment + try { + Writer writer = new StringWriter(); + MapStack<String> screenContextAtt = MapStack.create(); + // substitute the freemarker variables... + ScreenRenderer screensAtt = new ScreenRenderer(writer, screenContext, foScreenRenderer); + screensAtt.populateContextForService(dctx, bodyParameters); + screenContextAtt.putAll(bodyParameters); + screensAtt.render(xslfoAttachScreenLocation); + + /* + try { // save generated fo file for debugging + String buf = writer.toString(); + java.io.FileWriter fw = new java.io.FileWriter(new java.io.File("/tmp/file1.xml")); + fw.write(buf.toString()); + fw.close(); + } catch (IOException e) { + Debug.logError(e, "Couldn't save xsl-fo xml debug file: " + e.toString(), module); + } + */ + + // create the input stream for the generation + StreamSource src = new StreamSource(new StringReader(writer.toString())); + + // create the output stream for the generation + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + Fop fop = ApacheFopWorker.createFopInstance(baos, MimeConstants.MIME_PDF); + ApacheFopWorker.transform(src, null, fop); + + // and generate the PDF + baos.flush(); + baos.close(); + + // store in the list of maps for sendmail.... + bodyParts.add(UtilMisc.<String, Object>toMap("content", baos.toByteArray(), "type", "application/pdf", "filename", attachmentName)); + } catch (GeneralException ge) { + String errMsg = "Error rendering PDF attachment for email: " + ge.toString(); + Debug.logError(ge, errMsg, module); + return ServiceUtil.returnError(errMsg); + } catch (IOException ie) { + String errMsg = "Error rendering PDF attachment for email: " + ie.toString(); + Debug.logError(ie, errMsg, module); + return ServiceUtil.returnError(errMsg); + } catch (FOPException fe) { + String errMsg = "Error rendering PDF attachment for email: " + fe.toString(); + Debug.logError(fe, errMsg, module); + return ServiceUtil.returnError(errMsg); + } catch (SAXException se) { + String errMsg = "Error rendering PDF attachment for email: " + se.toString(); + Debug.logError(se, errMsg, module); + return ServiceUtil.returnError(errMsg); + } catch (ParserConfigurationException pe) { + String errMsg = "Error rendering PDF attachment for email: " + pe.toString(); + Debug.logError(pe, errMsg, module); + return ServiceUtil.returnError(errMsg); } - bodyParts.add(UtilMisc.<String, Object>toMap("content", baos.toByteArray(), "type", "application/pdf", "filename", attachmentName)); + serviceContext.put("bodyParts", bodyParts); - } catch (GeneralException ge) { - String errMsg = "Error rendering PDF attachment for email: " + ge.toString(); - Debug.logError(ge, errMsg, module); - return ServiceUtil.returnError(errMsg); - } catch (IOException ie) { - String errMsg = "Error rendering PDF attachment for email: " + ie.toString(); - Debug.logError(ie, errMsg, module); - return ServiceUtil.returnError(errMsg); - } catch (FOPException fe) { - String errMsg = "Error rendering PDF attachment for email: " + fe.toString(); - Debug.logError(fe, errMsg, module); - return ServiceUtil.returnError(errMsg); - } catch (SAXException se) { - String errMsg = "Error rendering PDF attachment for email: " + se.toString(); - Debug.logError(se, errMsg, module); - return ServiceUtil.returnError(errMsg); - } catch (ParserConfigurationException pe) { - String errMsg = "Error rendering PDF attachment for email: " + pe.toString(); - Debug.logError(pe, errMsg, module); - return ServiceUtil.returnError(errMsg); } } else { isMultiPart = false; |
Free forum by Nabble | Edit this page |