From: Anjo K. <an...@us...> - 2004-02-27 17:04:31
|
Update of /cvsroot/wonder/Wonder/Common/Frameworks/ERCoreBusinessLogic/Sources/er/corebusinesslogic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21999/Common/Frameworks/ERCoreBusinessLogic/Sources/er/corebusinesslogic Modified Files: ERCMailMessageAppender.java Log Message: added erxmailappender Index: ERCMailMessageAppender.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERCoreBusinessLogic/Sources/er/corebusinesslogic/ERCMailMessageAppender.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ERCMailMessageAppender.java 7 Jan 2003 02:04:13 -0000 1.6 --- ERCMailMessageAppender.java 27 Feb 2004 16:47:51 -0000 1.7 *************** *** 20,304 **** * Used for logging log events to a database that will eventually be emailed * out. Logs events using {@link ERCMailDelivery ERCMailDelivery}. ! * Manditory Fields:<br> ! * TOAddresses - coma seperated list of email addresses to send the log event ! * message to. ! * FromAddress - Who the message is from, if left blank then DomainName is a ! * manditory field. ! * Optional Fields:<br> ! * BCCAddresses - coma separated list of email address to bcc on the email ! * CCAddresses - coma separated list of email address to cc on the email ! * ReplyTo - reply to address ! * DomainName - When generating a from email address, used for the bit after the ! * @, ie fo...@ba..., the domain name is 'bar.com'. ! * HostName - When generating an email address from, defaults to name of the ! * localhost. ! * Title - Title of the email messages, if not specified the title will be a ! * truncated version of the log message. */ ! public class ERCMailMessageAppender extends AppenderSkeleton { /** caches the no-op editing context delegate */ protected static ERXEditingContextDelegate _delegate=new ERXEditingContextDelegate(); - /** holds the from address */ - protected String fromAddress; - - /** holds the computed from address */ - protected String computedFromAddress; - - /** holds the reply to address */ - protected String replyTo; - - /** holds the to addresses */ - protected String toAddresses; - - /** holds the cc addresses */ - protected String ccAddresses; - - /** holds the bcc addresses */ - protected String bccAddresses; - - /** holds the domain */ - protected String domainName; - - /** holds the title */ - protected String title; - /** holds the editing context */ protected EOEditingContext editingContext; - /** holds the host name */ - protected String hostName; - - protected String formatAsError; - - protected String titleIncludesPriorityLevel; - - protected String titleIncludesApplicationName; - - /** holds the flag if all the conditions for logging have been checked */ - protected boolean conditionsChecked = false; - /** * Public constructor. */ public ERCMailMessageAppender() { ! closed = false; ! } ! ! /** ! * The mail message appender does require ! * a layout. ! * @return true. ! */ ! public boolean requiresLayout() { return true; } ! ! /** ! * When closed set the state to closed. Closes ! * the current appender. ! */ ! public void close() { closed = true; } ! ! /** ! * Gets the from address set by the user. ! * @return the from address. ! */ ! public String getFromAddress() { ! return fromAddress; ! } ! ! /** ! * Sets the from address. ! * @param fromAddress to use when generating emails. ! */ ! public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } ! ! ! /** ! * Gets the reply to address set by the user. ! * @return the reply to address. ! */ ! public String getReplyTo() { ! return replyTo; ! } ! ! /** ! * Sets the reply to address. ! * @param reply to address to use when generating emails. ! */ ! public void setReplyTo(String replyTo) { this.replyTo = replyTo; } ! ! /** ! * Gets the from address for the appender. ! * If a from address is not specified then ! * an address is constructed in the form: ! * applicationName-hostName@domainName. ! * @return the from address. ! */ ! public String computedFromAddress() { ! if (computedFromAddress == null) { ! if (getFromAddress() != null) { ! computedFromAddress = getFromAddress(); ! } else { ! computedFromAddress = WOApplication.application().name()+"-"+getHostName()+"@" + getDomainName(); ! } ! } ! return computedFromAddress; ! } ! ! /** ! * Gets the to addresses as a string. ! * @return to addresses as a string ! */ ! public String getToAddresses() { ! return toAddresses; ! } ! ! /** ! * Sets the to addresses as a string. ! * @param toAddresses comma separated array of email addresses ! */ ! public void setToAddresses(String toAddresses) { ! this.toAddresses = toAddresses; ! } ! ! /** ! * Gets the to addresses as an array. ! * @return the to addresses as an array. ! */ ! public NSArray toAddressesAsArray() { ! return toAddresses != null ? NSArray.componentsSeparatedByString(toAddresses, ",") : NSArray.EmptyArray; ! } ! ! /** ! * Sets the to addresses as a string. ! * @param ccAddresses comma separated array of email addresses ! */ ! public void setCcAddresses(String ccAddresses) { ! this.ccAddresses = ccAddresses; ! } ! ! /** ! * Gets the cc addresses as a String. ! * @return cc addresses as a string ! */ ! public String ccAddresses() { ! return ccAddresses; ! } ! ! /** ! * Gets the cc addresses as an array. ! * @return the cc addresses as an array. ! */ ! public NSArray ccAddressesAsArray() { ! return ccAddresses != null ? NSArray.componentsSeparatedByString(ccAddresses, ",") : NSArray.EmptyArray; ! } ! ! /** ! * Sets the bcc addresses as a string. ! * @param bccAddresses comma separated array of email addresses ! */ ! public void setBccAddresses(String bccAddresses) { ! this.bccAddresses = bccAddresses; ! } ! ! /** ! * Gets the bcc addresses as a String. ! * @return bcc addresses as a string ! */ ! public String bccAddresses() { ! return bccAddresses; ! } ! ! /** ! * Gets the bcc addresses as an array. ! * @return the bcc addresses as an array. ! */ ! public NSArray bccAddressesAsArray() { ! return bccAddresses != null ? NSArray.componentsSeparatedByString(bccAddresses, ",") : NSArray.EmptyArray; ! } ! ! /** ! * Gets the title. ! * @return title. ! */ ! public String getTitle() { return title; } ! ! /** ! * Sets the title. ! * @param title of the mail message ! */ ! public void setTitle(String title) { this.title = title; } ! ! /** ! * Gets the host name. If one is not specified then the host ! * name of the machine will be used. ! * @return host name to use when constructing the 'from' email ! * address. ! */ ! public String getHostName() { ! if (hostName == null) ! hostName = ERXConfigurationManager.defaultManager().hostName(); ! return hostName; ! } ! ! /** ! * Sets the host name to use for the given appender. ! * @param hostName for the appender. ! */ ! public void setHostName(String hostName) { this.hostName = hostName; } ! ! /** ! * Gets the domain name. ! * @return domain name. ! */ ! public String getDomainName() { ! return domainName; ! } ! ! /** ! * Sets the domain name. ! * @param domainName new domain name ! */ ! public void setDomainName(String domainName) { ! this.domainName = domainName; ! } ! ! public String formatAsError() { ! return formatAsError; ! } ! ! public void setFormatAsError(String value) { ! formatAsError = value; ! } ! ! public boolean formatAsErrorAsBoolean() { ! return ERXValueUtilities.booleanValueWithDefault(formatAsError(), false); ! } ! ! public String titleIncludesPriorityLevel() { ! return titleIncludesPriorityLevel; ! } ! ! public void setTitleIncludesPriorityLevel(String value) { ! titleIncludesPriorityLevel = value; ! } ! ! public boolean titleIncludesPriorityLevelAsBoolean() { ! return ERXValueUtilities.booleanValueWithDefault(titleIncludesPriorityLevel(), true); ! } ! ! public String titleIncludesApplicationName() { ! return titleIncludesApplicationName; ! } ! ! public void setTitleIncludesApplicationName(String value) { ! titleIncludesApplicationName = value; } - public boolean titleIncludesApplicationNameAsBoolean() { - return ERXValueUtilities.booleanValueWithDefault(titleIncludesApplicationName(), true); - } - /** * We want the ability to warn if we are going to be --- 20,40 ---- * Used for logging log events to a database that will eventually be emailed * out. Logs events using {@link ERCMailDelivery ERCMailDelivery}. ! * @see er.extensions.ERXMailAppender for more info. */ ! public class ERCMailMessageAppender extends ERXMailAppender { /** caches the no-op editing context delegate */ protected static ERXEditingContextDelegate _delegate=new ERXEditingContextDelegate(); /** holds the editing context */ protected EOEditingContext editingContext; /** * Public constructor. */ public ERCMailMessageAppender() { ! super(); } /** * We want the ability to warn if we are going to be *************** *** 330,374 **** } ! /** ! * Used to determine if the system is ready to log ! * events with MERCMailDelivery. ! * @return true if all of the conditions are satisfied ! */ ! protected boolean checkConditions() { ! if (getFromAddress() == null && getDomainName() == null) { ! LogLog.error("Attempting to log an event with a null domain name and a null from address!"); ! } else if (toAddressesAsArray().count() == 0) { ! LogLog.error("Attempting to log with an empty array of toAddresses"); ! } else if (this.layout == null) { ! LogLog.warn("Attempting to log an event to an ERCMailMessageAppender without a layout specified."); ! } else { ! conditionsChecked = true; } ! return conditionsChecked; ! } /** ! * Entry point for logging an event. ! * ! * Reminder: the nesting of calls is: ! * ! * doAppend() ! * - check threshold ! * - filter ! * - append(); ! * - checkConditions(); ! * - subAppend(); ! * ! * @param event current logging event */ ! public void append(LoggingEvent event) { ! if (conditionsChecked || checkConditions()) { ! subAppend(event); ! } else { ! LogLog.warn("Unable to log event: " + event.getMessage()); ! } } ! ! /** * Where the actual logging event is processed and a * mail message is generated. --- 66,88 ---- } ! /** Overridden because we want to use our own page */ ! public String getExceptionPageName() { ! String name = super.getExceptionPageName(); ! if(name == null) { ! name = "ERCMailableExceptionPage"; } ! return name; ! } /** ! * Overridden to add the Actor into the dictionary. ! * @param event logging event */ ! public NSMutableDictionary composeExceptionPageDictionary(LoggingEvent event) { ! NSMutableDictionary result = super.composeExceptionPageDictionary(event); ! result.setObjectForKey(ERCoreBusinessLogic.sharedInstance().actor(),"actor"); ! return result; } ! /** * Where the actual logging event is processed and a * mail message is generated. *************** *** 379,444 **** LogLog.error("ERProblemMailMessageAppender: editingContext has changes -- infinite loop detected"); } else { ! String title; ! if (getTitle() != null) { ! title = getTitle(); ! } else { ! StringBuffer temp = new StringBuffer(); ! if (titleIncludesPriorityLevelAsBoolean()) { ! temp.append(event.getLevel().toString() + ": "); ! } ! if (titleIncludesApplicationNameAsBoolean()) { ! temp.append(WOApplication.application().name() + ": "); ! } ! temp.append(event.getRenderedMessage()); ! title = temp.toString(); ! } ! ERCMailMessage message = null; ! if (ERXValueUtilities.booleanValue(formatAsError())) { ! WOContext currentContext = (WOContext)ERXThreadStorage.valueForKey("wocontext"); ! NSDictionary extraInformation = null; ! if (currentContext != null) ! extraInformation = ERXApplication.erxApplication().extraInformationForExceptionInContext(null, currentContext); ! ! ERCMailableExceptionPage standardExceptionPage = (ERCMailableExceptionPage)ERXApplication.instantiatePage("ERCMailableExceptionPage"); ! ! standardExceptionPage.setErrorMessage(title); ! standardExceptionPage.setActor(ERCoreBusinessLogic.sharedInstance().actor()); ! standardExceptionPage.setExtraInfo(extraInformation); ! ! if (event.getThrowableInformation() != null && event.getThrowableInformation().getThrowable() != null) { ! standardExceptionPage.setException(event.getThrowableInformation().getThrowable()); ! } else { ! NSArray parts = NSArray.componentsSeparatedByString(ERXUtilities.stackTrace(), "\n\t"); ! NSMutableArray subParts = new NSMutableArray(); ! boolean first = true; ! for (Enumeration e = parts.reverseObjectEnumerator(); e.hasMoreElements();) { ! String element = (String)e.nextElement(); ! if (element.indexOf("org.apache.log4j") != -1) ! break; ! if (!first) ! subParts.insertObjectAtIndex(element, 0); ! else ! first = false; ! } ! standardExceptionPage.setReasonLines(subParts); ! } ! ! standardExceptionPage.setFormattedMessage(this.layout.format(event)); ! message = ERCMailDelivery.sharedInstance().composeEmail(computedFromAddress(), ! toAddressesAsArray(), ! toAddressesAsArray(), ! bccAddressesAsArray(), ! title, ! standardExceptionPage.generateResponse().contentString(), ! editingContext()); ! } else { ! message = ERCMailDelivery.sharedInstance().composeEmail(computedFromAddress(), ! toAddressesAsArray(), ! toAddressesAsArray(), ! bccAddressesAsArray(), ! title, ! this.layout.format(event), ! editingContext()); ! } if (getReplyTo() != null) { message.setReplyToAddress(getReplyTo()); --- 93,105 ---- LogLog.error("ERProblemMailMessageAppender: editingContext has changes -- infinite loop detected"); } else { ! String title = composeTitle(event); ! String content = composeMessage(event); ! ERCMailMessage message = ERCMailDelivery.sharedInstance().composeEmail(computedFromAddress(), ! toAddressesAsArray(), ! toAddressesAsArray(), ! bccAddressesAsArray(), ! title, ! content, ! editingContext()); if (getReplyTo() != null) { message.setReplyToAddress(getReplyTo()); |