1 package org.apache.commons.jcs.access;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.commons.jcs.access.behavior.IGroupCacheAccess;
23 import org.apache.commons.jcs.access.exception.CacheException;
24 import org.apache.commons.jcs.access.exception.InvalidArgumentException;
25 import org.apache.commons.jcs.engine.CacheElement;
26 import org.apache.commons.jcs.engine.behavior.ICacheElement;
27 import org.apache.commons.jcs.engine.behavior.IElementAttributes;
28 import org.apache.commons.jcs.engine.control.CompositeCache;
29 import org.apache.commons.jcs.engine.control.group.GroupAttrName;
30 import org.apache.commons.jcs.engine.control.group.GroupId;
31
32 import java.io.IOException;
33 import java.util.HashSet;
34 import java.util.Set;
35
36
37
38
39 public class GroupCacheAccess<K, V>
40 extends AbstractCacheAccess<GroupAttrName<K>, V>
41 implements IGroupCacheAccess<K, V>
42 {
43
44
45
46
47
48 public GroupCacheAccess( CompositeCache<GroupAttrName<K>, V> cacheControl )
49 {
50 super(cacheControl);
51 }
52
53
54
55
56
57
58
59
60
61
62 @Override
63 public V getFromGroup( K name, String group )
64 {
65 ICacheElement<GroupAttrName<K>, V> element = this.getCacheControl().get( getGroupAttrName( group, name ) );
66 return ( element != null ) ? element.getVal() : null;
67 }
68
69
70
71
72
73
74
75
76 private GroupAttrName<K> getGroupAttrName( String group, K name )
77 {
78 GroupId gid = new GroupId( this.getCacheControl().getCacheName(), group );
79 return new GroupAttrName<K>( gid, name );
80 }
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 @Override
96 public void putInGroup( K name, String groupName, V value )
97 throws CacheException
98 {
99 putInGroup( name, groupName, value, null );
100 }
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 @Override
118 public void putInGroup( K name, String groupName, V value, IElementAttributes attr )
119 throws CacheException
120 {
121 if ( name == null )
122 {
123 throw new InvalidArgumentException( "Key must not be null" );
124 }
125
126 if ( value == null )
127 {
128 throw new InvalidArgumentException( "Value must not be null" );
129 }
130
131
132
133 try
134 {
135 GroupAttrName<K> key = getGroupAttrName( groupName, name );
136 CacheElement<GroupAttrName<K>, V> ce =
137 new CacheElement<GroupAttrName<K>, V>( this.getCacheControl().getCacheName(), key, value );
138
139 IElementAttributes attributes = (attr == null) ? this.getCacheControl().getElementAttributes() : attr;
140 ce.setElementAttributes( attributes );
141
142 this.getCacheControl().update( ce );
143 }
144 catch ( IOException e )
145 {
146 throw new CacheException( e );
147 }
148
149 }
150
151
152
153
154
155 @Override
156 public void removeFromGroup( K name, String group )
157 {
158 GroupAttrName<K> key = getGroupAttrName( group, name );
159 this.getCacheControl().remove( key );
160 }
161
162
163
164
165
166
167
168 @Override
169 public Set<K> getGroupKeys( String group )
170 {
171 Set<K> groupKeys = new HashSet<K>();
172 GroupId groupId = new GroupId( this.getCacheControl().getCacheName(), group );
173
174 for (GroupAttrName<K> gan : this.getCacheControl().getKeySet())
175 {
176 if (gan.groupId.equals( groupId ))
177 {
178 groupKeys.add( gan.attrName );
179 }
180 }
181
182 return groupKeys;
183 }
184
185
186
187
188
189
190 public Set<String> getGroupNames()
191 {
192 HashSet<String> names = new HashSet<String>();
193 for (GroupAttrName<K> gan : this.getCacheControl().getKeySet())
194 {
195 names.add(gan.groupId.groupName);
196 }
197 return names;
198 }
199
200
201
202
203
204
205
206 @Override
207 public void invalidateGroup( String group )
208 {
209 this.getCacheControl().remove(getGroupAttrName(group, null));
210 }
211 }