1
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
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
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
109 imageLocalService.deleteImage(layoutSet.getLogoId());
110
111
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 }