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.cache;
17
18 import java.io.Serializable;
19 import java.lang.reflect.Array;
20 import java.util.logging.Level;
21 import java.util.logging.Logger;
22
23 /**
24 * ID used for storing and retrieving results in the cache.
25 *
26 * @author smolloy
27 *
28 */
29 public class CachedResultId implements Comparable<CachedResultId>, Serializable {
30 /**
31 * Logger for this class
32 */
33 private static final Logger logger = Logger.getLogger(CachedResultId.class.getName());
34
35 /** Serial UID */
36 private static final long serialVersionUID = -6165070370231138090L;
37
38 /** Method for which result is stored. */
39 private String method;
40
41 /** Arguments used for the method call. */
42 private Object args;
43
44 /**
45 * Constructor.
46 */
47 public CachedResultId() {
48 }
49
50 /**
51 * @see java.lang.Comparable#compareTo(T)
52 */
53 public int compareTo(final CachedResultId o) {
54 if (CachedResultId.logger.isLoggable(Level.FINEST)) {
55 CachedResultId.logger.entering("CachedResultId", "compareTo(CachedResultId=" + o + ")", "start");
56 }
57
58 if (o == null) {
59 if (CachedResultId.logger.isLoggable(Level.FINEST)) {
60 CachedResultId.logger.exiting("CachedResultId", "compareTo(CachedResultId=null)",
61 "end - return value=" + 1);
62 }
63 return 1;
64 }
65
66 int res = ((method == null) ? "" : method).compareTo((o.getMethod() == null) ? "" : o.getMethod());
67 if (res == 0) {
68 if (args == null) {
69 res = (o.getArgs() == null) ? 0 : -1;
70 } else {
71 res = args.getClass().getName().compareTo(o.getArgs().getClass().getName());
72 if (res == 0 && args.getClass().isArray()) {
73 res = Integer.valueOf(Array.getLength(args)).compareTo(Array.getLength(o.getArgs()));
74 for (int i = 0; res == 0 && i < Array.getLength(args); i++) {
75 final Object a1 = Array.get(args, i);
76 final Object a2 = Array.get(o.getArgs(), i);
77 if (a1 instanceof Comparable && a2 instanceof Comparable) {
78 res = ((Comparable) a1).compareTo(a2);
79 }
80 }
81 } else if (args instanceof Comparable) {
82 res = ((Comparable) args).compareTo(o.getArgs());
83 }
84 }
85 }
86
87 if (CachedResultId.logger.isLoggable(Level.FINEST)) {
88 CachedResultId.logger.exiting("CachedResultId", "compareTo(CachedResultId=" + o + ")",
89 "end - return value=" + res);
90 }
91 return res;
92 }
93
94 /**
95 * @see java.lang.Object#equals(java.lang.Object)
96 */
97 @Override
98 public boolean equals(final Object o) {
99 if (CachedResultId.logger.isLoggable(Level.FINEST)) {
100 CachedResultId.logger.entering("CachedResultId", "equals(Object=" + o + ")", "start");
101 }
102
103 final boolean returnboolean = (o instanceof CachedResultId && compareTo((CachedResultId) o) == 0);
104
105 if (CachedResultId.logger.isLoggable(Level.FINEST)) {
106 CachedResultId.logger.exiting("CachedResultId", "equals(Object=" + o + ")", "end - return value="
107 + returnboolean);
108 }
109 return returnboolean;
110 }
111
112 /**
113 * @return Returns the args.
114 */
115 public Object getArgs() {
116 return args;
117 }
118
119 /**
120 * @return Returns the method.
121 */
122 public String getMethod() {
123 return method;
124 }
125
126 /**
127 * @see java.lang.Object#hashCode()
128 */
129 @Override
130 public int hashCode() {
131 return (method == null ? 0 : method.hashCode()) + (args == null ? 0 : args.hashCode());
132 }
133
134 /**
135 * @param args
136 * The args to set.
137 */
138 public void setArgs(final Object args) {
139 this.args = args;
140 }
141
142 /**
143 * @param method
144 * The method to set.
145 */
146 public void setMethod(final String method) {
147 this.method = method;
148 }
149
150 /**
151 * @see java.lang.Object#toString()
152 */
153 @Override
154 public String toString() {
155 return "CachedResultId( " + ((method == null) ? "null" : method) + ", "
156 + ((args == null) ? "null" : args.toString()) + ")";
157 }
158 }