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