001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/portal/owswatch/ServiceLog.java $ 002 /*---------------------------------------------------------------------------- 003 This file is part of deegree, http://deegree.org/ 004 Copyright (C) 2001-2009 by: 005 Department of Geography, University of Bonn 006 and 007 lat/lon GmbH 008 009 This library is free software; you can redistribute it and/or modify it under 010 the terms of the GNU Lesser General Public License as published by the Free 011 Software Foundation; either version 2.1 of the License, or (at your option) 012 any later version. 013 This library is distributed in the hope that it will be useful, but WITHOUT 014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 016 details. 017 You should have received a copy of the GNU Lesser General Public License 018 along with this library; if not, write to the Free Software Foundation, Inc., 019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 021 Contact information: 022 023 lat/lon GmbH 024 Aennchenstr. 19, 53177 Bonn 025 Germany 026 http://lat-lon.de/ 027 028 Department of Geography, University of Bonn 029 Prof. Dr. Klaus Greve 030 Postfach 1147, 53001 Bonn 031 Germany 032 http://www.geographie.uni-bonn.de/deegree/ 033 034 e-mail: info@deegree.org 035 ----------------------------------------------------------------------------*/ 036 037 package org.deegree.portal.owswatch; 038 039 import java.io.File; 040 import java.io.FileWriter; 041 import java.io.IOException; 042 import java.io.Serializable; 043 import java.util.Calendar; 044 045 import org.deegree.framework.log.ILogger; 046 import org.deegree.framework.log.LoggerFactory; 047 import org.deegree.framework.xml.XMLException; 048 import org.deegree.framework.xml.XMLFragment; 049 import org.deegree.framework.xml.XMLTools; 050 import org.w3c.dom.Element; 051 052 /** 053 * A class to log the testings results into a protocol file, i.e. a logger class 054 * 055 * @author <a href="mailto:elmasry@lat-lon.de">Moataz Elmasry</a> 056 * @author last edited by: $Author: jmays $ 057 * 058 * @version $Revision: 20271 $, $Date: 2009-10-21 13:07:15 +0200 (Mi, 21 Okt 2009) $ 059 */ 060 public class ServiceLog implements Serializable { 061 062 /** 063 * 064 */ 065 private static final long serialVersionUID = -2010721267404089317L; 066 067 private static final ILogger LOG = LoggerFactory.getLogger( ServiceLog.class ); 068 069 private int serviceId = -1; 070 071 private String serviceName = null; 072 073 private String serviceType = null; 074 075 private String protocolURI; 076 077 private String protDirPath = null; 078 079 private String protHttpAddr = null; 080 081 private EmailSender emailSender = null; 082 083 private ValidatorResponse response = null; 084 085 /** 086 * @param serviceId 087 * @param serviceName 088 * @param serviceType 089 * @param protDirPath 090 * @param servletAddr 091 * @param emailSender 092 * The class responsible for sending emails 093 * @throws IOException 094 * if the given paths are invalid 095 * @throws XMLException 096 * if the xmlDocument(s) are mal formed 097 */ 098 public ServiceLog( String protDirPath, int serviceId, String serviceName, String serviceType, String servletAddr, 099 EmailSender emailSender ) throws IOException { 100 this.protDirPath = protDirPath; 101 this.serviceId = serviceId; 102 this.serviceName = serviceName; 103 this.serviceType = serviceType; 104 this.emailSender = emailSender; 105 106 StringBuilder builder = new StringBuilder( servletAddr ); 107 if ( !( builder.lastIndexOf( "?" ) == builder.length() - 1 ) ) { 108 builder.append( "?" ); 109 } 110 protHttpAddr = builder.append( "action=serviceProtocol&serviceId=" ).append( serviceId ).toString(); 111 112 this.response = new ValidatorResponse( "Not yet Tested", Status.RESULT_STATE_WAITING ); 113 response.setLastLapse( -1 ); 114 } 115 116 /** 117 * creates an xml protocol file for this Protocol Object if it does not already exist 118 */ 119 protected Element init() 120 throws IOException { 121 122 protocolURI = buildProtocolURI(); 123 124 Element root = null; 125 try { 126 File file = new File( protocolURI ); 127 128 if ( !file.exists() || file.length() == 0 ) { 129 root = XMLTools.create().createElement( "owsWatchProtocol" ); 130 131 root.setAttribute( "serviceName", serviceName ); 132 root.setAttribute( "serviceType", serviceType ); 133 XMLFragment frag = new XMLFragment( root ); 134 frag.write( new FileWriter( protocolURI ) ); 135 } else { 136 XMLFragment xmlFrag = new XMLFragment( new File( protocolURI ) ); 137 root = xmlFrag.getRootElement(); 138 } 139 } catch ( Exception e ) { 140 throw new IOException( Messages.getMessage( "ERROR_CONFS_EXCEPTION", protocolURI ) 141 + e.getLocalizedMessage() ); 142 } 143 return root; 144 } 145 146 /** 147 * adds a message to protocol file 148 * 149 * @param response 150 * @param serviceconfig 151 * 152 */ 153 public void addMessage( ValidatorResponse response, ServiceConfiguration serviceconfig ) { 154 155 try { 156 157 Element root = init(); 158 if ( root != null ) { 159 160 Element entry = XMLTools.appendElement( root, null, "Entry" ); 161 XMLTools.appendElement( entry, null, "TimeStamp", response.getLastTest().toString() ); 162 XMLTools.appendElement( entry, null, "Message", response.getMessage() ); 163 XMLTools.appendElement( entry, null, "Lapse", String.valueOf( response.getLastLapse() ) ); 164 165 XMLFragment frag = new XMLFragment( root ); 166 FileWriter writer = new FileWriter( new File( protocolURI ) ); 167 writer.write( frag.getAsPrettyString() ); 168 writer.close(); 169 } else { 170 LOG.logError( "Exception while creating the Protocol" ); 171 } 172 } catch ( Exception e ) { 173 LOG.logError( "Error building the xml document in addMessage()", e ); 174 } 175 176 if ( ( this.response.getStatus().isAvailable() || this.response.getStatus().isWaiting() ) 177 && !response.getStatus().isAvailable() && !response.getStatus().isWaiting() ) { 178 emailSender.createAndSendMail( serviceconfig, response, getProtHttpAddr() ); 179 } 180 this.response = response; 181 } 182 183 /** 184 * @return String the uri of this Protocol Object 185 */ 186 public String getProtocolURI() { 187 return buildProtocolURI(); 188 } 189 190 /** 191 * @return protocol path 192 */ 193 public String getProtPath() { 194 return protocolURI; 195 } 196 197 /** 198 * @return String 199 */ 200 public String getProtDirPath() { 201 return protDirPath; 202 } 203 204 /** 205 * @param protDirPath 206 */ 207 public void setProtDirPath( String protDirPath ) { 208 this.protDirPath = protDirPath; 209 protocolURI = buildProtocolURI(); 210 } 211 212 private String buildProtocolURI() { 213 214 if ( protocolURI != null ) { 215 return protocolURI; 216 } 217 // Writing the file name 218 StringBuffer buffer = new StringBuffer( 100 ); 219 buffer.append( protDirPath ); 220 if ( !protDirPath.endsWith( "/" ) ) { 221 buffer.append( "/" ); 222 } 223 buffer.append( "protocol_ID" ).append( "_" ).append( serviceId ).append( "_" ); 224 Calendar cal = Calendar.getInstance(); 225 // I added 1 to the month since the returned month index is always -1 that the true, 226 // ex. january returns 0, feb 1, etc... 227 buffer.append( cal.get( Calendar.YEAR ) ).append( "_" ); 228 int month = cal.get( Calendar.MONTH ) + 1; 229 buffer.append( month > 9 ? month : "0" + month ); 230 buffer.append( ".xml" ); 231 232 return buffer.toString(); 233 } 234 235 /** 236 * @return http address that forwards you to the protocol page 237 */ 238 public String getProtHttpAddr() { 239 return protHttpAddr; 240 } 241 242 /** 243 * @return {@link EmailSender} 244 */ 245 public EmailSender getEmailSender() { 246 return emailSender; 247 } 248 249 /** 250 * @return {@link EmailSender} 251 */ 252 public ValidatorResponse getResponse() { 253 return response; 254 } 255 }