1 /* 2 * $Id: Resources.java 354330 2005-12-06 06:05:19Z niallp $ 3 * $Revision: 354330 $ 4 * $Date: 2005-12-06 06:05:19 +0000 (Tue, 06 Dec 2005) $ 5 * 6 * ==================================================================== 7 * 8 * Copyright 2003-2005 The Apache Software Foundation 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 * 22 */ 23 24 package org.apache.commons.resources; 25 26 import java.io.InputStream; 27 import java.io.Reader; 28 import java.io.Serializable; 29 import java.util.Iterator; 30 import java.util.Locale; 31 32 /** 33 * <p>An abstract representation of a set of internationalized resources, 34 * which are arbitrary objects identified by a unique String <code>key</code>. 35 * Localized versions of the resources (based on Locale parameter) 36 * can be retrieved in a variety of formats.</p> 37 * 38 * <p>When presented with an invalid <code>key</code> value, resource 39 * getter methods will behave differently based on the current value of 40 * the <code>returnNull</code> property for this {@link Resources} instance. 41 * If the property value is <code>true</code>, the getter method will return 42 * <code>null</code> (which may be ambiguous if <code>null</code> is a valid 43 * resource value). If the property value is <code>false</code>, a 44 * <code>ResourcesKeyException</code> will be thrown instead.</p> 45 * 46 * <p>Different implementations of the {@link Resources} interface support 47 * a variety of mechanisms for acquiring the data content represented by 48 * the keys. Examples could include property files, XML files, databases, web 49 * application resources, and other specialized approaches as desired.</p> 50 * 51 * <p>Different implementations of the {@link Resources} interface may apply 52 * different semantics to the use of the <code>locale</code> 53 * attribute used to perform localization. Consult 54 * the documentation for the specific {@link Resources} implementation you 55 * are using for the specific details of your implementation.</p> 56 * 57 * <p>Developers implementing {@link Resources} should extend the 58 * {@link org.apache.commons.resources.impl.ResourcesBase} class, 59 * and override the necessary methods, 60 * to shield themselves from future changes that may occur in this interface. 61 * 62 * @see org.apache.commons.resources.impl.ResourcesBase 63 * @see org.apache.commons.resources.impl.CollectionResourcesBase 64 * @see org.apache.commons.resources.impl.JDBCResources 65 * @see org.apache.commons.resources.impl.PropertyResources 66 * @see org.apache.commons.resources.impl.ResourceBundleResources 67 * @see org.apache.commons.resources.impl.WebappPropertyResources 68 * @see org.apache.commons.resources.impl.WebappXMLResources 69 * @see org.apache.commons.resources.impl.XMLResources 70 */ 71 public interface Resources extends Serializable { 72 73 74 // ------------------------------------------------------ Lifecycle Methods 75 76 77 /** 78 * <p>This must be called to initialize the data content of this 79 * {@link Resources} instance, before any of the <code>getXxx()</code> 80 * methods are called.</p> 81 * 82 * @exception ResourcesException if an error occurs during initialization 83 */ 84 public void init(); 85 86 87 /** 88 * <p>This method must be called when the manager of this resource 89 * decides that it's no longer needed. After this method is called, 90 * no further calls to any of the <code>getXxx()</code> methods are 91 * allowed.</p> 92 * 93 * @exception ResourcesException if an error occurs during finalization 94 */ 95 public void destroy(); 96 97 98 // ------------------------------------------------------------- Properties 99 100 101 /** 102 * <p>Return an <code>Iterator</code> over the defined keys in this 103 * {@link Resources} instance.</p> 104 * 105 * @return The keys contained in this resources instance. 106 */ 107 public Iterator getKeys(); 108 109 110 /** 111 * <p>Return the logical name of this {@link Resources} instance.</p> 112 * 113 * @return The name of this resources instance. 114 */ 115 public String getName(); 116 117 118 /** 119 * <p>Return <code>true</code> if resource getter methods will return 120 * <code>null</code> instead of throwing an exception on invalid 121 * key values.</p> 122 * @return <code>true</code> if null is returned for invalid key values. 123 */ 124 public boolean isReturnNull(); 125 126 127 /** 128 * <p>Set a flag determining whether resource getter methods should 129 * return <code>null</code> instead of throwing an exception on 130 * invalid key values.</p> 131 * 132 * @param returnNull The new flag value 133 */ 134 public void setReturnNull(boolean returnNull); 135 136 137 // ---------------------------------------------- Content Retrieval Methods 138 139 140 /** 141 * <p>Return the content for the specified <code>key</code> as a 142 * byte array, localized based on the specified <code>locale</code>. 143 * </p> 144 * 145 * @param key Identifier for the requested content 146 * @param locale Locale with which to localize retrieval, 147 * or <code>null</code> for the default Locale 148 * @return content for a specified key. 149 * 150 * @exception ResourcesException if an error occurs retrieving or 151 * returning the requested content 152 * @exception ResourcesKeyException if no value for the specified 153 * key was found, and <code>isReturnNull()</code> returns 154 * <code>false</code> 155 */ 156 public byte[] getBytes(String key, Locale locale); 157 158 159 /** 160 * <p>Return the content for the specified <code>key</code> as an 161 * InputStream, localized based on the specified <code>locale</code>. 162 * </p> 163 * 164 * @param key Identifier for the requested content 165 * @param locale Locale with which to localize retrieval, 166 * or <code>null</code> for the default Locale 167 * @return content for a specified key. 168 * 169 * @exception ResourcesException if an error occurs retrieving or 170 * returning the requested content 171 * @exception ResourcesKeyException if no value for the specified 172 * key was found, and <code>isReturnNull()</code> returns 173 * <code>false</code> 174 */ 175 public InputStream getInputStream(String key, Locale locale); 176 177 178 /** 179 * <p>Return the content for the specified <code>key</code> as an 180 * Object, localized based on the specified <code>locale</code>. 181 * </p> 182 * 183 * @param key Identifier for the requested content 184 * @param locale Locale with which to localize retrieval, 185 * or <code>null</code> for the default Locale 186 * @return content for a specified key. 187 * 188 * @exception ResourcesException if an error occurs retrieving or 189 * returning the requested content 190 * @exception ResourcesKeyException if no value for the specified 191 * key was found, and <code>isReturnNull()</code> returns 192 * <code>false</code> 193 */ 194 public Object getObject(String key, Locale locale); 195 196 197 /** 198 * <p>Return the content for the specified <code>key</code> as a 199 * Reader, localized based on the specified <code>locale</code>. 200 * </p> 201 * 202 * @param key Identifier for the requested content 203 * @param locale Locale with which to localize retrieval, 204 * or <code>null</code> for the default Locale 205 * @return content for a specified key. 206 * 207 * @exception ResourcesException if an error occurs retrieving or 208 * returning the requested content 209 * @exception ResourcesKeyException if no value for the specified 210 * key was found, and <code>isReturnNull()</code> returns 211 * <code>false</code> 212 */ 213 public Reader getReader(String key, Locale locale); 214 215 216 /** 217 * <p>Return the content for the specified <code>key</code> as a 218 * String, localized based on the specified <code>locale</code>. 219 * </p> 220 * 221 * @param key Identifier for the requested content 222 * @param locale Locale with which to localize retrieval, 223 * or <code>null</code> for the default Locale 224 * @return content for a specified key. 225 * 226 * @exception ResourcesException if an error occurs retrieving or 227 * returning the requested content 228 * @exception ResourcesKeyException if no value for the specified 229 * key was found, and <code>isReturnNull()</code> returns 230 * <code>false</code> 231 */ 232 public String getString(String key, Locale locale); 233 234 235 } 236 237