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