1
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
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(
72 ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
73 layoutSet.setColorSchemeId(
74 ColorSchemeImpl.getDefaultRegularColorSchemeId());
75 layoutSet.setWapThemeId(
76 ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
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
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
107 imageLocalService.deleteImage(layoutSet.getLogoId());
108
109
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 void updateLookAndFeel(
176 long groupId, String themeId, String colorSchemeId, String css,
177 boolean wapTheme)
178 throws PortalException, SystemException {
179
180 updateLookAndFeel(
181 groupId, false, themeId, colorSchemeId, css, wapTheme);
182 updateLookAndFeel(
183 groupId, true, themeId, colorSchemeId, css, wapTheme);
184 }
185
186 public LayoutSet updateLookAndFeel(
187 long groupId, boolean privateLayout, String themeId,
188 String colorSchemeId, String css, boolean wapTheme)
189 throws PortalException, SystemException {
190
191 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
192 groupId, privateLayout);
193
194 if (wapTheme) {
195 layoutSet.setWapThemeId(themeId);
196 layoutSet.setWapColorSchemeId(colorSchemeId);
197 }
198 else {
199 layoutSet.setThemeId(themeId);
200 layoutSet.setColorSchemeId(colorSchemeId);
201 layoutSet.setCss(css);
202 }
203
204 layoutSetPersistence.update(layoutSet, false);
205
206 if (PrefsPropsUtil.getBoolean(
207 PropsKeys.THEME_SYNC_ON_GROUP,
208 PropsValues.THEME_SYNC_ON_GROUP)) {
209
210 LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
211 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
212
213 if (wapTheme) {
214 otherLayoutSet.setWapThemeId(themeId);
215 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
216 }
217 else {
218 otherLayoutSet.setThemeId(themeId);
219 otherLayoutSet.setColorSchemeId(colorSchemeId);
220 }
221
222 layoutSetPersistence.update(otherLayoutSet, false);
223 }
224
225 return layoutSet;
226 }
227
228 public LayoutSet updatePageCount(long groupId, boolean privateLayout)
229 throws PortalException, SystemException {
230
231 int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
232
233 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
234 groupId, privateLayout);
235
236 layoutSet.setPageCount(pageCount);
237
238 layoutSetPersistence.update(layoutSet, false);
239
240 return layoutSet;
241 }
242
243 public LayoutSet updateVirtualHost(
244 long groupId, boolean privateLayout, String virtualHost)
245 throws PortalException, SystemException {
246
247 virtualHost = virtualHost.trim().toLowerCase();
248
249 if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
250 virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
251
252 throw new LayoutSetVirtualHostException();
253 }
254
255 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
256 groupId, privateLayout);
257
258 if (Validator.isNotNull(virtualHost)) {
259 try {
260 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
261
262 if (!layoutSet.equals(virtualHostLayoutSet)) {
263 throw new LayoutSetVirtualHostException();
264 }
265 }
266 catch (NoSuchLayoutSetException nslse) {
267 }
268
269 try {
270 companyLocalService.getCompanyByVirtualHost(virtualHost);
271
272 throw new LayoutSetVirtualHostException();
273 }
274 catch (NoSuchCompanyException nsce) {
275 }
276 }
277
278 layoutSet.setVirtualHost(virtualHost);
279
280 layoutSetPersistence.update(layoutSet, false);
281
282 return layoutSet;
283 }
284
285 }