View Javadoc
1 /* ==================================================================== 2 * License: 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * 3. The end-user documentation included with the redistribution, 17 * if any, must include the following acknowledgment: 18 * "This product includes software developed by 19 * Robert Half International (http://www.rhi.com/)." 20 * Alternately, this acknowledgment may appear in the software itself, 21 * if and wherever such third-party acknowledgments normally appear. 22 * 23 * 4. The names "Parc", "RHI", and "Robert Half International" must 24 * not be used to endorse or promote products derived from this 25 * software without prior written permission. For written 26 * permission, please contact pete.mckinstry@rhi.com. 27 * 28 * 5. Products derived from this software may not be called "PARC", 29 * nor may "PARC" appear in their name, without prior written 30 * permission of Robert Half International. 31 * 32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 43 * SUCH DAMAGE. 44 * ==================================================================== 45 * 46 */ 47 package com.rhi.architecture.resource; 48 49 50 import java.util.ArrayList; 51 import java.util.Collections; 52 import java.util.Enumeration; 53 import java.util.List; 54 import java.util.Properties; 55 import java.util.StringTokenizer; 56 57 /*** 58 * ResourceParserImpl.java 59 * 60 * @author <a href="mailto:pete_mckinstry@yahoo.com">Pete McKinstry</a> 61 * @copyright 2002, Robert Half Interational, All rights reserved. 62 * 63 * @version 1.0 64 */ 65 public class ResourceParserImpl implements ResourceParser { 66 67 /*** 68 * separator between resource entries in the config data 69 */ 70 public static final String SEP = "."; 71 72 /*** 73 * Constructor 74 * 75 * @see java.lang.Object#Object() 76 */ 77 public ResourceParserImpl() { 78 super(); 79 } 80 81 /*** 82 * Find Resource configuration entries and sort them into whatever 83 * order the ResouceContext should use for loading. 84 * 85 * @param p 86 * @return List 87 * @throws InitializationException 88 */ 89 public List getResources(Properties p) throws InitializationException { 90 ArrayList list = new ArrayList(); 91 92 Enumeration enum = p.propertyNames(); 93 94 while (enum.hasMoreElements()) { 95 String resourceName = (String) enum.nextElement(); 96 // Skip non-resources 97 if (!resourceName.startsWith("Resource.")) { 98 continue; 99 } 100 101 ResourceEntry resource = null; 102 103 try { 104 int firstSep = resourceName.indexOf(SEP); 105 char significantDigit = resourceName.charAt(firstSep + 1); 106 if (Character.isDigit(significantDigit) == false) { 107 resource = buildDefaultPriorityResource(resourceName, p); 108 } 109 else { 110 resource = buildResource(resourceName, p); 111 } 112 } 113 catch (IndexOutOfBoundsException e) { 114 throw new InitializationException(e); 115 } 116 117 if (resource != null) { 118 list.add(resource); 119 } 120 } 121 122 // sort into correct order. 123 Collections.sort(list); 124 125 return list; 126 } 127 128 /*** 129 * Build entries that follow the new naming standard of 130 * Resource.<priority>.<name> 131 * 132 * @param resourceName 133 * @param env 134 * @return ResourceEntry 135 * @throws InitializationException 136 */ 137 private ResourceEntry buildResource( 138 String resourceName, 139 Properties env) 140 throws InitializationException { 141 ResourceEntry resource = new ResourceEntry(); 142 143 // format is Resource.<priority>.<name> 144 StringTokenizer tokenizer = new StringTokenizer(resourceName, SEP); 145 if (tokenizer.countTokens() != 3) { 146 throw new InitializationException( 147 "Invalid Resource Entry = " + resourceName); 148 } 149 String firstPart = tokenizer.nextToken(); 150 String priorityString = tokenizer.nextToken(); 151 int priority = Integer.parseInt(priorityString); 152 String secondPart = tokenizer.nextToken(); 153 resource.setKey(firstPart + SEP + secondPart); 154 resource.setPriority(priority); 155 resource.setType(env.getProperty(resourceName).trim()); 156 return resource; 157 } 158 159 /*** 160 * Supports old model for backward compatibility. If no priority is 161 * specified, it will use 0 & load w/ other 0's... 162 * 163 * @param resourceName 164 * @param env 165 * @return ResourceEntry 166 */ 167 private ResourceEntry buildDefaultPriorityResource( 168 String resourceName, 169 Properties env) { 170 // old format is Resource.<name> 171 // priority is defaulted to 0. 172 ResourceEntry resource = new ResourceEntry(); 173 resource.setKey(resourceName); 174 resource.setType(env.getProperty(resourceName).trim()); 175 return resource; 176 } 177 178 }

This page was automatically generated by Maven