KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > opensymphony > oscache > plugins > diskpersistence > DiskPersistenceListener


1 /*
2  * Copyright (c) 2002-2003 by OpenSymphony
3  * All rights reserved.
4  */

5 package com.opensymphony.oscache.plugins.diskpersistence;
6
7
8 /**
9  * Persist the cache data to disk.
10  *
11  * The code in this class is totally not thread safe it is the resonsibility
12  * of the cache using this persistence listener to handle the concurrency.
13  *
14  * @version $Revision: 1.1 $
15  * @author <a HREF="mailto:fbeauregard@pyxis-tech.com">Francois Beauregard</a>
16  * @author <a HREF="mailto:abergevin@pyxis-tech.com">Alain Bergevin</a>
17  * @author <a HREF="&#109;a&#105;&#108;&#116;&#111;:chris&#64;swebtec.&#99;&#111;&#109;">Chris Miller</a>
18  */

19 public class DiskPersistenceListener extends AbstractDiskPersistenceListener {
20     private static final String JavaDoc CHARS_TO_CONVERT = "./\\ :;\"\'_?";
21
22     /**
23     * Build cache file name for the specified cache entry key.
24     *
25     * @param key Cache Entry Key.
26     * @return char[] file name.
27     */

28     protected char[] getCacheFileName(String JavaDoc key) {
29         if ((key == null) || (key.length() == 0)) {
30             throw new IllegalArgumentException JavaDoc("Invalid key '" + key + "' specified to getCacheFile.");
31         }
32
33         char[] chars = key.toCharArray();
34
35         StringBuffer JavaDoc sb = new StringBuffer JavaDoc(chars.length + 8);
36
37         for (int i = 0; i < chars.length; i++) {
38             char c = chars[i];
39             int pos = CHARS_TO_CONVERT.indexOf(c);
40  
41             if (pos >= 0) {
42                 sb.append('_');
43                 sb.append(i);
44             } else {
45                 sb.append(c);
46             }
47         }
48
49         char[] fileChars = new char[sb.length()];
50         sb.getChars(0, fileChars.length, fileChars, 0);
51         return fileChars;
52     }
53 }
54
Popular Tags