/* ===========================================================
* TradeManager : An application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.core.properties;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Properties;
/**
* Property utilities library. Contains methods that allow to read, write, check
* existence, merge and extract subsets of properties.
*
* @author : Simon Allen
*/
public class CollectionUtilities {
private CollectionUtilities() {
}
/**
* Method read.
*
* @param filepath
* String
* @return Properties
* @throws FileNotFoundException
*/
public static Properties read(String filepath) throws FileNotFoundException {
Properties rval;
BufferedInputStream bis = null;
try {
File file = new File(filepath);
bis = new BufferedInputStream(new FileInputStream(file));
rval = new Properties();
rval.load(bis);
return rval;
} catch (IOException e) {
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
}
bis = null;
}
}
// try relative to java.home
try {
File file = new File(System.getProperty("java.home") + File.separator + filepath);
bis = new BufferedInputStream(new FileInputStream(file));
rval = new Properties();
rval.load(bis);
return rval;
} catch (IOException e) {
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
}
bis = null;
}
}
throw new FileNotFoundException("Property file " + filepath + " not found");
}
/**
* Method write.
*
* @param filepath
* String
* @param theProperties
* Properties
* @throws IOException
*/
public static void write(String filepath, Properties theProperties) throws IOException { // put
// filepath
// as
// a
// comment
write(filepath, theProperties, filepath);
}
/**
* Method write.
*
* @param filepath
* String
* @param theProperties
* Properties
* @param propComments
* String
* @throws IOException
*/
public static void write(String filepath, Properties theProperties, String propComments) throws IOException {
BufferedOutputStream bos = null;
try {
File file = new File(filepath);
bos = new BufferedOutputStream(new FileOutputStream(file));
theProperties.store(bos, propComments);
} finally {
if (bos != null) {
bos.close();
bos = null;
}
}
}
/**
* Method checkProperties.
*
* @param myKeys
* String[]
* @param p
* Properties
* @throws MissingPropertiesException
*/
public static void checkProperties(String[] myKeys, Properties p) throws MissingPropertiesException {
if ((myKeys == null) || (p == null)) {
return;
}
MissingPropertiesException mpe = null;
for (int ii = 0; ii < myKeys.length; ii++) {
if (!p.containsKey(myKeys[ii])) {
if (mpe == null) {
mpe = new MissingPropertiesException();
}
mpe.addProperty(myKeys[ii]);
}
}
if (mpe != null) {
throw mpe;
}
return;
}
/**
* Return a Dictionary object which is a subset of the given Dictionary,
* where the tags all <b>begin</b> with the given tag.
*
* Hastables and Properties can be used as they are Dictionaries.
*
* @param superset
* .
*
*
* @param tag
* String
* @param result
* Dictionary<String,Object>
*/
public static void getSubset(Dictionary<String, Object> superset, String tag, Dictionary<String, Object> result) {
if ((result == null) || (tag == null) || (superset == null)) {
throw new IllegalArgumentException(
"Invalid arguments specified : superset = " + superset + " tag = " + tag + " result = " + result);
}
String key;
Enumeration<String> enumKey = superset.keys();
while (enumKey.hasMoreElements()) {
key = enumKey.nextElement();
if (key.startsWith(tag)) {
result.put(key, superset.get(key));
}
}
}
/**
* Combine two properties lists. All properties from source are copied to
* destination. <i>destination</i> is the result.
*
* Properties that exist in both source and destination will be overwritten
* with values from source.
*
* Hastables and Properties can be used as they are Dictionaries.
*
*
* @param source
* Dictionary<Object,Object>
* @param destination
* Dictionary<Object,Object>
*/
public static void copyOverwrite(Dictionary<Object, Object> source, Dictionary<Object, Object> destination) {
if ((destination == null) || (source == null)) {
throw new IllegalArgumentException(
"Invalid arguments specified : source = " + source + " destination = " + destination);
}
Object key;
Enumeration<Object> enumKey = source.keys();
while (enumKey.hasMoreElements()) {
key = enumKey.nextElement();
destination.put(key, source.get(key));
}
}
/**
* Returns a semicolumn separated list of keys and values in the dictionary.
*
* Here is an example of returned String "key1 = value1; key2 = value2;"
*
*
*
* @param dict
* Dictionary<Object,Object>
* @return : String.
*/
public static String dictionaryToString(Dictionary<Object, Object> dict) {
Enumeration<Object> keys = dict.keys();
Object key, value;
StringBuffer result = new StringBuffer();
while (keys.hasMoreElements()) {
key = keys.nextElement();
value = dict.get(key);
result.append(key.toString());
result.append(" = ");
result.append(value.toString());
result.append("; ");
}
return result.toString();
}
/**
* Method main.
*
* @param args
* String[]
*/
public static void main(String[] args) {
try {
Properties p = CollectionUtilities.read(args[0]);
System.out.println(p);
} catch (Exception ex) {
}
}
/**
* Method n2sort.
*
* @param index
* String[]
* @param asc
* boolean
*/
public static void n2sort(String[] index, boolean asc) {
for (int i = 0; i < index.length; i++) {
for (int j = i + 1; j < index.length; j++) {
if (compare(index[i], index[j], asc) == -1) {
swap(i, j, index);
}
}
}
}
/**
* Method swap.
*
* @param i
* int
* @param j
* int
* @param index
* String[]
*/
private static void swap(int i, int j, String[] index) {
String tmp = index[i];
index[i] = index[j];
index[j] = tmp;
}
/**
* Method compare.
*
* @param row1
* String
* @param row2
* String
* @param asc
* boolean
* @return int
*/
private static int compare(String row1, String row2, boolean asc) {
int result = row1.compareTo(row2);
int returnVal = 0;
if (result < 0) {
returnVal = -1;
} else if (result != 0) // result > 0
{
returnVal = 1;
} else {
returnVal = 0;
}
return asc ? -returnVal : returnVal;
}
}