diff --git a/src/main/java/caosdb/server/database/backend/transaction/GetFileRecordByPath.java b/src/main/java/caosdb/server/database/backend/transaction/GetFileRecordByPath.java index 8e0afcbdc50985f1fa1a939940c05f8429562c90..6366bd2884aca38a0d54eca4a926fcc7e8b9cda4 100644 --- a/src/main/java/caosdb/server/database/backend/transaction/GetFileRecordByPath.java +++ b/src/main/java/caosdb/server/database/backend/transaction/GetFileRecordByPath.java @@ -27,6 +27,7 @@ package caosdb.server.database.backend.transaction; import caosdb.server.caching.Cache; import caosdb.server.database.CacheableBackendTransaction; import caosdb.server.database.backend.interfaces.GetFileRecordByPathImpl; +import caosdb.server.database.exceptions.EntityDoesNotExistException; import caosdb.server.database.exceptions.TransactionException; import caosdb.server.database.proto.SparseEntity; import org.apache.commons.jcs.access.behavior.ICacheAccess; @@ -62,7 +63,11 @@ public class GetFileRecordByPath extends CacheableBackendTransaction<String, Spa @Override public SparseEntity executeNoCache() throws TransactionException { final GetFileRecordByPathImpl t = getImplementation(GetFileRecordByPathImpl.class); - return t.execute(getKey()); + SparseEntity result = t.execute(getKey()); + if (result == null) { + throw new EntityDoesNotExistException(); + } + return result; } public Integer getId() { diff --git a/src/main/java/caosdb/server/entity/Message.java b/src/main/java/caosdb/server/entity/Message.java index 03e788251620b6c192eb86f1bbd172564a66235f..0ffedb4316fe372e09f3b69ca5824a72f98accaf 100644 --- a/src/main/java/caosdb/server/entity/Message.java +++ b/src/main/java/caosdb/server/entity/Message.java @@ -79,8 +79,8 @@ public class Message extends Exception implements Comparable<Message>, ToElement this(type, code, null, null); } - public Message(final Integer code, final String description) { - this("Message", code, description, null); + public Message(Integer code, String description) { + this(MessageType.Info, code, description); } public Message(final MessageType type, final Integer code, final String description) { @@ -96,6 +96,10 @@ public class Message extends Exception implements Comparable<Message>, ToElement this(type, code, description, null); } + public Message(MessageType type, String description) { + this(type.toString(), 0, description); + } + public Message( final String type, final Integer code, final String description, final String body) { this.code = code; diff --git a/src/main/java/caosdb/server/resource/FileSystemResource.java b/src/main/java/caosdb/server/resource/FileSystemResource.java index 65e83ee08bc9aeac988022650cd903e34453381b..a910e2dde8a4e385c9905a777eb41fa23bf225af 100644 --- a/src/main/java/caosdb/server/resource/FileSystemResource.java +++ b/src/main/java/caosdb/server/resource/FileSystemResource.java @@ -26,10 +26,12 @@ import static caosdb.server.FileSystem.getFromFileSystem; import static java.net.URLDecoder.decode; import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.database.exceptions.EntityDoesNotExistException; import caosdb.server.database.misc.TransactionBenchmark; import caosdb.server.entity.Entity; import caosdb.server.entity.FileProperties; import caosdb.server.entity.Message; +import caosdb.server.entity.Message.MessageType; import caosdb.server.entity.RetrieveEntity; import caosdb.server.entity.container.TransactionContainer; import caosdb.server.permissions.EntityPermission; @@ -162,7 +164,10 @@ public class FileSystemResource extends AbstractCaosDBServerResource { final String entId = getEntityID((directory.endsWith("/") ? directory : directory + "/") + file.getName()); if (entId == null) { - new Message("Orphaned file").addToElement(celem); + new Message( + MessageType.Warning, + "Orphaned file. The file is not tracked. This is probably a harmless inconsistency but it might be a sign of other problems.") + .addToElement(celem); } else { celem.setAttribute("id", entId); } @@ -188,8 +193,8 @@ public class FileSystemResource extends AbstractCaosDBServerResource { final Transaction<?> t = new RetrieveSparseEntityByPath(c); try { t.execute(); - } catch (NullPointerException npe) { - // For example files in file system without corresponding File records. + } catch (EntityDoesNotExistException exception) { + // This file in the file system has no corresponding File record. return null; } final long t2 = System.currentTimeMillis();