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.PropsKeys;
33  import com.liferay.portal.kernel.util.StringPool;
34  import com.liferay.portal.kernel.util.Validator;
35  import com.liferay.portal.model.Group;
36  import com.liferay.portal.model.Layout;
37  import com.liferay.portal.model.LayoutConstants;
38  import com.liferay.portal.model.LayoutSet;
39  import com.liferay.portal.model.impl.ColorSchemeImpl;
40  import com.liferay.portal.model.impl.ThemeImpl;
41  import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
42  import com.liferay.portal.util.PrefsPropsUtil;
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  public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
60  
61      public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
62          throws PortalException, SystemException {
63  
64          Group group = groupPersistence.findByPrimaryKey(groupId);
65  
66          long layoutSetId = counterLocalService.increment();
67  
68          LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
69  
70          layoutSet.setGroupId(groupId);
71          layoutSet.setCompanyId(group.getCompanyId());
72          layoutSet.setPrivateLayout(privateLayout);
73          layoutSet.setThemeId(
74              ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
75          layoutSet.setColorSchemeId(
76              ColorSchemeImpl.getDefaultRegularColorSchemeId());
77          layoutSet.setWapThemeId(
78              ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
79          layoutSet.setWapColorSchemeId(
80              ColorSchemeImpl.getDefaultWapColorSchemeId());
81          layoutSet.setCss(StringPool.BLANK);
82  
83          layoutSetPersistence.update(layoutSet, false);
84  
85          return layoutSet;
86      }
87  
88      public void deleteLayoutSet(long groupId, boolean privateLayout)
89          throws PortalException, SystemException {
90  
91          LayoutSet layoutSet = layoutSetPersistence.findByG_P(
92              groupId, privateLayout);
93  
94          // Layouts
95  
96          List<Layout> layouts = layoutPersistence.findByG_P_P(
97              groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
98  
99          for (Layout layout : layouts) {
100             try {
101                 layoutLocalService.deleteLayout(layout, false);
102             }
103             catch (NoSuchLayoutException nsle) {
104             }
105         }
106 
107         // Logo
108 
109         imageLocalService.deleteImage(layoutSet.getLogoId());
110 
111         // Layout set
112 
113         layoutSetPersistence.removeByG_P(groupId, privateLayout);
114     }
115 
116     public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
117         throws PortalException, SystemException {
118 
119         return layoutSetPersistence.findByG_P(groupId, privateLayout);
120     }
121 
122     public LayoutSet getLayoutSet(String virtualHost)
123         throws PortalException, SystemException {
124 
125         virtualHost = virtualHost.trim().toLowerCase();
126 
127         return layoutSetPersistence.findByVirtualHost(virtualHost);
128     }
129 
130     public void updateLogo(
131             long groupId, boolean privateLayout, boolean logo, File file)
132         throws PortalException, SystemException {
133 
134         InputStream is = null;
135 
136         if (logo) {
137             try{
138                 is = new FileInputStream(file);
139             }
140             catch (IOException ioe) {
141                 throw new SystemException(ioe);
142             }
143         }
144 
145         updateLogo(groupId, privateLayout, logo, is);
146     }
147 
148     public void updateLogo(
149             long groupId, boolean privateLayout, boolean logo, InputStream is)
150         throws PortalException, SystemException {
151 
152         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
153             groupId, privateLayout);
154 
155         layoutSet.setLogo(logo);
156 
157         if (logo) {
158             long logoId = layoutSet.getLogoId();
159 
160             if (logoId <= 0) {
161                 logoId = counterLocalService.increment();
162 
163                 layoutSet.setLogoId(logoId);
164             }
165         }
166 
167         layoutSetPersistence.update(layoutSet, false);
168 
169         if (logo) {
170             imageLocalService.updateImage(layoutSet.getLogoId(), is);
171         }
172         else {
173             imageLocalService.deleteImage(layoutSet.getLogoId());
174         }
175     }
176 
177     public void updateLookAndFeel(
178             long groupId, String themeId, String colorSchemeId, String css,
179             boolean wapTheme)
180         throws PortalException, SystemException {
181 
182         updateLookAndFeel(
183             groupId, false, themeId, colorSchemeId, css, wapTheme);
184         updateLookAndFeel(
185             groupId, true, themeId, colorSchemeId, css, wapTheme);
186     }
187 
188     public LayoutSet updateLookAndFeel(
189             long groupId, boolean privateLayout, String themeId,
190             String colorSchemeId, String css, boolean wapTheme)
191         throws PortalException, SystemException {
192 
193         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
194             groupId, privateLayout);
195 
196         if (wapTheme) {
197             layoutSet.setWapThemeId(themeId);
198             layoutSet.setWapColorSchemeId(colorSchemeId);
199         }
200         else {
201             layoutSet.setThemeId(themeId);
202             layoutSet.setColorSchemeId(colorSchemeId);
203             layoutSet.setCss(css);
204         }
205 
206         layoutSetPersistence.update(layoutSet, false);
207 
208         if (PrefsPropsUtil.getBoolean(
209                 PropsKeys.THEME_SYNC_ON_GROUP,
210                 PropsValues.THEME_SYNC_ON_GROUP)) {
211 
212             LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
213                 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
214 
215             if (wapTheme) {
216                 otherLayoutSet.setWapThemeId(themeId);
217                 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
218             }
219             else {
220                 otherLayoutSet.setThemeId(themeId);
221                 otherLayoutSet.setColorSchemeId(colorSchemeId);
222             }
223 
224             layoutSetPersistence.update(otherLayoutSet, false);
225         }
226 
227         return layoutSet;
228     }
229 
230     public LayoutSet updatePageCount(long groupId, boolean privateLayout)
231         throws PortalException, SystemException {
232 
233         int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
234 
235         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
236             groupId, privateLayout);
237 
238         layoutSet.setPageCount(pageCount);
239 
240         layoutSetPersistence.update(layoutSet, false);
241 
242         return layoutSet;
243     }
244 
245     public LayoutSet updateVirtualHost(
246             long groupId, boolean privateLayout, String virtualHost)
247         throws PortalException, SystemException {
248 
249         virtualHost = virtualHost.trim().toLowerCase();
250 
251         if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
252             virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
253 
254             throw new LayoutSetVirtualHostException();
255         }
256 
257         LayoutSet layoutSet = layoutSetPersistence.findByG_P(
258             groupId, privateLayout);
259 
260         if (Validator.isNotNull(virtualHost)) {
261             try {
262                 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
263 
264                 if (!layoutSet.equals(virtualHostLayoutSet)) {
265                     throw new LayoutSetVirtualHostException();
266                 }
267             }
268             catch (NoSuchLayoutSetException nslse) {
269             }
270 
271             try {
272                 companyLocalService.getCompanyByVirtualHost(virtualHost);
273 
274                 throw new LayoutSetVirtualHostException();
275             }
276             catch (NoSuchCompanyException nsce) {
277             }
278         }
279 
280         layoutSet.setVirtualHost(virtualHost);
281 
282         layoutSetPersistence.update(layoutSet, false);
283 
284         return layoutSet;
285     }
286 
287 }