/*
 * Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
 * and the EPL 1.0 (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.util;

import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.TreeMap;
import java.util.Vector;
import org.h2.store.fs.FileUtils;

Sorted properties file. This implementation requires that store() internally calls keys().
/** * Sorted properties file. * This implementation requires that store() internally calls keys(). */
public class SortedProperties extends Properties { private static final long serialVersionUID = 1L; @Override public synchronized Enumeration<Object> keys() { Vector<String> v = new Vector<>(); for (Object o : keySet()) { v.add(o.toString()); } Collections.sort(v); return new Vector<Object>(v).elements(); }
Get a boolean property value from a properties object.
Params:
  • prop – the properties object
  • key – the key
  • def – the default value
Returns:the value if set, or the default value if not
/** * Get a boolean property value from a properties object. * * @param prop the properties object * @param key the key * @param def the default value * @return the value if set, or the default value if not */
public static boolean getBooleanProperty(Properties prop, String key, boolean def) { try { return Utils.parseBoolean(prop.getProperty(key, null), def, true); } catch (IllegalArgumentException e) { e.printStackTrace(); return def; } }
Get an int property value from a properties object.
Params:
  • prop – the properties object
  • key – the key
  • def – the default value
Returns:the value if set, or the default value if not
/** * Get an int property value from a properties object. * * @param prop the properties object * @param key the key * @param def the default value * @return the value if set, or the default value if not */
public static int getIntProperty(Properties prop, String key, int def) { String value = prop.getProperty(key, Integer.toString(def)); try { return Integer.decode(value); } catch (Exception e) { e.printStackTrace(); return def; } }
Get a string property value from a properties object.
Params:
  • prop – the properties object
  • key – the key
  • def – the default value
Returns:the value if set, or the default value if not
/** * Get a string property value from a properties object. * * @param prop the properties object * @param key the key * @param def the default value * @return the value if set, or the default value if not */
public static String getStringProperty(Properties prop, String key, String def) { return prop.getProperty(key, def); }
Load a properties object from a file.
Params:
  • fileName – the name of the properties file
Returns:the properties object
/** * Load a properties object from a file. * * @param fileName the name of the properties file * @return the properties object */
public static synchronized SortedProperties loadProperties(String fileName) throws IOException { SortedProperties prop = new SortedProperties(); if (FileUtils.exists(fileName)) { try (InputStream in = FileUtils.newInputStream(fileName)) { prop.load(in); } } return prop; }
Store a properties file. The header and the date is not written.
Params:
  • fileName – the target file name
/** * Store a properties file. The header and the date is not written. * * @param fileName the target file name */
public synchronized void store(String fileName) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); store(out, null); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); InputStreamReader reader = new InputStreamReader(in, StandardCharsets.ISO_8859_1); LineNumberReader r = new LineNumberReader(reader); Writer w; try { w = new OutputStreamWriter(FileUtils.newOutputStream(fileName, false)); } catch (Exception e) { throw new IOException(e.toString(), e); } try (PrintWriter writer = new PrintWriter(new BufferedWriter(w))) { while (true) { String line = r.readLine(); if (line == null) { break; } if (!line.startsWith("#")) { writer.print(line + "\n"); } } } }
Convert the map to a list of line in the form key=value.
Returns:the lines
/** * Convert the map to a list of line in the form key=value. * * @return the lines */
public synchronized String toLines() { StringBuilder buff = new StringBuilder(); for (Entry<Object, Object> e : new TreeMap<>(this).entrySet()) { buff.append(e.getKey()).append('=').append(e.getValue()).append('\n'); } return buff.toString(); }
Convert a String to a map.
Params:
  • s – the string
Returns:the map
/** * Convert a String to a map. * * @param s the string * @return the map */
public static SortedProperties fromLines(String s) { SortedProperties p = new SortedProperties(); for (String line : StringUtils.arraySplit(s, '\n', true)) { int idx = line.indexOf('='); if (idx > 0) { p.put(line.substring(0, idx), line.substring(idx + 1)); } } return p; } }