1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.om.page;
18
19 import java.util.Collection;
20 import java.util.HashMap;
21 import java.util.Iterator;
22 import java.util.Locale;
23 import java.util.Map;
24
25 import org.apache.jetspeed.om.common.LocalizedField;
26 import org.apache.jetspeed.om.impl.GenericMetadataImpl;
27 import org.apache.jetspeed.util.ArgUtil;
28
29 /***
30 * @author <a href="mailto:jford@apache.org">Jeremy Ford</a>
31 * @version $Id: PageMetadataImpl.java 516448 2007-03-09 16:25:47Z ate $
32 */
33 public class PageMetadataImpl extends GenericMetadataImpl
34 {
35 private Class fieldImplClass = PageLocalizedFieldImpl.class;
36
37 public PageMetadataImpl()
38 {
39 }
40
41 public PageMetadataImpl(Class fieldImplClass)
42 {
43 this();
44 this.fieldImplClass = fieldImplClass;
45 }
46
47 /***
48 * localizedText - cached text metadata
49 */
50 private Map localizedText;
51
52
53
54
55 public LocalizedField createLocalizedField()
56 {
57 try
58 {
59 return (LocalizedField)fieldImplClass.newInstance();
60 }
61 catch (Exception e)
62 {
63 throw new RuntimeException("Failed to create LocalizedField object: " + fieldImplClass.getName(), e);
64 }
65 }
66
67 /***
68 * getText - get localized text from metadata
69 *
70 * @param name text name
71 * @param locale preferred locale
72 * @return localized text or null if not available
73 */
74 public String getText(String name, Locale locale)
75 {
76
77 ArgUtil.assertNotNull(String.class, name, this, "getText(String, Locale)");
78 ArgUtil.assertNotNull(Locale.class, locale, this, "getText(String, Locale)");
79
80
81 Map namedLocalizedText = (Map)((localizedText != null) ? localizedText.get(name) : null);
82 if ((namedLocalizedText == null) && (getFields() != null))
83 {
84 Collection fields = getFields(name);
85 if (fields != null)
86 {
87 if (localizedText == null)
88 {
89 localizedText = new HashMap(getFields().size());
90 }
91 namedLocalizedText = new HashMap(getFields().size());
92 localizedText.put(name, namedLocalizedText);
93 Iterator fieldsItr = fields.iterator();
94 while (fieldsItr.hasNext())
95 {
96 LocalizedField field = (LocalizedField)fieldsItr.next();
97 namedLocalizedText.put(field.getLocale(), field);
98 }
99 }
100 }
101
102
103 if (namedLocalizedText != null)
104 {
105
106 if (namedLocalizedText.containsKey(locale) )
107 {
108 return ((LocalizedField)namedLocalizedText.get(locale)).getValue().trim();
109 }
110
111 Locale languageOnly = new Locale(locale.getLanguage());
112 if (namedLocalizedText.containsKey(languageOnly))
113 {
114 return ((LocalizedField)namedLocalizedText.get(languageOnly)).getValue().trim();
115 }
116 }
117 return null;
118 }
119 }