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