From 6f6e69611562aed3d3882b46dc12caf7e30d62fb Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Thu, 23 Jan 2020 12:47:03 +0100 Subject: [PATCH] DOC: docs for new code --- src/main/java/caosdb/server/CaosDBServer.java | 1 - .../server/database/BackendTransaction.java | 6 ++++++ .../caosdb/server/database/DatabaseUtils.java | 16 ++++++++++++++++ .../implementation/MySQL/MySQLGetAllNames.java | 1 + .../MySQL/MySQLRetrieveSparseEntity.java | 5 +++++ .../backend/interfaces/GetAllNamesImpl.java | 5 +++++ .../caosdb/server/entity/EntityInterface.java | 2 ++ .../caosdb/server/jobs/core/RetriveAllNames.java | 7 +++++++ .../handlers/GetNamesRequestHandler.java | 1 + 9 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/caosdb/server/CaosDBServer.java b/src/main/java/caosdb/server/CaosDBServer.java index fc693306..9da7f9af 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 bdace0c9..e4b6c617 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 5fcc2682..84c38fa4 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 6f69f343..d7c641ca 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 ebe2aa5f..907c7471 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 dfd5bd75..3a89e579 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 fc88f428..21ed5cd8 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 955bb5aa..d7f58e00 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 3c941b7f..f69c1128 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); -- GitLab