diff --git a/src/main/java/caosdb/server/FileSystem.java b/src/main/java/caosdb/server/FileSystem.java index c46f0f644442a5df6c2363dedfacb38025cacde4..a26aee88352b3410ecc0e2fde40777d8f5681a79 100644 --- a/src/main/java/caosdb/server/FileSystem.java +++ b/src/main/java/caosdb/server/FileSystem.java @@ -24,16 +24,6 @@ package caosdb.server; -import caosdb.server.database.access.Access; -import caosdb.server.database.backend.transaction.GetFileRecordByPath; -import caosdb.server.database.misc.TransactionBenchmark; -import caosdb.server.entity.EntityInterface; -import caosdb.server.entity.FileProperties; -import caosdb.server.entity.Message; -import caosdb.server.utils.FileUtils; -import caosdb.server.utils.ServerMessages; -import caosdb.server.utils.Utils; -import com.google.common.io.Files; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -44,6 +34,17 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.regex.Pattern; import org.apache.commons.fileupload.FileItemStream; +import com.google.common.io.Files; +import caosdb.server.database.access.Access; +import caosdb.server.database.backend.transaction.GetFileRecordByPath; +import caosdb.server.database.exceptions.EntityDoesNotExistException; +import caosdb.server.database.misc.TransactionBenchmark; +import caosdb.server.entity.EntityInterface; +import caosdb.server.entity.FileProperties; +import caosdb.server.entity.Message; +import caosdb.server.utils.FileUtils; +import caosdb.server.utils.ServerMessages; +import caosdb.server.utils.Utils; public class FileSystem { private static String filesystem = null; @@ -324,15 +325,22 @@ public class FileSystem { final GetFileRecordByPath t = new GetFileRecordByPath(file.getPath()); t.setAccess(access); t.setTransactionBenchmark(b); - t.executeTransaction(); + try { + t.executeTransaction(); + } catch (EntityDoesNotExistException e) { + // could not determine which entity owns this path + // this is usually the case when target is a directory + } if (t.getEntity() != null) { final Integer foreign = t.getId(); if (foreign != null && foreign.equals(entity.getId())) { + // entity already owns this path return true; } - throw ServerMessages.TARGET_PATH_EXISTS; } } + // another entity owns this path + throw ServerMessages.TARGET_PATH_EXISTS; } return true;