/** * Get a ObjectMap with some fields if they have been modified. * size * modificationDate * checksum * uri * * @param file file * @param fileUri If null, calls to getFileUri() * <p> * TODO: Lazy checksum: Only calculate checksum if the size has changed. * @param calculateChecksum Calculate checksum to check if have changed * @return ObjectMap ObjectMap * @throws CatalogException CatalogException */ public ObjectMap getModifiedFileAttributes(File file, URI fileUri, boolean calculateChecksum) throws CatalogException { if (fileUri == null) { fileUri = catalogManager.getFileManager().getUri(file); } String checksum = null; if (calculateChecksum) { checksum = catalogManager.getCatalogIOManagerFactory().get(fileUri).calculateChecksum(fileUri); } return getModifiedFileAttributes(file, checksum, fileUri, null); }
if (calculateChecksum) { logger.debug("SourceURI equals to TargetURI. Only calculate checksum and update file entry"); targetChecksum = targetIOManager.calculateChecksum(targetUri); } else { logger.debug("SourceURI equals to TargetURI. Only update file entry"); sourceChecksum = sourceIOManager.calculateChecksum(sourceUri); } else { //Do not calculate checksum. sourceChecksum = "null"; targetChecksum = targetIOManager.calculateChecksum(targetUri); } else { targetChecksum = sourceChecksum;
@Deprecated private File linkFile(File file, boolean calculateChecksum, URI externalUri, String sessionId) throws CatalogException { String checksum = null; CatalogIOManager ioManager = catalogManager.getCatalogIOManagerFactory().get(externalUri); if (ioManager.isDirectory(externalUri)) { throw new CatalogIOException("Can't link file '" + file.getPath() + "' with a folder uri " + externalUri); } if (calculateChecksum) { try { checksum = ioManager.calculateChecksum(externalUri); } catch (CatalogIOException e) { e.printStackTrace(); } } ObjectMap objectMap = new ObjectMap("uri", externalUri); objectMap.put(FileDBAdaptor.QueryParams.STATUS_NAME.key(), File.FileStatus.READY); updateFileAttributes(file, checksum, externalUri, objectMap, sessionId); return catalogManager.getFileManager().get(file.getUid(), null, sessionId).first(); }
if (calculateChecksum) { try { checksum = targetIOManager.calculateChecksum(targetUri); } catch (CatalogIOException e) { e.printStackTrace();
@Test public void testReplaceExisting() throws IOException, CatalogException { // Create and register file1.txt and s/file2.txt File file = catalogManager.getFileManager().upload(study.getFqn(), CatalogManagerTest.createDebugFile().toURI(), new File().setPath(folder.getPath() + "file1.txt"), false, false, true, true, sessionIdUser).first(); catalogManager.getFileManager().upload(study.getFqn(), CatalogManagerTest.createDebugFile().toURI(), new File().setPath(folder.getPath() + "s/file2.txt"), false, true, true, true, sessionIdUser).first(); // Create same file structure, and replace CatalogManagerTest.createDebugFile(directory.resolve("file1.txt").toString()); Files.createDirectory(directory.resolve("s/")); CatalogManagerTest.createDebugFile(directory.resolve("s/file2.txt").toString()); FileScanner fileScanner = new FileScanner(catalogManager); fileScanner.scan(folder, directory.toUri(), FileScanner.FileScannerPolicy.REPLACE, true, true, sessionIdUser); File replacedFile = catalogManager.getFileManager().get(study.getFqn(), file.getPath(), null, sessionIdUser).first(); assertEquals(File.FileStatus.READY, replacedFile.getStatus().getName()); assertEquals(file.getUid(), replacedFile.getUid()); assertNotEquals(replacedFile.getChecksum(), file.getChecksum()); assertEquals(replacedFile.getChecksum(), catalogManager.getCatalogIOManagerFactory().getDefault().calculateChecksum(replacedFile.getUri())); }