001 /** 002 * Copyright 2005-2012 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.krms.framework.engine.result; 017 018 import java.util.Collections; 019 import java.util.EventObject; 020 import java.util.Map; 021 022 import org.joda.time.DateTime; 023 import org.joda.time.format.DateTimeFormat; 024 import org.joda.time.format.DateTimeFormatter; 025 import org.kuali.rice.krms.api.engine.ExecutionEnvironment; 026 import org.kuali.rice.krms.api.engine.ResultEvent; 027 028 /** 029 * An implementation of {@link ResultEvent} with start DateTime, end DateTime, and elapsed time in Milliseconds. 030 * The Date is formatted using org.joda.time.format.DateTimeFormat pattern of "yyyy-MM-dd HH.mm.ss.SSS" 031 * 032 * @author Kuali Rice Team (rice.collab@kuali.org) 033 */ 034 public class TimingResult extends EventObject implements ResultEvent { 035 036 private static final long serialVersionUID = 5335636381355236617L; 037 038 private static final DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH.mm.ss.SSS"); 039 040 private String type; 041 private DateTime start; 042 private DateTime end; 043 private ExecutionEnvironment environment; 044 private String description; 045 private Map<String, ?> resultDetails; 046 047 /** 048 * Constructor 049 * @param description of the TimingResult 050 * @param type of the TimingResult 051 * @param source of the TimingResult 052 * @param environment {@link ExecutionEnvironment} of the TimingResult 053 * @param start org.joda.time.DateTime of the TimingResult 054 * @param end org.joda.time.DateTime of the TimingResult 055 */ 056 public TimingResult(String description, String type, Object source, ExecutionEnvironment environment, DateTime start, DateTime end){ 057 super(source); 058 this.type = type; 059 this.environment = environment; 060 this.start = start; 061 this.end = end; 062 this.description = description; 063 } 064 065 /** 066 * Constructor 067 * @param type of the TimingResult 068 * @param source of the TimingResult 069 * @param environment {@link ExecutionEnvironment} of the TimingResult 070 * @param start org.joda.time.DateTime of the TimingResult 071 * @param end org.joda.time.DateTime of the TimingResult 072 */ 073 public TimingResult(String type, Object source, ExecutionEnvironment environment, DateTime start, DateTime end){ 074 super(source); 075 this.type = type; 076 this.environment = environment; 077 this.start = start; 078 this.end = end; 079 } 080 081 /** 082 * Returns the Elapsed Time in Milliseconds 083 * @return Long end milliseconds minus start milliseconds 084 */ 085 public Long getElapsedTimeInMilliseconds(){ 086 return Long.valueOf(end.getMillis() - start.getMillis()); 087 } 088 089 @Override 090 public ExecutionEnvironment getEnvironment(){ 091 return environment; 092 }; 093 094 @Override 095 public String toString(){ 096 StringBuffer sb = new StringBuffer(); 097 sb.append(fmt.print(end)); 098 sb.append(" EventType: "+ type); 099 sb.append(" (Start = " + fmt.print(start)); 100 sb.append(", End = " + fmt.print(end)); 101 sb.append(", Elapsed Time = "+ getElapsedTimeInMilliseconds().toString()); 102 sb.append(" milliseconds.)"); 103 return sb.toString(); 104 } 105 106 @Override 107 public Boolean getResult() { 108 return null; 109 } 110 111 @Override 112 public DateTime getTimestamp() { 113 return end; 114 } 115 116 @Override 117 public String getType() { 118 return type; 119 } 120 121 /** 122 * Returns the result details of the ResultEvent as an unmodifiable Map<?,?> 123 * @return result details of the ResultEvent as an unmodifiable Map<?,?> 124 */ 125 @Override 126 public Map<String, ?> getResultDetails() { 127 if (resultDetails == null) { 128 return Collections.emptyMap(); 129 } else { 130 return Collections.unmodifiableMap(resultDetails); 131 } 132 } 133 134 @Override 135 public String getDescription() { 136 return description; 137 } 138 }