001
014
015 package com.liferay.portlet.layoutsadmin.lar;
016
017 import com.liferay.portal.kernel.dao.orm.QueryUtil;
018 import com.liferay.portal.kernel.spring.osgi.OSGiBeanProperties;
019 import com.liferay.portal.kernel.util.MapUtil;
020 import com.liferay.portal.kernel.util.StringPool;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.kernel.xml.Element;
023 import com.liferay.portal.model.Layout;
024 import com.liferay.portal.model.LayoutFriendlyURL;
025 import com.liferay.portal.service.LayoutFriendlyURLLocalServiceUtil;
026 import com.liferay.portal.service.LayoutLocalServiceUtil;
027 import com.liferay.portal.service.ServiceContext;
028 import com.liferay.portlet.exportimport.lar.BaseStagedModelDataHandler;
029 import com.liferay.portlet.exportimport.lar.ExportImportPathUtil;
030 import com.liferay.portlet.exportimport.lar.PortletDataContext;
031 import com.liferay.portlet.exportimport.lar.StagedModelModifiedDateComparator;
032
033 import java.util.List;
034 import java.util.Map;
035
036
039 @OSGiBeanProperties
040 public class LayoutFriendlyURLStagedModelDataHandler
041 extends BaseStagedModelDataHandler<LayoutFriendlyURL> {
042
043 public static final String[] CLASS_NAMES =
044 {LayoutFriendlyURL.class.getName()};
045
046 @Override
047 public void deleteStagedModel(LayoutFriendlyURL layoutFriendlyURL) {
048 LayoutFriendlyURLLocalServiceUtil.deleteLayoutFriendlyURL(
049 layoutFriendlyURL);
050 }
051
052 @Override
053 public void deleteStagedModel(
054 String uuid, long groupId, String className, String extraData) {
055
056 LayoutFriendlyURL layoutFriendlyURL = fetchStagedModelByUuidAndGroupId(
057 uuid, groupId);
058
059 deleteStagedModel(layoutFriendlyURL);
060 }
061
062 @Override
063 public LayoutFriendlyURL fetchStagedModelByUuidAndGroupId(
064 String uuid, long groupId) {
065
066 return LayoutFriendlyURLLocalServiceUtil.
067 fetchLayoutFriendlyURLByUuidAndGroupId(uuid, groupId);
068 }
069
070 @Override
071 public List<LayoutFriendlyURL> fetchStagedModelsByUuidAndCompanyId(
072 String uuid, long companyId) {
073
074 return LayoutFriendlyURLLocalServiceUtil.
075 getLayoutFriendlyURLsByUuidAndCompanyId(
076 uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
077 new StagedModelModifiedDateComparator<LayoutFriendlyURL>());
078 }
079
080 @Override
081 public String[] getClassNames() {
082 return CLASS_NAMES;
083 }
084
085 @Override
086 protected void doExportStagedModel(
087 PortletDataContext portletDataContext,
088 LayoutFriendlyURL layoutFriendlyURL)
089 throws Exception {
090
091 Element layoutFriendlyURLElement =
092 portletDataContext.getExportDataElement(layoutFriendlyURL);
093
094 portletDataContext.addClassedModel(
095 layoutFriendlyURLElement,
096 ExportImportPathUtil.getModelPath(layoutFriendlyURL),
097 layoutFriendlyURL);
098 }
099
100 @Override
101 protected void doImportStagedModel(
102 PortletDataContext portletDataContext,
103 LayoutFriendlyURL layoutFriendlyURL)
104 throws Exception {
105
106 long userId = portletDataContext.getUserId(
107 layoutFriendlyURL.getUserUuid());
108
109 Map<Long, Long> plids =
110 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
111 Layout.class);
112
113 long plid = MapUtil.getLong(
114 plids, layoutFriendlyURL.getPlid(), layoutFriendlyURL.getPlid());
115
116 ServiceContext serviceContext = portletDataContext.createServiceContext(
117 layoutFriendlyURL);
118
119 LayoutFriendlyURL importedLayoutFriendlyURL = null;
120
121 LayoutFriendlyURL existingLayoutFriendlyURL =
122 fetchExistingLayoutFriendlyURL(
123 portletDataContext, layoutFriendlyURL, plid);
124
125 layoutFriendlyURL = getUniqueLayoutFriendlyURL(
126 portletDataContext, layoutFriendlyURL, existingLayoutFriendlyURL);
127
128 if (existingLayoutFriendlyURL == null) {
129 serviceContext.setUuid(layoutFriendlyURL.getUuid());
130
131 String friendlyURL = layoutFriendlyURL.getFriendlyURL();
132
133 if (Validator.isNumber(friendlyURL.substring(1))) {
134 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
135
136 friendlyURL = StringPool.SLASH + layout.getLayoutId();
137 }
138
139 importedLayoutFriendlyURL =
140 LayoutFriendlyURLLocalServiceUtil.addLayoutFriendlyURL(
141 userId, portletDataContext.getCompanyId(),
142 portletDataContext.getScopeGroupId(), plid,
143 portletDataContext.isPrivateLayout(), friendlyURL,
144 layoutFriendlyURL.getLanguageId(), serviceContext);
145 }
146 else {
147 importedLayoutFriendlyURL =
148 LayoutFriendlyURLLocalServiceUtil.updateLayoutFriendlyURL(
149 userId, portletDataContext.getCompanyId(),
150 portletDataContext.getScopeGroupId(), plid,
151 portletDataContext.isPrivateLayout(),
152 layoutFriendlyURL.getFriendlyURL(),
153 layoutFriendlyURL.getLanguageId(), serviceContext);
154 }
155
156 portletDataContext.importClassedModel(
157 layoutFriendlyURL, importedLayoutFriendlyURL);
158 }
159
160 protected LayoutFriendlyURL fetchExistingLayoutFriendlyURL(
161 PortletDataContext portletDataContext,
162 LayoutFriendlyURL layoutFriendlyURL, long plid) {
163
164 LayoutFriendlyURL existingLayoutFriendlyURL =
165 fetchStagedModelByUuidAndGroupId(
166 layoutFriendlyURL.getUuid(),
167 portletDataContext.getScopeGroupId());
168
169 if (existingLayoutFriendlyURL == null) {
170 existingLayoutFriendlyURL =
171 LayoutFriendlyURLLocalServiceUtil.fetchLayoutFriendlyURL(
172 plid, layoutFriendlyURL.getLanguageId(), false);
173 }
174
175 return existingLayoutFriendlyURL;
176 }
177
178 protected LayoutFriendlyURL getUniqueLayoutFriendlyURL(
179 PortletDataContext portletDataContext,
180 LayoutFriendlyURL layoutFriendlyURL,
181 LayoutFriendlyURL existingLayoutFriendlyURL)
182 throws Exception {
183
184 String friendlyURL = layoutFriendlyURL.getFriendlyURL();
185
186 for (int i = 1;; i++) {
187 LayoutFriendlyURL duplicateLayoutFriendlyURL =
188 LayoutFriendlyURLLocalServiceUtil.fetchLayoutFriendlyURL(
189 portletDataContext.getScopeGroupId(),
190 layoutFriendlyURL.isPrivateLayout(),
191 layoutFriendlyURL.getFriendlyURL(),
192 layoutFriendlyURL.getLanguageId());
193
194 if ((duplicateLayoutFriendlyURL == null) ||
195 ((existingLayoutFriendlyURL != null) &&
196 (existingLayoutFriendlyURL.getLayoutFriendlyURLId() ==
197 duplicateLayoutFriendlyURL.getLayoutFriendlyURLId()))) {
198
199 break;
200 }
201
202 layoutFriendlyURL.setFriendlyURL(friendlyURL + i);
203 }
204
205 return layoutFriendlyURL;
206 }
207
208 }