001: /**
002: * JDBM LICENSE v1.00
003: *
004: * Redistribution and use of this software and associated documentation
005: * ("Software"), with or without modification, are permitted provided
006: * that the following conditions are met:
007: *
008: * 1. Redistributions of source code must retain copyright
009: * statements and notices. Redistributions must also contain a
010: * copy of this document.
011: *
012: * 2. Redistributions in binary form must reproduce the
013: * above copyright notice, this list of conditions and the
014: * following disclaimer in the documentation and/or other
015: * materials provided with the distribution.
016: *
017: * 3. The name "JDBM" must not be used to endorse or promote
018: * products derived from this Software without prior written
019: * permission of Cees de Groot. For written permission,
020: * please contact cg@cdegroot.com.
021: *
022: * 4. Products derived from this Software may not be called "JDBM"
023: * nor may "JDBM" appear in their names without prior written
024: * permission of Cees de Groot.
025: *
026: * 5. Due credit should be given to the JDBM Project
027: * (http://jdbm.sourceforge.net/).
028: *
029: * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
030: * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
031: * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
032: * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
033: * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
034: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
035: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
036: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
037: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
038: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
039: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
040: * OF THE POSSIBILITY OF SUCH DAMAGE.
041: *
042: * Copyright 2000 (C) Cees de Groot. All Rights Reserved.
043: * Copyright 2000-2001 (C) Alex Boisvert. All Rights Reserved.
044: * Contributions are Copyright (C) 2000 by their associated contributors.
045: *
046: * $Id: Provider.java,v 1.3 2005/06/25 23:12:32 doomdark Exp $
047: */package jdbm.recman;
048:
049: import java.io.IOException;
050: import java.util.Properties;
051:
052: import jdbm.RecordManager;
053: import jdbm.RecordManagerOptions;
054: import jdbm.RecordManagerProvider;
055:
056: import jdbm.helper.MRU;
057:
058: /**
059: * Provider of the default RecordManager implementation.
060: *
061: * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
062: * @version $Id: Provider.java,v 1.3 2005/06/25 23:12:32 doomdark Exp $
063: */
064: public final class Provider implements RecordManagerProvider {
065:
066: /**
067: * Create a default implementation record manager.
068: *
069: * @param name Name of the record file.
070: * @param options Record manager options.
071: * @throws IOException if an I/O related exception occurs while creating
072: * or opening the record manager.
073: * @throws UnsupportedOperationException if some options are not supported by the
074: * implementation.
075: * @throws IllegalArgumentException if some options are invalid.
076: */
077: public RecordManager createRecordManager(String name,
078: Properties options) throws IOException {
079: RecordManager recman;
080: String value;
081: int cacheSize;
082:
083: recman = new BaseRecordManager(name);
084:
085: value = options.getProperty(
086: RecordManagerOptions.DISABLE_TRANSACTIONS, "false");
087: if (value.equalsIgnoreCase("TRUE")) {
088: ((BaseRecordManager) recman).disableTransactions();
089: }
090:
091: value = options.getProperty(RecordManagerOptions.CACHE_SIZE,
092: "1000");
093: cacheSize = Integer.parseInt(value);
094:
095: value = options.getProperty(RecordManagerOptions.CACHE_TYPE,
096: RecordManagerOptions.NORMAL_CACHE);
097: if (value.equalsIgnoreCase(RecordManagerOptions.NORMAL_CACHE)) {
098: MRU cache = new MRU(cacheSize);
099: recman = new CacheRecordManager(recman, cache);
100: } else if (value
101: .equalsIgnoreCase(RecordManagerOptions.SOFT_REF_CACHE)) {
102: throw new IllegalArgumentException(
103: "Soft reference cache not implemented");
104: } else if (value
105: .equalsIgnoreCase(RecordManagerOptions.WEAK_REF_CACHE)) {
106: throw new IllegalArgumentException(
107: "Weak reference cache not implemented");
108: } else {
109: throw new IllegalArgumentException("Invalid cache type: "
110: + value);
111: }
112:
113: return recman;
114: }
115:
116: }
|