001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.NoSuchLayoutRevisionException;
018 import com.liferay.portal.NoSuchPortletPreferencesException;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.util.AutoResetThreadLocal;
021 import com.liferay.portal.kernel.util.OrderByComparator;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.StringBundler;
024 import com.liferay.portal.kernel.workflow.WorkflowConstants;
025 import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
026 import com.liferay.portal.model.Layout;
027 import com.liferay.portal.model.LayoutConstants;
028 import com.liferay.portal.model.LayoutRevision;
029 import com.liferay.portal.model.LayoutRevisionConstants;
030 import com.liferay.portal.model.LayoutSetBranch;
031 import com.liferay.portal.model.PortletPreferences;
032 import com.liferay.portal.model.User;
033 import com.liferay.portal.service.ServiceContext;
034 import com.liferay.portal.service.base.LayoutRevisionLocalServiceBaseImpl;
035 import com.liferay.portal.util.comparator.LayoutRevisionCreateDateComparator;
036 import com.liferay.portlet.exportimport.staging.MergeLayoutPrototypesThreadLocal;
037 import com.liferay.portlet.exportimport.staging.StagingUtil;
038
039 import java.util.ArrayList;
040 import java.util.Date;
041 import java.util.List;
042
043
047 public class LayoutRevisionLocalServiceImpl
048 extends LayoutRevisionLocalServiceBaseImpl {
049
050 @Override
051 public LayoutRevision addLayoutRevision(
052 long userId, long layoutSetBranchId, long layoutBranchId,
053 long parentLayoutRevisionId, boolean head, long plid,
054 long portletPreferencesPlid, boolean privateLayout, String name,
055 String title, String description, String keywords, String robots,
056 String typeSettings, boolean iconImage, long iconImageId,
057 String themeId, String colorSchemeId, String wapThemeId,
058 String wapColorSchemeId, String css, ServiceContext serviceContext)
059 throws PortalException {
060
061
062
063 User user = userPersistence.findByPrimaryKey(userId);
064 LayoutSetBranch layoutSetBranch =
065 layoutSetBranchPersistence.findByPrimaryKey(layoutSetBranchId);
066 parentLayoutRevisionId = getParentLayoutRevisionId(
067 layoutSetBranchId, parentLayoutRevisionId, plid);
068 Date now = new Date();
069
070 long layoutRevisionId = counterLocalService.increment();
071
072 LayoutRevision layoutRevision = layoutRevisionPersistence.create(
073 layoutRevisionId);
074
075 layoutRevision.setGroupId(layoutSetBranch.getGroupId());
076 layoutRevision.setCompanyId(user.getCompanyId());
077 layoutRevision.setUserId(user.getUserId());
078 layoutRevision.setUserName(user.getFullName());
079 layoutRevision.setLayoutSetBranchId(layoutSetBranchId);
080 layoutRevision.setLayoutBranchId(layoutBranchId);
081 layoutRevision.setParentLayoutRevisionId(parentLayoutRevisionId);
082 layoutRevision.setHead(head);
083 layoutRevision.setPlid(plid);
084 layoutRevision.setPrivateLayout(privateLayout);
085 layoutRevision.setName(name);
086 layoutRevision.setTitle(title);
087 layoutRevision.setDescription(description);
088 layoutRevision.setKeywords(keywords);
089 layoutRevision.setRobots(robots);
090 layoutRevision.setTypeSettings(typeSettings);
091 layoutRevision.setIconImageId(iconImageId);
092 layoutRevision.setThemeId(themeId);
093 layoutRevision.setColorSchemeId(colorSchemeId);
094 layoutRevision.setWapThemeId(wapThemeId);
095 layoutRevision.setWapColorSchemeId(wapColorSchemeId);
096 layoutRevision.setCss(css);
097 layoutRevision.setStatus(WorkflowConstants.STATUS_DRAFT);
098 layoutRevision.setStatusDate(serviceContext.getModifiedDate(now));
099
100 layoutRevisionPersistence.update(layoutRevision);
101
102 _layoutRevisionId.set(layoutRevision.getLayoutRevisionId());
103
104
105
106 if (portletPreferencesPlid == LayoutConstants.DEFAULT_PLID) {
107 portletPreferencesPlid = plid;
108 }
109
110 copyPortletPreferences(layoutRevision, portletPreferencesPlid);
111
112
113
114 if (isWorkflowEnabled(plid)) {
115 WorkflowHandlerRegistryUtil.startWorkflowInstance(
116 user.getCompanyId(), layoutRevision.getGroupId(),
117 user.getUserId(), LayoutRevision.class.getName(),
118 layoutRevision.getLayoutRevisionId(), layoutRevision,
119 serviceContext);
120 }
121 else {
122 updateMajor(layoutRevision);
123
124 updateStatus(
125 userId, layoutRevisionId, WorkflowConstants.STATUS_APPROVED,
126 serviceContext);
127 }
128
129 StagingUtil.setRecentLayoutRevisionId(
130 user, layoutSetBranchId, plid,
131 layoutRevision.getLayoutRevisionId());
132
133 return layoutRevision;
134 }
135
136 @Override
137 public void deleteLayoutLayoutRevisions(long plid) throws PortalException {
138 for (LayoutRevision layoutRevision : getLayoutRevisions(plid)) {
139 layoutRevisionLocalService.deleteLayoutRevision(layoutRevision);
140 }
141 }
142
143 @Override
144 public LayoutRevision deleteLayoutRevision(LayoutRevision layoutRevision)
145 throws PortalException {
146
147 if (layoutRevision.hasChildren()) {
148 for (LayoutRevision curLayoutRevision :
149 layoutRevision.getChildren()) {
150
151 curLayoutRevision.setParentLayoutRevisionId(
152 layoutRevision.getParentLayoutRevisionId());
153
154 layoutRevisionPersistence.update(curLayoutRevision);
155 }
156 }
157
158 List<PortletPreferences> portletPreferencesList =
159 portletPreferencesLocalService.getPortletPreferencesByPlid(
160 layoutRevision.getLayoutRevisionId());
161
162 for (PortletPreferences portletPreferences : portletPreferencesList) {
163 try {
164 portletPreferencesLocalService.deletePortletPreferences(
165 portletPreferences.getPortletPreferencesId());
166 }
167 catch (NoSuchPortletPreferencesException nsppe) {
168 }
169 }
170
171 StagingUtil.deleteRecentLayoutRevisionId(
172 layoutRevision.getUserId(), layoutRevision.getLayoutSetBranchId(),
173 layoutRevision.getPlid());
174
175 if (layoutRevision.isPending()) {
176 workflowInstanceLinkLocalService.deleteWorkflowInstanceLink(
177 layoutRevision.getCompanyId(), layoutRevision.getGroupId(),
178 LayoutRevision.class.getName(),
179 layoutRevision.getLayoutRevisionId());
180 }
181
182 return layoutRevisionPersistence.remove(layoutRevision);
183 }
184
185 @Override
186 public LayoutRevision deleteLayoutRevision(long layoutRevisionId)
187 throws PortalException {
188
189 LayoutRevision layoutRevision =
190 layoutRevisionPersistence.findByPrimaryKey(layoutRevisionId);
191
192 return deleteLayoutRevision(layoutRevision);
193 }
194
195 @Override
196 public void deleteLayoutRevisions(long layoutSetBranchId, long plid)
197 throws PortalException {
198
199 for (LayoutRevision layoutRevision : getLayoutRevisions(
200 layoutSetBranchId, plid)) {
201
202 layoutRevisionLocalService.deleteLayoutRevision(layoutRevision);
203 }
204 }
205
206 @Override
207 public void deleteLayoutRevisions(
208 long layoutSetBranchId, long layoutBranchId, long plid)
209 throws PortalException {
210
211 List<LayoutRevision> layoutRevisions =
212 layoutRevisionPersistence.findByL_L_P(
213 layoutSetBranchId, layoutBranchId, plid);
214
215 for (LayoutRevision layoutRevision : layoutRevisions) {
216 layoutRevisionLocalService.deleteLayoutRevision(layoutRevision);
217 }
218 }
219
220 @Override
221 public void deleteLayoutSetBranchLayoutRevisions(long layoutSetBranchId)
222 throws PortalException {
223
224 List<LayoutRevision> layoutRevisions =
225 layoutRevisionPersistence.findByLayoutSetBranchId(
226 layoutSetBranchId);
227
228 for (LayoutRevision layoutRevision : layoutRevisions) {
229 layoutRevisionLocalService.deleteLayoutRevision(layoutRevision);
230 }
231 }
232
233 @Override
234 public LayoutRevision fetchLastLayoutRevision(long plid, boolean head) {
235 try {
236 return layoutRevisionPersistence.findByH_P_Last(
237 head, plid, new LayoutRevisionCreateDateComparator(true));
238 }
239 catch (NoSuchLayoutRevisionException nslre) {
240 return null;
241 }
242 }
243
244 @Override
245 public LayoutRevision fetchLatestLayoutRevision(
246 long layoutSetBranchId, long plid) {
247
248 return layoutRevisionPersistence.fetchByL_P_First(
249 layoutSetBranchId, plid,
250 new LayoutRevisionCreateDateComparator(false));
251 }
252
253 @Override
254 public LayoutRevision fetchLayoutRevision(
255 long layoutSetBranchId, boolean head, long plid) {
256
257 return layoutRevisionPersistence.fetchByL_H_P(
258 layoutSetBranchId, head, plid);
259 }
260
261 @Override
262 public List<LayoutRevision> getChildLayoutRevisions(
263 long layoutSetBranchId, long parentLayoutRevisionId, long plid) {
264
265 return layoutRevisionPersistence.findByL_P_P(
266 layoutSetBranchId, parentLayoutRevisionId, plid);
267 }
268
269 @Override
270 public List<LayoutRevision> getChildLayoutRevisions(
271 long layoutSetBranchId, long parentLayoutRevision, long plid, int start,
272 int end, OrderByComparator<LayoutRevision> orderByComparator) {
273
274 return layoutRevisionPersistence.findByL_P_P(
275 layoutSetBranchId, parentLayoutRevision, plid, start, end,
276 orderByComparator);
277 }
278
279 @Override
280 public int getChildLayoutRevisionsCount(
281 long layoutSetBranchId, long parentLayoutRevision, long plid) {
282
283 return layoutRevisionPersistence.countByL_P_P(
284 layoutSetBranchId, parentLayoutRevision, plid);
285 }
286
287 @Override
288 public LayoutRevision getLayoutRevision(
289 long layoutSetBranchId, long plid, boolean head)
290 throws PortalException {
291
292 return layoutRevisionPersistence.findByL_H_P(
293 layoutSetBranchId, head, plid);
294 }
295
296 @Override
297 public LayoutRevision getLayoutRevision(
298 long layoutSetBranchId, long layoutBranchId, long plid)
299 throws PortalException {
300
301 List<LayoutRevision> layoutRevisions =
302 layoutRevisionPersistence.findByL_L_P(
303 layoutSetBranchId, layoutBranchId, plid, 0, 1,
304 new LayoutRevisionCreateDateComparator(false));
305
306 if (!layoutRevisions.isEmpty()) {
307 return layoutRevisions.get(0);
308 }
309
310 StringBundler sb = new StringBundler(7);
311
312 sb.append("{layoutSetBranchId=");
313 sb.append(layoutSetBranchId);
314 sb.append(", layoutBranchId=");
315 sb.append(layoutBranchId);
316 sb.append(", plid=");
317 sb.append(plid);
318 sb.append("}");
319
320 throw new NoSuchLayoutRevisionException(sb.toString());
321 }
322
323 @Override
324 public List<LayoutRevision> getLayoutRevisions(long plid) {
325 return layoutRevisionPersistence.findByPlid(plid);
326 }
327
328 @Override
329 public List<LayoutRevision> getLayoutRevisions(
330 long layoutSetBranchId, boolean head) {
331
332 return layoutRevisionPersistence.findByL_H(layoutSetBranchId, head);
333 }
334
335 @Override
336 public List<LayoutRevision> getLayoutRevisions(
337 long layoutSetBranchId, int status) {
338
339 return layoutRevisionPersistence.findByL_S(layoutSetBranchId, status);
340 }
341
342 @Override
343 public List<LayoutRevision> getLayoutRevisions(
344 long layoutSetBranchId, long plid) {
345
346 return layoutRevisionPersistence.findByL_P(layoutSetBranchId, plid);
347 }
348
349 @Override
350 public List<LayoutRevision> getLayoutRevisions(
351 long layoutSetBranchId, long plid, int status) {
352
353 return layoutRevisionPersistence.findByL_P_S(
354 layoutSetBranchId, plid, status);
355 }
356
357 @Override
358 public List<LayoutRevision> getLayoutRevisions(
359 long layoutSetBranchId, long plid, int start, int end,
360 OrderByComparator<LayoutRevision> orderByComparator) {
361
362 return layoutRevisionPersistence.findByL_P(
363 layoutSetBranchId, plid, start, end, orderByComparator);
364 }
365
366 @Override
367 public List<LayoutRevision> getLayoutRevisions(
368 long layoutSetBranchId, long layoutBranchId, long plid, int start,
369 int end, OrderByComparator<LayoutRevision> orderByComparator) {
370
371 return layoutRevisionPersistence.findByL_L_P(
372 layoutSetBranchId, layoutBranchId, plid, start, end,
373 orderByComparator);
374 }
375
376 @Override
377 public int getLayoutRevisionsCount(
378 long layoutSetBranchId, long layoutBranchId, long plid) {
379
380 return layoutRevisionPersistence.countByL_L_P(
381 layoutSetBranchId, layoutBranchId, plid);
382 }
383
384 @Override
385 public LayoutRevision updateLayoutRevision(
386 long userId, long layoutRevisionId, long layoutBranchId,
387 String name, String title, String description, String keywords,
388 String robots, String typeSettings, boolean iconImage,
389 long iconImageId, String themeId, String colorSchemeId,
390 String wapThemeId, String wapColorSchemeId, String css,
391 ServiceContext serviceContext)
392 throws PortalException {
393
394
395
396 User user = userPersistence.findByPrimaryKey(userId);
397 LayoutRevision oldLayoutRevision =
398 layoutRevisionPersistence.findByPrimaryKey(layoutRevisionId);
399 Date now = new Date();
400
401 LayoutRevision layoutRevision = null;
402
403 int workflowAction = serviceContext.getWorkflowAction();
404
405 boolean revisionInProgress = ParamUtil.getBoolean(
406 serviceContext, "revisionInProgress");
407
408 if (!MergeLayoutPrototypesThreadLocal.isInProgress() &&
409 (workflowAction != WorkflowConstants.ACTION_PUBLISH) &&
410 (_layoutRevisionId.get() <= 0) && !revisionInProgress) {
411
412 long newLayoutRevisionId = counterLocalService.increment();
413
414 layoutRevision = layoutRevisionPersistence.create(
415 newLayoutRevisionId);
416
417 layoutRevision.setGroupId(oldLayoutRevision.getGroupId());
418 layoutRevision.setCompanyId(oldLayoutRevision.getCompanyId());
419 layoutRevision.setUserId(user.getUserId());
420 layoutRevision.setUserName(user.getFullName());
421 layoutRevision.setLayoutSetBranchId(
422 oldLayoutRevision.getLayoutSetBranchId());
423 layoutRevision.setParentLayoutRevisionId(
424 oldLayoutRevision.getLayoutRevisionId());
425 layoutRevision.setHead(false);
426 layoutRevision.setLayoutBranchId(layoutBranchId);
427 layoutRevision.setPlid(oldLayoutRevision.getPlid());
428 layoutRevision.setPrivateLayout(
429 oldLayoutRevision.isPrivateLayout());
430 layoutRevision.setName(name);
431 layoutRevision.setTitle(title);
432 layoutRevision.setDescription(description);
433 layoutRevision.setKeywords(keywords);
434 layoutRevision.setRobots(robots);
435 layoutRevision.setTypeSettings(typeSettings);
436 layoutRevision.setIconImageId(iconImageId);
437 layoutRevision.setThemeId(themeId);
438 layoutRevision.setColorSchemeId(colorSchemeId);
439 layoutRevision.setWapThemeId(wapThemeId);
440 layoutRevision.setWapColorSchemeId(wapColorSchemeId);
441 layoutRevision.setCss(css);
442 layoutRevision.setStatus(WorkflowConstants.STATUS_DRAFT);
443 layoutRevision.setStatusDate(serviceContext.getModifiedDate(now));
444
445 layoutRevisionPersistence.update(layoutRevision);
446
447 _layoutRevisionId.set(layoutRevision.getLayoutRevisionId());
448
449
450
451 copyPortletPreferences(
452 layoutRevision, layoutRevision.getParentLayoutRevisionId());
453
454 StagingUtil.setRecentLayoutBranchId(
455 user, layoutRevision.getLayoutSetBranchId(),
456 layoutRevision.getPlid(), layoutRevision.getLayoutBranchId());
457
458 StagingUtil.setRecentLayoutRevisionId(
459 user, layoutRevision.getLayoutSetBranchId(),
460 layoutRevision.getPlid(), layoutRevision.getLayoutRevisionId());
461 }
462 else {
463 if (_layoutRevisionId.get() > 0) {
464 layoutRevision = layoutRevisionPersistence.findByPrimaryKey(
465 _layoutRevisionId.get());
466 }
467 else {
468 layoutRevision = oldLayoutRevision;
469 }
470
471 layoutRevision.setName(name);
472 layoutRevision.setTitle(title);
473 layoutRevision.setDescription(description);
474 layoutRevision.setKeywords(keywords);
475 layoutRevision.setRobots(robots);
476 layoutRevision.setTypeSettings(typeSettings);
477 layoutRevision.setIconImageId(iconImageId);
478 layoutRevision.setThemeId(themeId);
479 layoutRevision.setColorSchemeId(colorSchemeId);
480 layoutRevision.setWapThemeId(wapThemeId);
481 layoutRevision.setWapColorSchemeId(wapColorSchemeId);
482 layoutRevision.setCss(css);
483
484 layoutRevisionPersistence.update(layoutRevision);
485
486 _layoutRevisionId.set(layoutRevision.getLayoutRevisionId());
487 }
488
489 boolean major = ParamUtil.getBoolean(serviceContext, "major");
490
491 if (major || !isWorkflowEnabled(layoutRevision.getPlid())) {
492 updateMajor(layoutRevision);
493 }
494
495
496
497 if (isWorkflowEnabled(layoutRevision.getPlid())) {
498 WorkflowHandlerRegistryUtil.startWorkflowInstance(
499 layoutRevision.getCompanyId(), layoutRevision.getGroupId(),
500 userId, LayoutRevision.class.getName(),
501 layoutRevision.getLayoutRevisionId(), layoutRevision,
502 serviceContext);
503 }
504 else {
505 updateStatus(
506 userId, layoutRevision.getLayoutRevisionId(),
507 WorkflowConstants.STATUS_APPROVED, serviceContext);
508 }
509
510 return layoutRevision;
511 }
512
513 @Override
514 public LayoutRevision updateStatus(
515 long userId, long layoutRevisionId, int status,
516 ServiceContext serviceContext)
517 throws PortalException {
518
519 User user = userPersistence.findByPrimaryKey(userId);
520
521 LayoutRevision layoutRevision =
522 layoutRevisionPersistence.findByPrimaryKey(layoutRevisionId);
523
524 layoutRevision.setStatus(status);
525 layoutRevision.setStatusByUserId(user.getUserId());
526 layoutRevision.setStatusByUserName(user.getFullName());
527 layoutRevision.setStatusDate(new Date());
528
529 if (status == WorkflowConstants.STATUS_APPROVED) {
530 layoutRevision.setHead(true);
531 }
532 else {
533 layoutRevision.setHead(false);
534 layoutRevision.setMajor(false);
535 }
536
537 layoutRevisionPersistence.update(layoutRevision);
538
539 if (status == WorkflowConstants.STATUS_APPROVED) {
540 List<LayoutRevision> layoutRevisions =
541 layoutRevisionPersistence.findByL_P(
542 layoutRevision.getLayoutSetBranchId(),
543 layoutRevision.getPlid());
544
545 for (LayoutRevision curLayoutRevision : layoutRevisions) {
546 if (curLayoutRevision.getLayoutRevisionId() !=
547 layoutRevision.getLayoutRevisionId()) {
548
549 curLayoutRevision.setHead(false);
550
551 layoutRevisionPersistence.update(curLayoutRevision);
552 }
553 }
554 }
555 else {
556 List<LayoutRevision> layoutRevisions =
557 layoutRevisionPersistence.findByL_P_S(
558 layoutRevision.getLayoutSetBranchId(),
559 layoutRevision.getPlid(),
560 WorkflowConstants.STATUS_APPROVED);
561
562 for (LayoutRevision curLayoutRevision : layoutRevisions) {
563 if (curLayoutRevision.getLayoutRevisionId() !=
564 layoutRevision.getLayoutRevisionId()) {
565
566 curLayoutRevision.setHead(true);
567
568 layoutRevisionPersistence.update(curLayoutRevision);
569
570 break;
571 }
572 }
573 }
574
575 return layoutRevision;
576 }
577
578 protected void copyPortletPreferences(
579 LayoutRevision layoutRevision, long parentLayoutRevisionId) {
580
581 List<PortletPreferences> portletPreferencesList =
582 portletPreferencesLocalService.getPortletPreferencesByPlid(
583 parentLayoutRevisionId);
584
585 for (PortletPreferences portletPreferences : portletPreferencesList) {
586 portletPreferencesLocalService.addPortletPreferences(
587 layoutRevision.getCompanyId(), portletPreferences.getOwnerId(),
588 portletPreferences.getOwnerType(),
589 layoutRevision.getLayoutRevisionId(),
590 portletPreferences.getPortletId(), null,
591 portletPreferences.getPreferences());
592 }
593 }
594
595 protected long getParentLayoutRevisionId(
596 long layoutSetBranchId, long parentLayoutRevisionId, long plid) {
597
598 LayoutRevision parentLayoutRevision = null;
599
600 if (parentLayoutRevisionId > 0) {
601 parentLayoutRevision = layoutRevisionPersistence.fetchByPrimaryKey(
602 parentLayoutRevisionId);
603
604 if (parentLayoutRevision == null) {
605 List<LayoutRevision> layoutRevisions =
606 layoutRevisionPersistence.findByL_P(
607 layoutSetBranchId, plid, 0, 1);
608
609 if (!layoutRevisions.isEmpty()) {
610 parentLayoutRevision = layoutRevisions.get(0);
611 }
612 }
613 }
614
615 if (parentLayoutRevision != null) {
616 return parentLayoutRevision.getLayoutRevisionId();
617 }
618
619 return LayoutRevisionConstants.DEFAULT_PARENT_LAYOUT_REVISION_ID;
620 }
621
622 protected boolean isWorkflowEnabled(long plid) throws PortalException {
623 Layout layout = layoutLocalService.getLayout(plid);
624
625 if (layout.isTypeLinkToLayout() || layout.isTypeURL()) {
626 return false;
627 }
628
629 return true;
630 }
631
632 protected LayoutRevision updateMajor(LayoutRevision layoutRevision)
633 throws PortalException {
634
635 List<LayoutRevision> parentLayoutRevisions = new ArrayList<>();
636
637 long parentLayoutRevisionId =
638 layoutRevision.getParentLayoutRevisionId();
639
640 while (parentLayoutRevisionId !=
641 LayoutRevisionConstants.DEFAULT_PARENT_LAYOUT_REVISION_ID) {
642
643 LayoutRevision parentLayoutRevision =
644 layoutRevisionPersistence.findByPrimaryKey(
645 parentLayoutRevisionId);
646
647 if (parentLayoutRevision.isMajor()) {
648 break;
649 }
650
651 parentLayoutRevisions.add(parentLayoutRevision);
652
653 parentLayoutRevisionId =
654 parentLayoutRevision.getParentLayoutRevisionId();
655 }
656
657 layoutRevision.setParentLayoutRevisionId(parentLayoutRevisionId);
658 layoutRevision.setMajor(true);
659
660 layoutRevisionPersistence.update(layoutRevision);
661
662 for (LayoutRevision parentLayoutRevision : parentLayoutRevisions) {
663 List<LayoutRevision> childrenLayoutRevisions =
664 parentLayoutRevision.getChildren();
665
666 if (!childrenLayoutRevisions.isEmpty()) {
667 break;
668 }
669
670 layoutRevisionLocalService.deleteLayoutRevision(
671 parentLayoutRevision);
672 }
673
674 return layoutRevision;
675 }
676
677 private static final ThreadLocal<Long> _layoutRevisionId =
678 new AutoResetThreadLocal<>(
679 LayoutRevisionLocalServiceImpl.class + "._layoutRevisionId", 0L);
680
681 }