1
22
23 package com.liferay.portlet.randombibleverse.util;
24
25 import com.liferay.portal.kernel.util.Randomizer;
26 import com.liferay.portal.kernel.util.StringPool;
27 import com.liferay.portal.util.WebCachePool;
28 import com.liferay.portal.util.WebCacheable;
29 import com.liferay.portlet.randombibleverse.model.Bible;
30 import com.liferay.portlet.randombibleverse.model.Verse;
31
32 import java.net.URL;
33
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.Iterator;
37 import java.util.LinkedHashMap;
38 import java.util.List;
39 import java.util.Locale;
40 import java.util.Map;
41
42 import javax.portlet.PortletPreferences;
43
44 import org.apache.commons.logging.Log;
45 import org.apache.commons.logging.LogFactory;
46
47 import org.dom4j.Document;
48 import org.dom4j.DocumentException;
49 import org.dom4j.Element;
50 import org.dom4j.io.SAXReader;
51
52
58 public class RBVUtil {
59
60 public static Bible getBible(PortletPreferences prefs, Locale locale) {
61 return _instance._getBible(prefs, locale);
62 }
63
64 public static Map getBibles() {
65 return _instance._bibles;
66 }
67
68 public static Verse getVerse(PortletPreferences prefs, Locale locale) {
69 return _instance._getVerse(prefs, locale);
70 }
71
72 private RBVUtil() {
73 Document doc = null;
74
75 try {
76 SAXReader reader = new SAXReader();
77
78 ClassLoader classLoader = getClass().getClassLoader();
79
80 URL url = classLoader.getResource(
81 "com/liferay/portlet/randombibleverse/dependencies/" +
82 "random_bible_verse.xml");
83
84 doc = reader.read(url);
85 }
86 catch (DocumentException de) {
87 _log.error(de);
88 }
89
90 _bibles = new LinkedHashMap();
91 _verses = new ArrayList();
92
93 Element root = doc.getRootElement();
94
95 Iterator itr = root.element("bibles").elements("bible").iterator();
96
97 while (itr.hasNext()) {
98 Element bible = (Element)itr.next();
99
100 _bibles.put(
101 bible.attributeValue("language"),
102 new Bible(
103 bible.attributeValue("language"),
104 bible.attributeValue("language-name"),
105 bible.attributeValue("version-id")));
106 }
107
108 _bibles = Collections.unmodifiableMap(_bibles);
109
110 itr = root.element("verses").elements("verse").iterator();
111
112 while (itr.hasNext()) {
113 Element verse = (Element)itr.next();
114
115 _verses.add(verse.attributeValue("location"));
116 }
117
118 _verses = Collections.unmodifiableList(_verses);
119 }
120
121 private Bible _getBible(PortletPreferences prefs, Locale locale) {
122 Bible bible = (Bible)_bibles.get(
123 prefs.getValue("language", StringPool.BLANK));
124
125 if (bible == null) {
126 bible = (Bible)_bibles.get(locale.getLanguage());
127 }
128
129 if (bible == null) {
130 bible = (Bible)_bibles.get("en");
131 }
132
133 return bible;
134 }
135
136 private Verse _getVerse(PortletPreferences prefs, Locale locale) {
137 Bible bible = _getBible(prefs, locale);
138
139 int i = Randomizer.getInstance().nextInt(_verses.size());
140
141 return _getVerse((String)_verses.get(i), bible.getVersionId());
142 }
143
144 private Verse _getVerse(String location, String versionId) {
145 WebCacheable wc = new VerseConverter(location, versionId);
146
147 return (Verse)WebCachePool.get(
148 RBVUtil.class.getName() + StringPool.PERIOD + location +
149 StringPool.PERIOD + versionId,
150 wc);
151 }
152
153 private static Log _log = LogFactory.getLog(RBVUtil.class);
154
155 private static RBVUtil _instance = new RBVUtil();
156
157 private Map _bibles;
158 private List _verses;
159
160 }