| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| PropertiesFactory | 
 | 
 | 2.6;2.6 | 
| 1 |  /** | |
| 2 |   * Copyright 2010 The Kuali Foundation Licensed under the | |
| 3 |   * Educational Community License, Version 2.0 (the "License"); you may | |
| 4 |   * not use this file except in compliance with the License. You may | |
| 5 |   * obtain a copy of the License at | |
| 6 |   * | |
| 7 |   * http://www.osedu.org/licenses/ECL-2.0 | |
| 8 |   * | |
| 9 |   * Unless required by applicable law or agreed to in writing, | |
| 10 |   * software distributed under the License is distributed on an "AS IS" | |
| 11 |   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express | |
| 12 |   * or implied. See the License for the specific language governing | |
| 13 |   * permissions and limitations under the License. | |
| 14 |   */ | |
| 15 | ||
| 16 |  package org.kuali.student.common.util; | |
| 17 | ||
| 18 |  import java.io.File; | |
| 19 |  import java.io.FileInputStream; | |
| 20 |  import java.io.FileNotFoundException; | |
| 21 |  import java.io.IOException; | |
| 22 |  import java.io.InputStream; | |
| 23 |  import java.net.URL; | |
| 24 |  import java.util.HashMap; | |
| 25 |  import java.util.Map; | |
| 26 |  import java.util.Properties; | |
| 27 | ||
| 28 |  /** | |
| 29 |   * A really freaking simple properties filter that returns a properties map for a subset of a properties file. Give this | |
| 30 |   * method the file name of the properties file, and then give it the prefix to filter on. The prefix gets a "." appended to | |
| 31 |   * it on filtering. | |
| 32 |   * <p> | |
| 33 |   * For example, if the properties are: | |
| 34 |   * <ul> | |
| 35 |   * <li>prop1.test1.value1</li> | |
| 36 |   * <li>prop1.test2.value2</li> | |
| 37 |   * <li>prop2.test1.value1</li> | |
| 38 |   * <li>prop1butnottherealprop1.test3.value3</li> | |
| 39 |   * </ul> | |
| 40 |   * Then filtering on "prop1" returns a map with values: | |
| 41 |   * <ul> | |
| 42 |   * <li>test1.value1</li> | |
| 43 |   * <li>test2.value2</li> | |
| 44 |   * </ul> | |
| 45 |   * </p> | |
| 46 |   *  | |
| 47 |   * @author Kuali Student Team (ks.team2@kuali.org) | |
| 48 |   */ | |
| 49 | public class PropertiesFactory { | |
| 50 | ||
| 51 | 0 |      Properties properties = new Properties(); | 
| 52 | ||
| 53 |      /** | |
| 54 |       * This constructs a PropertiesFactory. | |
| 55 |       *  | |
| 56 |       * @param filename | |
| 57 |       *            the filename of the properties file as determined by {@link ClassLoader#getSystemResource(String)}. | |
| 58 |       * @throws IOException | |
| 59 |       */ | |
| 60 | public PropertiesFactory(String filename) throws IOException { | |
| 61 | 0 |          this(ClassLoader.getSystemResource(filename).openStream()); | 
| 62 | 0 |      } | 
| 63 | ||
| 64 |      /** | |
| 65 |       * This constructs a PropertiesFactory. | |
| 66 |       *  | |
| 67 |       * @param file | |
| 68 |       *            the properties file | |
| 69 |       * @throws FileNotFoundException | |
| 70 |       * @throws IOException | |
| 71 |       */ | |
| 72 | public PropertiesFactory(File file) throws FileNotFoundException, IOException { | |
| 73 | 0 |          this(new FileInputStream(file)); | 
| 74 | 0 |      } | 
| 75 | ||
| 76 |      /** | |
| 77 |       * This constructs a PropertiesFactory. | |
| 78 |       *  | |
| 79 |       * @param in | |
| 80 |       *            an InputStream to read the properties from | |
| 81 |       * @throws IOException | |
| 82 |       */ | |
| 83 | 0 |      public PropertiesFactory(InputStream in) throws IOException { | 
| 84 |          try { | |
| 85 | 0 |              properties.load(in); | 
| 86 |          } finally { | |
| 87 | 0 |              if (in != null) { | 
| 88 |                  try { | |
| 89 | 0 |                      in.close(); | 
| 90 | 0 |                  } catch (IOException e) {} | 
| 91 | } | |
| 92 | } | |
| 93 | 0 |      } | 
| 94 | ||
| 95 |      /** | |
| 96 |       * This method filters the properties based on the prefix given as described above. The prefix will be appended with a | |
| 97 |       * "." delimiter and the returned values will not have either the prefix or the delimiter. | |
| 98 |       *  | |
| 99 |       * @param prefix | |
| 100 |       *            the prefix to filter on | |
| 101 |       * @return a map of the properties minus their prefix. This list is really String,Object, oh well. | |
| 102 |       */ | |
| 103 |      public Map<Object, Object> getProperties(String prefix) { | |
| 104 | 0 |          Map<Object, Object> map = new HashMap<Object, Object>(); | 
| 105 | 0 |          for (Object key : properties.keySet()) { | 
| 106 | 0 |              String realPrefix = prefix + "."; | 
| 107 | 0 |              String keyString = key.toString(); | 
| 108 | 0 |              if (keyString.startsWith(realPrefix)) { | 
| 109 | 0 |                  map.put(keyString.substring(realPrefix.length()), properties.get(key)); | 
| 110 | } | |
| 111 | 0 |          } | 
| 112 | ||
| 113 | 0 |          return map; | 
| 114 | } | |
| 115 | ||
| 116 |      /** | |
| 117 |       * A static version of the properties filter. <code><pre> | |
| 118 |       *     <bean id="test" class="org.kuali.student.common.util.PropertiesFactory" factory-method="getProperties" > | |
| 119 |       *         <constructor-arg value="file.properties"/> | |
| 120 |       *         <constructor-arg value="prefix1"/> | |
| 121 |       *     </bean> | |
| 122 |       * </pre></code> | |
| 123 |       *  | |
| 124 |       * @param filename | |
| 125 |       * @param prefix | |
| 126 |       *            the prefix to filter on | |
| 127 |       * @return a map of the properties minus their prefix. This list is really String,Object, oh well. | |
| 128 |       * @throws IOException | |
| 129 |       */ | |
| 130 | public static Map<Object, Object> getProperties(String filename, String prefix) throws IOException { | |
| 131 | 0 |          Properties props = new Properties(); | 
| 132 | 0 |          InputStream in = null; | 
| 133 | 0 |          URL propFile = ClassLoader.getSystemResource(filename); | 
| 134 |          // System.out.println("\t===PROPFACT: "+propFile); | |
| 135 |          try { | |
| 136 | 0 |              props.load(in = propFile.openStream()); | 
| 137 |          } finally { | |
| 138 | 0 |              if (in != null) { | 
| 139 |                  try { | |
| 140 | 0 |                      in.close(); | 
| 141 | 0 |                  } catch (IOException e) {} | 
| 142 | } | |
| 143 | } | |
| 144 | ||
| 145 | 0 |          Map<Object, Object> map = new HashMap<Object, Object>(); | 
| 146 | 0 |          for (Object key : props.keySet()) { | 
| 147 | 0 |              String realPrefix = prefix + "."; | 
| 148 | 0 |              String keyString = key.toString(); | 
| 149 | 0 |              if (keyString.startsWith(realPrefix)) { | 
| 150 | 0 |                  map.put(keyString.substring(realPrefix.length()), props.get(key)); | 
| 151 | } | |
| 152 | 0 |          } | 
| 153 | ||
| 154 | 0 |          return map; | 
| 155 | } | |
| 156 | ||
| 157 | } |