diff --git a/src/main/java/caosdb/server/CaosDBServer.java b/src/main/java/caosdb/server/CaosDBServer.java index fc6933069e6bd1303a0ad7fccc080e03c6732a30..9da7f9afa1642be553629d8115f693862011ce46 100644 --- a/src/main/java/caosdb/server/CaosDBServer.java +++ b/src/main/java/caosdb/server/CaosDBServer.java @@ -635,7 +635,6 @@ public class CaosDBServer extends Application { protectedRouter.attach("/scripting", ScriptingResource.class); protectedRouter.attach("/Entities/names", EntityNamesResource.class); protectedRouter.attach("/Entity/names", EntityNamesResource.class); - protectedRouter.attach("/Entities", EntityResource.class); protectedRouter.attach("/Entities/", EntityResource.class); protectedRouter.attach("/Entities/{specifier}", EntityResource.class); diff --git a/src/main/java/caosdb/server/database/BackendTransaction.java b/src/main/java/caosdb/server/database/BackendTransaction.java index bdace0c928a738f58ee54f393ebfb1205dda2d94..e4b6c617e6b8991e9c5ed4efb79f6bcc53abbbbd 100644 --- a/src/main/java/caosdb/server/database/BackendTransaction.java +++ b/src/main/java/caosdb/server/database/BackendTransaction.java @@ -146,6 +146,12 @@ public abstract class BackendTransaction implements Undoable { this.addMeasurement(this, t2 - t1); } + /** + * Intialiaze the adapters to the database backend. + * + * <p>Currently this is hard-coded to the MySQL-Backend but the architecture of this class is + * designed to make it easy in the future to choose other implementations (i.e. other back-ends) + */ public static void init() { if (impl.isEmpty()) { setImpl(GetAllNamesImpl.class, MySQLGetAllNames.class); diff --git a/src/main/java/caosdb/server/database/DatabaseUtils.java b/src/main/java/caosdb/server/database/DatabaseUtils.java index 5fcc26827651f41169d2df9c7eae4d18b154e94f..84c38fa448b7d8a1035aa28ded7bbfcecc5a88b3 100644 --- a/src/main/java/caosdb/server/database/DatabaseUtils.java +++ b/src/main/java/caosdb/server/database/DatabaseUtils.java @@ -186,6 +186,14 @@ public class DatabaseUtils { return ret; } + /** + * Helper function for parsing MySQL results. + * + * <p>This function creates SparseEntities and parses only the name, the role and the acl of an + * entity. + * + * <p>Never returns null. + */ public static SparseEntity parseNameRoleACL(ResultSet rs) throws SQLException { final SparseEntity ret = new SparseEntity(); ret.role = bytes2UTF8(rs.getBytes("EntityRole")); @@ -194,6 +202,14 @@ public class DatabaseUtils { return ret; } + /** + * Helper function for parsing MySQL results. + * + * <p>This function creates SparseEntities and parses all fields which belong to a SparseEntity: + * id, name, role, acl, description, datatype, and the file properties. + * + * <p>Never returns null. + */ public static SparseEntity parseEntityResultSet(final ResultSet rs) throws SQLException { SparseEntity ret = parseNameRoleACL(rs); ret.id = rs.getInt("EntityID"); diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java index 6f69f34396ac5d7cfb2912965a26e7ba704c69c0..d7c641cadebcde93b97187aa7a0ea2ded72d4678 100644 --- a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java +++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLGetAllNames.java @@ -11,6 +11,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +/** Retrieve name, role and acl of all entities from the MySQL backend. */ public class MySQLGetAllNames extends MySQLTransaction implements GetAllNamesImpl { public MySQLGetAllNames(Access access) { diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java index ebe2aa5fad8658f6370265743a4a14f870277ad3..907c7471d3a804d0c4e56380ae1bd649a7de04a7 100644 --- a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java +++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java @@ -31,6 +31,11 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +/** + * Retrieve a single SparseEntity by id. + * + * <p>A SparseEntity contains only id, name, role, acl, datatype and the file properties. + */ public class MySQLRetrieveSparseEntity extends MySQLTransaction implements RetrieveSparseEntityImpl { diff --git a/src/main/java/caosdb/server/database/backend/interfaces/GetAllNamesImpl.java b/src/main/java/caosdb/server/database/backend/interfaces/GetAllNamesImpl.java index dfd5bd756a06cfdd95817cee5830bd9f161ae0f7..3a89e579d2713457c72ec2df73e1c1c936d50db2 100644 --- a/src/main/java/caosdb/server/database/backend/interfaces/GetAllNamesImpl.java +++ b/src/main/java/caosdb/server/database/backend/interfaces/GetAllNamesImpl.java @@ -3,6 +3,11 @@ package caosdb.server.database.backend.interfaces; import caosdb.server.database.proto.SparseEntity; import java.util.List; +/** + * Interface for the retrieval of all known names from the backend. + * + * <p>The returned list contains SparseEntities which have only their name, role and acl defined. + */ public interface GetAllNamesImpl extends BackendTransactionImpl { List<SparseEntity> execute(); diff --git a/src/main/java/caosdb/server/entity/EntityInterface.java b/src/main/java/caosdb/server/entity/EntityInterface.java index fc88f428189a918f8fe09488752d67eecab336ba..21ed5cd85234bd633914302ce2982b2b6f4f9a66 100644 --- a/src/main/java/caosdb/server/entity/EntityInterface.java +++ b/src/main/java/caosdb/server/entity/EntityInterface.java @@ -171,8 +171,10 @@ public interface EntityInterface public abstract void checkPermission(Permission permission); + /** Return true iff the current thread's subject has a permission. */ public abstract boolean hasPermission(Permission permission); + /** Return true iff the given subject has a permission. */ public abstract boolean hasPermission(Subject subject, Permission permission); public abstract boolean hasEntityACL(); diff --git a/src/main/java/caosdb/server/jobs/core/RetriveAllNames.java b/src/main/java/caosdb/server/jobs/core/RetriveAllNames.java index 955bb5aa8302b61841471443afb08efc9d2a2087..d7f58e00c602d5ed9a79d9e03fa08d9941e64217 100644 --- a/src/main/java/caosdb/server/jobs/core/RetriveAllNames.java +++ b/src/main/java/caosdb/server/jobs/core/RetriveAllNames.java @@ -8,6 +8,13 @@ import caosdb.server.jobs.JobExecutionTime; import caosdb.server.permissions.EntityPermission; import caosdb.server.utils.EntityStatus; +/** + * A jobs which retrieves all known names for which the requesting user has the RETRIEVE_ENTITY + * permission. + * + * <p>The entites' status are set to VALID because the entities parents and properties do not have + * to be retrieved. + */ @JobAnnotation(flag = "names", time = JobExecutionTime.INIT) public class RetriveAllNames extends FlagJob { diff --git a/src/main/java/caosdb/server/resource/transaction/handlers/GetNamesRequestHandler.java b/src/main/java/caosdb/server/resource/transaction/handlers/GetNamesRequestHandler.java index 3c941b7f60a37fcb70f02e17914320a6cb3787e9..f69c112880e833d0c981b903562889e377fe6f23 100644 --- a/src/main/java/caosdb/server/resource/transaction/handlers/GetNamesRequestHandler.java +++ b/src/main/java/caosdb/server/resource/transaction/handlers/GetNamesRequestHandler.java @@ -5,6 +5,7 @@ import caosdb.server.resource.transaction.EntityResource; public class GetNamesRequestHandler extends RequestHandler<RetrieveContainer> { + /** Adds the `names` flag to the RetrieveContainer which triggers the RetrieveAllNames job. */ @Override public void handle(EntityResource t, RetrieveContainer container) throws Exception { container.getFlags().put("names", null);