001 /*
002 * Copyright 2008-2014 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package griffon.core.resources;
017
018 import javax.annotation.Nonnull;
019 import javax.annotation.Nullable;
020 import java.util.List;
021 import java.util.Locale;
022 import java.util.Map;
023
024 /**
025 * Interface for resolving resources, with support for the parameterization and internationalization of such resources.
026 *
027 * @author Andres Almiray
028 * @author Alexander Klein
029 * @since 2.0.0
030 */
031 public interface ResourceResolver {
032 /**
033 * "@["
034 */
035 String REF_KEY_START = "@[";
036
037 /**
038 * "]"
039 */
040 String REF_KEY_END = "]";
041
042 /**
043 * Try to resolve the resource.
044 *
045 * @param key Key to lookup, such as 'sample.SampleModel.icon'
046 * @return The resolved resource at the given key for the default locale
047 * @throws NoSuchResourceException if no resource is found
048 */
049 @Nonnull
050 Object resolveResource(@Nonnull String key) throws NoSuchResourceException;
051
052 /**
053 * Try to resolve the resource.
054 *
055 * @param key Key to lookup, such as 'sample.SampleModel.icon'
056 * @param locale Locale in which to lookup
057 * @return The resolved resource at the given key for the given locale
058 * @throws NoSuchResourceException if no resource is found
059 */
060 @Nonnull
061 Object resolveResource(@Nonnull String key, @Nonnull Locale locale) throws NoSuchResourceException;
062
063 /**
064 * Try to resolve the resource.
065 *
066 * @param key Key to lookup, such as 'sample.SampleModel.icon'
067 * @param args Arguments that will be filled in for params within the resource (params look like "{0}" within a
068 * resource, but this might differ between implementations), or null if none.
069 * @return The resolved resource at the given key for the default locale
070 * @throws NoSuchResourceException if no resource is found
071 */
072 @Nonnull
073 Object resolveResource(@Nonnull String key, @Nonnull Object[] args) throws NoSuchResourceException;
074
075 /**
076 * Try to resolve the resource.
077 *
078 * @param key Key to lookup, such as 'sample.SampleModel.icon'
079 * @param args Arguments that will be filled in for params within the resource (params look like "{0}" within a
080 * resource, but this might differ between implementations), or null if none.
081 * @param locale Locale in which to lookup
082 * @return The resolved resource at the given key for the given locale
083 * @throws NoSuchResourceException if no resource is found
084 */
085 @Nonnull
086 Object resolveResource(@Nonnull String key, @Nonnull Object[] args, @Nonnull Locale locale) throws NoSuchResourceException;
087
088 /**
089 * Try to resolve the resource.
090 *
091 * @param key Key to lookup, such as 'sample.SampleModel.icon'
092 * @param args Arguments that will be filled in for params within the resource (params look like "{0}" within a
093 * resource, but this might differ between implementations), or null if none.
094 * @return The resolved resource at the given key for the default locale
095 * @throws NoSuchResourceException if no resource is found
096 */
097 @Nonnull
098 Object resolveResource(@Nonnull String key, @Nonnull List<?> args) throws NoSuchResourceException;
099
100 /**
101 * Try to resolve the resource.
102 *
103 * @param key Key to lookup, such as 'sample.SampleModel.icon'
104 * @param args Arguments that will be filled in for params within the resource (params look like "{0}" within a
105 * resource, but this might differ between implementations), or null if none.
106 * @param locale Locale in which to lookup
107 * @return The resolved resource at the given key for the given locale
108 * @throws NoSuchResourceException if no resource is found
109 */
110 @Nonnull
111 Object resolveResource(@Nonnull String key, @Nonnull List<?> args, @Nonnull Locale locale) throws NoSuchResourceException;
112
113 /**
114 * Try to resolve the resource. Return default resource if no resource was found.
115 *
116 * @param key Key to lookup, such as 'sample.SampleModel.icon'
117 * @param defaultValue Message to return if the lookup fails
118 * @return The resolved resource at the given key for the default locale
119 */
120 @Nullable
121 Object resolveResource(@Nonnull String key, @Nullable Object defaultValue);
122
123 /**
124 * Try to resolve the resource. Return default resource if no resource was found.
125 *
126 * @param key Key to lookup, such as 'sample.SampleModel.icon'
127 * @param locale Locale in which to lookup
128 * @param defaultValue Message to return if the lookup fails
129 * @return The resolved resource at the given key for the given locale
130 */
131 @Nullable
132 Object resolveResource(@Nonnull String key, @Nonnull Locale locale, @Nullable Object defaultValue);
133
134 /**
135 * Try to resolve the resource. Return default resource if no resource was found.
136 *
137 * @param key Key to lookup, such as 'sample.SampleModel.icon'
138 * @param args Arguments that will be filled in for params within the resource (params look like "{0}"
139 * within a resource, but this might differ between implementations), or null if none.
140 * @param defaultValue Message to return if the lookup fails
141 * @return The resolved resource at the given key for the default locale
142 */
143 @Nullable
144 Object resolveResource(@Nonnull String key, @Nonnull Object[] args, @Nullable Object defaultValue);
145
146 /**
147 * Try to resolve the resource. Return default resource if no resource was found.
148 *
149 * @param key Key to lookup, such as 'sample.SampleModel.icon'
150 * @param args Arguments that will be filled in for params within the resource (params look like "{0}"
151 * within a resource, but this might differ between implementations), or null if none.
152 * @param locale Locale in which to lookup
153 * @param defaultValue Message to return if the lookup fails
154 * @return The resolved resource at the given key for the given locale
155 */
156 @Nullable
157 Object resolveResource(@Nonnull String key, @Nonnull Object[] args, @Nonnull Locale locale, @Nullable Object defaultValue);
158
159 /**
160 * Try to resolve the resource. Return default resource if no resource was found.
161 *
162 * @param key Key to lookup, such as 'sample.SampleModel.icon'
163 * @param args Arguments that will be filled in for params within the resource (params look like "{0}"
164 * within a resource, but this might differ between implementations), or null if none.
165 * @param defaultValue Message to return if the lookup fails
166 * @return The resolved resource at the given key for the default locale
167 */
168 @Nullable
169 Object resolveResource(@Nonnull String key, @Nonnull List<?> args, @Nullable Object defaultValue);
170
171 /**
172 * Try to resolve the resource. Return default resource if no resource was found.
173 *
174 * @param key Key to lookup, such as 'sample.SampleModel.icon'
175 * @param args Arguments that will be filled in for params within the resource (params look like "{0}"
176 * within a resource, but this might differ between implementations), or null if none.
177 * @param locale Locale in which to lookup
178 * @param defaultValue Message to return if the lookup fails
179 * @return The resolved resource at the given key for the given locale
180 */
181 @Nullable
182 Object resolveResource(@Nonnull String key, @Nonnull List<?> args, @Nonnull Locale locale, @Nullable Object defaultValue);
183
184 /**
185 * Try to resolve the resource.
186 *
187 * @param key Key to lookup, such as 'sample.SampleModel.icon'
188 * @param args Arguments that will be filled in for params within the resource (params look like "{:key}"
189 * within a resource, but this might differ between implementations), or null if none.
190 * @return The resolved resource at the given key for the default locale
191 * @throws NoSuchResourceException if no resource is found
192 */
193 @Nonnull
194 Object resolveResource(@Nonnull String key, @Nonnull Map<String, Object> args) throws NoSuchResourceException;
195
196 /**
197 * Try to resolve the resource.
198 *
199 * @param key Key to lookup, such as 'sample.SampleModel.icon'
200 * @param args Arguments that will be filled in for params within the resource (params look like "{:key}"
201 * within a resource, but this might differ between implementations), or null if none.
202 * @param locale Locale in which to lookup
203 * @return The resolved resource at the given key for the given locale
204 * @throws NoSuchResourceException if no resource is found
205 */
206 @Nonnull
207 Object resolveResource(@Nonnull String key, @Nonnull Map<String, Object> args, @Nonnull Locale locale) throws NoSuchResourceException;
208
209 /**
210 * Try to resolve the resource. Return default resource if no resource was found.
211 *
212 * @param key Key to lookup, such as 'sample.SampleModel.icon'
213 * @param args Arguments that will be filled in for params within the resource (params look like "{:key}"
214 * within a resource, but this might differ between implementations), or null if none.
215 * @param defaultValue Message to return if the lookup fails
216 * @return The resolved resource at the given key for the default locale
217 */
218 @Nullable
219 Object resolveResource(@Nonnull String key, @Nonnull Map<String, Object> args, @Nullable Object defaultValue);
220
221 /**
222 * Try to resolve the resource. Return default resource if no resource was found.
223 *
224 * @param key Key to lookup, such as 'sample.SampleModel.icon'
225 * @param args Arguments that will be filled in for params within the resource (params look like "{:key}"
226 * within a resource, but this might differ between implementations), or null if none.
227 * @param locale Locale in which to lookup
228 * @param defaultValue Message to return if the lookup fails
229 * @return The resolved resource at the given key for the given locale
230 */
231 @Nullable
232 Object resolveResource(@Nonnull String key, @Nonnull Map<String, Object> args, @Nonnull Locale locale, @Nullable Object defaultValue);
233
234 /**
235 * <p>Resolve a resource given a key and a Locale.</p>
236 * <p>
237 * This method should use the default Locale if the locale argument is null. The {@code key} argument may refer to
238 * another key if the resolved value results in a {@code CharSequence} that begins with "@[" and ends with "]". In this
239 * case the method will use the enclosed value as the next key to be resolved. For example, given the following key/value
240 * definitions
241 * <p/>
242 * <pre>
243 * some.key = Hello {0}
244 * other.key = @[some.key]
245 * </pre>
246 * <p/>
247 * Evaluating the keys results in
248 * <p/>
249 * <pre>
250 * assert resolveResourceValue('some.key', Locale.default) == 'Hello {0}'
251 * assert resolveResourceValue('other.key', Locale.default) == 'Hello {0}'
252 * </pre>
253 * <p/>
254 * </p>
255 *
256 * @param key Key to lookup, such as 'sample.SampleModel.icon'
257 * @param locale Locale in which to lookup
258 * @return the resolved resource value at the given key for the given locale
259 * @throws NoSuchResourceException if no message is found
260 */
261 @Nonnull
262 Object resolveResourceValue(@Nonnull String key, @Nonnull Locale locale) throws NoSuchResourceException;
263
264 /**
265 * Formats the given resource using supplied args to substitute placeholders.
266 *
267 * @param resource The resource following a predefined format.
268 * @param args Arguments that will be filled in for params within the resource (params look like "{0}"
269 * within a resource, but this might differ between implementations), or null if none.
270 * @return the formatted resource with all matching placeholders with their substituted values.
271 */
272 @Nonnull
273 String formatResource(@Nonnull String resource, @Nonnull List<?> args);
274
275 /**
276 * Formats the given resource using supplied args to substitute placeholders.
277 *
278 * @param resource The resource following a predefined format.
279 * @param args Arguments that will be filled in for params within the resource (params look like "{0}"
280 * within a resource, but this might differ between implementations), or null if none.
281 * @return the formatted resource with all matching placeholders with their substituted values.
282 */
283 @Nonnull
284 String formatResource(@Nonnull String resource, @Nonnull Object[] args);
285
286 /**
287 * Formats the given resource using supplied args to substitute placeholders.
288 *
289 * @param resource The resource following a predefined format.
290 * @param args Arguments that will be filled in for params within the resource (params look like "{:key}"
291 * within a resource, but this might differ between implementations), or null if none.
292 * @return the formatted resource with all matching placeholders with their substituted values.
293 */
294 @Nonnull
295 String formatResource(@Nonnull String resource, @Nonnull Map<String, Object> args);
296 }
|