⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hsqlproperties.java

📁 hsql是很有名的嵌入式数据库
💻 JAVA
字号:
/* Copyright (c) 2001-2005, The HSQL Development Group
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * Neither the name of the HSQL Development Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


package org.hsqldb.persist;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.Properties;import org.hsqldb.Trace;import org.hsqldb.lib.ArrayUtil;import org.hsqldb.lib.FileAccess;import org.hsqldb.lib.FileUtil;import org.hsqldb.lib.java.JavaSystem;/** * Wrapper for java.util.Properties to limit values to Specific types and * allow saving and loading.<p> * * @author fredt@users * @version 1.7.2 * @since 1.7.0 */public class HsqlProperties {    public static final int NO_VALUE_FOR_KEY = 1;    protected String        fileName;    protected Properties    stringProps;    protected int[]         errorCodes = new int[0];    protected String[]      errorKeys  = new String[0];    protected boolean       resource   = false;    protected FileAccess    fa;    public HsqlProperties() {        stringProps = new Properties();        fileName    = null;    }    public HsqlProperties(String name) {        stringProps = new Properties();        fileName    = name;    }    public HsqlProperties(String name, FileAccess accessor, boolean b) {        stringProps = new Properties();        fileName    = name;        resource    = b;        fa          = accessor;    }    public HsqlProperties(Properties props) {        stringProps = props;    }    public void setFileName(String name) {        fileName = name;    }    public String setProperty(String key, int value) {        return setProperty(key, Integer.toString(value));    }    public String setProperty(String key, boolean value) {        return setProperty(key, String.valueOf(value));    }    public String setProperty(String key, String value) {        return (String) stringProps.put(key, value);    }    public String setPropertyIfNotExists(String key, String value) {        value = getProperty(key, value);        return setProperty(key, value);    }    public Properties getProperties() {        return stringProps;    }    public String getProperty(String key) {        return stringProps.getProperty(key);    }    public String getProperty(String key, String defaultValue) {        return stringProps.getProperty(key, defaultValue);    }    public int getIntegerProperty(String key, int defaultValue) {        String prop = getProperty(key);        try {            if (prop != null) {                defaultValue = Integer.parseInt(prop);            }        } catch (NumberFormatException e) {}        return defaultValue;    }    public int getIntegerProperty(String key, int defaultValue, int minimum,                                  int maximum) {        String  prop     = getProperty(key);        boolean badvalue = false;        try {            defaultValue = Integer.parseInt(prop);        } catch (NumberFormatException e) {}        if (defaultValue < minimum) {            defaultValue = minimum;            badvalue     = true;        } else if (defaultValue > maximum) {            defaultValue = maximum;            badvalue     = true;        }        return defaultValue;    }    public boolean isPropertyTrue(String key) {        return isPropertyTrue(key, false);    }    public boolean isPropertyTrue(String key, boolean defaultValue) {        String value = stringProps.getProperty(key);        if (value == null) {            return defaultValue;        }        return value.toLowerCase().equals("true");    }    public void removeProperty(String key) {        stringProps.remove(key);    }    public void addProperties(Properties props) {        if (props == null) {            return;        }        Enumeration keys = props.keys();        while (keys.hasMoreElements()) {            Object key = keys.nextElement();            this.stringProps.put(key, props.get(key));        }    }    public void addProperties(HsqlProperties props) {        if (props == null) {            return;        }        addProperties(props.stringProps);    }// oj@openoffice.org    public boolean checkFileExists() throws IOException {        String propFilename = fileName + ".properties";        if (fa != null) {            return fa.isStreamElement(propFilename);        }        return FileUtil.exists(propFilename, resource, getClass());    }    public boolean load() throws Exception {        if (!checkFileExists()) {            return false;        }        if (fileName == null || fileName.length() == 0) {            throw new FileNotFoundException(                Trace.getMessage(Trace.HsqlProperties_load));        }        InputStream fis           = null;        String      propsFilename = fileName + ".properties";// oj@openoffice.org        try {            if (fa == null) {                fis = resource ? getClass().getResourceAsStream(propsFilename)                               : new FileInputStream(new File(propsFilename));            } else {                fis = fa.openInputStreamElement(propsFilename);            }            stringProps.load(fis);        } finally {            if (fis != null) {                fis.close();            }        }        return true;    }    /**     *  Saves the properties using JDK2 method if present, otherwise JDK1.     */    public void save() throws Exception {        if (fileName == null || fileName.length() == 0) {            throw new java.io.FileNotFoundException(                Trace.getMessage(Trace.HsqlProperties_load));        }        String filestring = fileName + ".properties";// oj@openoffice.org        if (fa != null) {            fa.createParentDirs(filestring);            OutputStream fos = fa.openOutputStreamElement(filestring);            JavaSystem.saveProperties(stringProps, "HSQL database", fos);            fos.close();            return;        }        File f = new File(filestring);        FileUtil.makeParentDirectories(f);        JavaSystem.saveProperties(stringProps,                                  HsqlDatabaseProperties.PRODUCT_NAME, f);    }    /**     * Adds the error code and the key to the list of errors. This list     * is populated during construction or addition of elements and is used     * outside this class to act upon the errors.     */    private void addError(int code, String key) {        errorCodes = (int[]) ArrayUtil.resizeArray(errorCodes,                errorCodes.length + 1);        errorKeys = (String[]) ArrayUtil.resizeArray(errorKeys,                errorKeys.length + 1);        errorCodes[errorCodes.length - 1] = code;        errorKeys[errorKeys.length - 1]   = key;    }    /**     * Creates and populates an HsqlProperties Object from the arguments     * array of a Main method. Properties are in the form of "-key value"     * pairs. Each key is prefixed with the type argument and a dot before     * being inserted into the properties Object. <p>     *     * "-?" is treated as a key with no value and not inserted.     */    public static HsqlProperties argArrayToProps(String[] arg, String type) {        HsqlProperties props = new HsqlProperties();        for (int i = 0; i < arg.length; i++) {            String p = arg[i];            if (p.startsWith("-?")) {                props.addError(NO_VALUE_FOR_KEY, p.substring(1));            } else if (p.charAt(0) == '-') {                props.setProperty(type + "." + p.substring(1), arg[i + 1]);                i++;            }        }        return props;    }    /**     * Creates and populates a new HsqlProperties Object using a string     * such as "key1=value1;key2=value2". <p>     *     * The string that represents the = sign above is specified as pairsep     * and the one that represents the semicolon is specified as delimiter,     * allowing any string to be used for either.<p>     *     * Leading / trailing spaces around the keys and values are discarded.<p>     *     * The string is parsed by (1) subdividing into segments by delimiter     * (2) subdividing each segment in two by finding the first instance of     * the pairsep (3) trimming each pair of segments from step 2 and     * inserting into the properties object.<p>     *     * Each key is prefixed with the type argument and a dot before being     * inserted.<p>     *     * Any key without a value is added to the list of errors.     */    public static HsqlProperties delimitedArgPairsToProps(String s,            String pairsep, String dlimiter, String type) {        HsqlProperties props       = new HsqlProperties();        int            currentpair = 0;        while (true) {            int nextpair = s.indexOf(dlimiter, currentpair);            if (nextpair == -1) {                nextpair = s.length();            }            // find value within the segment            int valindex = s.substring(0, nextpair).indexOf(pairsep,                                       currentpair);            if (valindex == -1) {                props.addError(NO_VALUE_FOR_KEY,                               s.substring(currentpair, nextpair).trim());            } else {                String key = s.substring(currentpair, valindex).trim();                String value = s.substring(valindex + pairsep.length(),                                           nextpair).trim();                if (type != null) {                    key = type + "." + key;                }                props.setProperty(key, value);            }            if (nextpair == s.length()) {                break;            }            currentpair = nextpair + dlimiter.length();        }        return props;    }    public Enumeration propertyNames() {        return stringProps.propertyNames();    }    public boolean isEmpty() {        return stringProps.isEmpty();    }    public String[] getErrorKeys() {        return errorKeys;    }/*    public static void main(String[] argv) {        HsqlProperties props1 = delimitedArgPairsToProps("-dbname.0", "=",            ";", "server");        HsqlProperties props2 = delimitedArgPairsToProps(            "filename.cvs;a=123 ;  b=\\delta ;c= another; derrorkey;", "=",            ";", "textdb");    }*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -