001
014
015 package com.liferay.portlet.documentlibrary.store;
016
017 import com.liferay.document.library.kernel.antivirus.AntivirusScannerUtil;
018 import com.liferay.document.library.kernel.exception.DirectoryNameException;
019 import com.liferay.document.library.kernel.store.DLStore;
020 import com.liferay.document.library.kernel.store.Store;
021 import com.liferay.document.library.kernel.util.DLValidatorUtil;
022 import com.liferay.portal.kernel.bean.BeanReference;
023 import com.liferay.portal.kernel.exception.PortalException;
024 import com.liferay.portal.kernel.exception.SystemException;
025 import com.liferay.portal.kernel.io.ByteArrayFileInputStream;
026 import com.liferay.portal.kernel.service.GroupLocalService;
027 import com.liferay.portal.kernel.util.FileUtil;
028 import com.liferay.portal.util.PropsValues;
029
030 import java.io.File;
031 import java.io.IOException;
032 import java.io.InputStream;
033
034
039 public class DLStoreImpl implements DLStore {
040
041 public DLStoreImpl() {
042 _storeFactory = StoreFactory.getInstance();
043 }
044
045 @Override
046 public void addDirectory(long companyId, long repositoryId, String dirName)
047 throws PortalException {
048
049 if (!DLValidatorUtil.isValidName(dirName) || dirName.equals("/")) {
050 throw new DirectoryNameException(dirName);
051 }
052
053 Store store = _storeFactory.getStore();
054
055 store.addDirectory(companyId, repositoryId, dirName);
056 }
057
058 @Override
059 public void addFile(
060 long companyId, long repositoryId, String fileName,
061 boolean validateFileExtension, byte[] bytes)
062 throws PortalException {
063
064 validate(fileName, validateFileExtension);
065
066 if (PropsValues.DL_STORE_ANTIVIRUS_ENABLED) {
067 AntivirusScannerUtil.scan(bytes);
068 }
069
070 Store store = _storeFactory.getStore();
071
072 store.addFile(companyId, repositoryId, fileName, bytes);
073 }
074
075 @Override
076 public void addFile(
077 long companyId, long repositoryId, String fileName,
078 boolean validateFileExtension, File file)
079 throws PortalException {
080
081 validate(fileName, validateFileExtension);
082
083 if (PropsValues.DL_STORE_ANTIVIRUS_ENABLED) {
084 AntivirusScannerUtil.scan(file);
085 }
086
087 Store store = _storeFactory.getStore();
088
089 store.addFile(companyId, repositoryId, fileName, file);
090 }
091
092 @Override
093 public void addFile(
094 long companyId, long repositoryId, String fileName,
095 boolean validateFileExtension, InputStream is)
096 throws PortalException {
097
098 if (is instanceof ByteArrayFileInputStream) {
099 ByteArrayFileInputStream byteArrayFileInputStream =
100 (ByteArrayFileInputStream)is;
101
102 File file = byteArrayFileInputStream.getFile();
103
104 addFile(
105 companyId, repositoryId, fileName, validateFileExtension, file);
106
107 return;
108 }
109
110 validate(fileName, validateFileExtension);
111
112 Store store = _storeFactory.getStore();
113
114 if (!PropsValues.DL_STORE_ANTIVIRUS_ENABLED ||
115 !AntivirusScannerUtil.isActive()) {
116
117 store.addFile(companyId, repositoryId, fileName, is);
118 }
119 else {
120 File tempFile = null;
121
122 try {
123 if (is.markSupported()) {
124 is.mark(is.available() + 1);
125
126 AntivirusScannerUtil.scan(is);
127
128 is.reset();
129
130 store.addFile(companyId, repositoryId, fileName, is);
131 }
132 else {
133 tempFile = FileUtil.createTempFile();
134
135 FileUtil.write(tempFile, is);
136
137 AntivirusScannerUtil.scan(tempFile);
138
139 store.addFile(companyId, repositoryId, fileName, tempFile);
140 }
141 }
142 catch (IOException ioe) {
143 throw new SystemException(
144 "Unable to scan file " + fileName, ioe);
145 }
146 finally {
147 if (tempFile != null) {
148 tempFile.delete();
149 }
150 }
151 }
152 }
153
154 @Override
155 public void addFile(
156 long companyId, long repositoryId, String fileName, byte[] bytes)
157 throws PortalException {
158
159 addFile(companyId, repositoryId, fileName, true, bytes);
160 }
161
162 @Override
163 public void addFile(
164 long companyId, long repositoryId, String fileName, File file)
165 throws PortalException {
166
167 addFile(companyId, repositoryId, fileName, true, file);
168 }
169
170 @Override
171 public void addFile(
172 long companyId, long repositoryId, String fileName, InputStream is)
173 throws PortalException {
174
175 addFile(companyId, repositoryId, fileName, true, is);
176 }
177
178 @Override
179 public void checkRoot(long companyId) {
180 Store store = _storeFactory.getStore();
181
182 store.checkRoot(companyId);
183 }
184
185 @Override
186 public void copyFileVersion(
187 long companyId, long repositoryId, String fileName,
188 String fromVersionLabel, String toVersionLabel)
189 throws PortalException {
190
191 Store store = _storeFactory.getStore();
192
193 store.copyFileVersion(
194 companyId, repositoryId, fileName, fromVersionLabel,
195 toVersionLabel);
196 }
197
198 @Override
199 public void deleteDirectory(
200 long companyId, long repositoryId, String dirName) {
201
202 Store store = _storeFactory.getStore();
203
204 store.deleteDirectory(companyId, repositoryId, dirName);
205 }
206
207 @Override
208 public void deleteFile(long companyId, long repositoryId, String fileName)
209 throws PortalException {
210
211 validate(fileName, false);
212
213 Store store = _storeFactory.getStore();
214
215 store.deleteFile(companyId, repositoryId, fileName);
216 }
217
218 @Override
219 public void deleteFile(
220 long companyId, long repositoryId, String fileName,
221 String versionLabel)
222 throws PortalException {
223
224 validate(fileName, false, versionLabel);
225
226 Store store = _storeFactory.getStore();
227
228 store.deleteFile(companyId, repositoryId, fileName, versionLabel);
229 }
230
231 @Override
232 public File getFile(long companyId, long repositoryId, String fileName)
233 throws PortalException {
234
235 validate(fileName, false);
236
237 Store store = _storeFactory.getStore();
238
239 return store.getFile(companyId, repositoryId, fileName);
240 }
241
242 @Override
243 public File getFile(
244 long companyId, long repositoryId, String fileName,
245 String versionLabel)
246 throws PortalException {
247
248 validate(fileName, false, versionLabel);
249
250 Store store = _storeFactory.getStore();
251
252 return store.getFile(companyId, repositoryId, fileName, versionLabel);
253 }
254
255 @Override
256 public byte[] getFileAsBytes(
257 long companyId, long repositoryId, String fileName)
258 throws PortalException {
259
260 validate(fileName, false);
261
262 Store store = _storeFactory.getStore();
263
264 return store.getFileAsBytes(companyId, repositoryId, fileName);
265 }
266
267 @Override
268 public byte[] getFileAsBytes(
269 long companyId, long repositoryId, String fileName,
270 String versionLabel)
271 throws PortalException {
272
273 validate(fileName, false, versionLabel);
274
275 Store store = _storeFactory.getStore();
276
277 return store.getFileAsBytes(
278 companyId, repositoryId, fileName, versionLabel);
279 }
280
281 @Override
282 public InputStream getFileAsStream(
283 long companyId, long repositoryId, String fileName)
284 throws PortalException {
285
286 validate(fileName, false);
287
288 Store store = _storeFactory.getStore();
289
290 return store.getFileAsStream(companyId, repositoryId, fileName);
291 }
292
293 @Override
294 public InputStream getFileAsStream(
295 long companyId, long repositoryId, String fileName,
296 String versionLabel)
297 throws PortalException {
298
299 validate(fileName, false, versionLabel);
300
301 Store store = _storeFactory.getStore();
302
303 return store.getFileAsStream(
304 companyId, repositoryId, fileName, versionLabel);
305 }
306
307 @Override
308 public String[] getFileNames(
309 long companyId, long repositoryId, String dirName)
310 throws PortalException {
311
312 if (!DLValidatorUtil.isValidName(dirName)) {
313 throw new DirectoryNameException(dirName);
314 }
315
316 Store store = _storeFactory.getStore();
317
318 return store.getFileNames(companyId, repositoryId, dirName);
319 }
320
321 @Override
322 public long getFileSize(long companyId, long repositoryId, String fileName)
323 throws PortalException {
324
325 validate(fileName, false);
326
327 Store store = _storeFactory.getStore();
328
329 return store.getFileSize(companyId, repositoryId, fileName);
330 }
331
332 @Override
333 public boolean hasDirectory(
334 long companyId, long repositoryId, String dirName)
335 throws PortalException {
336
337 if (!DLValidatorUtil.isValidName(dirName)) {
338 throw new DirectoryNameException(dirName);
339 }
340
341 Store store = _storeFactory.getStore();
342
343 return store.hasDirectory(companyId, repositoryId, dirName);
344 }
345
346 @Override
347 public boolean hasFile(long companyId, long repositoryId, String fileName)
348 throws PortalException {
349
350 validate(fileName, false);
351
352 Store store = _storeFactory.getStore();
353
354 return store.hasFile(companyId, repositoryId, fileName);
355 }
356
357 @Override
358 public boolean hasFile(
359 long companyId, long repositoryId, String fileName,
360 String versionLabel)
361 throws PortalException {
362
363 validate(fileName, false, versionLabel);
364
365 Store store = _storeFactory.getStore();
366
367 return store.hasFile(companyId, repositoryId, fileName, versionLabel);
368 }
369
370
374 @Deprecated
375 @Override
376 public boolean isValidName(String name) {
377 return DLValidatorUtil.isValidName(name);
378 }
379
380 @Override
381 public void move(String srcDir, String destDir) {
382 Store store = _storeFactory.getStore();
383
384 store.move(srcDir, destDir);
385 }
386
387 @Override
388 public void updateFile(
389 long companyId, long repositoryId, long newRepositoryId,
390 String fileName)
391 throws PortalException {
392
393 Store store = _storeFactory.getStore();
394
395 store.updateFile(companyId, repositoryId, newRepositoryId, fileName);
396 }
397
398 @Override
399 public void updateFile(
400 long companyId, long repositoryId, String fileName,
401 String newFileName)
402 throws PortalException {
403
404 Store store = _storeFactory.getStore();
405
406 store.updateFile(companyId, repositoryId, fileName, newFileName);
407 }
408
409 @Override
410 public void updateFile(
411 long companyId, long repositoryId, String fileName,
412 String fileExtension, boolean validateFileExtension,
413 String versionLabel, String sourceFileName, File file)
414 throws PortalException {
415
416 validate(
417 fileName, fileExtension, sourceFileName, validateFileExtension);
418
419 DLValidatorUtil.validateVersionLabel(versionLabel);
420
421 if (PropsValues.DL_STORE_ANTIVIRUS_ENABLED) {
422 AntivirusScannerUtil.scan(file);
423 }
424
425 Store store = _storeFactory.getStore();
426
427 store.updateFile(companyId, repositoryId, fileName, versionLabel, file);
428 }
429
430 @Override
431 public void updateFile(
432 long companyId, long repositoryId, String fileName,
433 String fileExtension, boolean validateFileExtension,
434 String versionLabel, String sourceFileName, InputStream is)
435 throws PortalException {
436
437 if (is instanceof ByteArrayFileInputStream) {
438 ByteArrayFileInputStream byteArrayFileInputStream =
439 (ByteArrayFileInputStream)is;
440
441 File file = byteArrayFileInputStream.getFile();
442
443 updateFile(
444 companyId, repositoryId, fileName, fileExtension,
445 validateFileExtension, versionLabel, sourceFileName, file);
446
447 return;
448 }
449
450 validate(
451 fileName, fileExtension, sourceFileName, validateFileExtension);
452
453 DLValidatorUtil.validateVersionLabel(versionLabel);
454
455 Store store = _storeFactory.getStore();
456
457 if (!PropsValues.DL_STORE_ANTIVIRUS_ENABLED ||
458 !AntivirusScannerUtil.isActive()) {
459
460 store.updateFile(
461 companyId, repositoryId, fileName, versionLabel, is);
462 }
463 else {
464 File tempFile = null;
465
466 try {
467 if (is.markSupported()) {
468 is.mark(is.available() + 1);
469
470 AntivirusScannerUtil.scan(is);
471
472 is.reset();
473
474 store.updateFile(
475 companyId, repositoryId, fileName, versionLabel, is);
476 }
477 else {
478 tempFile = FileUtil.createTempFile();
479
480 FileUtil.write(tempFile, is);
481
482 AntivirusScannerUtil.scan(tempFile);
483
484 store.updateFile(
485 companyId, repositoryId, fileName, versionLabel,
486 tempFile);
487 }
488 }
489 catch (IOException ioe) {
490 throw new SystemException(
491 "Unable to scan file " + fileName, ioe);
492 }
493 finally {
494 if (tempFile != null) {
495 tempFile.delete();
496 }
497 }
498 }
499 }
500
501 @Override
502 public void updateFileVersion(
503 long companyId, long repositoryId, String fileName,
504 String fromVersionLabel, String toVersionLabel)
505 throws PortalException {
506
507 Store store = _storeFactory.getStore();
508
509 store.updateFileVersion(
510 companyId, repositoryId, fileName, fromVersionLabel,
511 toVersionLabel);
512 }
513
514 @Override
515 public void validate(String fileName, boolean validateFileExtension)
516 throws PortalException {
517
518 DLValidatorUtil.validateFileName(fileName);
519
520 if (validateFileExtension) {
521 DLValidatorUtil.validateFileExtension(fileName);
522 }
523 }
524
525 @Override
526 public void validate(
527 String fileName, boolean validateFileExtension, byte[] bytes)
528 throws PortalException {
529
530 validate(fileName, validateFileExtension);
531
532 DLValidatorUtil.validateFileSize(fileName, bytes);
533 }
534
535 @Override
536 public void validate(
537 String fileName, boolean validateFileExtension, File file)
538 throws PortalException {
539
540 validate(fileName, validateFileExtension);
541
542 DLValidatorUtil.validateFileSize(fileName, file);
543 }
544
545 @Override
546 public void validate(
547 String fileName, boolean validateFileExtension, InputStream is)
548 throws PortalException {
549
550 validate(fileName, validateFileExtension);
551
552 DLValidatorUtil.validateFileSize(fileName, is);
553 }
554
555 @Override
556 public void validate(
557 String fileName, String fileExtension, String sourceFileName,
558 boolean validateFileExtension)
559 throws PortalException {
560
561 validate(fileName, validateFileExtension);
562
563 DLValidatorUtil.validateSourceFileExtension(
564 fileExtension, sourceFileName);
565 }
566
567 @Override
568 public void validate(
569 String fileName, String fileExtension, String sourceFileName,
570 boolean validateFileExtension, File file)
571 throws PortalException {
572
573 validate(
574 fileName, fileExtension, sourceFileName, validateFileExtension);
575
576 DLValidatorUtil.validateFileSize(fileName, file);
577 }
578
579 @Override
580 public void validate(
581 String fileName, String fileExtension, String sourceFileName,
582 boolean validateFileExtension, InputStream is)
583 throws PortalException {
584
585 validate(
586 fileName, fileExtension, sourceFileName, validateFileExtension);
587
588 DLValidatorUtil.validateFileSize(fileName, is);
589 }
590
591
595 @Deprecated
596 @Override
597 public void validateDirectoryName(String directoryName)
598 throws PortalException {
599
600 DLValidatorUtil.validateDirectoryName(directoryName);
601 }
602
603 protected void validate(
604 String fileName, boolean validateFileExtension, String versionLabel)
605 throws PortalException {
606
607 validate(fileName, validateFileExtension);
608
609 DLValidatorUtil.validateVersionLabel(versionLabel);
610 }
611
612 protected void validate(
613 String fileName, String fileExtension, String sourceFileName,
614 boolean validateFileExtension, File file, String versionLabel)
615 throws PortalException {
616
617 validate(
618 fileName, fileExtension, sourceFileName, validateFileExtension,
619 file);
620
621 DLValidatorUtil.validateVersionLabel(versionLabel);
622 }
623
624 protected void validate(
625 String fileName, String fileExtension, String sourceFileName,
626 boolean validateFileExtension, InputStream is, String versionLabel)
627 throws PortalException {
628
629 validate(
630 fileName, fileExtension, sourceFileName, validateFileExtension, is);
631
632 DLValidatorUtil.validateVersionLabel(versionLabel);
633 }
634
635 @BeanReference(type = GroupLocalService.class)
636 protected GroupLocalService groupLocalService;
637
638 private final StoreFactory _storeFactory;
639
640 }