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