View Javadoc

1   /**
2    * Copyright 2005 Steve Molloy
3    * 
4    * This file is part of OV4J.
5    * 
6    * OV4J is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
7    * published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
8    * 
9    * OV4J is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
10   * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
11   * 
12   * You should have received a copy of the GNU General Public License along with OV4J; if not, write to the Free Software
13   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
14   * 
15   */
16  package org.ov4j.retry;
17  
18  import java.lang.reflect.Method;
19  import java.util.Arrays;
20  import java.util.logging.Level;
21  import java.util.logging.Logger;
22  
23  /**
24   * This class holds information about the result of a retried call.
25   * 
26   * @author smolloy
27   * 
28   */
29  public class RetryableCallResult {
30  	/**
31  	 * Logger for this class
32  	 */
33  	private static final Logger	logger	= Logger.getLogger(RetryableCallResult.class.getName());
34  
35  	/** Name of the class used for the call. */
36  	private String				className;
37  
38  	/** Method called. */
39  	private Method				method;
40  
41  	/** Arguments used. */
42  	private Object[]			args;
43  
44  	/** Result of the call. */
45  	private Object				result;
46  
47  	/** Number of times the call was retried. */
48  	private int					numRetries;
49  
50  	/**
51  	 * Constructor.
52  	 * 
53  	 * @param call
54  	 *            The call which was retried.
55  	 * @param result
56  	 *            The result of the call.
57  	 */
58  	public RetryableCallResult(final RetryableCall call, final Object result, final Object... args) {
59  		className = call.getClassName();
60  		method = call.getMethod();
61  		numRetries = call.getNumRetries();
62  		if (args == null) {
63  			this.args = null;
64  		} else {
65  			this.args = new Object[args.length];
66  			System.arraycopy(args, 0, this.args, 0, args.length);
67  		}
68  		this.result = result;
69  	}
70  
71  	/**
72  	 * @return Returns the args.
73  	 */
74  	public Object[] getArgs() {
75  		if (RetryableCallResult.logger.isLoggable(Level.FINEST)) {
76  			RetryableCallResult.logger.entering("RetryableCallResult", "getArgs()", "start");
77  		}
78  
79  		if (args == null) {
80  			if (RetryableCallResult.logger.isLoggable(Level.FINEST)) {
81  				RetryableCallResult.logger.exiting("RetryableCallResult", "getArgs()", "end - return value=" + null);
82  			}
83  			return null;
84  		}
85  		final Object[] a = new Object[args.length];
86  		System.arraycopy(args, 0, a, 0, a.length);
87  
88  		if (RetryableCallResult.logger.isLoggable(Level.FINEST)) {
89  			RetryableCallResult.logger.exiting("RetryableCallResult", "getArgs()", "end - return value="
90  				+ Arrays.toString(a));
91  		}
92  		return a;
93  	}
94  
95  	/**
96  	 * @return Returns the className.
97  	 */
98  	public String getClassName() {
99  		return className;
100 	}
101 
102 	/**
103 	 * @return Returns the method.
104 	 */
105 	public Method getMethod() {
106 		return method;
107 	}
108 
109 	/**
110 	 * @return Returns the numRetries.
111 	 */
112 	public int getNumRetries() {
113 		return numRetries;
114 	}
115 
116 	/**
117 	 * @return Returns the result.
118 	 */
119 	public Object getResult() {
120 		return result;
121 	}
122 
123 	/**
124 	 * @param args
125 	 *            The args to set.
126 	 */
127 	public void setArgs(final Object[] args) {
128 		if (RetryableCallResult.logger.isLoggable(Level.FINEST)) {
129 			RetryableCallResult.logger.entering("RetryableCallResult", "setArgs(Object[]=" + Arrays.toString(args)
130 				+ ")", "start");
131 		}
132 
133 		if (args == null) {
134 			this.args = null;
135 		} else {
136 			this.args = new Object[args.length];
137 			System.arraycopy(args, 0, this.args, 0, args.length);
138 		}
139 
140 		if (RetryableCallResult.logger.isLoggable(Level.FINEST)) {
141 			RetryableCallResult.logger.exiting("RetryableCallResult",
142 				"setArgs(Object[]=" + Arrays.toString(args) + ")", "end");
143 		}
144 	}
145 
146 	/**
147 	 * @param className
148 	 *            The className to set.
149 	 */
150 	public void setClassName(final String className) {
151 		this.className = className;
152 	}
153 
154 	/**
155 	 * @param method
156 	 *            The method to set.
157 	 */
158 	public void setMethod(final Method method) {
159 		this.method = method;
160 	}
161 
162 	/**
163 	 * @param numRetries
164 	 *            The numRetries to set.
165 	 */
166 	public void setNumRetries(final int numRetries) {
167 		this.numRetries = numRetries;
168 	}
169 
170 	/**
171 	 * @param result
172 	 *            The result to set.
173 	 */
174 	public void setResult(final Object result) {
175 		this.result = result;
176 	}
177 
178 	/**
179 	 * @see java.lang.Object#toString()
180 	 */
181 	@Override
182 	public String toString() {
183 		final StringBuffer sb = new StringBuffer("RetryableCallResult(Class: ").append(className);
184 		sb.append(", Method: ").append(method.getName()).append(", Args: [");
185 		if (args == null) {
186 			sb.append("null");
187 		} else {
188 			sb.append(args[0] == null ? "null" : args[0].toString());
189 			for (int i = 1; i < args.length; i++) {
190 				sb.append(", ").append(args[i] == null ? "null" : args[i].toString());
191 			}
192 		}
193 		sb.append("], Result: ").append(result == null ? "null" : result.toString());
194 		sb.append(", NumRetries: ").append(numRetries).append(")");
195 		return sb.toString();
196 	}
197 }