001package ca.uhn.hl7v2.util; 002 003import java.io.BufferedReader; 004import java.io.FileReader; 005import java.io.IOException; 006import java.util.Enumeration; 007import java.util.HashSet; 008import java.util.Properties; 009import java.util.Set; 010import java.util.StringTokenizer; 011 012import org.slf4j.Logger; 013import org.slf4j.LoggerFactory; 014 015/** 016 * Loads system properties from a file. This is intended as a convenient way 017 * of setting multiple system properties. 018 * @deprecated 019 */ 020public class PropertyLoader { 021 022 private static final Logger log = LoggerFactory.getLogger(PropertyLoader.class); 023 private static Set<String> files = new HashSet<String>(); 024 025 private PropertyLoader() { 026 } 027 028 /** 029 * Calls <code>loadProperties()</code> if it has not been called before for 030 * the given file. If the given property file has already been loaded, this 031 * method does nothing. 032 */ 033 public static void loadOnce(String propertyFileName) throws IOException { 034 if (!files.contains(propertyFileName)) { 035 loadProperties(propertyFileName); 036 files.add(propertyFileName); 037 } 038 } 039 040 /** 041 * Reads given "property file" and sets system properties accordingly. In the property file, 042 * there should be one property per line. A line should consist of 1) the fully qualified property name, 043 * 2) one or more tabs, and 3) the value (everything after the first group of tabs and before any subsequent 044 * groups will be considered "the value"). 045 * Lines in the file are consdidered comments if they begin with "%". 046 */ 047 public static void loadProperties(String propertyFileName) throws IOException { 048 049 //open stream from given property file 050 BufferedReader in = null; 051 in = new BufferedReader(new FileReader(propertyFileName)); 052 053 String line, key, value, delim = "\t"; 054 StringTokenizer tok; 055 while ((line = in.readLine()) != null) { 056 //ignore comments 057 if (!line.startsWith("%")) { 058 key = null; value = null; 059 060 //get property key and value 061 tok = new StringTokenizer(line, delim, false); 062 if (tok.hasMoreTokens()) key = tok.nextToken(); 063 if (tok.hasMoreTokens()) value = tok.nextToken(); 064 065 //set property 066 if (key != null && value != null) { 067 System.setProperty(key, value); 068 log.debug("Setting system property {} to {}", key, value); 069 } 070 } 071 } 072 in.close(); 073 } 074 075 /** Test harness */ 076 public static void main(String args[]) { 077 if (args.length != 1) { 078 System.out.println("Usage: PropertyLoader file"); 079 System.exit(1); 080 } 081 082 try { 083 System.setProperty("ca.uhn.hl7v2.util.status.level", "VERBOSE"); 084 System.out.println("Loading properties in file " + args[0]); 085 loadOnce(args[0]); 086 System.out.println("Loading properties in file " + args[0] + " again"); 087 loadOnce(args[0]); 088 } catch (Exception e) { 089 e.printStackTrace(); 090 } 091 092 Properties p = System.getProperties(); 093 Enumeration<?> en = p.propertyNames(); 094 while (en.hasMoreElements()) { 095 String key = (String) en.nextElement(); 096 System.out.println("Property: " + key + " Value: " + System.getProperty(key)); 097 } 098 } 099}