001
014
015 package com.liferay.portal.kernel.backgroundtask.display;
016
017 import com.liferay.portal.kernel.backgroundtask.BackgroundTask;
018 import com.liferay.portal.kernel.backgroundtask.BackgroundTaskStatus;
019 import com.liferay.portal.kernel.backgroundtask.BackgroundTaskStatusRegistryUtil;
020 import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
021 import com.liferay.portal.kernel.json.JSONArray;
022 import com.liferay.portal.kernel.json.JSONException;
023 import com.liferay.portal.kernel.json.JSONFactoryUtil;
024 import com.liferay.portal.kernel.json.JSONObject;
025 import com.liferay.portal.kernel.language.LanguageUtil;
026 import com.liferay.portal.kernel.log.Log;
027 import com.liferay.portal.kernel.log.LogFactoryUtil;
028 import com.liferay.portal.kernel.template.Template;
029 import com.liferay.portal.kernel.template.TemplateConstants;
030 import com.liferay.portal.kernel.template.TemplateException;
031 import com.liferay.portal.kernel.template.TemplateManager;
032 import com.liferay.portal.kernel.template.TemplateManagerUtil;
033 import com.liferay.portal.kernel.template.TemplateResource;
034 import com.liferay.portal.kernel.util.GetterUtil;
035 import com.liferay.portal.kernel.util.StringPool;
036
037 import java.io.Writer;
038
039 import java.util.Iterator;
040 import java.util.Locale;
041 import java.util.Map;
042
043
046 public abstract class BaseBackgroundTaskDisplay
047 implements BackgroundTaskDisplay {
048
049 public BaseBackgroundTaskDisplay(BackgroundTask backgroundTask) {
050 this.backgroundTask = backgroundTask;
051
052 backgroundTaskStatus =
053 BackgroundTaskStatusRegistryUtil.getBackgroundTaskStatus(
054 backgroundTask.getBackgroundTaskId());
055 }
056
057 @Override
058 public abstract int getPercentage();
059
060 @Override
061 public int getStatus() {
062 return backgroundTask.getStatus();
063 }
064
065 @Override
066 public String getStatusLabel() {
067 return getStatusLabel(Locale.getDefault());
068 }
069
070 @Override
071 public String getStatusLabel(Locale locale) {
072 return LanguageUtil.get(locale, backgroundTask.getStatusLabel());
073 }
074
075 @Override
076 public String getStatusMessage() {
077 return getStatusMessage(Locale.getDefault());
078 }
079
080 @Override
081 public String getStatusMessage(Locale locale) {
082 TemplateResource templateResource = getTemplateResource();
083
084 if (templateResource == null) {
085 return StringPool.BLANK;
086 }
087
088 TemplateManager templateManager =
089 TemplateManagerUtil.getTemplateManager(
090 TemplateConstants.LANG_TYPE_FTL);
091
092 Template template = templateManager.getTemplate(templateResource, true);
093
094 template.put("backgroundTask", backgroundTask);
095 template.put("backgroundTaskDisplay", this);
096 template.put("backgroundTaskStatus", backgroundTaskStatus);
097 template.put(
098 "statusMessageJSONObject", getStatusMessageJSONObject(locale));
099
100 template.putAll(getTemplateVars());
101
102 Writer writer = new UnsyncStringWriter();
103
104 try {
105 template.processTemplate(writer);
106 }
107 catch (TemplateException te) {
108 if (_log.isDebugEnabled()) {
109 _log.debug(te, te);
110 }
111
112 return StringPool.BLANK;
113 }
114
115 return writer.toString();
116 }
117
118 @Override
119 public boolean hasPercentage() {
120 if (getPercentage() >= PERCENTAGE_MIN) {
121 return true;
122 }
123
124 return false;
125 }
126
127 protected long getBackgroundTaskStatusAttributeLong(String attributeKey) {
128 return GetterUtil.getLong(
129 backgroundTaskStatus.getAttribute(attributeKey));
130 }
131
132 protected String getBackgroundTaskStatusAttributeString(
133 String attributeKey) {
134
135 return GetterUtil.getString(
136 backgroundTaskStatus.getAttribute(attributeKey));
137 }
138
139 protected JSONObject getStatusMessageJSONObject(Locale locale) {
140 JSONObject jsonObject = null;
141
142 try {
143 jsonObject = JSONFactoryUtil.createJSONObject(
144 backgroundTask.getStatusMessage());
145 }
146 catch (JSONException e) {
147 if (_log.isDebugEnabled()) {
148 _log.debug(e, e);
149 }
150 }
151
152 return translateJSON(jsonObject, locale);
153 }
154
155 protected abstract String getStatusMessageKey();
156
157 protected abstract TemplateResource getTemplateResource();
158
159 protected abstract Map<String, Object> getTemplateVars();
160
161 protected boolean hasBackgroundTaskStatus() {
162 if (backgroundTaskStatus != null) {
163 return true;
164 }
165
166 return false;
167 }
168
169 protected JSONArray translateJSON(JSONArray jsonArray, Locale locale) {
170 JSONArray translatedJSON = JSONFactoryUtil.createJSONArray();
171
172 for (Object object : jsonArray) {
173 if (object instanceof JSONObject) {
174 translatedJSON.put(translateJSON((JSONObject)object, locale));
175 }
176 else if (object instanceof JSONArray) {
177 translatedJSON.put(translateJSON((JSONArray)object, locale));
178 }
179 else if (object instanceof String) {
180 translatedJSON.put(LanguageUtil.get(locale, (String)object));
181 }
182 else {
183 translatedJSON.put(object);
184 }
185 }
186
187 return translatedJSON;
188 }
189
190 protected JSONObject translateJSON(JSONObject jsonObject, Locale locale) {
191 if (locale == null) {
192 return jsonObject;
193 }
194
195 JSONObject translatedJSON = JSONFactoryUtil.createJSONObject();
196
197 Iterator<String> iterator = jsonObject.keys();
198
199 while (iterator.hasNext()) {
200 String key = iterator.next();
201
202 Object object = jsonObject.get(key);
203
204 if (object instanceof JSONObject) {
205 translatedJSON.put(
206 key, translateJSON((JSONObject)object, locale));
207 }
208 else if (object instanceof JSONArray) {
209 translatedJSON.put(
210 key, translateJSON((JSONArray)object, locale));
211 }
212 else if (object instanceof String) {
213 translatedJSON.put(
214 key, LanguageUtil.get(locale, (String)object));
215 }
216 else {
217 translatedJSON.put(key, object);
218 }
219 }
220
221 return translatedJSON;
222 }
223
224 protected static final int PERCENTAGE_MAX = 100;
225
226 protected static final int PERCENTAGE_MIN = 0;
227
228 protected static final int PERCENTAGE_NONE = -1;
229
230 protected final BackgroundTask backgroundTask;
231 protected final BackgroundTaskStatus backgroundTaskStatus;
232
233 private static final Log _log = LogFactoryUtil.getLog(
234 BaseBackgroundTaskDisplay.class);
235
236 }