/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package examples.caching;
import java.util.HashMap;
import java.util.Collections;
import java.util.Map;
/**
* @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a>
*/
public class CacheStatistics {
private static Map s_methodInvocations = Collections.synchronizedMap(new HashMap());
private static Map s_cacheInvocations = Collections.synchronizedMap(new HashMap());
public static void addMethodInvocation(final String methodName, final Class[] parameterTypes) {
Long hash = calculateHash(methodName, parameterTypes);
if (!s_methodInvocations.containsKey(hash)) {
s_methodInvocations.put(hash, new Integer(0));
}
int counter = ((Integer) s_methodInvocations.get(hash)).intValue();
counter++;
s_methodInvocations.put(hash, new Integer(counter));
}
public static void addCacheInvocation(final String methodName, final Class[] parameterTypes) {
Long hash = calculateHash(methodName, parameterTypes);
if (!s_cacheInvocations.containsKey(hash)) {
s_cacheInvocations.put(hash, new Integer(0));
}
int counter = ((Integer) s_cacheInvocations.get(hash)).intValue();
counter++;
s_cacheInvocations.put(hash, new Integer(counter));
}
public static int getNrOfMethodInvocationsFor(final String methodName,
final Class[] parameterTypes) {
Integer number = (Integer) s_methodInvocations
.get(calculateHash(methodName, parameterTypes));
if (number != null) {
return number.intValue();
} else {
return 0;
}
}
public static int getNrOfCacheInvocationsFor(final String methodName,
final Class[] parameterTypes) {
Integer number = (Integer) s_cacheInvocations
.get(calculateHash(methodName, parameterTypes));
if (number != null) {
return number.intValue();
} else {
return 0;
}
}
private static Long calculateHash(final String methodName, final Class[] parameterTypes) {
int result = 17;
result = 37 * result + methodName.hashCode();
for (int i = 0, j = parameterTypes.length; i < j; i++) {
result = 37 * result + parameterTypes[i].hashCode();
}
return new Long(result);
}
}