001
014
015 package com.liferay.portlet.documentlibrary.lar;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
020 import com.liferay.portal.kernel.lar.ExportImportPathUtil;
021 import com.liferay.portal.kernel.lar.PortletDataContext;
022 import com.liferay.portal.kernel.lar.PortletDataException;
023 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
024 import com.liferay.portal.kernel.log.Log;
025 import com.liferay.portal.kernel.log.LogFactoryUtil;
026 import com.liferay.portal.kernel.repository.model.FileEntry;
027 import com.liferay.portal.kernel.repository.model.FileVersion;
028 import com.liferay.portal.kernel.repository.model.Folder;
029 import com.liferay.portal.kernel.search.Indexer;
030 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
031 import com.liferay.portal.kernel.trash.TrashHandler;
032 import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil;
033 import com.liferay.portal.kernel.util.ArrayUtil;
034 import com.liferay.portal.kernel.util.FileUtil;
035 import com.liferay.portal.kernel.util.MapUtil;
036 import com.liferay.portal.kernel.util.StringPool;
037 import com.liferay.portal.kernel.util.StringUtil;
038 import com.liferay.portal.kernel.util.Validator;
039 import com.liferay.portal.kernel.xml.Element;
040 import com.liferay.portal.model.Repository;
041 import com.liferay.portal.repository.liferayrepository.LiferayRepository;
042 import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
043 import com.liferay.portal.service.RepositoryLocalServiceUtil;
044 import com.liferay.portal.service.ServiceContext;
045 import com.liferay.portal.util.PortalUtil;
046 import com.liferay.portlet.documentlibrary.DuplicateFileException;
047 import com.liferay.portlet.documentlibrary.NoSuchFileException;
048 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
049 import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
050 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
051 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
052 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
053 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
054 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
055 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
056 import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil;
057 import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;
058 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
059 import com.liferay.portlet.documentlibrary.util.DLProcessorRegistryUtil;
060 import com.liferay.portlet.documentlibrary.util.DLProcessorThreadLocal;
061 import com.liferay.portlet.documentlibrary.util.DLUtil;
062 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
063 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
064 import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
065
066 import java.io.IOException;
067 import java.io.InputStream;
068
069 import java.util.List;
070 import java.util.Map;
071
072
075 public class FileEntryStagedModelDataHandler
076 extends BaseStagedModelDataHandler<FileEntry> {
077
078 public static final String[] CLASS_NAMES = {
079 DLFileEntry.class.getName(), FileEntry.class.getName(),
080 LiferayFileEntry.class.getName()
081 };
082
083 @Override
084 public void deleteStagedModel(
085 String uuid, long groupId, String className, String extraData)
086 throws PortalException, SystemException {
087
088 FileEntry fileEntry = FileEntryUtil.fetchByUUID_R(uuid, groupId);
089
090 if (fileEntry != null) {
091 DLAppLocalServiceUtil.deleteFileEntry(fileEntry.getFileEntryId());
092 }
093 }
094
095 @Override
096 public String[] getClassNames() {
097 return CLASS_NAMES;
098 }
099
100 @Override
101 public String getDisplayName(FileEntry fileEntry) {
102 return fileEntry.getTitle();
103 }
104
105 @Override
106 public void importStagedModel(
107 PortletDataContext portletDataContext, FileEntry fileEntry)
108 throws PortletDataException {
109
110 boolean dlProcessorEnabled = DLProcessorThreadLocal.isEnabled();
111
112 try {
113 DLProcessorThreadLocal.setEnabled(false);
114
115 super.importStagedModel(portletDataContext, fileEntry);
116 }
117 finally {
118 DLProcessorThreadLocal.setEnabled(dlProcessorEnabled);
119 }
120 }
121
122 @Override
123 protected void doExportStagedModel(
124 PortletDataContext portletDataContext, FileEntry fileEntry)
125 throws Exception {
126
127 Element fileEntryElement = portletDataContext.getExportDataElement(
128 fileEntry, FileEntry.class);
129
130 String fileEntryPath = ExportImportPathUtil.getModelPath(fileEntry);
131
132 if (!fileEntry.isDefaultRepository()) {
133 Repository repository = RepositoryLocalServiceUtil.getRepository(
134 fileEntry.getRepositoryId());
135
136 StagedModelDataHandlerUtil.exportReferenceStagedModel(
137 portletDataContext, fileEntry, FileEntry.class, repository,
138 Repository.class, PortletDataContext.REFERENCE_TYPE_STRONG);
139
140 portletDataContext.addClassedModel(
141 fileEntryElement, fileEntryPath, fileEntry);
142
143 long liferayRepositoryClassNameId = PortalUtil.getClassNameId(
144 LiferayRepository.class.getName());
145
146 if (repository.getClassNameId() != liferayRepositoryClassNameId) {
147 return;
148 }
149 }
150
151 FileVersion fileVersion = fileEntry.getFileVersion();
152
153 if (!fileVersion.isApproved() && !fileEntry.isInTrash()) {
154 return;
155 }
156
157 if (fileEntry.getFolderId() !=
158 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
159
160 StagedModelDataHandlerUtil.exportReferenceStagedModel(
161 portletDataContext, fileEntry, FileEntry.class,
162 fileEntry.getFolder(), Folder.class,
163 PortletDataContext.REFERENCE_TYPE_PARENT);
164 }
165
166 LiferayFileEntry liferayFileEntry = (LiferayFileEntry)fileEntry;
167
168 liferayFileEntry.setCachedFileVersion(fileVersion);
169
170 if (!portletDataContext.isPerformDirectBinaryImport()) {
171 InputStream is = null;
172
173 try {
174 is = FileEntryUtil.getContentStream(fileEntry);
175 }
176 catch (NoSuchFileException nsfe) {
177 }
178
179 if (is == null) {
180 if (_log.isWarnEnabled()) {
181 _log.warn(
182 "No file found for file entry " +
183 fileEntry.getFileEntryId());
184 }
185
186 fileEntryElement.detach();
187
188 return;
189 }
190
191 try {
192 String binPath = ExportImportPathUtil.getModelPath(
193 fileEntry, fileEntry.getVersion());
194
195 portletDataContext.addZipEntry(binPath, is);
196
197 fileEntryElement.addAttribute("bin-path", binPath);
198 }
199 finally {
200 try {
201 is.close();
202 }
203 catch (IOException ioe) {
204 _log.error(ioe, ioe);
205 }
206 }
207 }
208
209 if (portletDataContext.getBooleanParameter(
210 DLPortletDataHandler.NAMESPACE, "previews-and-thumbnails")) {
211
212 DLProcessorRegistryUtil.exportGeneratedFiles(
213 portletDataContext, fileEntry, fileEntryElement);
214 }
215
216 exportMetaData(portletDataContext, fileEntryElement, fileEntry);
217
218 portletDataContext.addClassedModel(
219 fileEntryElement, fileEntryPath, liferayFileEntry,
220 DLFileEntry.class);
221 }
222
223 @Override
224 protected void doImportStagedModel(
225 PortletDataContext portletDataContext, FileEntry fileEntry)
226 throws Exception {
227
228 long userId = portletDataContext.getUserId(fileEntry.getUserUuid());
229
230 if (!fileEntry.isDefaultRepository()) {
231 StagedModelDataHandlerUtil.importReferenceStagedModel(
232 portletDataContext, fileEntry, Repository.class,
233 fileEntry.getRepositoryId());
234 }
235
236 if (fileEntry.getFolderId() !=
237 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
238
239 StagedModelDataHandlerUtil.importReferenceStagedModel(
240 portletDataContext, fileEntry, Folder.class,
241 fileEntry.getFolderId());
242 }
243
244 Map<Long, Long> folderIds =
245 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
246 Folder.class);
247
248 long folderId = MapUtil.getLong(
249 folderIds, fileEntry.getFolderId(), fileEntry.getFolderId());
250
251 long[] assetCategoryIds = portletDataContext.getAssetCategoryIds(
252 DLFileEntry.class, fileEntry.getFileEntryId());
253 String[] assetTagNames = portletDataContext.getAssetTagNames(
254 DLFileEntry.class, fileEntry.getFileEntryId());
255
256 ServiceContext serviceContext = portletDataContext.createServiceContext(
257 fileEntry, DLFileEntry.class);
258
259 serviceContext.setAttribute(
260 "sourceFileName", "A." + fileEntry.getExtension());
261 serviceContext.setUserId(userId);
262
263 Element fileEntryElement = portletDataContext.getImportDataElement(
264 fileEntry);
265
266 String binPath = fileEntryElement.attributeValue("bin-path");
267
268 InputStream is = null;
269
270 if (Validator.isNull(binPath) &&
271 portletDataContext.isPerformDirectBinaryImport()) {
272
273 try {
274 is = FileEntryUtil.getContentStream(fileEntry);
275 }
276 catch (NoSuchFileException nsfe) {
277 }
278 }
279 else {
280 is = portletDataContext.getZipEntryAsInputStream(binPath);
281 }
282
283 if (is == null) {
284 if (_log.isWarnEnabled()) {
285 _log.warn(
286 "No file found for file entry " +
287 fileEntry.getFileEntryId());
288 }
289
290 return;
291 }
292
293 importMetaData(
294 portletDataContext, fileEntryElement, fileEntry, serviceContext);
295
296 FileEntry importedFileEntry = null;
297
298 String titleWithExtension = DLUtil.getTitleWithExtension(fileEntry);
299 String extension = fileEntry.getExtension();
300
301 String periodAndExtension = StringPool.PERIOD.concat(extension);
302
303 if (portletDataContext.isDataStrategyMirror()) {
304 FileEntry existingFileEntry = FileEntryUtil.fetchByUUID_R(
305 fileEntry.getUuid(), portletDataContext.getScopeGroupId());
306
307 FileVersion fileVersion = fileEntry.getFileVersion();
308
309 if (existingFileEntry == null) {
310 String fileEntryTitle = fileEntry.getTitle();
311
312 FileEntry existingTitleFileEntry = FileEntryUtil.fetchByR_F_T(
313 portletDataContext.getScopeGroupId(), folderId,
314 fileEntryTitle);
315
316 if (existingTitleFileEntry != null) {
317 if ((fileEntry.getGroupId() ==
318 portletDataContext.getSourceGroupId()) &&
319 portletDataContext.
320 isDataStrategyMirrorWithOverwriting()) {
321
322 DLAppLocalServiceUtil.deleteFileEntry(
323 existingTitleFileEntry.getFileEntryId());
324 }
325 else {
326 boolean titleHasExtension = false;
327
328 if (fileEntryTitle.endsWith(periodAndExtension)) {
329 fileEntryTitle = FileUtil.stripExtension(
330 fileEntryTitle);
331
332 titleHasExtension = true;
333 }
334
335 for (int i = 1;; i++) {
336 fileEntryTitle += StringPool.SPACE + i;
337
338 titleWithExtension =
339 fileEntryTitle + periodAndExtension;
340
341 existingTitleFileEntry = FileEntryUtil.fetchByR_F_T(
342 portletDataContext.getScopeGroupId(), folderId,
343 titleWithExtension);
344
345 if (existingTitleFileEntry == null) {
346 if (titleHasExtension) {
347 fileEntryTitle += periodAndExtension;
348 }
349
350 break;
351 }
352 }
353 }
354 }
355
356 serviceContext.setAttribute(
357 "fileVersionUuid", fileVersion.getUuid());
358 serviceContext.setUuid(fileEntry.getUuid());
359
360 importedFileEntry = DLAppLocalServiceUtil.addFileEntry(
361 userId, portletDataContext.getScopeGroupId(), folderId,
362 titleWithExtension, fileEntry.getMimeType(), fileEntryTitle,
363 fileEntry.getDescription(), null, is, fileEntry.getSize(),
364 serviceContext);
365
366 if (fileEntry.isInTrash()) {
367 importedFileEntry = DLAppServiceUtil.moveFileEntryToTrash(
368 importedFileEntry.getFileEntryId());
369 }
370 }
371 else {
372 FileVersion latestExistingFileVersion =
373 existingFileEntry.getLatestFileVersion();
374
375 boolean indexEnabled = serviceContext.isIndexingEnabled();
376
377 try {
378 serviceContext.setIndexingEnabled(false);
379
380 if (!fileVersion.getUuid().equals(
381 latestExistingFileVersion.getUuid())) {
382
383 DLFileVersion alreadyExistingFileVersion =
384 DLFileVersionLocalServiceUtil.
385 getFileVersionByUuidAndGroupId(
386 fileVersion.getUuid(),
387 existingFileEntry.getGroupId());
388
389 if (alreadyExistingFileVersion != null) {
390 serviceContext.setAttribute(
391 "existingDLFileVersionId",
392 alreadyExistingFileVersion.getFileVersionId());
393 }
394
395 serviceContext.setUuid(fileVersion.getUuid());
396
397 importedFileEntry =
398 DLAppLocalServiceUtil.updateFileEntry(
399 userId, existingFileEntry.getFileEntryId(),
400 fileEntry.getTitle(), fileEntry.getMimeType(),
401 fileEntry.getTitle(),
402 fileEntry.getDescription(), null, false, is,
403 fileEntry.getSize(), serviceContext);
404 }
405 else {
406 DLAppLocalServiceUtil.updateAsset(
407 userId, existingFileEntry,
408 latestExistingFileVersion, assetCategoryIds,
409 assetTagNames, null);
410
411 importedFileEntry = existingFileEntry;
412 }
413
414 if (importedFileEntry.getFolderId() != folderId) {
415 importedFileEntry = DLAppLocalServiceUtil.moveFileEntry(
416 userId, importedFileEntry.getFileEntryId(),
417 folderId, serviceContext);
418 }
419
420 if (importedFileEntry instanceof LiferayFileEntry) {
421 LiferayFileEntry liferayFileEntry =
422 (LiferayFileEntry)importedFileEntry;
423
424 Indexer indexer = IndexerRegistryUtil.getIndexer(
425 DLFileEntry.class);
426
427 indexer.reindex(liferayFileEntry.getModel());
428 }
429 }
430 finally {
431 serviceContext.setIndexingEnabled(indexEnabled);
432 }
433 }
434 }
435 else {
436 try {
437 importedFileEntry = DLAppLocalServiceUtil.addFileEntry(
438 userId, portletDataContext.getScopeGroupId(), folderId,
439 titleWithExtension, fileEntry.getMimeType(),
440 fileEntry.getTitle(), fileEntry.getDescription(), null, is,
441 fileEntry.getSize(), serviceContext);
442 }
443 catch (DuplicateFileException dfe) {
444 String title = fileEntry.getTitle();
445
446 String[] titleParts = title.split("\\.", 2);
447
448 title = titleParts[0] + StringUtil.randomString();
449
450 if (titleParts.length > 1) {
451 title += StringPool.PERIOD + titleParts[1];
452 }
453
454 if (!title.endsWith(periodAndExtension)) {
455 title += periodAndExtension;
456 }
457
458 importedFileEntry = DLAppLocalServiceUtil.addFileEntry(
459 userId, portletDataContext.getScopeGroupId(), folderId,
460 title, fileEntry.getMimeType(), title,
461 fileEntry.getDescription(), null, is, fileEntry.getSize(),
462 serviceContext);
463 }
464 }
465
466 if (portletDataContext.getBooleanParameter(
467 DLPortletDataHandler.NAMESPACE, "previews-and-thumbnails")) {
468
469 DLProcessorRegistryUtil.importGeneratedFiles(
470 portletDataContext, fileEntry, importedFileEntry,
471 fileEntryElement);
472 }
473
474 portletDataContext.importClassedModel(
475 fileEntry, importedFileEntry, DLFileEntry.class);
476
477 Map<Long, Long> fileEntryIds =
478 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
479 FileEntry.class);
480
481 fileEntryIds.put(
482 fileEntry.getFileEntryId(), importedFileEntry.getFileEntryId());
483 }
484
485 @Override
486 protected void doRestoreStagedModel(
487 PortletDataContext portletDataContext, FileEntry fileEntry)
488 throws Exception {
489
490 long userId = portletDataContext.getUserId(fileEntry.getUserUuid());
491
492 FileEntry existingFileEntry = FileEntryUtil.fetchByUUID_R(
493 fileEntry.getUuid(), portletDataContext.getScopeGroupId());
494
495 if ((existingFileEntry == null) || !existingFileEntry.isInTrash()) {
496 return;
497 }
498
499 TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler(
500 DLFileEntry.class.getName());
501
502 if (trashHandler.isRestorable(existingFileEntry.getFileEntryId())) {
503 trashHandler.restoreTrashEntry(
504 userId, existingFileEntry.getFileEntryId());
505 }
506 }
507
508 protected void exportMetaData(
509 PortletDataContext portletDataContext, Element fileEntryElement,
510 FileEntry fileEntry)
511 throws Exception {
512
513 LiferayFileEntry liferayFileEntry = (LiferayFileEntry)fileEntry;
514
515 DLFileEntry dlFileEntry = liferayFileEntry.getDLFileEntry();
516
517 long fileEntryTypeId = dlFileEntry.getFileEntryTypeId();
518
519 DLFileEntryType dlFileEntryType =
520 DLFileEntryTypeLocalServiceUtil.fetchFileEntryType(fileEntryTypeId);
521
522 if ((dlFileEntryType == null) || !dlFileEntryType.isExportable()) {
523 return;
524 }
525
526 StagedModelDataHandlerUtil.exportReferenceStagedModel(
527 portletDataContext, fileEntry, FileEntry.class, dlFileEntryType,
528 DLFileEntryType.class, PortletDataContext.REFERENCE_TYPE_STRONG);
529
530 List<DDMStructure> ddmStructures = dlFileEntryType.getDDMStructures();
531
532 for (DDMStructure ddmStructure : ddmStructures) {
533 FileVersion fileVersion = fileEntry.getFileVersion();
534
535 DLFileEntryMetadata dlFileEntryMetadata =
536 DLFileEntryMetadataLocalServiceUtil.fetchFileEntryMetadata(
537 ddmStructure.getStructureId(),
538 fileVersion.getFileVersionId());
539
540 if (dlFileEntryMetadata == null) {
541 continue;
542 }
543
544 Element structureFields = fileEntryElement.addElement(
545 "structure-fields");
546
547 String path = ExportImportPathUtil.getModelPath(
548 ddmStructure, String.valueOf(ddmStructure.getStructureId()));
549
550 structureFields.addAttribute("path", path);
551
552 structureFields.addAttribute(
553 "structureUuid", ddmStructure.getUuid());
554
555 Fields fields = StorageEngineUtil.getFields(
556 dlFileEntryMetadata.getDDMStorageId());
557
558 portletDataContext.addZipEntry(path, fields);
559 }
560 }
561
562 protected void importMetaData(
563 PortletDataContext portletDataContext, Element fileEntryElement,
564 FileEntry fileEntry, ServiceContext serviceContext)
565 throws Exception {
566
567 LiferayFileEntry liferayFileEntry = (LiferayFileEntry)fileEntry;
568
569 DLFileEntry dlFileEntry = liferayFileEntry.getDLFileEntry();
570
571 StagedModelDataHandlerUtil.importReferenceStagedModel(
572 portletDataContext, fileEntry, DLFileEntryType.class,
573 dlFileEntry.getFileEntryTypeId());
574
575 Map<Long, Long> dlFileEntryTypeIds =
576 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
577 DLFileEntryType.class);
578
579 long dlFileEntryTypeId = MapUtil.getLong(
580 dlFileEntryTypeIds, dlFileEntry.getFileEntryTypeId(),
581 dlFileEntry.getFileEntryTypeId());
582
583 DLFileEntryType existingDLFileEntryType =
584 DLFileEntryTypeLocalServiceUtil.fetchDLFileEntryType(
585 dlFileEntryTypeId);
586
587 if (existingDLFileEntryType == null) {
588 serviceContext.setAttribute("fileEntryTypeId", -1);
589
590 return;
591 }
592
593 serviceContext.setAttribute(
594 "fileEntryTypeId", existingDLFileEntryType.getFileEntryTypeId());
595
596 List<DDMStructure> ddmStructures =
597 existingDLFileEntryType.getDDMStructures();
598
599 for (DDMStructure ddmStructure : ddmStructures) {
600 Element structureFieldsElement =
601 (Element)fileEntryElement.selectSingleNode(
602 "structure-fields[@structureUuid='".concat(
603 ddmStructure.getUuid()).concat("']"));
604
605 if (structureFieldsElement == null) {
606 continue;
607 }
608
609 String path = structureFieldsElement.attributeValue("path");
610
611 Fields fields = (Fields)portletDataContext.getZipEntryAsObject(
612 path);
613
614 serviceContext.setAttribute(
615 Fields.class.getName() + ddmStructure.getStructureId(), fields);
616 }
617 }
618
619 @Override
620 protected void validateExport(
621 PortletDataContext portletDataContext, FileEntry fileEntry)
622 throws PortletDataException {
623
624 if ((fileEntry.getGroupId() != portletDataContext.getGroupId()) &&
625 (fileEntry.getGroupId() != portletDataContext.getScopeGroupId())) {
626
627 PortletDataException pde = new PortletDataException(
628 PortletDataException.INVALID_GROUP);
629
630 pde.setStagedModel(fileEntry);
631
632 throw pde;
633 }
634
635 try {
636 FileVersion fileVersion = fileEntry.getFileVersion();
637
638 if (!ArrayUtil.contains(
639 getExportableStatuses(), fileVersion.getStatus())) {
640
641 throw new PortletDataException(
642 PortletDataException.STATUS_UNAVAILABLE);
643 }
644 }
645 catch (PortletDataException pde) {
646 throw pde;
647 }
648 catch (Exception e) {
649 if (_log.isWarnEnabled()) {
650 _log.warn(
651 "Unable to check workflow status for " +
652 DLFileEntry.class.getName());
653 }
654 }
655
656 TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler(
657 DLFileEntry.class.getName());
658
659 if (trashHandler != null) {
660 try {
661 if (trashHandler.isInTrash(fileEntry.getFileEntryId()) ||
662 trashHandler.isInTrashContainer(
663 fileEntry.getFileEntryId())) {
664
665 throw new PortletDataException(
666 PortletDataException.STATUS_IN_TRASH);
667 }
668 }
669 catch (PortletDataException pde) {
670 throw pde;
671 }
672 catch (Exception e) {
673 if (_log.isWarnEnabled()) {
674 _log.warn(
675 "Unable to check trash status for " +
676 DLFileEntry.class.getName());
677 }
678 }
679 }
680 }
681
682 @Override
683 protected boolean validateMissingReference(
684 String uuid, long companyId, long groupId)
685 throws Exception {
686
687 DLFileEntry dlFileEntry =
688 DLFileEntryLocalServiceUtil.fetchDLFileEntryByUuidAndGroupId(
689 uuid, groupId);
690
691 if (dlFileEntry == null) {
692 return false;
693 }
694
695 return true;
696 }
697
698 private static Log _log = LogFactoryUtil.getLog(
699 FileEntryStagedModelDataHandler.class);
700
701 }