📄 notificationservices.java
字号:
} return result; } /** * This will process the associated notification template definition * with all the fields contained in the given context and generate * the message body of the notification. * <p> * The result returned will contain the appropriate response * messages indicating succes or failure and the OUT parameter, * "body" containing the generated message. * * @param ctx The dispatching context of the service * @param context The map containing all the fields associated with * the sevice * @return A new Map indicating success or error containing the * body generated from the template and the input parameters. */ public static Map prepareNotification(DispatchContext ctx, Map context) { GenericDelegator delegator = ctx.getDelegator(); String templateName = (String) context.get("templateName"); Map templateData = (Map) context.get("templateData"); String webSiteId = (String) context.get("webSiteId"); Map result = null; if (templateData == null) { templateData = new HashMap(); } try { // ensure the baseURl is defined setBaseUrl(delegator, webSiteId, templateData); // initialize the template reader and processor URL templateUrl = UtilURL.fromResource(templateName); if (templateUrl == null) { Debug.logError("Problem getting the template URL: " + templateName + " not found", module); return ServiceUtil.returnError("Problem finding template; see logs"); } InputStreamReader templateReader = new InputStreamReader(templateUrl.openStream()); // process the template with the given data and write // the email body to the String buffer Writer writer = new StringWriter(); FreeMarkerWorker.renderTemplate(templateName, templateReader, templateData, writer); // extract the newly created body for the notification email String notificationBody = writer.toString(); // generate the successfull reponse result = ServiceUtil.returnSuccess("Message body generated successfully"); result.put("body", notificationBody); } catch (IOException ie) { Debug.logError(ie, "Problems reading template", module); result = ServiceUtil.returnError("Template reading problem, see error logs"); } catch (TemplateException te) { Debug.logError(te, "Problems processing template", module); result = ServiceUtil.returnError("Template processing problem, see error log"); } return result; } /** * The expectation is that a lot of notification messages will include * a link back to one or more pages in the system, which will require knowledge * of the base URL to extrapolate. This method will ensure that the * <code>baseUrl</code> field is set in the given context. * <p> * If it has been specified a default <code>baseUrl</code> will be * set using a best effort approach. If it is specified in the * url.properties configuration files of the system, that will be * used, otherwise it will attempt resolve the fully qualified * local host name. * <p> * <i>Note:</i> I thought it might be useful to have some dynamic way * of extending the default properties provided by the NotificationService, * such as the <code>baseUrl</code>, perhaps using the standard * <code>ResourceBundle</code> java approach so that both classes * and static files may be invoked. * * @param context The context to check and, if necessary, set the * <code>baseUrl</code>. */ public static void setBaseUrl(GenericDelegator delegator, String webSiteId, Map context) { // If the baseUrl was not specified we can do a best effort instead if (!context.containsKey("baseUrl")) { StringBuffer httpBase = null; StringBuffer httpsBase = null; String localServer = null; String httpsPort = null; String httpsServer = null; String httpPort = null; String httpServer = null; Boolean enableHttps = null; try { // using just the IP address of localhost if we don't have a defined server InetAddress localHost = InetAddress.getLocalHost(); localServer = localHost.getHostAddress(); } catch (UnknownHostException hostException) { Debug.logWarning(hostException, "Could not determine localhost, using '127.0.0.1'", module); localServer = "127.0.0.1"; } // load the properties from the website entity GenericValue webSite = null; if (webSiteId != null) { try { webSite = delegator.findByPrimaryKeyCache("WebSite", UtilMisc.toMap("webSiteId", webSiteId)); if (webSite != null) { httpsPort = webSite.getString("httpsPort"); httpsServer = webSite.getString("httpsHost"); httpPort = webSite.getString("httpPort"); httpServer = webSite.getString("httpHost"); enableHttps = webSite.getBoolean("enableHttps"); } } catch (GenericEntityException e) { Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module); } } // fill in any missing properties with fields from the global file if (UtilValidate.isEmpty(httpsPort)) { httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); } if (UtilValidate.isEmpty(httpsServer)) { httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host", localServer); } if (UtilValidate.isEmpty(httpPort)) { httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80"); } if (UtilValidate.isEmpty(httpServer)) { httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host", localServer); } if (UtilValidate.isEmpty(enableHttps)) { enableHttps = (UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", "Y")) ? Boolean.TRUE : Boolean.FALSE; } // prepare the (non-secure) URL httpBase = new StringBuffer("http://"); httpBase.append(httpServer); if (!"80".equals(httpPort)) { httpBase.append(":"); httpBase.append(httpPort); } // set the base (non-secure) URL for any messages requiring it context.put("baseUrl", httpBase.toString()); if (enableHttps.booleanValue()) { // prepare the (secure) URL httpsBase = new StringBuffer("https://"); httpsBase.append(httpsServer); if (!"443".equals(httpsPort)) { httpsBase.append(":"); httpsBase.append(httpsPort); } // set the base (secure) URL for any messages requiring it context.put("baseSecureUrl", httpsBase.toString()); } else { context.put("baseSecureUrl", httpBase.toString()); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -