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