001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.LayoutSetVirtualHostException;
018 import com.liferay.portal.NoSuchLayoutException;
019 import com.liferay.portal.NoSuchVirtualHostException;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.exception.SystemException;
022 import com.liferay.portal.kernel.util.Http;
023 import com.liferay.portal.kernel.util.PropsKeys;
024 import com.liferay.portal.kernel.util.StringPool;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.model.Group;
027 import com.liferay.portal.model.Layout;
028 import com.liferay.portal.model.LayoutConstants;
029 import com.liferay.portal.model.LayoutSet;
030 import com.liferay.portal.model.VirtualHost;
031 import com.liferay.portal.model.impl.ColorSchemeImpl;
032 import com.liferay.portal.model.impl.ThemeImpl;
033 import com.liferay.portal.service.ServiceContext;
034 import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
035 import com.liferay.portal.util.PrefsPropsUtil;
036 import com.liferay.portal.util.PropsValues;
037
038 import java.io.File;
039 import java.io.FileInputStream;
040 import java.io.IOException;
041 import java.io.InputStream;
042
043 import java.util.List;
044
045
050 public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
051
052 public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
053 throws PortalException, SystemException {
054
055 Group group = groupPersistence.findByPrimaryKey(groupId);
056
057 long layoutSetId = counterLocalService.increment();
058
059 LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
060
061 layoutSet.setGroupId(groupId);
062 layoutSet.setCompanyId(group.getCompanyId());
063 layoutSet.setPrivateLayout(privateLayout);
064
065 if (group.isStagingGroup()) {
066 LayoutSet liveLayoutSet = null;
067
068 Group liveGroup = group.getLiveGroup();
069
070 if (privateLayout) {
071 liveLayoutSet = liveGroup.getPrivateLayoutSet();
072 }
073 else {
074 liveLayoutSet = liveGroup.getPublicLayoutSet();
075 }
076
077 layoutSet.setLogo(liveLayoutSet.getLogo());
078 layoutSet.setLogoId(liveLayoutSet.getLogoId());
079 layoutSet.setThemeId(liveLayoutSet.getThemeId());
080 layoutSet.setColorSchemeId(liveLayoutSet.getColorSchemeId());
081 layoutSet.setWapThemeId(liveLayoutSet.getWapThemeId());
082 layoutSet.setWapColorSchemeId(liveLayoutSet.getWapColorSchemeId());
083 layoutSet.setCss(liveLayoutSet.getCss());
084 }
085 else {
086 layoutSet.setThemeId(
087 ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
088 layoutSet.setColorSchemeId(
089 ColorSchemeImpl.getDefaultRegularColorSchemeId());
090 layoutSet.setWapThemeId(
091 ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
092 layoutSet.setWapColorSchemeId(
093 ColorSchemeImpl.getDefaultWapColorSchemeId());
094 layoutSet.setCss(StringPool.BLANK);
095 }
096
097 layoutSetPersistence.update(layoutSet, false);
098
099 return layoutSet;
100 }
101
102 public void deleteLayoutSet(
103 long groupId, boolean privateLayout, ServiceContext serviceContext)
104 throws PortalException, SystemException {
105
106 Group group = groupPersistence.findByPrimaryKey(groupId);
107
108 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
109 groupId, privateLayout);
110
111
112
113 List<Layout> layouts = layoutPersistence.findByG_P_P(
114 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
115
116 for (Layout layout : layouts) {
117 try {
118 layoutLocalService.deleteLayout(layout, false, serviceContext);
119 }
120 catch (NoSuchLayoutException nsle) {
121 }
122 }
123
124
125
126 imageLocalService.deleteImage(layoutSet.getLogoId());
127
128
129
130 if (group.isOrganization() && group.isSite()) {
131 layoutSet.setPageCount(0);
132
133 layoutSetPersistence.update(layoutSet, false);
134 }
135 else {
136 layoutSetPersistence.removeByG_P(groupId, privateLayout);
137 }
138
139
140
141 counterLocalService.reset(
142 LayoutLocalServiceImpl.getCounterName(groupId, privateLayout));
143
144
145
146 try {
147 virtualHostPersistence.removeByC_L(
148 layoutSet.getCompanyId(), layoutSet.getLayoutSetId());
149 }
150 catch (NoSuchVirtualHostException nsvhe) {
151 }
152 }
153
154 public LayoutSet fetchLayoutSet(String virtualHostname)
155 throws SystemException {
156
157 virtualHostname = virtualHostname.trim().toLowerCase();
158
159 VirtualHost virtualHost = virtualHostPersistence.fetchByHostname(
160 virtualHostname);
161
162 if ((virtualHost == null) || (virtualHost.getLayoutSetId() == 0)) {
163 return null;
164 }
165
166 return layoutSetPersistence.fetchByPrimaryKey(
167 virtualHost.getLayoutSetId());
168 }
169
170 public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
171 throws PortalException, SystemException {
172
173 return layoutSetPersistence.findByG_P(groupId, privateLayout);
174 }
175
176 public LayoutSet getLayoutSet(String virtualHostname)
177 throws PortalException, SystemException {
178
179 virtualHostname = virtualHostname.trim().toLowerCase();
180
181 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
182 virtualHostname);
183
184 if (virtualHost.getLayoutSetId() == 0) {
185 throw new LayoutSetVirtualHostException(
186 "Virtual host is associated with company " +
187 virtualHost.getCompanyId());
188 }
189
190 return layoutSetPersistence.findByPrimaryKey(
191 virtualHost.getLayoutSetId());
192 }
193
194 public List<LayoutSet> getLayoutSetsByLayoutSetPrototypeUuid(
195 String layoutSetPrototypeUuid)
196 throws SystemException {
197
198 return layoutSetPersistence.findByLayoutSetPrototypeUuid(
199 layoutSetPrototypeUuid);
200 }
201
202 public void updateLogo(
203 long groupId, boolean privateLayout, boolean logo, File file)
204 throws PortalException, SystemException {
205
206 InputStream is = null;
207
208 if (logo) {
209 try{
210 is = new FileInputStream(file);
211 }
212 catch (IOException ioe) {
213 throw new SystemException(ioe);
214 }
215 }
216
217 updateLogo(groupId, privateLayout, logo, is);
218 }
219
220 public void updateLogo(
221 long groupId, boolean privateLayout, boolean logo, InputStream is)
222 throws PortalException, SystemException {
223
224 updateLogo(groupId, privateLayout, logo, is, true);
225 }
226
227 public void updateLogo(
228 long groupId, boolean privateLayout, boolean logo, InputStream is,
229 boolean cleanUpStream)
230 throws PortalException, SystemException {
231
232 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
233 groupId, privateLayout);
234
235 layoutSet.setLogo(logo);
236
237 if (logo) {
238 long logoId = layoutSet.getLogoId();
239
240 if (logoId <= 0) {
241 logoId = counterLocalService.increment();
242
243 layoutSet.setLogoId(logoId);
244 }
245 }
246
247 layoutSetPersistence.update(layoutSet, false);
248
249 if (logo) {
250 imageLocalService.updateImage(
251 layoutSet.getLogoId(), is, cleanUpStream);
252 }
253 else {
254 imageLocalService.deleteImage(layoutSet.getLogoId());
255 }
256 }
257
258 public void updateLookAndFeel(
259 long groupId, String themeId, String colorSchemeId, String css,
260 boolean wapTheme)
261 throws PortalException, SystemException {
262
263 updateLookAndFeel(
264 groupId, false, themeId, colorSchemeId, css, wapTheme);
265 updateLookAndFeel(
266 groupId, true, themeId, colorSchemeId, css, wapTheme);
267 }
268
269 public LayoutSet updateLookAndFeel(
270 long groupId, boolean privateLayout, String themeId,
271 String colorSchemeId, String css, boolean wapTheme)
272 throws PortalException, SystemException {
273
274 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
275 groupId, privateLayout);
276
277 if (Validator.isNull(themeId)) {
278 themeId = ThemeImpl.getDefaultRegularThemeId(
279 layoutSet.getCompanyId());
280 }
281
282 if (Validator.isNull(colorSchemeId)) {
283 colorSchemeId = ColorSchemeImpl.getDefaultRegularColorSchemeId();
284 }
285
286 if (wapTheme) {
287 layoutSet.setWapThemeId(themeId);
288 layoutSet.setWapColorSchemeId(colorSchemeId);
289 }
290 else {
291 layoutSet.setThemeId(themeId);
292 layoutSet.setColorSchemeId(colorSchemeId);
293 layoutSet.setCss(css);
294 }
295
296 layoutSetPersistence.update(layoutSet, false);
297
298 if (PrefsPropsUtil.getBoolean(
299 PropsKeys.THEME_SYNC_ON_GROUP,
300 PropsValues.THEME_SYNC_ON_GROUP)) {
301
302 LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
303 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
304
305 if (wapTheme) {
306 otherLayoutSet.setWapThemeId(themeId);
307 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
308 }
309 else {
310 otherLayoutSet.setThemeId(themeId);
311 otherLayoutSet.setColorSchemeId(colorSchemeId);
312 }
313
314 layoutSetPersistence.update(otherLayoutSet, false);
315 }
316
317 return layoutSet;
318 }
319
320 public LayoutSet updatePageCount(long groupId, boolean privateLayout)
321 throws PortalException, SystemException {
322
323 int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
324
325 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
326 groupId, privateLayout);
327
328 layoutSet.setPageCount(pageCount);
329
330 layoutSetPersistence.update(layoutSet, false);
331
332 return layoutSet;
333 }
334
335 public LayoutSet updateSettings(
336 long groupId, boolean privateLayout, String settings)
337 throws PortalException, SystemException {
338
339 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
340 groupId, privateLayout);
341
342 layoutSet.setSettings(settings);
343
344 layoutSetPersistence.update(layoutSet, false);
345
346 return layoutSet;
347 }
348
349 public LayoutSet updateVirtualHost(
350 long groupId, boolean privateLayout, String virtualHostname)
351 throws PortalException, SystemException {
352
353 virtualHostname = virtualHostname.trim().toLowerCase();
354
355 if (virtualHostname.startsWith(Http.HTTP_WITH_SLASH) ||
356 virtualHostname.startsWith(Http.HTTPS_WITH_SLASH)) {
357
358 throw new LayoutSetVirtualHostException();
359 }
360
361 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
362 groupId, privateLayout);
363
364 if (Validator.isNotNull(virtualHostname)) {
365 try {
366 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
367 virtualHostname);
368
369 if ((virtualHost.getCompanyId() != layoutSet.getCompanyId()) ||
370 (virtualHost.getLayoutSetId() !=
371 layoutSet.getLayoutSetId())) {
372
373 throw new LayoutSetVirtualHostException();
374 }
375 }
376 catch (NoSuchVirtualHostException nsvhe) {
377 virtualHostLocalService.updateVirtualHost(
378 layoutSet.getCompanyId(), layoutSet.getLayoutSetId(),
379 virtualHostname);
380 }
381 }
382 else {
383 try {
384 virtualHostPersistence.removeByC_L(
385 layoutSet.getCompanyId(), layoutSet.getLayoutSetId());
386 }
387 catch (NoSuchVirtualHostException nsvhe) {
388 }
389 }
390
391 return layoutSet;
392 }
393
394 }