001    /**
002     * Copyright (c) 2000-2010 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.NoSuchCompanyException;
019    import com.liferay.portal.NoSuchLayoutException;
020    import com.liferay.portal.NoSuchLayoutSetException;
021    import com.liferay.portal.kernel.exception.PortalException;
022    import com.liferay.portal.kernel.exception.SystemException;
023    import com.liferay.portal.kernel.util.Http;
024    import com.liferay.portal.kernel.util.PropsKeys;
025    import com.liferay.portal.kernel.util.StringPool;
026    import com.liferay.portal.kernel.util.Validator;
027    import com.liferay.portal.model.Group;
028    import com.liferay.portal.model.Layout;
029    import com.liferay.portal.model.LayoutConstants;
030    import com.liferay.portal.model.LayoutSet;
031    import com.liferay.portal.model.impl.ColorSchemeImpl;
032    import com.liferay.portal.model.impl.ThemeImpl;
033    import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
034    import com.liferay.portal.util.PrefsPropsUtil;
035    import com.liferay.portal.util.PropsValues;
036    
037    import java.io.File;
038    import java.io.FileInputStream;
039    import java.io.IOException;
040    import java.io.InputStream;
041    
042    import java.util.List;
043    
044    /**
045     * @author Brian Wing Shun Chan
046     * @author Julio Camarero
047     * @author Ganesh Ram
048     */
049    public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
050    
051            public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
052                    throws PortalException, SystemException {
053    
054                    Group group = groupPersistence.findByPrimaryKey(groupId);
055    
056                    long layoutSetId = counterLocalService.increment();
057    
058                    LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
059    
060                    layoutSet.setGroupId(groupId);
061                    layoutSet.setCompanyId(group.getCompanyId());
062                    layoutSet.setPrivateLayout(privateLayout);
063                    layoutSet.setThemeId(
064                            ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
065                    layoutSet.setColorSchemeId(
066                            ColorSchemeImpl.getDefaultRegularColorSchemeId());
067                    layoutSet.setWapThemeId(
068                            ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
069                    layoutSet.setWapColorSchemeId(
070                            ColorSchemeImpl.getDefaultWapColorSchemeId());
071                    layoutSet.setCss(StringPool.BLANK);
072    
073                    layoutSetPersistence.update(layoutSet, false);
074    
075                    return layoutSet;
076            }
077    
078            public void deleteLayoutSet(long groupId, boolean privateLayout)
079                    throws PortalException, SystemException {
080    
081                    LayoutSet layoutSet = layoutSetPersistence.findByG_P(
082                            groupId, privateLayout);
083    
084                    // Layouts
085    
086                    List<Layout> layouts = layoutPersistence.findByG_P_P(
087                            groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
088    
089                    for (Layout layout : layouts) {
090                            try {
091                                    layoutLocalService.deleteLayout(layout, false);
092                            }
093                            catch (NoSuchLayoutException nsle) {
094                            }
095                    }
096    
097                    // Logo
098    
099                    imageLocalService.deleteImage(layoutSet.getLogoId());
100    
101                    // Layout set
102    
103                    layoutSetPersistence.removeByG_P(groupId, privateLayout);
104    
105                    // Counter
106    
107                    counterLocalService.reset(
108                            LayoutLocalServiceImpl.getCounterName(groupId, privateLayout));
109            }
110    
111            public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
112                    throws PortalException, SystemException {
113    
114                    return layoutSetPersistence.findByG_P(groupId, privateLayout);
115            }
116    
117            public LayoutSet getLayoutSet(String virtualHost)
118                    throws PortalException, SystemException {
119    
120                    virtualHost = virtualHost.trim().toLowerCase();
121    
122                    return layoutSetPersistence.findByVirtualHost(virtualHost);
123            }
124    
125            public void updateLogo(
126                            long groupId, boolean privateLayout, boolean logo, File file)
127                    throws PortalException, SystemException {
128    
129                    InputStream is = null;
130    
131                    if (logo) {
132                            try{
133                                    is = new FileInputStream(file);
134                            }
135                            catch (IOException ioe) {
136                                    throw new SystemException(ioe);
137                            }
138                    }
139    
140                    updateLogo(groupId, privateLayout, logo, is);
141            }
142    
143            public void updateLogo(
144                            long groupId, boolean privateLayout, boolean logo, InputStream is)
145                    throws PortalException, SystemException {
146    
147                    LayoutSet layoutSet = layoutSetPersistence.findByG_P(
148                            groupId, privateLayout);
149    
150                    layoutSet.setLogo(logo);
151    
152                    if (logo) {
153                            long logoId = layoutSet.getLogoId();
154    
155                            if (logoId <= 0) {
156                                    logoId = counterLocalService.increment();
157    
158                                    layoutSet.setLogoId(logoId);
159                            }
160                    }
161    
162                    layoutSetPersistence.update(layoutSet, false);
163    
164                    if (logo) {
165                            imageLocalService.updateImage(layoutSet.getLogoId(), is);
166                    }
167                    else {
168                            imageLocalService.deleteImage(layoutSet.getLogoId());
169                    }
170            }
171    
172            public void updateLookAndFeel(
173                            long groupId, String themeId, String colorSchemeId, String css,
174                            boolean wapTheme)
175                    throws PortalException, SystemException {
176    
177                    updateLookAndFeel(
178                            groupId, false, themeId, colorSchemeId, css, wapTheme);
179                    updateLookAndFeel(
180                            groupId, true, themeId, colorSchemeId, css, wapTheme);
181            }
182    
183            public LayoutSet updateLookAndFeel(
184                            long groupId, boolean privateLayout, String themeId,
185                            String colorSchemeId, String css, boolean wapTheme)
186                    throws PortalException, SystemException {
187    
188                    LayoutSet layoutSet = layoutSetPersistence.findByG_P(
189                            groupId, privateLayout);
190    
191                    if (wapTheme) {
192                            layoutSet.setWapThemeId(themeId);
193                            layoutSet.setWapColorSchemeId(colorSchemeId);
194                    }
195                    else {
196                            layoutSet.setThemeId(themeId);
197                            layoutSet.setColorSchemeId(colorSchemeId);
198                            layoutSet.setCss(css);
199                    }
200    
201                    layoutSetPersistence.update(layoutSet, false);
202    
203                    if (PrefsPropsUtil.getBoolean(
204                                    PropsKeys.THEME_SYNC_ON_GROUP,
205                                    PropsValues.THEME_SYNC_ON_GROUP)) {
206    
207                            LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
208                                    layoutSet.getGroupId(), layoutSet.isPrivateLayout());
209    
210                            if (wapTheme) {
211                                    otherLayoutSet.setWapThemeId(themeId);
212                                    otherLayoutSet.setWapColorSchemeId(colorSchemeId);
213                            }
214                            else {
215                                    otherLayoutSet.setThemeId(themeId);
216                                    otherLayoutSet.setColorSchemeId(colorSchemeId);
217                            }
218    
219                            layoutSetPersistence.update(otherLayoutSet, false);
220                    }
221    
222                    return layoutSet;
223            }
224    
225            public LayoutSet updatePageCount(long groupId, boolean privateLayout)
226                    throws PortalException, SystemException {
227    
228                    int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
229    
230                    LayoutSet layoutSet = layoutSetPersistence.findByG_P(
231                            groupId, privateLayout);
232    
233                    layoutSet.setPageCount(pageCount);
234    
235                    layoutSetPersistence.update(layoutSet, false);
236    
237                    return layoutSet;
238            }
239    
240            public LayoutSet updateSettings(
241                            long groupId, boolean privateLayout, String settings)
242                    throws PortalException, SystemException {
243    
244                    LayoutSet layoutSet = layoutSetPersistence.findByG_P(
245                            groupId, privateLayout);
246    
247                    layoutSet.setSettings(settings);
248    
249                    layoutSetPersistence.update(layoutSet, false);
250    
251                    return layoutSet;
252            }
253    
254            public LayoutSet updateVirtualHost(
255                            long groupId, boolean privateLayout, String virtualHost)
256                    throws PortalException, SystemException {
257    
258                    virtualHost = virtualHost.trim().toLowerCase();
259    
260                    if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
261                            virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
262    
263                            throw new LayoutSetVirtualHostException();
264                    }
265    
266                    LayoutSet layoutSet = layoutSetPersistence.findByG_P(
267                            groupId, privateLayout);
268    
269                    if (Validator.isNotNull(virtualHost)) {
270                            try {
271                                    LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
272    
273                                    if (!layoutSet.equals(virtualHostLayoutSet)) {
274                                            throw new LayoutSetVirtualHostException();
275                                    }
276                            }
277                            catch (NoSuchLayoutSetException nslse) {
278                            }
279    
280                            try {
281                                    companyLocalService.getCompanyByVirtualHost(virtualHost);
282    
283                                    throw new LayoutSetVirtualHostException();
284                            }
285                            catch (NoSuchCompanyException nsce) {
286                            }
287                    }
288    
289                    layoutSet.setVirtualHost(virtualHost);
290    
291                    layoutSetPersistence.update(layoutSet, false);
292    
293                    return layoutSet;
294            }
295    
296    }