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