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(ThemeImpl.getDefaultRegularThemeId());
66          layoutSet.setColorSchemeId(
67              ColorSchemeImpl.getDefaultRegularColorSchemeId());
68          layoutSet.setWapThemeId(ThemeImpl.getDefaultWapThemeId());
69          layoutSet.setWapColorSchemeId(
70              ColorSchemeImpl.getDefaultWapColorSchemeId());
71          layoutSet.setCss(StringPool.BLANK);
72  
73          layoutSetPersistence.update(layoutSet, false);
74  
75          return layoutSet;
76      }
77  
78      public void deleteLayoutSet(long groupId, boolean privateLayout)
79          throws PortalException, SystemException {
80  
81          LayoutSet layoutSet = layoutSetPersistence.findByG_P(
82              groupId, privateLayout);
83  
84          // Layouts
85  
86          List<Layout> layouts = layoutPersistence.findByG_P_P(
87              groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
88  
89          for (Layout layout : layouts) {
90              try {
91                  layoutLocalService.deleteLayout(layout, false);
92              }
93              catch (NoSuchLayoutException nsle) {
94              }
95          }
96  
97          // Logo
98  
99          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 LayoutSet updateLookAndFeel(
173             long groupId, boolean privateLayout, String themeId,
174             String colorSchemeId, String css, boolean wapTheme)
175         throws PortalException, SystemException {
176 
177         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
178             groupId, privateLayout);
179 
180         if (wapTheme) {
181             layoutSet.setWapThemeId(themeId);
182             layoutSet.setWapColorSchemeId(colorSchemeId);
183         }
184         else {
185             layoutSet.setThemeId(themeId);
186             layoutSet.setColorSchemeId(colorSchemeId);
187             layoutSet.setCss(css);
188         }
189 
190         layoutSetPersistence.update(layoutSet, false);
191 
192         if (PrefsPropsUtil.getBoolean(
193                 PropsKeys.THEME_SYNC_ON_GROUP,
194                 PropsValues.THEME_SYNC_ON_GROUP)) {
195 
196             LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
197                 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
198 
199             if (wapTheme) {
200                 otherLayoutSet.setWapThemeId(themeId);
201                 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
202             }
203             else {
204                 otherLayoutSet.setThemeId(themeId);
205                 otherLayoutSet.setColorSchemeId(colorSchemeId);
206             }
207 
208             layoutSetPersistence.update(otherLayoutSet, false);
209         }
210 
211         return layoutSet;
212     }
213 
214     public LayoutSet updatePageCount(long groupId, boolean privateLayout)
215         throws PortalException, SystemException {
216 
217         int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
218 
219         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
220             groupId, privateLayout);
221 
222         layoutSet.setPageCount(pageCount);
223 
224         layoutSetPersistence.update(layoutSet, false);
225 
226         return layoutSet;
227     }
228 
229     public LayoutSet updateVirtualHost(
230             long groupId, boolean privateLayout, String virtualHost)
231         throws PortalException, SystemException {
232 
233         virtualHost = virtualHost.trim().toLowerCase();
234 
235         if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
236             virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
237 
238             throw new LayoutSetVirtualHostException();
239         }
240 
241         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
242             groupId, privateLayout);
243 
244         if (Validator.isNotNull(virtualHost)) {
245             try {
246                 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
247 
248                 if (!layoutSet.equals(virtualHostLayoutSet)) {
249                     throw new LayoutSetVirtualHostException();
250                 }
251             }
252             catch (NoSuchLayoutSetException nslse) {
253             }
254 
255             try {
256                 companyLocalService.getCompanyByVirtualHost(virtualHost);
257 
258                 throw new LayoutSetVirtualHostException();
259             }
260             catch (NoSuchCompanyException nsce) {
261             }
262         }
263 
264         layoutSet.setVirtualHost(virtualHost);
265 
266         layoutSetPersistence.update(layoutSet, false);
267 
268         return layoutSet;
269     }
270 
271 }