001
014
015 package com.liferay.portal.util;
016
017 import com.liferay.layouts.admin.kernel.util.SitemapURLProvider;
018 import com.liferay.layouts.admin.kernel.util.SitemapUtil;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.model.Layout;
021 import com.liferay.portal.kernel.model.LayoutSet;
022 import com.liferay.portal.kernel.model.LayoutTypeController;
023 import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
024 import com.liferay.portal.kernel.spring.osgi.OSGiBeanProperties;
025 import com.liferay.portal.kernel.theme.ThemeDisplay;
026 import com.liferay.portal.kernel.util.GetterUtil;
027 import com.liferay.portal.kernel.util.LocaleUtil;
028 import com.liferay.portal.kernel.util.PortalUtil;
029 import com.liferay.portal.kernel.util.UnicodeProperties;
030 import com.liferay.portal.kernel.xml.Element;
031
032 import java.util.List;
033 import java.util.Locale;
034 import java.util.Map;
035
036
039 @OSGiBeanProperties
040 public class LayoutSitemapURLProvider implements SitemapURLProvider {
041
042 @Override
043 public String getClassName() {
044 return Layout.class.getName();
045 }
046
047 @Override
048 public void visitLayoutSet(
049 Element element, LayoutSet layoutSet, ThemeDisplay themeDisplay)
050 throws PortalException {
051
052 if (layoutSet.isPrivateLayout()) {
053 return;
054 }
055
056 Map<String, LayoutTypeController> layoutTypeControllers =
057 LayoutTypeControllerTracker.getLayoutTypeControllers();
058
059 for (Map.Entry<String, LayoutTypeController> entry :
060 layoutTypeControllers.entrySet()) {
061
062 LayoutTypeController layoutTypeController = entry.getValue();
063
064 if (!layoutTypeController.isSitemapable()) {
065 continue;
066 }
067
068 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
069 layoutSet.getGroupId(), layoutSet.getPrivateLayout(),
070 entry.getKey());
071
072 for (Layout layout : layouts) {
073 visitLayout(element, layout, themeDisplay);
074 }
075 }
076 }
077
078 protected void visitLayout(
079 Element element, Layout layout, ThemeDisplay themeDisplay)
080 throws PortalException {
081
082 UnicodeProperties typeSettingsProperties =
083 layout.getTypeSettingsProperties();
084
085 if (!GetterUtil.getBoolean(
086 typeSettingsProperties.getProperty("sitemap-include"), true)) {
087
088 return;
089 }
090
091 String layoutFullURL = PortalUtil.getLayoutFullURL(
092 layout, themeDisplay);
093
094 layoutFullURL = PortalUtil.getCanonicalURL(
095 layoutFullURL, themeDisplay, layout);
096
097 Map<Locale, String> alternateURLs = SitemapUtil.getAlternateURLs(
098 layoutFullURL, themeDisplay, layout);
099
100 SitemapUtil.addURLElement(
101 element, layoutFullURL, typeSettingsProperties,
102 layout.getModifiedDate(), layoutFullURL, alternateURLs);
103
104 if (alternateURLs.size() > 1) {
105 Locale defaultLocale = LocaleUtil.getSiteDefault();
106
107 for (Map.Entry<Locale, String> entry : alternateURLs.entrySet()) {
108 Locale availableLocale = entry.getKey();
109 String alternateURL = entry.getValue();
110
111 if (availableLocale.equals(defaultLocale)) {
112 SitemapUtil.addURLElement(
113 element, alternateURL, typeSettingsProperties,
114 layout.getModifiedDate(), layoutFullURL, alternateURLs);
115 }
116 }
117 }
118 }
119
120 }