1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.service.impl;
16  
17  import com.liferay.portal.LayoutSetVirtualHostException;
18  import com.liferay.portal.NoSuchCompanyException;
19  import com.liferay.portal.NoSuchLayoutException;
20  import com.liferay.portal.NoSuchLayoutSetException;
21  import com.liferay.portal.PortalException;
22  import com.liferay.portal.SystemException;
23  import com.liferay.portal.kernel.util.Http;
24  import com.liferay.portal.kernel.util.PropsKeys;
25  import com.liferay.portal.kernel.util.StringPool;
26  import com.liferay.portal.kernel.util.Validator;
27  import com.liferay.portal.model.Group;
28  import com.liferay.portal.model.Layout;
29  import com.liferay.portal.model.LayoutConstants;
30  import com.liferay.portal.model.LayoutSet;
31  import com.liferay.portal.model.impl.ColorSchemeImpl;
32  import com.liferay.portal.model.impl.ThemeImpl;
33  import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
34  import com.liferay.portal.util.PrefsPropsUtil;
35  import com.liferay.portal.util.PropsValues;
36  
37  import java.io.File;
38  import java.io.FileInputStream;
39  import java.io.IOException;
40  import java.io.InputStream;
41  
42  import java.util.List;
43  
44  /**
45   * <a href="LayoutSetLocalServiceImpl.java.html"><b><i>View Source</i></b></a>
46   *
47   * @author Brian Wing Shun Chan
48   * @author Julio Camarero
49   * @author Ganesh Ram
50   */
51  public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
52  
53      public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
54          throws PortalException, SystemException {
55  
56          Group group = groupPersistence.findByPrimaryKey(groupId);
57  
58          long layoutSetId = counterLocalService.increment();
59  
60          LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
61  
62          layoutSet.setGroupId(groupId);
63          layoutSet.setCompanyId(group.getCompanyId());
64          layoutSet.setPrivateLayout(privateLayout);
65          layoutSet.setThemeId(
66              ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
67          layoutSet.setColorSchemeId(
68              ColorSchemeImpl.getDefaultRegularColorSchemeId());
69          layoutSet.setWapThemeId(
70              ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
71          layoutSet.setWapColorSchemeId(
72              ColorSchemeImpl.getDefaultWapColorSchemeId());
73          layoutSet.setCss(StringPool.BLANK);
74  
75          layoutSetPersistence.update(layoutSet, false);
76  
77          return layoutSet;
78      }
79  
80      public void deleteLayoutSet(long groupId, boolean privateLayout)
81          throws PortalException, SystemException {
82  
83          LayoutSet layoutSet = layoutSetPersistence.findByG_P(
84              groupId, privateLayout);
85  
86          // Layouts
87  
88          List<Layout> layouts = layoutPersistence.findByG_P_P(
89              groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
90  
91          for (Layout layout : layouts) {
92              try {
93                  layoutLocalService.deleteLayout(layout, false);
94              }
95              catch (NoSuchLayoutException nsle) {
96              }
97          }
98  
99          // Logo
100 
101         imageLocalService.deleteImage(layoutSet.getLogoId());
102 
103         // Layout set
104 
105         layoutSetPersistence.removeByG_P(groupId, privateLayout);
106 
107         // Counter
108 
109         counterLocalService.reset(
110             LayoutLocalServiceImpl.getCounterName(groupId, privateLayout));
111     }
112 
113     public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
114         throws PortalException, SystemException {
115 
116         return layoutSetPersistence.findByG_P(groupId, privateLayout);
117     }
118 
119     public LayoutSet getLayoutSet(String virtualHost)
120         throws PortalException, SystemException {
121 
122         virtualHost = virtualHost.trim().toLowerCase();
123 
124         return layoutSetPersistence.findByVirtualHost(virtualHost);
125     }
126 
127     public void updateLogo(
128             long groupId, boolean privateLayout, boolean logo, File file)
129         throws PortalException, SystemException {
130 
131         InputStream is = null;
132 
133         if (logo) {
134             try{
135                 is = new FileInputStream(file);
136             }
137             catch (IOException ioe) {
138                 throw new SystemException(ioe);
139             }
140         }
141 
142         updateLogo(groupId, privateLayout, logo, is);
143     }
144 
145     public void updateLogo(
146             long groupId, boolean privateLayout, boolean logo, InputStream is)
147         throws PortalException, SystemException {
148 
149         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
150             groupId, privateLayout);
151 
152         layoutSet.setLogo(logo);
153 
154         if (logo) {
155             long logoId = layoutSet.getLogoId();
156 
157             if (logoId <= 0) {
158                 logoId = counterLocalService.increment();
159 
160                 layoutSet.setLogoId(logoId);
161             }
162         }
163 
164         layoutSetPersistence.update(layoutSet, false);
165 
166         if (logo) {
167             imageLocalService.updateImage(layoutSet.getLogoId(), is);
168         }
169         else {
170             imageLocalService.deleteImage(layoutSet.getLogoId());
171         }
172     }
173 
174     public void updateLookAndFeel(
175             long groupId, String themeId, String colorSchemeId, String css,
176             boolean wapTheme)
177         throws PortalException, SystemException {
178 
179         updateLookAndFeel(
180             groupId, false, themeId, colorSchemeId, css, wapTheme);
181         updateLookAndFeel(
182             groupId, true, themeId, colorSchemeId, css, wapTheme);
183     }
184 
185     public LayoutSet updateLookAndFeel(
186             long groupId, boolean privateLayout, String themeId,
187             String colorSchemeId, String css, boolean wapTheme)
188         throws PortalException, SystemException {
189 
190         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
191             groupId, privateLayout);
192 
193         if (wapTheme) {
194             layoutSet.setWapThemeId(themeId);
195             layoutSet.setWapColorSchemeId(colorSchemeId);
196         }
197         else {
198             layoutSet.setThemeId(themeId);
199             layoutSet.setColorSchemeId(colorSchemeId);
200             layoutSet.setCss(css);
201         }
202 
203         layoutSetPersistence.update(layoutSet, false);
204 
205         if (PrefsPropsUtil.getBoolean(
206                 PropsKeys.THEME_SYNC_ON_GROUP,
207                 PropsValues.THEME_SYNC_ON_GROUP)) {
208 
209             LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
210                 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
211 
212             if (wapTheme) {
213                 otherLayoutSet.setWapThemeId(themeId);
214                 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
215             }
216             else {
217                 otherLayoutSet.setThemeId(themeId);
218                 otherLayoutSet.setColorSchemeId(colorSchemeId);
219             }
220 
221             layoutSetPersistence.update(otherLayoutSet, false);
222         }
223 
224         return layoutSet;
225     }
226 
227     public LayoutSet updatePageCount(long groupId, boolean privateLayout)
228         throws PortalException, SystemException {
229 
230         int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
231 
232         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
233             groupId, privateLayout);
234 
235         layoutSet.setPageCount(pageCount);
236 
237         layoutSetPersistence.update(layoutSet, false);
238 
239         return layoutSet;
240     }
241 
242     public LayoutSet updateVirtualHost(
243             long groupId, boolean privateLayout, String virtualHost)
244         throws PortalException, SystemException {
245 
246         virtualHost = virtualHost.trim().toLowerCase();
247 
248         if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
249             virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
250 
251             throw new LayoutSetVirtualHostException();
252         }
253 
254         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
255             groupId, privateLayout);
256 
257         if (Validator.isNotNull(virtualHost)) {
258             try {
259                 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
260 
261                 if (!layoutSet.equals(virtualHostLayoutSet)) {
262                     throw new LayoutSetVirtualHostException();
263                 }
264             }
265             catch (NoSuchLayoutSetException nslse) {
266             }
267 
268             try {
269                 companyLocalService.getCompanyByVirtualHost(virtualHost);
270 
271                 throw new LayoutSetVirtualHostException();
272             }
273             catch (NoSuchCompanyException nsce) {
274             }
275         }
276 
277         layoutSet.setVirtualHost(virtualHost);
278 
279         layoutSetPersistence.update(layoutSet, false);
280 
281         return layoutSet;
282     }
283 
284 }