adding more base objects, started on stack layer. added config parser
[OpenSRF.git] / src / java / org / opensrf / util / Utils.java
1 package org.opensrf.util;
2
3 import java.io.*;
4 import java.util.*;
5
6 /**
7  * Collection of general, static utility methods
8  */
9 public class Utils {
10
11     /**
12      * Returns the string representation of a given file.
13      * @param filename The file to turn into a string
14      */
15     public static String fileToString(String filename) 
16             throws FileNotFoundException, IOException {
17
18         StringBuffer sb = new StringBuffer();
19         BufferedReader in = new BufferedReader(new FileReader(filename));
20         String str;
21         while ((str = in.readLine()) != null) 
22             sb.append(str);
23         in.close();
24         return sb.toString();
25     }
26
27
28     /**
29      * @see escape(String, StringBuffer)
30      */
31     public static String escape(String string) {
32         StringBuffer sb = new StringBuffer();
33         escape(string, sb);
34         return sb.toString();
35     }
36
37     /**
38      * Escapes a string.  Turns bare newlines into \n, etc.
39      * Escapes \n, \r, \t, ", \f
40      * Encodes non-ascii characters as UTF-8: \u0000
41      * @param string The string to escape
42      * @param sb The string buffer to write the escaped string into
43      */
44     public static void escape(String string, StringBuffer sb) {
45         int len = string.length();
46         String utf;
47         char c;
48         for( int i = 0; i < len; i++ ) {
49             c = string.charAt(i);
50             switch (c) {
51                 case '\\':
52                     sb.append("\\\\");
53                     break;
54                 case '"':
55                     sb.append("\\\"");
56                     break;
57                 case '\b':
58                     sb.append("\\b");
59                     break;
60                 case '\t':
61                     sb.append("\\t");
62                     break;
63                 case '\n':
64                     sb.append("\\n");
65                     break;
66                 case '\f':
67                     sb.append("\\f");
68                     break;
69                 case '\r':
70                     sb.append("\\r");
71                     break;
72                 default:
73                     if (c < 32 || c > 126 ) { 
74                         /* escape all non-ascii or control characters as UTF-8 */
75                         utf = "000" + Integer.toHexString(c);
76                         sb.append("\\u" + utf.substring(utf.length() - 4));
77                     } else {
78                         sb.append(c);
79                     }
80             }
81         }
82     }
83
84
85     /** 
86      * Descends into the map along the given XPATH-style path 
87      * and returns the object found there.
88      * @param path The XPATH-style path to search.  Path 
89      * components are separated by '/' characters.  
90      * Example:  /opensrf/loglevel
91      * @return The found object. 
92      */
93
94     public static Object findPath(Map map, String path) {
95         String keys[] = path.split("/", -1);
96         int i = 0;
97         if(path.charAt(0) == '/') i++;
98         for(; i < keys.length - 1; i++ ) 
99             map = (Map) map.get(keys[i]);
100
101         return map.get(keys[i]);
102     }
103 }
104
105
106