Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
ObjectCachePerClassImpl |
|
| 2.1666666666666665;2.167 |
1 | package org.apache.ojb.broker.cache; | |
2 | ||
3 | /* Copyright 2003-2005 The Apache Software Foundation | |
4 | * | |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | * you may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | */ | |
17 | ||
18 | import java.util.Collections; | |
19 | import java.util.HashMap; | |
20 | import java.util.Iterator; | |
21 | import java.util.Map; | |
22 | import java.util.Properties; | |
23 | ||
24 | import org.apache.ojb.broker.Identity; | |
25 | import org.apache.ojb.broker.PersistenceBroker; | |
26 | ||
27 | /** | |
28 | * Global {@link ObjectCache} implementation. | |
29 | * | |
30 | * @author matthew.baird | |
31 | * @version $Id: ObjectCachePerClassImpl.java,v 1.1 2007-08-24 22:17:29 ewestfal Exp $ | |
32 | */ | |
33 | public class ObjectCachePerClassImpl extends AbstractMetaCache | |
34 | { | |
35 | private static Map cachesByClass = Collections.synchronizedMap(new HashMap()); | |
36 | ||
37 | /** | |
38 | * Constructor for the ObjectCachePerClassImpl object | |
39 | */ | |
40 | public ObjectCachePerClassImpl(PersistenceBroker broker, Properties prop) | |
41 | { | |
42 | setClassCache(Object.class, new ObjectCacheDefaultImpl(broker, null)); | |
43 | } | |
44 | ||
45 | public ObjectCache getCache(Identity oid, Object obj, int methodCall) | |
46 | { | |
47 | if(oid.getObjectsRealClass() == null) | |
48 | { | |
49 | return null; | |
50 | } | |
51 | else | |
52 | { | |
53 | return getCachePerClass(oid.getObjectsRealClass(), methodCall); | |
54 | } | |
55 | } | |
56 | ||
57 | /** | |
58 | * Clears the cache | |
59 | */ | |
60 | public void clear() | |
61 | { | |
62 | Iterator it = cachesByClass.values().iterator(); | |
63 | while (it.hasNext()) | |
64 | { | |
65 | ObjectCache cache = (ObjectCache) it.next(); | |
66 | if (cache != null) | |
67 | { | |
68 | cache.clear(); | |
69 | } | |
70 | } | |
71 | } | |
72 | ||
73 | /** | |
74 | * Sets the ObjectCache implementation to use for objects with the given | |
75 | * type and subclasses | |
76 | * | |
77 | * @param objectClass The object's class, use java.lang.Object to alter | |
78 | * default caching for all objects which have no special | |
79 | * caching defined | |
80 | * @param cache The new ObjectCache implementation to use for this | |
81 | * class and subclasses, null to switch off caching | |
82 | * for the given class | |
83 | */ | |
84 | public void setClassCache(Class objectClass, ObjectCache cache) | |
85 | ||
86 | { | |
87 | setClassCache(objectClass.getName(), cache); | |
88 | } | |
89 | ||
90 | /** | |
91 | * Sets the ObjectCache implementation for the given class name | |
92 | * | |
93 | * @param className The name of the class to cache | |
94 | * @param cache The ObjectCache to use for this class and subclasses | |
95 | */ | |
96 | private void setClassCache(String className, ObjectCache cache) | |
97 | { | |
98 | cachesByClass.put(className, cache); | |
99 | } | |
100 | ||
101 | /** | |
102 | * Gets the cache for the given class | |
103 | * | |
104 | * @param objectClass The class to look up the cache for | |
105 | * @return The cache | |
106 | */ | |
107 | private ObjectCache getCachePerClass(Class objectClass, int methodCall) | |
108 | { | |
109 | ObjectCache cache = (ObjectCache) cachesByClass.get(objectClass.getName()); | |
110 | if (cache == null && AbstractMetaCache.METHOD_CACHE == methodCall | |
111 | && !cachesByClass.containsKey(objectClass.getName())) | |
112 | { | |
113 | cache = new ObjectCacheDefaultImpl(null, null); | |
114 | setClassCache(objectClass.getName(), cache); | |
115 | } | |
116 | return cache; | |
117 | } | |
118 | } |