1   /**
2    * Copyright (c) 2000-2009 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   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.portal.service.impl;
21  
22  import com.liferay.portal.LayoutSetVirtualHostException;
23  import com.liferay.portal.NoSuchCompanyException;
24  import com.liferay.portal.NoSuchLayoutException;
25  import com.liferay.portal.NoSuchLayoutSetException;
26  import com.liferay.portal.PortalException;
27  import com.liferay.portal.SystemException;
28  import com.liferay.portal.kernel.util.Http;
29  import com.liferay.portal.kernel.util.StringPool;
30  import com.liferay.portal.kernel.util.Validator;
31  import com.liferay.portal.model.Group;
32  import com.liferay.portal.model.Layout;
33  import com.liferay.portal.model.LayoutConstants;
34  import com.liferay.portal.model.LayoutSet;
35  import com.liferay.portal.model.impl.ColorSchemeImpl;
36  import com.liferay.portal.model.impl.ThemeImpl;
37  import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
38  import com.liferay.portal.util.PrefsPropsUtil;
39  import com.liferay.portal.util.PropsKeys;
40  import com.liferay.portal.util.PropsValues;
41  
42  import java.io.File;
43  import java.io.FileInputStream;
44  import java.io.IOException;
45  import java.io.InputStream;
46  
47  import java.util.List;
48  
49  /**
50   * <a href="LayoutSetLocalServiceImpl.java.html"><b><i>View Source</i></b></a>
51   *
52   * @author Brian Wing Shun Chan
53   * @author Julio Camarero
54   * @author Ganesh Ram
55   *
56   */
57  public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
58  
59      public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
60          throws PortalException, SystemException {
61  
62          Group group = groupPersistence.findByPrimaryKey(groupId);
63  
64          long layoutSetId = counterLocalService.increment();
65  
66          LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
67  
68          layoutSet.setGroupId(groupId);
69          layoutSet.setCompanyId(group.getCompanyId());
70          layoutSet.setPrivateLayout(privateLayout);
71          layoutSet.setThemeId(ThemeImpl.getDefaultRegularThemeId());
72          layoutSet.setColorSchemeId(
73              ColorSchemeImpl.getDefaultRegularColorSchemeId());
74          layoutSet.setWapThemeId(ThemeImpl.getDefaultWapThemeId());
75          layoutSet.setWapColorSchemeId(
76              ColorSchemeImpl.getDefaultWapColorSchemeId());
77          layoutSet.setCss(StringPool.BLANK);
78  
79          layoutSetPersistence.update(layoutSet, false);
80  
81          return layoutSet;
82      }
83  
84      public void deleteLayoutSet(long groupId, boolean privateLayout)
85          throws PortalException, SystemException {
86  
87          LayoutSet layoutSet = layoutSetPersistence.findByG_P(
88              groupId, privateLayout);
89  
90          // Layouts
91  
92          List<Layout> layouts = layoutPersistence.findByG_P_P(
93              groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
94  
95          for (Layout layout : layouts) {
96              try {
97                  layoutLocalService.deleteLayout(layout, false);
98              }
99              catch (NoSuchLayoutException nsle) {
100             }
101         }
102 
103         // Logo
104 
105         imageLocalService.deleteImage(layoutSet.getLogoId());
106 
107         // Layout set
108 
109         layoutSetPersistence.removeByG_P(groupId, privateLayout);
110     }
111 
112     public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
113         throws PortalException, SystemException {
114 
115         return layoutSetPersistence.findByG_P(groupId, privateLayout);
116     }
117 
118     public LayoutSet getLayoutSet(String virtualHost)
119         throws PortalException, SystemException {
120 
121         virtualHost = virtualHost.trim().toLowerCase();
122 
123         return layoutSetPersistence.findByVirtualHost(virtualHost);
124     }
125 
126     public void updateLogo(
127             long groupId, boolean privateLayout, boolean logo, File file)
128         throws PortalException, SystemException {
129 
130         InputStream is = null;
131 
132         if (logo) {
133             try{
134                 is = new FileInputStream(file);
135             }
136             catch (IOException ioe) {
137                 throw new SystemException(ioe);
138             }
139         }
140 
141         updateLogo(groupId, privateLayout, logo, is);
142     }
143 
144     public void updateLogo(
145             long groupId, boolean privateLayout, boolean logo, InputStream is)
146         throws PortalException, SystemException {
147 
148         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
149             groupId, privateLayout);
150 
151         layoutSet.setLogo(logo);
152 
153         if (logo) {
154             long logoId = layoutSet.getLogoId();
155 
156             if (logoId <= 0) {
157                 logoId = counterLocalService.increment();
158 
159                 layoutSet.setLogoId(logoId);
160             }
161         }
162 
163         layoutSetPersistence.update(layoutSet, false);
164 
165         if (logo) {
166             imageLocalService.updateImage(layoutSet.getLogoId(), is);
167         }
168         else {
169             imageLocalService.deleteImage(layoutSet.getLogoId());
170         }
171     }
172 
173     public LayoutSet updateLookAndFeel(
174             long groupId, boolean privateLayout, String themeId,
175             String colorSchemeId, String css, boolean wapTheme)
176         throws PortalException, SystemException {
177 
178         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
179             groupId, privateLayout);
180 
181         if (wapTheme) {
182             layoutSet.setWapThemeId(themeId);
183             layoutSet.setWapColorSchemeId(colorSchemeId);
184         }
185         else {
186             layoutSet.setThemeId(themeId);
187             layoutSet.setColorSchemeId(colorSchemeId);
188             layoutSet.setCss(css);
189         }
190 
191         layoutSetPersistence.update(layoutSet, false);
192 
193         if (PrefsPropsUtil.getBoolean(
194                 PropsKeys.THEME_SYNC_ON_GROUP,
195                 PropsValues.THEME_SYNC_ON_GROUP)) {
196 
197             LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
198                 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
199 
200             if (wapTheme) {
201                 otherLayoutSet.setWapThemeId(themeId);
202                 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
203             }
204             else {
205                 otherLayoutSet.setThemeId(themeId);
206                 otherLayoutSet.setColorSchemeId(colorSchemeId);
207             }
208 
209             layoutSetPersistence.update(otherLayoutSet, false);
210         }
211 
212         return layoutSet;
213     }
214 
215     public LayoutSet updatePageCount(long groupId, boolean privateLayout)
216         throws PortalException, SystemException {
217 
218         int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
219 
220         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
221             groupId, privateLayout);
222 
223         layoutSet.setPageCount(pageCount);
224 
225         layoutSetPersistence.update(layoutSet, false);
226 
227         return layoutSet;
228     }
229 
230     public LayoutSet updateVirtualHost(
231             long groupId, boolean privateLayout, String virtualHost)
232         throws PortalException, SystemException {
233 
234         virtualHost = virtualHost.trim().toLowerCase();
235 
236         if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
237             virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
238 
239             throw new LayoutSetVirtualHostException();
240         }
241 
242         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
243             groupId, privateLayout);
244 
245         if (Validator.isNotNull(virtualHost)) {
246             try {
247                 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
248 
249                 if (!layoutSet.equals(virtualHostLayoutSet)) {
250                     throw new LayoutSetVirtualHostException();
251                 }
252             }
253             catch (NoSuchLayoutSetException nslse) {
254             }
255 
256             try {
257                 companyLocalService.getCompanyByVirtualHost(virtualHost);
258 
259                 throw new LayoutSetVirtualHostException();
260             }
261             catch (NoSuchCompanyException nsce) {
262             }
263         }
264 
265         layoutSet.setVirtualHost(virtualHost);
266 
267         layoutSetPersistence.update(layoutSet, false);
268 
269         return layoutSet;
270     }
271 
272 }