001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.counter.service.CounterLocalServiceUtil;
018 import com.liferay.portal.kernel.bean.BeanReference;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.exception.SystemException;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.staging.LayoutStagingUtil;
024 import com.liferay.portal.kernel.staging.MergeLayoutPrototypesThreadLocal;
025 import com.liferay.portal.kernel.staging.StagingUtil;
026 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntry;
027 import com.liferay.portal.kernel.systemevent.SystemEventHierarchyEntryThreadLocal;
028 import com.liferay.portal.kernel.util.ArrayUtil;
029 import com.liferay.portal.kernel.util.GetterUtil;
030 import com.liferay.portal.kernel.util.LocaleUtil;
031 import com.liferay.portal.kernel.util.ParamUtil;
032 import com.liferay.portal.kernel.util.ProxyUtil;
033 import com.liferay.portal.kernel.util.StringPool;
034 import com.liferay.portal.kernel.workflow.WorkflowConstants;
035 import com.liferay.portal.model.Layout;
036 import com.liferay.portal.model.LayoutRevision;
037 import com.liferay.portal.model.LayoutSet;
038 import com.liferay.portal.model.LayoutStagingHandler;
039 import com.liferay.portal.model.SystemEventConstants;
040 import com.liferay.portal.model.User;
041 import com.liferay.portal.security.auth.PrincipalThreadLocal;
042 import com.liferay.portal.service.ImageLocalServiceUtil;
043 import com.liferay.portal.service.LayoutFriendlyURLLocalServiceUtil;
044 import com.liferay.portal.service.LayoutLocalService;
045 import com.liferay.portal.service.LayoutRevisionLocalServiceUtil;
046 import com.liferay.portal.service.ServiceContext;
047 import com.liferay.portal.service.ServiceContextThreadLocal;
048 import com.liferay.portal.service.SystemEventLocalServiceUtil;
049 import com.liferay.portal.service.UserLocalServiceUtil;
050 import com.liferay.portal.service.persistence.LayoutRevisionUtil;
051 import com.liferay.portal.service.persistence.LayoutUtil;
052 import com.liferay.portal.staging.ProxiedLayoutsThreadLocal;
053 import com.liferay.portal.staging.StagingAdvicesThreadLocal;
054 import com.liferay.portal.util.ClassLoaderUtil;
055
056 import java.lang.reflect.InvocationTargetException;
057 import java.lang.reflect.Method;
058
059 import java.util.ArrayList;
060 import java.util.Arrays;
061 import java.util.HashMap;
062 import java.util.HashSet;
063 import java.util.List;
064 import java.util.Locale;
065 import java.util.Map;
066 import java.util.Set;
067
068 import org.aopalliance.intercept.MethodInterceptor;
069 import org.aopalliance.intercept.MethodInvocation;
070
071 import org.springframework.core.annotation.Order;
072
073
077 @Order(1)
078 public class LayoutLocalServiceStagingAdvice implements MethodInterceptor {
079
080 public LayoutLocalServiceStagingAdvice() {
081 if (_log.isDebugEnabled()) {
082 _log.debug("Instantiating " + hashCode());
083 }
084 }
085
086 public void deleteLayout(
087 LayoutLocalService layoutLocalService, Layout layout,
088 boolean updateLayoutSet, ServiceContext serviceContext)
089 throws PortalException, SystemException {
090
091 long layoutSetBranchId = ParamUtil.getLong(
092 serviceContext, "layoutSetBranchId");
093
094 if (layoutSetBranchId > 0) {
095 LayoutRevisionLocalServiceUtil.deleteLayoutRevisions(
096 layoutSetBranchId, layout.getPlid());
097
098 List<LayoutRevision> notIncompleteLayoutRevisions =
099 LayoutRevisionUtil.findByP_NotS(
100 layout.getPlid(), WorkflowConstants.STATUS_INCOMPLETE);
101
102 if (notIncompleteLayoutRevisions.isEmpty()) {
103 LayoutRevisionLocalServiceUtil.deleteLayoutLayoutRevisions(
104 layout.getPlid());
105
106 doDeleteLayout(
107 layoutLocalService, layout, updateLayoutSet,
108 serviceContext);
109 }
110 }
111 else {
112 doDeleteLayout(
113 layoutLocalService, layout, updateLayoutSet, serviceContext);
114 }
115 }
116
117 public void deleteLayout(
118 LayoutLocalService layoutLocalService, long groupId,
119 boolean privateLayout, long layoutId, ServiceContext serviceContext)
120 throws PortalException, SystemException {
121
122 Layout layout = layoutLocalService.getLayout(
123 groupId, privateLayout, layoutId);
124
125 deleteLayout(layoutLocalService, layout, true, serviceContext);
126 }
127
128 @Override
129 public Object invoke(MethodInvocation methodInvocation) throws Throwable {
130 if (!StagingAdvicesThreadLocal.isEnabled()) {
131 return methodInvocation.proceed();
132 }
133
134 Method method = methodInvocation.getMethod();
135
136 String methodName = method.getName();
137
138 boolean showIncomplete = false;
139
140 if (!_layoutLocalServiceStagingAdviceMethodNames.contains(methodName)) {
141 return wrapReturnValue(methodInvocation.proceed(), showIncomplete);
142 }
143
144 Object returnValue = null;
145
146 Object thisObject = methodInvocation.getThis();
147 Object[] arguments = methodInvocation.getArguments();
148
149 if (methodName.equals("createLayout")) {
150 return methodInvocation.proceed();
151 }
152 else if (methodName.equals("deleteLayout")) {
153 if (arguments.length == 3) {
154 deleteLayout(
155 (LayoutLocalService)thisObject, (Layout)arguments[0],
156 (Boolean)arguments[1], (ServiceContext)arguments[2]);
157 }
158 else if (arguments.length == 4) {
159 deleteLayout(
160 (LayoutLocalService)thisObject, (Long)arguments[0],
161 (Boolean)arguments[1], (Long)arguments[2],
162 (ServiceContext)arguments[3]);
163 }
164 }
165 else if (methodName.equals("getLayouts")) {
166 if (arguments.length == 6) {
167 showIncomplete = (Boolean)arguments[3];
168 }
169
170 return wrapReturnValue(methodInvocation.proceed(), showIncomplete);
171 }
172 else if (methodName.equals("updateLayout") &&
173 (arguments.length == 15)) {
174
175 Map<Locale, String> friendlyURLMap = null;
176
177 if (Arrays.equals(
178 method.getParameterTypes(),
179 _UPDATE_LAYOUT_PARAMETER_TYPES)) {
180
181 friendlyURLMap = new HashMap<Locale, String>();
182
183 friendlyURLMap.put(
184 LocaleUtil.getSiteDefault(), (String)arguments[11]);
185 }
186 else {
187 friendlyURLMap = (Map<Locale, String>)arguments[11];
188 }
189
190 returnValue = updateLayout(
191 (LayoutLocalService)thisObject, (Long)arguments[0],
192 (Boolean)arguments[1], (Long)arguments[2], (Long)arguments[3],
193 (Map<Locale, String>)arguments[4],
194 (Map<Locale, String>)arguments[5],
195 (Map<Locale, String>)arguments[6],
196 (Map<Locale, String>)arguments[7],
197 (Map<Locale, String>)arguments[8], (String)arguments[9],
198 (Boolean)arguments[10], friendlyURLMap, (Boolean)arguments[12],
199 (byte[])arguments[13], (ServiceContext)arguments[14]);
200 }
201 else {
202 try {
203 Class<?> clazz = getClass();
204
205 Class<?>[] parameterTypes = ArrayUtil.append(
206 new Class<?>[] {LayoutLocalService.class},
207 method.getParameterTypes());
208
209 Method layoutLocalServiceStagingAdviceMethod = clazz.getMethod(
210 methodName, parameterTypes);
211
212 arguments = ArrayUtil.append(
213 new Object[] {thisObject}, arguments);
214
215 returnValue = layoutLocalServiceStagingAdviceMethod.invoke(
216 this, arguments);
217 }
218 catch (InvocationTargetException ite) {
219 throw ite.getTargetException();
220 }
221 catch (NoSuchMethodException nsme) {
222 returnValue = methodInvocation.proceed();
223 }
224 }
225
226 returnValue = wrapReturnValue(returnValue, showIncomplete);
227
228 return returnValue;
229 }
230
231 public Layout updateLayout(
232 LayoutLocalService layoutLocalService, long groupId,
233 boolean privateLayout, long layoutId, long parentLayoutId,
234 Map<Locale, String> nameMap, Map<Locale, String> titleMap,
235 Map<Locale, String> descriptionMap, Map<Locale, String> keywordsMap,
236 Map<Locale, String> robotsMap, String type, boolean hidden,
237 Map<Locale, String> friendlyURLMap, Boolean iconImage,
238 byte[] iconBytes, ServiceContext serviceContext)
239 throws PortalException, SystemException {
240
241
242
243 parentLayoutId = layoutLocalServiceHelper.getParentLayoutId(
244 groupId, privateLayout, parentLayoutId);
245 String name = nameMap.get(LocaleUtil.getSiteDefault());
246 friendlyURLMap = layoutLocalServiceHelper.getFriendlyURLMap(
247 groupId, privateLayout, layoutId, StringPool.BLANK, friendlyURLMap);
248 String friendlyURL = friendlyURLMap.get(LocaleUtil.getSiteDefault());
249
250 layoutLocalServiceHelper.validate(
251 groupId, privateLayout, layoutId, parentLayoutId, name, type,
252 hidden, friendlyURLMap);
253
254 layoutLocalServiceHelper.validateParentLayoutId(
255 groupId, privateLayout, layoutId, parentLayoutId);
256
257 Layout originalLayout = LayoutUtil.findByG_P_L(
258 groupId, privateLayout, layoutId);
259
260 Layout layout = wrapLayout(originalLayout);
261
262 LayoutRevision layoutRevision = LayoutStagingUtil.getLayoutRevision(
263 layout);
264
265 if (layoutRevision == null) {
266 return layoutLocalService.updateLayout(
267 groupId, privateLayout, layoutId, parentLayoutId, nameMap,
268 titleMap, descriptionMap, keywordsMap, robotsMap, type, hidden,
269 friendlyURLMap, iconImage, iconBytes, serviceContext);
270 }
271
272 if (parentLayoutId != originalLayout.getParentLayoutId()) {
273 int priority = layoutLocalServiceHelper.getNextPriority(
274 groupId, privateLayout, parentLayoutId,
275 originalLayout.getSourcePrototypeLayoutUuid(), -1);
276
277 originalLayout.setPriority(priority);
278 }
279
280 originalLayout.setParentLayoutId(parentLayoutId);
281 layoutRevision.setNameMap(nameMap);
282 layoutRevision.setTitleMap(titleMap);
283 layoutRevision.setDescriptionMap(descriptionMap);
284 layoutRevision.setKeywordsMap(keywordsMap);
285 layoutRevision.setRobotsMap(robotsMap);
286 originalLayout.setType(type);
287 originalLayout.setHidden(hidden);
288 originalLayout.setFriendlyURL(friendlyURL);
289
290 if (iconImage != null) {
291 layoutRevision.setIconImage(iconImage.booleanValue());
292
293 if (iconImage.booleanValue()) {
294 long iconImageId = layoutRevision.getIconImageId();
295
296 if (iconImageId <= 0) {
297 iconImageId = CounterLocalServiceUtil.increment();
298
299 layoutRevision.setIconImageId(iconImageId);
300 }
301 }
302 }
303
304 boolean layoutPrototypeLinkEnabled = ParamUtil.getBoolean(
305 serviceContext, "layoutPrototypeLinkEnabled", true);
306
307 originalLayout.setLayoutPrototypeLinkEnabled(
308 layoutPrototypeLinkEnabled);
309
310 originalLayout.setExpandoBridgeAttributes(serviceContext);
311
312 LayoutUtil.update(originalLayout);
313
314 LayoutFriendlyURLLocalServiceUtil.updateLayoutFriendlyURLs(
315 originalLayout.getUserId(), originalLayout.getCompanyId(),
316 originalLayout.getGroupId(), originalLayout.getPlid(),
317 originalLayout.isPrivateLayout(), friendlyURLMap, serviceContext);
318
319 boolean hasWorkflowTask = StagingUtil.hasWorkflowTask(
320 serviceContext.getUserId(), layoutRevision);
321
322 serviceContext.setAttribute("revisionInProgress", hasWorkflowTask);
323
324 serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
325
326 LayoutRevisionLocalServiceUtil.updateLayoutRevision(
327 serviceContext.getUserId(), layoutRevision.getLayoutRevisionId(),
328 layoutRevision.getLayoutBranchId(), layoutRevision.getName(),
329 layoutRevision.getTitle(), layoutRevision.getDescription(),
330 layoutRevision.getKeywords(), layoutRevision.getRobots(),
331 layoutRevision.getTypeSettings(), layoutRevision.getIconImage(),
332 layoutRevision.getIconImageId(), layoutRevision.getThemeId(),
333 layoutRevision.getColorSchemeId(), layoutRevision.getWapThemeId(),
334 layoutRevision.getWapColorSchemeId(), layoutRevision.getCss(),
335 serviceContext);
336
337
338
339 if (iconImage != null) {
340 if (ArrayUtil.isNotEmpty(iconBytes)) {
341 ImageLocalServiceUtil.updateImage(
342 layoutRevision.getIconImageId(), iconBytes);
343 }
344 }
345
346 return layout;
347 }
348
349 public Layout updateLayout(
350 LayoutLocalService layoutLocalService, long groupId,
351 boolean privateLayout, long layoutId, String typeSettings)
352 throws PortalException, SystemException {
353
354 Layout layout = LayoutUtil.findByG_P_L(
355 groupId, privateLayout, layoutId);
356
357 layout = wrapLayout(layout);
358
359 LayoutRevision layoutRevision = LayoutStagingUtil.getLayoutRevision(
360 layout);
361
362 if (layoutRevision == null) {
363 return layoutLocalService.updateLayout(
364 groupId, privateLayout, layoutId, typeSettings);
365 }
366
367 layout.setTypeSettings(typeSettings);
368
369 ServiceContext serviceContext =
370 ServiceContextThreadLocal.getServiceContext();
371
372 boolean hasWorkflowTask = StagingUtil.hasWorkflowTask(
373 serviceContext.getUserId(), layoutRevision);
374
375 serviceContext.setAttribute("revisionInProgress", hasWorkflowTask);
376
377 if (!MergeLayoutPrototypesThreadLocal.isInProgress()) {
378 serviceContext.setWorkflowAction(
379 WorkflowConstants.ACTION_SAVE_DRAFT);
380 }
381
382 LayoutRevisionLocalServiceUtil.updateLayoutRevision(
383 serviceContext.getUserId(), layoutRevision.getLayoutRevisionId(),
384 layoutRevision.getLayoutBranchId(), layoutRevision.getName(),
385 layoutRevision.getTitle(), layoutRevision.getDescription(),
386 layoutRevision.getKeywords(), layoutRevision.getRobots(),
387 layoutRevision.getTypeSettings(), layoutRevision.getIconImage(),
388 layoutRevision.getIconImageId(), layoutRevision.getThemeId(),
389 layoutRevision.getColorSchemeId(), layoutRevision.getWapThemeId(),
390 layoutRevision.getWapColorSchemeId(), layoutRevision.getCss(),
391 serviceContext);
392
393 return layout;
394 }
395
396 public Layout updateLookAndFeel(
397 LayoutLocalService layoutLocalService, long groupId,
398 boolean privateLayout, long layoutId, String themeId,
399 String colorSchemeId, String css, boolean wapTheme)
400 throws PortalException, SystemException {
401
402 Layout layout = LayoutUtil.findByG_P_L(
403 groupId, privateLayout, layoutId);
404
405 layout = wrapLayout(layout);
406
407 LayoutRevision layoutRevision = LayoutStagingUtil.getLayoutRevision(
408 layout);
409
410 if (layoutRevision == null) {
411 return layoutLocalService.updateLookAndFeel(
412 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
413 wapTheme);
414 }
415
416 if (wapTheme) {
417 layout.setWapThemeId(themeId);
418 layout.setWapColorSchemeId(colorSchemeId);
419 }
420 else {
421 layout.setThemeId(themeId);
422 layout.setColorSchemeId(colorSchemeId);
423 layout.setCss(css);
424 }
425
426 ServiceContext serviceContext =
427 ServiceContextThreadLocal.getServiceContext();
428
429 boolean hasWorkflowTask = StagingUtil.hasWorkflowTask(
430 serviceContext.getUserId(), layoutRevision);
431
432 serviceContext.setAttribute("revisionInProgress", hasWorkflowTask);
433
434 if (!MergeLayoutPrototypesThreadLocal.isInProgress()) {
435 serviceContext.setWorkflowAction(
436 WorkflowConstants.ACTION_SAVE_DRAFT);
437 }
438
439 LayoutRevisionLocalServiceUtil.updateLayoutRevision(
440 serviceContext.getUserId(), layoutRevision.getLayoutRevisionId(),
441 layoutRevision.getLayoutBranchId(), layoutRevision.getName(),
442 layoutRevision.getTitle(), layoutRevision.getDescription(),
443 layoutRevision.getKeywords(), layoutRevision.getRobots(),
444 layoutRevision.getTypeSettings(), layoutRevision.getIconImage(),
445 layoutRevision.getIconImageId(), layoutRevision.getThemeId(),
446 layoutRevision.getColorSchemeId(), layoutRevision.getWapThemeId(),
447 layoutRevision.getWapColorSchemeId(), layoutRevision.getCss(),
448 serviceContext);
449
450 return layout;
451 }
452
453 public Layout updateName(
454 LayoutLocalService layoutLocalService, Layout layout, String name,
455 String languageId)
456 throws PortalException, SystemException {
457
458 layout = wrapLayout(layout);
459
460 LayoutRevision layoutRevision = LayoutStagingUtil.getLayoutRevision(
461 layout);
462
463 if (layoutRevision == null) {
464 return layoutLocalService.updateName(layout, name, languageId);
465 }
466
467 layoutLocalServiceHelper.validateName(name, languageId);
468
469 layout.setName(name, LocaleUtil.fromLanguageId(languageId));
470
471 ServiceContext serviceContext =
472 ServiceContextThreadLocal.getServiceContext();
473
474 boolean hasWorkflowTask = StagingUtil.hasWorkflowTask(
475 serviceContext.getUserId(), layoutRevision);
476
477 serviceContext.setAttribute("revisionInProgress", hasWorkflowTask);
478
479 serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
480
481 LayoutRevisionLocalServiceUtil.updateLayoutRevision(
482 serviceContext.getUserId(), layoutRevision.getLayoutRevisionId(),
483 layoutRevision.getLayoutBranchId(), layoutRevision.getName(),
484 layoutRevision.getTitle(), layoutRevision.getDescription(),
485 layoutRevision.getKeywords(), layoutRevision.getRobots(),
486 layoutRevision.getTypeSettings(), layoutRevision.getIconImage(),
487 layoutRevision.getIconImageId(), layoutRevision.getThemeId(),
488 layoutRevision.getColorSchemeId(), layoutRevision.getWapThemeId(),
489 layoutRevision.getWapColorSchemeId(), layoutRevision.getCss(),
490 serviceContext);
491
492 return layout;
493 }
494
495 protected void doDeleteLayout(
496 LayoutLocalService layoutLocalService, Layout layout,
497 boolean updateLayoutSet, ServiceContext serviceContext)
498 throws PortalException, SystemException {
499
500 if (SystemEventHierarchyEntryThreadLocal.push(
501 Layout.class, layout.getPlid()) == null) {
502
503 layoutLocalService.deleteLayout(
504 layout, updateLayoutSet, serviceContext);
505 }
506 else {
507 try {
508 layoutLocalService.deleteLayout(
509 layout, updateLayoutSet, serviceContext);
510
511 SystemEventHierarchyEntry systemEventHierarchyEntry =
512 SystemEventHierarchyEntryThreadLocal.peek();
513
514 SystemEventLocalServiceUtil.addSystemEvent(
515 0, layout.getGroupId(), Layout.class.getName(),
516 layout.getPlid(), layout.getUuid(), null,
517 SystemEventConstants.TYPE_DELETE,
518 systemEventHierarchyEntry.getExtraData());
519 }
520 finally {
521 SystemEventHierarchyEntryThreadLocal.pop();
522 }
523 }
524 }
525
526 protected Layout getProxiedLayout(Layout layout) {
527 Map<Layout, Object> proxiedLayouts =
528 ProxiedLayoutsThreadLocal.getProxiedLayouts();
529
530 Object proxiedLayout = proxiedLayouts.get(layout);
531
532 if (proxiedLayout != null) {
533 return (Layout)proxiedLayout;
534 }
535
536 proxiedLayout = ProxyUtil.newProxyInstance(
537 ClassLoaderUtil.getPortalClassLoader(), new Class[] {Layout.class},
538 new LayoutStagingHandler(layout));
539
540 proxiedLayouts.put(layout, proxiedLayout);
541
542 return (Layout)proxiedLayout;
543 }
544
545 protected Layout unwrapLayout(Layout layout) {
546 LayoutStagingHandler layoutStagingHandler =
547 LayoutStagingUtil.getLayoutStagingHandler(layout);
548
549 if (layoutStagingHandler == null) {
550 return layout;
551 }
552
553 return layoutStagingHandler.getLayout();
554 }
555
556 protected Layout wrapLayout(Layout layout) {
557 LayoutStagingHandler layoutStagingHandler =
558 LayoutStagingUtil.getLayoutStagingHandler(layout);
559
560 if (layoutStagingHandler != null) {
561 return layout;
562 }
563
564 if (!LayoutStagingUtil.isBranchingLayout(layout)) {
565 return layout;
566 }
567
568 return getProxiedLayout(layout);
569 }
570
571 protected List<Layout> wrapLayouts(
572 List<Layout> layouts, boolean showIncomplete) {
573
574 if (layouts.isEmpty()) {
575 return layouts;
576 }
577
578 Layout firstLayout = layouts.get(0);
579
580 Layout wrappedFirstLayout = wrapLayout(firstLayout);
581
582 if (wrappedFirstLayout == firstLayout) {
583 return layouts;
584 }
585
586 long layoutSetBranchId = 0;
587
588 if (!showIncomplete) {
589 try {
590 long userId = GetterUtil.getLong(
591 PrincipalThreadLocal.getName());
592
593 if (userId > 0) {
594 User user = UserLocalServiceUtil.getUser(userId);
595
596 LayoutSet layoutSet = firstLayout.getLayoutSet();
597
598 layoutSetBranchId = StagingUtil.getRecentLayoutSetBranchId(
599 user, layoutSet.getLayoutSetId());
600 }
601 }
602 catch (Exception e) {
603 }
604 }
605
606 List<Layout> wrappedLayouts = new ArrayList<Layout>(layouts.size());
607
608 for (int i = 0; i < layouts.size(); i++) {
609 Layout wrappedLayout = wrapLayout(layouts.get(i));
610
611 if (showIncomplete ||
612 !StagingUtil.isIncomplete(wrappedLayout, layoutSetBranchId)) {
613
614 wrappedLayouts.add(wrappedLayout);
615 }
616 }
617
618 return wrappedLayouts;
619 }
620
621 protected Object wrapReturnValue(
622 Object returnValue, boolean showIncomplete) {
623
624 if (returnValue instanceof Layout) {
625 returnValue = wrapLayout((Layout)returnValue);
626 }
627 else if (returnValue instanceof List<?>) {
628 List<?> list = (List<?>)returnValue;
629
630 if (!list.isEmpty()) {
631 Object object = list.get(0);
632
633 if (object instanceof Layout) {
634 returnValue = wrapLayouts(
635 (List<Layout>)returnValue, showIncomplete);
636 }
637 }
638 }
639
640 return returnValue;
641 }
642
643 @BeanReference(type = LayoutLocalServiceHelper.class)
644 protected LayoutLocalServiceHelper layoutLocalServiceHelper;
645
646 private static final Class<?>[] _UPDATE_LAYOUT_PARAMETER_TYPES = {
647 long.class, boolean.class, long.class, long.class, Map.class, Map.class,
648 Map.class, Map.class, Map.class, String.class, boolean.class,
649 String.class, Boolean.class, byte[].class, ServiceContext.class
650 };
651
652 private static Log _log = LogFactoryUtil.getLog(
653 LayoutLocalServiceStagingAdvice.class);
654
655 private static Set<String> _layoutLocalServiceStagingAdviceMethodNames =
656 new HashSet<String>();
657
658 static {
659 _layoutLocalServiceStagingAdviceMethodNames.add("createLayout");
660 _layoutLocalServiceStagingAdviceMethodNames.add("deleteLayout");
661 _layoutLocalServiceStagingAdviceMethodNames.add("getLayouts");
662 _layoutLocalServiceStagingAdviceMethodNames.add("updateLayout");
663 _layoutLocalServiceStagingAdviceMethodNames.add("updateLookAndFeel");
664 _layoutLocalServiceStagingAdviceMethodNames.add("updateName");
665 }
666
667 }