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