1
22
23 package com.liferay.documentlibrary.service.impl;
24
25 import com.liferay.documentlibrary.FileNameException;
26 import com.liferay.documentlibrary.FileSizeException;
27 import com.liferay.documentlibrary.SourceFileNameException;
28 import com.liferay.documentlibrary.service.DLLocalService;
29 import com.liferay.documentlibrary.util.Hook;
30 import com.liferay.documentlibrary.util.HookFactory;
31 import com.liferay.portal.PortalException;
32 import com.liferay.portal.SystemException;
33 import com.liferay.portal.kernel.annotation.BeanReference;
34 import com.liferay.portal.kernel.search.BooleanClauseOccur;
35 import com.liferay.portal.kernel.search.BooleanQuery;
36 import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
37 import com.liferay.portal.kernel.search.Field;
38 import com.liferay.portal.kernel.search.Hits;
39 import com.liferay.portal.kernel.search.SearchEngineUtil;
40 import com.liferay.portal.kernel.search.TermQuery;
41 import com.liferay.portal.kernel.search.TermQueryFactoryUtil;
42 import com.liferay.portal.kernel.util.FileUtil;
43 import com.liferay.portal.kernel.util.PropsKeys;
44 import com.liferay.portal.kernel.util.StringPool;
45 import com.liferay.portal.kernel.util.StringUtil;
46 import com.liferay.portal.kernel.util.Validator;
47 import com.liferay.portal.model.Group;
48 import com.liferay.portal.service.GroupLocalService;
49 import com.liferay.portal.util.PrefsPropsUtil;
50 import com.liferay.portal.util.PropsValues;
51 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
52 import com.liferay.portlet.documentlibrary.service.DLFolderService;
53
54 import java.io.File;
55 import java.io.IOException;
56 import java.io.InputStream;
57
58 import java.util.Date;
59
60
65 public class DLLocalServiceImpl implements DLLocalService {
66
67 public void addFile(
68 long companyId, String portletId, long groupId, long repositoryId,
69 String fileName, long fileEntryId, String properties,
70 Date modifiedDate, String[] tagsCategories, String[] tagsEntries,
71 InputStream is)
72 throws PortalException, SystemException {
73
74 validate(fileName, is);
75
76 Hook hook = HookFactory.getInstance();
77
78 hook.addFile(
79 companyId, portletId, groupId, repositoryId, fileName, fileEntryId,
80 properties, modifiedDate, tagsCategories, tagsEntries, is);
81 }
82
83 public void checkRoot(long companyId) throws SystemException {
84 Hook hook = HookFactory.getInstance();
85
86 hook.checkRoot(companyId);
87 }
88
89 public InputStream getFileAsStream(
90 long companyId, long repositoryId, String fileName)
91 throws PortalException, SystemException {
92
93 Hook hook = HookFactory.getInstance();
94
95 return hook.getFileAsStream(companyId, repositoryId, fileName);
96 }
97
98 public InputStream getFileAsStream(
99 long companyId, long repositoryId, String fileName,
100 double versionNumber)
101 throws PortalException, SystemException {
102
103 Hook hook = HookFactory.getInstance();
104
105 return hook.getFileAsStream(
106 companyId, repositoryId, fileName, versionNumber);
107 }
108
109 public boolean hasFile(
110 long companyId, long repositoryId, String fileName,
111 double versionNumber)
112 throws PortalException, SystemException {
113
114 Hook hook = HookFactory.getInstance();
115
116 return hook.hasFile(companyId, repositoryId, fileName, versionNumber);
117 }
118
119 public void move(String srcDir, String destDir) throws SystemException {
120 Hook hook = HookFactory.getInstance();
121
122 hook.move(srcDir, destDir);
123 }
124
125 public Hits search(
126 long companyId, String portletId, long groupId,
127 long userId, long[] repositoryIds, String keywords, int start,
128 int end)
129 throws SystemException {
130
131 try {
132 BooleanQuery contextQuery = BooleanQueryFactoryUtil.create();
133
134 contextQuery.addRequiredTerm(Field.PORTLET_ID, portletId);
135
136 if (groupId > 0) {
137 Group group = groupLocalService.getGroup(groupId);
138
139 if (group.isLayout()) {
140 contextQuery.addRequiredTerm(Field.SCOPE_GROUP_ID, groupId);
141
142 groupId = group.getParentGroupId();
143 }
144
145 contextQuery.addRequiredTerm(Field.GROUP_ID, groupId);
146 }
147
148 if ((repositoryIds != null) && (repositoryIds.length > 0)) {
149 BooleanQuery repositoryIdsQuery =
150 BooleanQueryFactoryUtil.create();
151
152 for (long repositoryId : repositoryIds) {
153 try {
154 if (userId > 0) {
155 try {
156 dlFolderService.getFolder(repositoryId);
157 }
158 catch (Exception e) {
159 continue;
160 }
161 }
162
163 TermQuery termQuery = TermQueryFactoryUtil.create(
164 "repositoryId", repositoryId);
165
166 repositoryIdsQuery.add(
167 termQuery, BooleanClauseOccur.SHOULD);
168 }
169 catch (Exception e) {
170 }
171 }
172
173 contextQuery.add(repositoryIdsQuery, BooleanClauseOccur.MUST);
174 }
175
176 BooleanQuery searchQuery = BooleanQueryFactoryUtil.create();
177
178 if (Validator.isNotNull(keywords)) {
179 searchQuery.addTerm(Field.CONTENT, keywords);
180 searchQuery.addTerm(Field.PROPERTIES, keywords);
181 searchQuery.addTerm(Field.TAGS_ENTRIES, keywords, true);
182 }
183
184 BooleanQuery fullQuery = BooleanQueryFactoryUtil.create();
185
186 fullQuery.add(contextQuery, BooleanClauseOccur.MUST);
187
188 if (searchQuery.clauses().size() > 0) {
189 fullQuery.add(searchQuery, BooleanClauseOccur.MUST);
190 }
191
192 return SearchEngineUtil.search(
193 companyId, groupId, userId, DLFileEntry.class.getName(),
194 fullQuery, start, end);
195 }
196 catch (Exception e) {
197 throw new SystemException(e);
198 }
199 }
200
201 public void updateFile(
202 long companyId, String portletId, long groupId, long repositoryId,
203 String fileName, double versionNumber, String sourceFileName,
204 long fileEntryId, String properties, Date modifiedDate,
205 String[] tagsCategories, String[] tagsEntries, InputStream is)
206 throws PortalException, SystemException {
207
208 validate(fileName, sourceFileName, is);
209
210 Hook hook = HookFactory.getInstance();
211
212 hook.updateFile(
213 companyId, portletId, groupId, repositoryId, fileName,
214 versionNumber, sourceFileName, fileEntryId, properties,
215 modifiedDate, tagsCategories, tagsEntries, is);
216 }
217
218 public void validate(String fileName, File file)
219 throws PortalException, SystemException {
220
221 validate(fileName);
222
223 if (((PropsValues.WEBDAV_LITMUS) ||
224 (PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0)) &&
225 ((file == null) ||
226 (file.length() >
227 PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE)))) {
228
229 throw new FileSizeException(fileName);
230 }
231 }
232
233 public void validate(String fileName, byte[] bytes)
234 throws PortalException, SystemException {
235
236 validate(fileName);
237
238 if (((PropsValues.WEBDAV_LITMUS) ||
239 (PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0)) &&
240 ((bytes == null) ||
241 (bytes.length >
242 PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE)))) {
243
244 throw new FileSizeException(fileName);
245 }
246 }
247
248 public void validate(String fileName, InputStream is)
249 throws PortalException, SystemException {
250
251 validate(fileName);
252
253
255 try {
256 if (((PropsValues.WEBDAV_LITMUS) ||
257 (PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE) > 0)) &&
258 ((is == null) ||
259 (is.available() >
260 PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE)))) {
261
262 throw new FileSizeException(fileName);
263 }
264 }
265 catch (IOException ioe) {
266 throw new FileSizeException(ioe.getMessage());
267 }
268 }
269
270 public void validate(String fileName)
271 throws PortalException, SystemException {
272
273 if ((fileName.indexOf("\\\\") != -1) ||
274 (fileName.indexOf("//") != -1) ||
275 (fileName.indexOf(":") != -1) ||
276 (fileName.indexOf("*") != -1) ||
277 (fileName.indexOf("?") != -1) ||
278 (fileName.indexOf("\"") != -1) ||
279 (fileName.indexOf("<") != -1) ||
280 (fileName.indexOf(">") != -1) ||
281 (fileName.indexOf("|") != -1) ||
282 (fileName.indexOf("&") != -1) ||
283 (fileName.indexOf("[") != -1) ||
284 (fileName.indexOf("]") != -1) ||
285 (fileName.indexOf("'") != -1)) {
286
287 throw new FileNameException(fileName);
288 }
289
290 boolean validFileExtension = false;
291
292 String[] fileExtensions = PrefsPropsUtil.getStringArray(
293 PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA);
294
295 if (!PropsValues.WEBDAV_LITMUS) {
296 for (int i = 0; i < fileExtensions.length; i++) {
297 if (StringPool.STAR.equals(fileExtensions[i]) ||
298 StringUtil.endsWith(fileName, fileExtensions[i])) {
299
300 validFileExtension = true;
301
302 break;
303 }
304 }
305
306 if (!validFileExtension) {
307 throw new FileNameException(fileName);
308 }
309 }
310 }
311
312 public void validate(String fileName, String sourceFileName, InputStream is)
313 throws PortalException {
314
315 String fileNameExtension = FileUtil.getExtension(fileName);
316 String sourceFileNameExtension = FileUtil.getExtension(sourceFileName);
317
318 if (!PropsValues.WEBDAV_LITMUS) {
319 if (Validator.isNull(fileNameExtension) ||
320 !fileNameExtension.equalsIgnoreCase(sourceFileNameExtension)) {
321
322 throw new SourceFileNameException(sourceFileName);
323 }
324 }
325
326 if (is == null) {
327 throw new FileSizeException(fileName);
328 }
329 }
330
331 @BeanReference(name = _GROUP_LOCAL_SERVICE)
332 protected GroupLocalService groupLocalService;
333
334 @BeanReference(name = _DL_FOLDER_SERVICE)
335 protected DLFolderService dlFolderService;
336
337 private static final String _GROUP_LOCAL_SERVICE =
338 "com.liferay.portal.service.GroupLocalService.impl";
339
340 private static final String _DL_FOLDER_SERVICE =
341 "com.liferay.portlet.documentlibrary.service.DLFolderService.impl";
342
343 }