1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.tiles.definition.dao;
22
23 import java.util.ArrayList;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.Locale;
27 import java.util.Map;
28
29 import org.apache.tiles.Definition;
30 import org.apache.tiles.request.ApplicationContext;
31 import org.apache.tiles.request.ApplicationResource;
32 import org.apache.tiles.request.locale.LocaleUtil;
33
34
35
36
37
38
39
40
41 public class LocaleUrlDefinitionDAO extends BaseLocaleUrlDefinitionDAO {
42
43 public LocaleUrlDefinitionDAO(ApplicationContext applicationContext) {
44 super(applicationContext);
45 }
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public Definition getDefinition(String name, Locale customizationKey) {
61 Map<String, Definition> defsMap = getDefinitions(customizationKey);
62 return defsMap.get(name);
63 }
64
65
66 public Map<String, Definition> getDefinitions(Locale customizationKey) {
67 ArrayList<Locale> postfixes = computeLocales(customizationKey);
68 Map<String, Definition> localeDefsMap = new HashMap<String, Definition>();
69
70 for (Locale postfix : postfixes) {
71
72 for (ApplicationResource resource : sources) {
73 ApplicationResource newResource = applicationContext.getResource(resource, postfix);
74 if (newResource != null) {
75 Map<String, Definition> defsMap = loadDefinitionsFromResource(newResource);
76 if (defsMap != null) {
77 localeDefsMap.putAll(defsMap);
78 }
79 }
80 }
81 }
82 return localeDefsMap;
83 }
84
85
86
87
88
89
90 private ArrayList<Locale> computeLocales(Locale customizationKey) {
91 Locale postfix;
92 if(customizationKey == null) {
93 postfix = Locale.ROOT;
94 } else {
95 postfix = customizationKey;
96 }
97 ArrayList<Locale> postfixes = new ArrayList<Locale>();
98 while (postfix != null) {
99 postfixes.add(postfix);
100 postfix = LocaleUtil.getParentLocale(postfix);
101 }
102 Collections.reverse(postfixes);
103 return postfixes;
104 }
105 }