1 /*
2 * The MIT License
3 *
4 * Original work sponsored and donated by National Board of e-Health (NSI), Denmark (http://www.nsi.dk)
5 *
6 * Copyright (C) 2011 National Board of e-Health (NSI), Denmark (http://www.nsi.dk)
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy of
9 * this software and associated documentation files (the "Software"), to deal in
10 * the Software without restriction, including without limitation the rights to
11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12 * of the Software, and to permit persons to whom the Software is furnished to do
13 * so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in all
16 * copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 * SOFTWARE.
25 *
26 * $HeadURL: https://svn.softwareborsen.dk/sosi/trunk/modules/seal/src/main/java/dk/sosi/seal/pki/InMemoryCRLCache.java $
27 * $Id: InMemoryCRLCache.java 8697 2011-09-02 10:33:55Z chg@lakeside.dk $
28 */
29 package dk.sosi.seal.pki;
30
31 import java.security.cert.X509CRL;
32 import java.util.Date;
33 import java.util.Map;
34 import java.util.Set;
35 import java.util.concurrent.ConcurrentHashMap;
36
37 /**
38 * This is a simple in-memory cache to store the mapping from
39 * url to CRLInfo.
40 * <p/>
41 * It is based of the <code>ConcurrentHashMap</code> found in jdk 1.5.
42 * <p/>
43 * For semantic for the various methods, see <link>CRLCache</link>.
44 *
45 * @author ht@arosii.dk
46 * @since 2.0
47 */
48 public class InMemoryCRLCache implements CRLCache {
49
50 private final ConcurrentHashMap<String, CRLCache.CRLInfo> cache = new ConcurrentHashMap<String, CRLInfo>();
51
52 public CRLInfo get(final String url) {
53 return cache.get(url);
54 }
55
56 public CRLInfo update(final String url, final X509CRL crl) {
57 return update(url, crl == null ? null : new CRLInfo(crl, new Date().getTime()));
58 }
59
60 public CRLInfo update(final String url, final CRLInfo crlInfo) {
61 if (url == null) {
62 throw new IllegalArgumentException("'url' must not be null");
63 }
64 if (crlInfo == null) {
65 cache.remove(url);
66 return null;
67 }
68
69 cache.put(url, crlInfo);
70 return crlInfo;
71 }
72
73 public Set<Map.Entry<String, CRLInfo>> entries() {
74 return cache.entrySet();
75 }
76
77 public void clear() {
78 cache.clear();
79 }
80
81 }