001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.LayoutSetVirtualHostException;
018 import com.liferay.portal.NoSuchCompanyException;
019 import com.liferay.portal.NoSuchLayoutException;
020 import com.liferay.portal.NoSuchLayoutSetException;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.util.Http;
024 import com.liferay.portal.kernel.util.PropsKeys;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.model.Group;
028 import com.liferay.portal.model.Layout;
029 import com.liferay.portal.model.LayoutConstants;
030 import com.liferay.portal.model.LayoutSet;
031 import com.liferay.portal.model.impl.ColorSchemeImpl;
032 import com.liferay.portal.model.impl.ThemeImpl;
033 import com.liferay.portal.service.base.LayoutSetLocalServiceBaseImpl;
034 import com.liferay.portal.util.PrefsPropsUtil;
035 import com.liferay.portal.util.PropsValues;
036
037 import java.io.File;
038 import java.io.FileInputStream;
039 import java.io.IOException;
040 import java.io.InputStream;
041
042 import java.util.List;
043
044
049 public class LayoutSetLocalServiceImpl extends LayoutSetLocalServiceBaseImpl {
050
051 public LayoutSet addLayoutSet(long groupId, boolean privateLayout)
052 throws PortalException, SystemException {
053
054 Group group = groupPersistence.findByPrimaryKey(groupId);
055
056 long layoutSetId = counterLocalService.increment();
057
058 LayoutSet layoutSet = layoutSetPersistence.create(layoutSetId);
059
060 layoutSet.setGroupId(groupId);
061 layoutSet.setCompanyId(group.getCompanyId());
062 layoutSet.setPrivateLayout(privateLayout);
063 layoutSet.setThemeId(
064 ThemeImpl.getDefaultRegularThemeId(group.getCompanyId()));
065 layoutSet.setColorSchemeId(
066 ColorSchemeImpl.getDefaultRegularColorSchemeId());
067 layoutSet.setWapThemeId(
068 ThemeImpl.getDefaultWapThemeId(group.getCompanyId()));
069 layoutSet.setWapColorSchemeId(
070 ColorSchemeImpl.getDefaultWapColorSchemeId());
071 layoutSet.setCss(StringPool.BLANK);
072
073 layoutSetPersistence.update(layoutSet, false);
074
075 return layoutSet;
076 }
077
078 public void deleteLayoutSet(long groupId, boolean privateLayout)
079 throws PortalException, SystemException {
080
081 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
082 groupId, privateLayout);
083
084
085
086 List<Layout> layouts = layoutPersistence.findByG_P_P(
087 groupId, privateLayout, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID);
088
089 for (Layout layout : layouts) {
090 try {
091 layoutLocalService.deleteLayout(layout, false);
092 }
093 catch (NoSuchLayoutException nsle) {
094 }
095 }
096
097
098
099 imageLocalService.deleteImage(layoutSet.getLogoId());
100
101
102
103 layoutSetPersistence.removeByG_P(groupId, privateLayout);
104
105
106
107 counterLocalService.reset(
108 LayoutLocalServiceImpl.getCounterName(groupId, privateLayout));
109 }
110
111 public LayoutSet getLayoutSet(long groupId, boolean privateLayout)
112 throws PortalException, SystemException {
113
114 return layoutSetPersistence.findByG_P(groupId, privateLayout);
115 }
116
117 public LayoutSet getLayoutSet(String virtualHost)
118 throws PortalException, SystemException {
119
120 virtualHost = virtualHost.trim().toLowerCase();
121
122 return layoutSetPersistence.findByVirtualHost(virtualHost);
123 }
124
125 public void updateLogo(
126 long groupId, boolean privateLayout, boolean logo, File file)
127 throws PortalException, SystemException {
128
129 InputStream is = null;
130
131 if (logo) {
132 try{
133 is = new FileInputStream(file);
134 }
135 catch (IOException ioe) {
136 throw new SystemException(ioe);
137 }
138 }
139
140 updateLogo(groupId, privateLayout, logo, is);
141 }
142
143 public void updateLogo(
144 long groupId, boolean privateLayout, boolean logo, InputStream is)
145 throws PortalException, SystemException {
146
147 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
148 groupId, privateLayout);
149
150 layoutSet.setLogo(logo);
151
152 if (logo) {
153 long logoId = layoutSet.getLogoId();
154
155 if (logoId <= 0) {
156 logoId = counterLocalService.increment();
157
158 layoutSet.setLogoId(logoId);
159 }
160 }
161
162 layoutSetPersistence.update(layoutSet, false);
163
164 if (logo) {
165 imageLocalService.updateImage(layoutSet.getLogoId(), is);
166 }
167 else {
168 imageLocalService.deleteImage(layoutSet.getLogoId());
169 }
170 }
171
172 public void updateLookAndFeel(
173 long groupId, String themeId, String colorSchemeId, String css,
174 boolean wapTheme)
175 throws PortalException, SystemException {
176
177 updateLookAndFeel(
178 groupId, false, themeId, colorSchemeId, css, wapTheme);
179 updateLookAndFeel(
180 groupId, true, themeId, colorSchemeId, css, wapTheme);
181 }
182
183 public LayoutSet updateLookAndFeel(
184 long groupId, boolean privateLayout, String themeId,
185 String colorSchemeId, String css, boolean wapTheme)
186 throws PortalException, SystemException {
187
188 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
189 groupId, privateLayout);
190
191 if (wapTheme) {
192 layoutSet.setWapThemeId(themeId);
193 layoutSet.setWapColorSchemeId(colorSchemeId);
194 }
195 else {
196 layoutSet.setThemeId(themeId);
197 layoutSet.setColorSchemeId(colorSchemeId);
198 layoutSet.setCss(css);
199 }
200
201 layoutSetPersistence.update(layoutSet, false);
202
203 if (PrefsPropsUtil.getBoolean(
204 PropsKeys.THEME_SYNC_ON_GROUP,
205 PropsValues.THEME_SYNC_ON_GROUP)) {
206
207 LayoutSet otherLayoutSet = layoutSetPersistence.findByG_P(
208 layoutSet.getGroupId(), layoutSet.isPrivateLayout());
209
210 if (wapTheme) {
211 otherLayoutSet.setWapThemeId(themeId);
212 otherLayoutSet.setWapColorSchemeId(colorSchemeId);
213 }
214 else {
215 otherLayoutSet.setThemeId(themeId);
216 otherLayoutSet.setColorSchemeId(colorSchemeId);
217 }
218
219 layoutSetPersistence.update(otherLayoutSet, false);
220 }
221
222 return layoutSet;
223 }
224
225 public LayoutSet updatePageCount(long groupId, boolean privateLayout)
226 throws PortalException, SystemException {
227
228 int pageCount = layoutPersistence.countByG_P(groupId, privateLayout);
229
230 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
231 groupId, privateLayout);
232
233 layoutSet.setPageCount(pageCount);
234
235 layoutSetPersistence.update(layoutSet, false);
236
237 return layoutSet;
238 }
239
240 public LayoutSet updateSettings(
241 long groupId, boolean privateLayout, String settings)
242 throws PortalException, SystemException {
243
244 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
245 groupId, privateLayout);
246
247 layoutSet.setSettings(settings);
248
249 layoutSetPersistence.update(layoutSet, false);
250
251 return layoutSet;
252 }
253
254 public LayoutSet updateVirtualHost(
255 long groupId, boolean privateLayout, String virtualHost)
256 throws PortalException, SystemException {
257
258 virtualHost = virtualHost.trim().toLowerCase();
259
260 if (virtualHost.startsWith(Http.HTTP_WITH_SLASH) ||
261 virtualHost.startsWith(Http.HTTPS_WITH_SLASH)) {
262
263 throw new LayoutSetVirtualHostException();
264 }
265
266 LayoutSet layoutSet = layoutSetPersistence.findByG_P(
267 groupId, privateLayout);
268
269 if (Validator.isNotNull(virtualHost)) {
270 try {
271 LayoutSet virtualHostLayoutSet = getLayoutSet(virtualHost);
272
273 if (!layoutSet.equals(virtualHostLayoutSet)) {
274 throw new LayoutSetVirtualHostException();
275 }
276 }
277 catch (NoSuchLayoutSetException nslse) {
278 }
279
280 try {
281 companyLocalService.getCompanyByVirtualHost(virtualHost);
282
283 throw new LayoutSetVirtualHostException();
284 }
285 catch (NoSuchCompanyException nsce) {
286 }
287 }
288
289 layoutSet.setVirtualHost(virtualHost);
290
291 layoutSetPersistence.update(layoutSet, false);
292
293 return layoutSet;
294 }
295
296 }