01: /**
02: * Copyright 2003-2007 Luck Consulting Pty Ltd
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */package net.sf.ehcache.config;
16:
17: import org.apache.commons.logging.Log;
18: import org.apache.commons.logging.LogFactory;
19:
20: import java.io.File;
21:
22: /**
23: * A class to represent DiskStore configuration
24: * e.g. <diskStore path="java.io.tmpdir" />
25: * @author <a href="mailto:gluck@thoughtworks.com">Greg Luck</a>
26: * @version $Id: DiskStoreConfiguration.java 519 2007-07-27 07:11:45Z gregluck $
27: */
28: public final class DiskStoreConfiguration {
29: private static final Log LOG = LogFactory
30: .getLog(DiskStoreConfiguration.class.getName());
31:
32: private String path;
33:
34: /**
35: * The diskStore path
36: */
37: public final String getPath() {
38: return path;
39: }
40:
41: /**
42: * Translates and sets the path.
43: *
44: * @param path If the path contains a Java System Property it is replaced by
45: * its value in the running VM. Subdirectories can be specified below the property e.g. java.io.tmpdir/one The following properties are translated:
46: * <ul>
47: * <li><code>user.home</code> - User's home directory
48: * <li><code>user.dir</code> - User's current working directory
49: * <li><code>java.io.tmpdir</code> - Default temp file path
50: * </ul>
51: * e.g. <code>java.io/tmpdir/caches</code> might become <code>/tmp/caches</code>
52: */
53: public final void setPath(final String path) {
54: /** A constants class with method scope */
55: final class Env {
56: static final String USER_HOME = "user.home";
57: static final String USER_DIR = "user.dir";
58: static final String JAVA_IO_TMPDIR = "java.io.tmpdir";
59: }
60:
61: String translatedPath = replaceToken(Env.USER_HOME, System
62: .getProperty(Env.USER_HOME), path);
63: translatedPath = replaceToken(Env.USER_DIR, System
64: .getProperty(Env.USER_DIR), translatedPath);
65: translatedPath = replaceToken(Env.JAVA_IO_TMPDIR, System
66: .getProperty(Env.JAVA_IO_TMPDIR), translatedPath);
67: String separator = File.separator;
68: //Remove duplicate separators: Windows and Solaris
69: translatedPath = replaceToken(File.separator + File.separator,
70: File.separator, translatedPath);
71:
72: if (LOG.isDebugEnabled()) {
73: LOG.debug("Disk Store Path: " + translatedPath);
74: }
75: this .path = translatedPath;
76: }
77:
78: /**
79: * Replaces a token with replacement text.
80: * @param token
81: * @param replacement
82: * @param source
83: * @return the String with replacement text applied
84: */
85: public static String replaceToken(final String token,
86: final String replacement, final String source) {
87: int foundIndex = source.indexOf(token);
88: if (foundIndex == -1) {
89: return source;
90: } else {
91: String firstFragment = source.substring(0, foundIndex);
92: String lastFragment = source.substring(foundIndex
93: + token.length(), source.length());
94: return new StringBuffer().append(firstFragment).append(
95: replacement).append(lastFragment).toString();
96: }
97: }
98:
99: }
|