diff --git a/CHANGELOG.md b/CHANGELOG.md index a12fdf048e9eb9e555a7cd18b692abe69f5bf421..f3f91ee218efceca40e597823706b39a2ac714ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * [caosdb-server#174](https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/174) GRPC-API: Server should gracefully handle non-file entities with file-like attributes. +* [caosdb-server#217](https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/217) + Server gets list property datatype wrong if description is updated. +* [caosdb-server#221](https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/221) + Unknown error during update of property leaving out datatype. ### Security diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java index 7b9bc7495a67aa458ad40f25435cb0af7da290d7..ed3ac86163a2a6d1bc594ca80ee57a793cc845a7 100644 --- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java +++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java @@ -399,16 +399,17 @@ public class WriteTransaction extends Transaction<WritableContainer> || newEntity.hasDatatype() ^ oldEntity.hasDatatype()) { needPermissions.add(EntityPermission.UPDATE_DATA_TYPE); updatetable = true; + } else { + newEntity.setDatatypeOverride(oldEntity.isDatatypeOverride()); } // entity role - if (newEntity.hasRole() + if (!(newEntity instanceof Property && oldEntity instanceof Property) + && newEntity.hasRole() && oldEntity.hasRole() && !newEntity.getRole().equals(oldEntity.getRole()) || newEntity.hasRole() ^ oldEntity.hasRole()) { - if (!(newEntity instanceof Property && oldEntity instanceof Property)) { - needPermissions.add(EntityPermission.UPDATE_ROLE); - } + needPermissions.add(EntityPermission.UPDATE_ROLE); updatetable = true; } @@ -417,7 +418,7 @@ public class WriteTransaction extends Transaction<WritableContainer> try { newEntity.parseValue(); oldEntity.parseValue(); - } catch (Message m) { + } catch (NullPointerException|Message m) { // ignore, parsing is handled elsewhere } if (!newEntity.getValue().equals(oldEntity.getValue())) { @@ -436,6 +437,8 @@ public class WriteTransaction extends Transaction<WritableContainer> || newEntity.hasName() ^ oldEntity.hasName()) { needPermissions.add(EntityPermission.UPDATE_NAME); updatetable = true; + } else { + newEntity.setNameOverride(oldEntity.isNameOverride()); } // entity description @@ -445,6 +448,8 @@ public class WriteTransaction extends Transaction<WritableContainer> || newEntity.hasDescription() ^ oldEntity.hasDescription()) { needPermissions.add(EntityPermission.UPDATE_DESCRIPTION); updatetable = true; + } else { + newEntity.setDescOverride(oldEntity.isDescOverride()); } // file properties diff --git a/src/test/java/org/caosdb/server/transaction/UpdateTest.java b/src/test/java/org/caosdb/server/transaction/UpdateTest.java index 2e8465eac53e98b54df3108a4824caaf88fa1129..6837eaa16b12b055882febe7f98383727813b307 100644 --- a/src/test/java/org/caosdb/server/transaction/UpdateTest.java +++ b/src/test/java/org/caosdb/server/transaction/UpdateTest.java @@ -276,7 +276,7 @@ public class UpdateTest { newEntity.setDescription("New description."); new WriteTransaction(null).deriveUpdate(newEntity, oldEntity); - // check if newEntity's Property is QUALIFIED. - assertEquals(QUALIFIED, newEntity.getProperties().get(0).getEntityStatus()); + // check if newEntity's Property VALID. + assertEquals(VALID, newEntity.getProperties().get(0).getEntityStatus()); } }