1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.service.impl;
24  
25  import com.liferay.counter.service.CounterLocalServiceUtil;
26  import com.liferay.portal.LayoutSetVirtualHostException;
27  import com.liferay.portal.NoSuchCompanyException;
28  import com.liferay.portal.NoSuchLayoutException;
29  import com.liferay.portal.NoSuchLayoutSetException;
30  import com.liferay.portal.PortalException;
31  import com.liferay.portal.SystemException;
32  import com.liferay.portal.kernel.util.StringPool;
33  import com.liferay.portal.kernel.util.Validator;
34  import com.liferay.portal.model.Group;
35  import com.liferay.portal.model.Layout;
36  import com.liferay.portal.model.LayoutSet;
37  import com.liferay.portal.model.impl.ColorSchemeImpl;
38  import com.liferay.portal.model.impl.LayoutImpl;
39  import com.liferay.portal.model.impl.ThemeImpl;
40  import com.liferay.portal.service.CompanyLocalServiceUtil;
41  import com.liferay.portal.service.LayoutLocalServiceUtil;
42  import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
43  import com.liferay.portal.service.persistence.GroupUtil;
44  import com.liferay.portal.service.persistence.LayoutSetUtil;
45  import com.liferay.portal.service.persistence.LayoutUtil;
46  import com.liferay.portal.util.PrefsPropsUtil;
47  import com.liferay.portal.util.PropsUtil;
48  import com.liferay.util.Http;
49  
50  import java.io.File;
51  
52  import java.util.Iterator;
53  import java.util.List;
54  
55  /**
56   * <a href="LayoutSetLocalServiceImpl.java.html"><b><i>View Source</i></b></a>
57   *
58   * @author Brian Wing Shun Chan
59   *
60   */
61  public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
62  
63      public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
64          throws PortalException, SystemException {
65  
66          Group group = GroupUtil.findByPrimaryKey(groupId);
67  
68          long layoutSetId = CounterLocalServiceUtil.increment();
69  
70          LayoutSet layoutSet = LayoutSetUtil.create(layoutSetId);
71  
72          layoutSet.setGroupId(groupId);
73          layoutSet.setCompanyId(group.getCompanyId());
74          layoutSet.setPrivateLayout(privateLayout);
75          layoutSet.setThemeId(ThemeImpl.getDefaultRegularThemeId());
76          layoutSet.setColorSchemeId(
77              ColorSchemeImpl.getDefaultRegularColorSchemeId());
78          layoutSet.setWapThemeId(ThemeImpl.getDefaultWapThemeId());
79          layoutSet.setWapColorSchemeId(
80              ColorSchemeImpl.getDefaultWapColorSchemeId());
81          layoutSet.setCss(StringPool.BLANK);
82  
83          LayoutSetUtil.update(layoutSet);
84  
85          return layoutSet;
86      }
87  
88      public void deleteLayoutSet(long groupId, boolean privateLayout)
89          throws PortalException, SystemException {
90  
91          LayoutSet layoutSet = LayoutSetUtil.findByG_P(groupId, privateLayout);
92  
93          // Layouts
94  
95          List layouts = LayoutUtil.findByG_P_P(
96              groupId, privateLayout, LayoutImpl.DEFAULT_PARENT_LAYOUT_ID);
97  
98          Iterator itr = layouts.iterator();
99  
100         while (itr.hasNext()) {
101             Layout layout = (Layout) itr.next();
102 
103             try {
104                 LayoutLocalServiceUtil.deleteLayout(layout, false);
105             }
106             catch (NoSuchLayoutException nsle) {
107             }
108         }
109 
110         // Logo
111 
112         ImageLocalUtil.deleteImage(layoutSet.getLogoId());
113 
114         // Layout set
115 
116         LayoutSetUtil.removeByG_P(groupId, privateLayout);
117     }
118 
119     public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
120         throws PortalException, SystemException {
121 
122         return LayoutSetUtil.findByG_P(groupId, privateLayout);
123     }
124 
125     public LayoutSet getLayoutSet(String virtualHost)
126         throws PortalException, SystemException {
127 
128         virtualHost = virtualHost.trim().toLowerCase();
129 
130         return LayoutSetUtil.findByVirtualHost(virtualHost);
131     }
132 
133     public void updateLogo(
134             long groupId, boolean privateLayout, boolean logo, File file)
135         throws PortalException, SystemException {
136 
137         LayoutSet layoutSet = LayoutSetUtil.findByG_P(groupId, privateLayout);
138 
139         layoutSet.setLogo(logo);
140 
141         if (logo) {
142             long logoId = layoutSet.getLogoId();
143 
144             if (logoId <= 0) {
145                 logoId = CounterLocalServiceUtil.increment();
146 
147                 layoutSet.setLogoId(logoId);
148             }
149         }
150 
151         LayoutSetUtil.update(layoutSet);
152 
153         if (logo) {
154             ImageLocalUtil.updateImage(layoutSet.getLogoId(), file);
155         }
156         else {
157             ImageLocalUtil.deleteImage(layoutSet.getLogoId());
158         }
159     }
160 
161     public LayoutSet updateLookAndFeel(
162             long groupId, boolean privateLayout, String themeId,
163             String colorSchemeId, String css, boolean wapTheme)
164         throws PortalException, SystemException {
165 
166         LayoutSet layoutSet = LayoutSetUtil.findByG_P(groupId, privateLayout);
167 
168         if (wapTheme) {
169             layoutSet.setWapThemeId(themeId);
170             layoutSet.setWapColorSchemeId(colorSchemeId);
171         }
172         else {
173             layoutSet.setThemeId(themeId);
174             layoutSet.setColorSchemeId(colorSchemeId);
175             layoutSet.setCss(css);
176         }
177 
178         LayoutSetUtil.update(layoutSet);
179 
180         if (PrefsPropsUtil.getBoolean(PropsUtil.THEME_SYNC_ON_GROUP)) {
181             LayoutSet otherLayoutSet = LayoutSetUtil.findByG_P(
182                 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
183 
184             if (wapTheme) {
185                 otherLayoutSet.setWapThemeId(themeId);
186                 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
187             }
188             else {
189                 otherLayoutSet.setThemeId(themeId);
190                 otherLayoutSet.setColorSchemeId(colorSchemeId);
191             }
192 
193             LayoutSetUtil.update(otherLayoutSet);
194         }
195 
196         return layoutSet;
197     }
198 
199     public LayoutSet updatePageCount(long groupId, boolean privateLayout)
200         throws PortalException, SystemException {
201 
202         int pageCount = LayoutUtil.countByG_P(groupId, privateLayout);
203 
204         LayoutSet layoutSet = LayoutSetUtil.findByG_P(groupId, privateLayout);
205 
206         layoutSet.setPageCount(pageCount);
207 
208         LayoutSetUtil.update(layoutSet);
209 
210         return layoutSet;
211     }
212 
213     public LayoutSet updateVirtualHost(
214             long groupId, boolean privateLayout, String virtualHost)
215         throws PortalException, SystemException {
216 
217         virtualHost = virtualHost.trim().toLowerCase();
218 
219         if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
220             virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
221 
222             throw new LayoutSetVirtualHostException();
223         }
224 
225         LayoutSet layoutSet = LayoutSetUtil.findByG_P(groupId, privateLayout);
226 
227         if (Validator.isNotNull(virtualHost)) {
228             try {
229                 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
230 
231                 if (!layoutSet.equals(virtualHostLayoutSet)) {
232                     throw new LayoutSetVirtualHostException();
233                 }
234             }
235             catch (NoSuchLayoutSetException nslse) {
236             }
237 
238             try {
239                 CompanyLocalServiceUtil.getCompanyByVirtualHost(virtualHost);
240 
241                 throw new LayoutSetVirtualHostException();
242             }
243             catch (NoSuchCompanyException nsce) {
244             }
245         }
246 
247         layoutSet.setVirtualHost(virtualHost);
248 
249         LayoutSetUtil.update(layoutSet);
250 
251         return layoutSet;
252     }
253 
254 }