001    /**
002     * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
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    /**
046     * @author Brian Wing Shun Chan
047     * @author Julio Camarero
048     * @author Ganesh Ram
049     */
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                    // Layouts
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                    // Logo
125    
126                    imageLocalService.deleteImage(layoutSet.getLogoId());
127    
128                    // Layout set
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                    // Counter
140    
141                    counterLocalService.reset(
142                            LayoutLocalServiceImpl.getCounterName(groupId, privateLayout));
143    
144                    // Virtual host
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    }