001
014
015 package com.liferay.portal.service;
016
017 import com.liferay.portal.NoSuchUserException;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.kernel.upload.UploadPortletRequest;
021 import com.liferay.portal.kernel.util.ArrayUtil;
022 import com.liferay.portal.kernel.util.Constants;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.kernel.util.StringUtil;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.kernel.util.WebKeys;
027 import com.liferay.portal.kernel.workflow.WorkflowConstants;
028 import com.liferay.portal.model.Group;
029 import com.liferay.portal.model.GroupConstants;
030 import com.liferay.portal.model.PortletPreferencesIds;
031 import com.liferay.portal.model.User;
032 import com.liferay.portal.theme.ThemeDisplay;
033 import com.liferay.portal.util.PortalUtil;
034 import com.liferay.portlet.PortletPreferencesFactoryUtil;
035 import com.liferay.portlet.expando.util.ExpandoBridgeFactoryUtil;
036
037 import java.io.Serializable;
038
039 import java.util.ArrayList;
040 import java.util.Date;
041 import java.util.Enumeration;
042 import java.util.HashMap;
043 import java.util.List;
044 import java.util.Map;
045
046 import javax.portlet.PortletRequest;
047
048 import javax.servlet.http.HttpServletRequest;
049
050
054 public class ServiceContextFactory {
055
056 public static ServiceContext getInstance(HttpServletRequest request)
057 throws PortalException, SystemException {
058
059 ServiceContext serviceContext = new ServiceContext();
060
061
062
063 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
064 WebKeys.THEME_DISPLAY);
065
066 if (themeDisplay != null) {
067 serviceContext.setCompanyId(themeDisplay.getCompanyId());
068 serviceContext.setLanguageId(themeDisplay.getLanguageId());
069 serviceContext.setLayoutFullURL(
070 PortalUtil.getCanonicalURL(
071 PortalUtil.getLayoutFullURL(themeDisplay), themeDisplay,
072 themeDisplay.getLayout(), true));
073 serviceContext.setLayoutURL(
074 PortalUtil.getCanonicalURL(
075 PortalUtil.getLayoutURL(themeDisplay), themeDisplay,
076 themeDisplay.getLayout(), true));
077 serviceContext.setPlid(themeDisplay.getPlid());
078 serviceContext.setScopeGroupId(themeDisplay.getScopeGroupId());
079 serviceContext.setSignedIn(themeDisplay.isSignedIn());
080 serviceContext.setTimeZone(themeDisplay.getTimeZone());
081
082 User user = themeDisplay.getUser();
083
084 serviceContext.setUserDisplayURL(user.getDisplayURL(themeDisplay));
085 serviceContext.setUserId(user.getUserId());
086 }
087 else {
088 long companyId = PortalUtil.getCompanyId(request);
089
090 serviceContext.setCompanyId(companyId);
091
092 Group guestGroup = GroupLocalServiceUtil.getGroup(
093 serviceContext.getCompanyId(), GroupConstants.GUEST);
094
095 serviceContext.setScopeGroupId(guestGroup.getGroupId());
096
097 long plid = LayoutLocalServiceUtil.getDefaultPlid(
098 serviceContext.getScopeGroupId(), false);
099
100 serviceContext.setPlid(plid);
101
102 User user = null;
103
104 try {
105 user = PortalUtil.getUser(request);
106 }
107 catch (NoSuchUserException nsue) {
108
109
110
111 }
112
113 if (user != null) {
114 serviceContext.setSignedIn(!user.isDefaultUser());
115 serviceContext.setUserId(user.getUserId());
116 }
117 else {
118 serviceContext.setSignedIn(false);
119 }
120 }
121
122 serviceContext.setPortalURL(PortalUtil.getPortalURL(request));
123 serviceContext.setPathMain(PortalUtil.getPathMain());
124 serviceContext.setPathFriendlyURLPrivateGroup(
125 PortalUtil.getPathFriendlyURLPrivateGroup());
126 serviceContext.setPathFriendlyURLPrivateUser(
127 PortalUtil.getPathFriendlyURLPrivateUser());
128 serviceContext.setPathFriendlyURLPublic(
129 PortalUtil.getPathFriendlyURLPublic());
130
131
132
133 Map<String, Serializable> attributes =
134 new HashMap<String, Serializable>();
135
136 Map<String, String[]> parameters = request.getParameterMap();
137
138 for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
139 String name = entry.getKey();
140 String[] values = entry.getValue();
141
142 if (ArrayUtil.isNotEmpty(values)) {
143 if (values.length == 1) {
144 attributes.put(name, values[0]);
145 }
146 else {
147 attributes.put(name, values);
148 }
149 }
150 }
151
152 serviceContext.setAttributes(attributes);
153
154
155
156 String cmd = ParamUtil.getString(request, Constants.CMD);
157
158 serviceContext.setCommand(cmd);
159
160
161
162 String currentURL = PortalUtil.getCurrentURL(request);
163
164 serviceContext.setCurrentURL(currentURL);
165
166
167
168 long formDateLong = ParamUtil.getLong(request, "formDate");
169
170 if (formDateLong > 0) {
171 Date formDate = new Date(formDateLong);
172
173 serviceContext.setFormDate(formDate);
174 }
175
176
177
178 boolean addGroupPermissions = ParamUtil.getBoolean(
179 request, "addGroupPermissions");
180 boolean addGuestPermissions = ParamUtil.getBoolean(
181 request, "addGuestPermissions");
182 String[] groupPermissions = PortalUtil.getGroupPermissions(request);
183 String[] guestPermissions = PortalUtil.getGuestPermissions(request);
184
185 serviceContext.setAddGroupPermissions(addGroupPermissions);
186 serviceContext.setAddGuestPermissions(addGuestPermissions);
187 serviceContext.setGroupPermissions(groupPermissions);
188 serviceContext.setGuestPermissions(guestPermissions);
189
190
191
192 String portletId = PortalUtil.getPortletId(request);
193
194 if (Validator.isNotNull(portletId)) {
195 PortletPreferencesIds portletPreferencesIds =
196 PortletPreferencesFactoryUtil.getPortletPreferencesIds(
197 request, portletId);
198
199 serviceContext.setPortletPreferencesIds(portletPreferencesIds);
200 }
201
202
203
204 Map<String, String> headerMap = new HashMap<String, String>();
205
206 Enumeration<String> enu = request.getHeaderNames();
207
208 while (enu.hasMoreElements()) {
209 String header = enu.nextElement();
210
211 String value = request.getHeader(header);
212
213 headerMap.put(header, value);
214 }
215
216 serviceContext.setHeaders(headerMap);
217
218 serviceContext.setRemoteAddr(request.getRemoteAddr());
219 serviceContext.setRemoteHost(request.getRemoteHost());
220 serviceContext.setRequest(request);
221
222
223
224 Map<String, String[]> parameterMap = request.getParameterMap();
225
226 List<Long> assetCategoryIdsList = new ArrayList<Long>();
227
228 boolean updateAssetCategoryIds = false;
229
230 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
231 String name = entry.getKey();
232
233 if (name.startsWith("assetCategoryIds")) {
234 updateAssetCategoryIds = true;
235
236 long[] assetVocabularyAssetCategoryIds = StringUtil.split(
237 ParamUtil.getString(request, name), 0L);
238
239 for (long assetCategoryId : assetVocabularyAssetCategoryIds) {
240 assetCategoryIdsList.add(assetCategoryId);
241 }
242 }
243 }
244
245 if (updateAssetCategoryIds) {
246 long[] assetCategoryIds = ArrayUtil.toArray(
247 assetCategoryIdsList.toArray(
248 new Long[assetCategoryIdsList.size()]));
249
250 serviceContext.setAssetCategoryIds(assetCategoryIds);
251 }
252
253 boolean assetEntryVisible = ParamUtil.getBoolean(
254 request, "assetEntryVisible", true);
255
256 serviceContext.setAssetEntryVisible(assetEntryVisible);
257
258 String assetLinkEntryIdsString = request.getParameter(
259 "assetLinksSearchContainerPrimaryKeys");
260
261 if (assetLinkEntryIdsString != null) {
262 long[] assetLinkEntryIds = StringUtil.split(
263 assetLinkEntryIdsString, 0L);
264
265 serviceContext.setAssetLinkEntryIds(assetLinkEntryIds);
266 }
267
268 String assetTagNamesString = request.getParameter("assetTagNames");
269
270 if (assetTagNamesString != null) {
271 String[] assetTagNames = StringUtil.split(assetTagNamesString);
272
273 serviceContext.setAssetTagNames(assetTagNames);
274 }
275
276
277
278 int workflowAction = ParamUtil.getInteger(
279 request, "workflowAction", WorkflowConstants.ACTION_PUBLISH);
280
281 serviceContext.setWorkflowAction(workflowAction);
282
283 return serviceContext;
284 }
285
286 public static ServiceContext getInstance(PortletRequest portletRequest)
287 throws PortalException, SystemException {
288
289
290
291 ServiceContext serviceContext =
292 ServiceContextThreadLocal.getServiceContext();
293
294 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
295 WebKeys.THEME_DISPLAY);
296
297 if (serviceContext != null) {
298 serviceContext = (ServiceContext)serviceContext.clone();
299 }
300 else {
301 serviceContext = new ServiceContext();
302
303 serviceContext.setCompanyId(themeDisplay.getCompanyId());
304 serviceContext.setLanguageId(themeDisplay.getLanguageId());
305 serviceContext.setLayoutFullURL(
306 PortalUtil.getLayoutFullURL(themeDisplay));
307 serviceContext.setLayoutURL(PortalUtil.getLayoutURL(themeDisplay));
308 serviceContext.setPathFriendlyURLPrivateGroup(
309 PortalUtil.getPathFriendlyURLPrivateGroup());
310 serviceContext.setPathFriendlyURLPrivateUser(
311 PortalUtil.getPathFriendlyURLPrivateUser());
312 serviceContext.setPathFriendlyURLPublic(
313 PortalUtil.getPathFriendlyURLPublic());
314 serviceContext.setPathMain(PortalUtil.getPathMain());
315 serviceContext.setPlid(themeDisplay.getPlid());
316 serviceContext.setPortalURL(
317 PortalUtil.getPortalURL(portletRequest));
318 serviceContext.setSignedIn(themeDisplay.isSignedIn());
319 serviceContext.setTimeZone(themeDisplay.getTimeZone());
320
321 User user = themeDisplay.getUser();
322
323 serviceContext.setUserDisplayURL(user.getDisplayURL(themeDisplay));
324 serviceContext.setUserId(user.getUserId());
325 }
326
327 serviceContext.setScopeGroupId(themeDisplay.getScopeGroupId());
328
329
330
331 Map<String, Serializable> attributes =
332 new HashMap<String, Serializable>();
333
334 Enumeration<String> enu = portletRequest.getParameterNames();
335
336 while (enu.hasMoreElements()) {
337 String param = enu.nextElement();
338
339 String[] values = portletRequest.getParameterValues(param);
340
341 if (ArrayUtil.isNotEmpty(values)) {
342 if (values.length == 1) {
343 attributes.put(param, values[0]);
344 }
345 else {
346 attributes.put(param, values);
347 }
348 }
349 }
350
351 serviceContext.setAttributes(attributes);
352
353
354
355 String cmd = ParamUtil.getString(portletRequest, Constants.CMD);
356
357 serviceContext.setCommand(cmd);
358
359
360
361 String currentURL = PortalUtil.getCurrentURL(portletRequest);
362
363 serviceContext.setCurrentURL(currentURL);
364
365
366
367 long formDateLong = ParamUtil.getLong(portletRequest, "formDate");
368
369 if (formDateLong > 0) {
370 Date formDate = new Date(formDateLong);
371
372 serviceContext.setFormDate(formDate);
373 }
374
375
376
377 boolean addGroupPermissions = ParamUtil.getBoolean(
378 portletRequest, "addGroupPermissions");
379 boolean addGuestPermissions = ParamUtil.getBoolean(
380 portletRequest, "addGuestPermissions");
381 String[] groupPermissions = PortalUtil.getGroupPermissions(
382 portletRequest);
383 String[] guestPermissions = PortalUtil.getGuestPermissions(
384 portletRequest);
385
386 serviceContext.setAddGroupPermissions(addGroupPermissions);
387 serviceContext.setAddGuestPermissions(addGuestPermissions);
388 serviceContext.setGroupPermissions(groupPermissions);
389 serviceContext.setGuestPermissions(guestPermissions);
390
391
392
393 HttpServletRequest request = PortalUtil.getHttpServletRequest(
394 portletRequest);
395
396 String portletId = PortalUtil.getPortletId(portletRequest);
397
398 PortletPreferencesIds portletPreferencesIds =
399 PortletPreferencesFactoryUtil.getPortletPreferencesIds(
400 request, portletId);
401
402 serviceContext.setPortletPreferencesIds(portletPreferencesIds);
403
404
405
406 Map<String, String> headerMap = new HashMap<String, String>();
407
408 enu = request.getHeaderNames();
409
410 while (enu.hasMoreElements()) {
411 String header = enu.nextElement();
412
413 String value = request.getHeader(header);
414
415 headerMap.put(header, value);
416 }
417
418 serviceContext.setHeaders(headerMap);
419
420 serviceContext.setRemoteAddr(request.getRemoteAddr());
421 serviceContext.setRemoteHost(request.getRemoteHost());
422 serviceContext.setRequest(request);
423
424
425
426 Map<String, String[]> parameterMap = portletRequest.getParameterMap();
427
428 List<Long> assetCategoryIdsList = new ArrayList<Long>();
429
430 boolean updateAssetCategoryIds = false;
431
432 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
433 String name = entry.getKey();
434
435 if (name.startsWith("assetCategoryIds")) {
436 updateAssetCategoryIds = true;
437
438 long[] assetVocabularyAssetCategoryIds = StringUtil.split(
439 ParamUtil.getString(portletRequest, name), 0L);
440
441 for (long assetCategoryId : assetVocabularyAssetCategoryIds) {
442 assetCategoryIdsList.add(assetCategoryId);
443 }
444 }
445 }
446
447 if (updateAssetCategoryIds) {
448 long[] assetCategoryIds = ArrayUtil.toArray(
449 assetCategoryIdsList.toArray(
450 new Long[assetCategoryIdsList.size()]));
451
452 serviceContext.setAssetCategoryIds(assetCategoryIds);
453 }
454
455 boolean assetEntryVisible = ParamUtil.getBoolean(
456 portletRequest, "assetEntryVisible", true);
457
458 serviceContext.setAssetEntryVisible(assetEntryVisible);
459
460 String assetLinkEntryIdsString = request.getParameter(
461 "assetLinksSearchContainerPrimaryKeys");
462
463 if (assetLinkEntryIdsString != null) {
464 long[] assetLinkEntryIds = StringUtil.split(
465 assetLinkEntryIdsString, 0L);
466
467 serviceContext.setAssetLinkEntryIds(assetLinkEntryIds);
468 }
469
470 String assetTagNamesString = request.getParameter("assetTagNames");
471
472 if (assetTagNamesString != null) {
473 String[] assetTagNames = StringUtil.split(assetTagNamesString);
474
475 serviceContext.setAssetTagNames(assetTagNames);
476 }
477
478
479
480 int workflowAction = ParamUtil.getInteger(
481 portletRequest, "workflowAction", WorkflowConstants.ACTION_PUBLISH);
482
483 serviceContext.setWorkflowAction(workflowAction);
484
485 return serviceContext;
486 }
487
488 public static ServiceContext getInstance(
489 String className, PortletRequest portletRequest)
490 throws PortalException, SystemException {
491
492 ServiceContext serviceContext = getInstance(portletRequest);
493
494
495
496 String[] groupPermissions = PortalUtil.getGroupPermissions(
497 portletRequest, className);
498 String[] guestPermissions = PortalUtil.getGuestPermissions(
499 portletRequest, className);
500
501 if (groupPermissions != null) {
502 serviceContext.setGroupPermissions(groupPermissions);
503 }
504
505 if (guestPermissions != null) {
506 serviceContext.setGuestPermissions(guestPermissions);
507 }
508
509
510
511 Map<String, Serializable> expandoBridgeAttributes =
512 PortalUtil.getExpandoBridgeAttributes(
513 ExpandoBridgeFactoryUtil.getExpandoBridge(
514 serviceContext.getCompanyId(), className),
515 portletRequest);
516
517 serviceContext.setExpandoBridgeAttributes(expandoBridgeAttributes);
518
519 return serviceContext;
520 }
521
522 public static ServiceContext getInstance(
523 String className, UploadPortletRequest uploadPortletRequest)
524 throws PortalException, SystemException {
525
526 ServiceContext serviceContext = getInstance(uploadPortletRequest);
527
528
529
530 String[] groupPermissions = PortalUtil.getGroupPermissions(
531 uploadPortletRequest, className);
532 String[] guestPermissions = PortalUtil.getGuestPermissions(
533 uploadPortletRequest, className);
534
535 if (groupPermissions != null) {
536 serviceContext.setGroupPermissions(groupPermissions);
537 }
538
539 if (guestPermissions != null) {
540 serviceContext.setGuestPermissions(guestPermissions);
541 }
542
543
544
545 Map<String, Serializable> expandoBridgeAttributes =
546 PortalUtil.getExpandoBridgeAttributes(
547 ExpandoBridgeFactoryUtil.getExpandoBridge(
548 serviceContext.getCompanyId(), className),
549 uploadPortletRequest);
550
551 serviceContext.setExpandoBridgeAttributes(expandoBridgeAttributes);
552
553 return serviceContext;
554 }
555
556 }