001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.service.impl; 017 018 import org.apache.log4j.Logger; 019 import org.kuali.rice.krad.exception.ExceptionIncident; 020 import org.kuali.rice.krad.exception.KualiExceptionIncident; 021 import org.kuali.rice.krad.service.KualiExceptionIncidentService; 022 023 import java.util.ArrayList; 024 import java.util.List; 025 import java.util.Map; 026 027 /** 028 * Modified this service so that it now extends the KualiFeedbackServiceImpl. 029 * This has been done to allow user feedback and exception incidents to be 030 * reported in the same way, but to potentially different email lists. Part 031 * of this refactor included moving the mailer and messageTemplate properties 032 * and the emailReport and createMailMessage methods to the new parent class. 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 * 036 */ 037 public class KualiExceptionIncidentServiceImpl extends KualiFeedbackServiceImpl implements KualiExceptionIncidentService { 038 private Logger LOG=Logger.getLogger(KualiExceptionIncidentServiceImpl.class); 039 040 /** 041 * An list to send incident emails to. 042 */ 043 private String incidentMailingList; 044 045 /** 046 * This property must be defined in the base configuration file for specifying 047 * the mailing list for the report to be sent. 048 * <p>Example: 049 * <code> 050 * <param name="KualiReporterServiceImpl.REPORT_MAIL_LIST">a@y,b@z</param> 051 * </code> 052 */ 053 public static final String REPORT_MAIL_LIST=String.format("%s.REPORT_MAIL_LIST", KualiExceptionIncidentServiceImpl.class.getSimpleName()); 054 055 @Override 056 protected String getToAddressesPropertyName() { 057 return REPORT_MAIL_LIST; 058 } 059 060 /** 061 * This overridden method send email to the specified list of addresses. 062 * 063 * @see org.kuali.rice.krad.service.KualiExceptionIncidentService#report(org.kuali.rice.krad.exception.KualiExceptionIncident) 064 */ 065 @Override 066 public void report(KualiExceptionIncident exceptionIncident) throws Exception { 067 if (LOG.isTraceEnabled()) { 068 String lm=String.format("ENTRY %s", 069 (exceptionIncident==null)?"null":exceptionIncident.toString()); 070 LOG.trace(lm); 071 } 072 073 emailReport( 074 exceptionIncident.getProperty( 075 KualiExceptionIncident.EXCEPTION_REPORT_SUBJECT), 076 exceptionIncident.getProperty( 077 KualiExceptionIncident.EXCEPTION_REPORT_MESSAGE)); 078 079 if (LOG.isTraceEnabled()) { 080 String lm=String.format("EXIT"); 081 LOG.trace(lm); 082 } 083 084 } 085 086 /** 087 * This method first separate a composite string of the format 088 * "string token string". 089 * <p>Example: 1,2,a,b where ',' is the token 090 * 091 * @param s 092 * @param token 093 * @return 094 */ 095 public List<String> split(String s, String token) { 096 if (LOG.isTraceEnabled()) { 097 String lm=String.format("ENTRY %s;%s", s, token); 098 LOG.trace(lm); 099 } 100 101 String[] sarray=s.split(token); 102 List<String> list=new ArrayList<String>(); 103 for (int i=0; i<sarray.length && sarray[i].length() > 0; i++) { 104 list.add(sarray[i]); 105 } 106 107 if (LOG.isTraceEnabled()) { 108 String lm=String.format("EXIT %s", list.toString()); 109 LOG.trace(lm); 110 } 111 112 return list; 113 } 114 115 /** 116 * This overridden method create an instance of the KualiExceptionIncident. 117 * 118 * @see org.kuali.rice.krad.service.KualiExceptionIncidentService#getExceptionIncident( 119 * java.lang.Exception,java.util.Map) 120 */ 121 @Override 122 public KualiExceptionIncident getExceptionIncident(Exception exception, 123 Map<String, String> properties) { 124 if ( exception == null ) { 125 return getExceptionIncident(properties); 126 } 127 if (LOG.isTraceEnabled()) { 128 String lm=String.format("ENTRY %s;%s", exception.getMessage(), 129 properties.toString()); 130 LOG.trace(lm); 131 } 132 133 KualiExceptionIncident ei=new ExceptionIncident(exception, properties); 134 135 if (LOG.isTraceEnabled()) { 136 String lm=String.format("EXIT %s", ei.toProperties().toString()); 137 LOG.trace(lm); 138 } 139 140 return ei; 141 } 142 143 /** 144 * This overridden method create an instance of ExceptionIncident from list of 145 * name-value pairs as exception incident information. 146 * 147 * @see org.kuali.rice.krad.service.KualiExceptionIncidentService#getExceptionIncident(java.util.Map) 148 */ 149 @Override 150 public KualiExceptionIncident getExceptionIncident(Map<String, String> properties) { 151 if (LOG.isTraceEnabled()) { 152 String lm=String.format("ENTRY %s", properties.toString()); 153 LOG.trace(lm); 154 } 155 156 ExceptionIncident ei=new ExceptionIncident(properties); 157 158 if (LOG.isTraceEnabled()) { 159 String lm=String.format("EXIT %s", ei.toProperties().toString()); 160 LOG.trace(lm); 161 } 162 163 return ei; 164 } 165 166 /** 167 * Returns the incident report mailing list. 168 * @return the incidentMailingList 169 */ 170 public String getIncidentMailingList() { 171 return this.incidentMailingList; 172 } 173 174 /** 175 * Sets the incident report mailing list. 176 * @param incidentMailingList the incidentMailingList to set 177 */ 178 public void setIncidentMailingList(String incidentMailingList) { 179 this.incidentMailingList = incidentMailingList; 180 } 181 182 }