KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > regis > util > Utils


1 package org.sapia.regis.util;
2
3 import java.io.BufferedReader JavaDoc;
4 import java.io.File JavaDoc;
5 import java.io.FileInputStream JavaDoc;
6 import java.io.FileNotFoundException JavaDoc;
7 import java.io.IOException JavaDoc;
8 import java.io.InputStream JavaDoc;
9 import java.io.InputStreamReader JavaDoc;
10 import java.net.URL JavaDoc;
11 import java.util.Enumeration JavaDoc;
12 import java.util.Iterator JavaDoc;
13 import java.util.Map JavaDoc;
14 import java.util.Properties JavaDoc;
15
16 import org.sapia.util.text.SystemContext;
17 import org.sapia.util.text.TemplateContextIF;
18 import org.sapia.util.text.TemplateElementIF;
19 import org.sapia.util.text.TemplateException;
20 import org.sapia.util.text.TemplateFactory;
21
22 public class Utils {
23   
24   public static void copyMapToProps(Properties JavaDoc target, Map JavaDoc src){
25     Iterator JavaDoc itr = src.entrySet().iterator();
26     while(itr.hasNext()){
27       String JavaDoc key = (String JavaDoc)itr.next();
28       target.setProperty(key, (String JavaDoc)src.get(key));
29     }
30   }
31   
32   public static void copyPropsToMap(Map JavaDoc target, Properties JavaDoc src){
33     Enumeration JavaDoc en = src.propertyNames();
34     while(en.hasMoreElements()){
35       String JavaDoc key = (String JavaDoc)en.nextElement();
36       target.put(key, src.getProperty(key));
37     }
38   }
39
40   public static void loadProps(Class JavaDoc clazz, Properties JavaDoc props, String JavaDoc resource) throws FileNotFoundException JavaDoc, IOException JavaDoc{
41     InputStream JavaDoc is = load(clazz, resource);
42     try{
43       props.load(is);
44       Properties JavaDoc newProps = replaceVars(new SystemContext(), props);
45       Enumeration JavaDoc names = newProps.propertyNames();
46       while(names.hasMoreElements()){
47         String JavaDoc name = (String JavaDoc)names.nextElement();
48         props.setProperty(name, newProps.getProperty(name));
49       }
50     }finally{
51       is.close();
52     }
53   }
54   
55   public static InputStream JavaDoc load(Class JavaDoc clazz, String JavaDoc resource) throws FileNotFoundException JavaDoc, IOException JavaDoc{
56     InputStream JavaDoc is = null;
57     try{
58       is = new FileInputStream JavaDoc(new File JavaDoc(resource));
59     }catch(IOException JavaDoc e){
60       //noop
61
}
62     if(is == null){
63       try{
64         is = new URL JavaDoc(resource).openStream();
65       }catch(IOException JavaDoc e){
66         //noop
67
}
68     }
69     if(is == null){
70       is = clazz.getClassLoader().getResourceAsStream(resource);
71     }
72     if(is == null){
73       is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
74     }
75     if(is == null){
76       throw new FileNotFoundException JavaDoc(resource);
77     }
78     return is;
79   }
80
81   public static String JavaDoc loadAsString(InputStream JavaDoc is) throws IOException JavaDoc, Exception JavaDoc{
82     BufferedReader JavaDoc reader = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(is));
83     String JavaDoc line;
84     StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
85     while((line = reader.readLine()) != null){
86       buf.append(line);
87       buf.append(System.getProperty("line.separator"));
88     }
89     is.close();
90     return buf.toString();
91   }
92   
93   /**
94    * Replaces the property values in the given <code>Properties</code>
95    * instance with the variable values provided by the given context.
96    * <p>
97    * Property values may hold variables, as illustrated by the following example:
98    * <pre>
99    * some-property=${some-variable} and some-value
100    * </pre>
101    *
102    * @param ctx a <code>TemplateContextIF</code> holding variables.
103    * @param props a <code>Properties</code> whose values should be interpolated.
104    * @return the resulting <code>Properties</code> (with interpolated values).
105    * @throws TemplateException an error occurs while performing the replacement.
106    */

107   public static Properties JavaDoc replaceVars(TemplateContextIF ctx,
108       Properties JavaDoc props){
109     return doReplaceVars(ctx, props, true);
110   }
111   
112   public static Properties JavaDoc doReplaceVars(TemplateContextIF ctx,
113       Properties JavaDoc props, boolean secondPass){
114     Enumeration JavaDoc names = props.propertyNames();
115     Properties JavaDoc result = new Properties JavaDoc(props);
116     TemplateFactory fac = new TemplateFactory();
117     PropertiesContext child = new PropertiesContext(props, ctx);
118     while(names.hasMoreElements()){
119       String JavaDoc name = (String JavaDoc)names.nextElement();
120       String JavaDoc value = props.getProperty(name);
121       if(value != null){
122         TemplateElementIF elem = fac.parse(value);
123         try{
124           value = elem.render(child);
125         }catch(TemplateException e){
126           //noop
127
}
128         result.setProperty(name, value);
129       }
130     }
131     if(secondPass){
132       return doReplaceVars(ctx, result, false);
133     }
134     return result;
135   }
136   
137   public static void deleteRecurse(File JavaDoc f){
138     if(f.isDirectory()){
139       File JavaDoc[] files = f.listFiles();
140       if(files != null){
141         for(int i = 0; i < files.length; i++){
142           if(files[i].isDirectory()){
143             deleteRecurse(files[i]);
144           }
145           else{
146             files[i].delete();
147           }
148         }
149       }
150       f.delete();
151     }
152     else{
153       f.delete();
154     }
155   }
156 }
157
Popular Tags