diff --git a/src/main/java/org/caosdb/server/database/DatabaseMonitor.java b/src/main/java/org/caosdb/server/database/DatabaseMonitor.java index 7dc950195cd7f6b5ca181a65a4ce7e089a5ad5e0..fb9d7685643deecf9bfaa2ab10777e32b3bff51b 100644 --- a/src/main/java/org/caosdb/server/database/DatabaseMonitor.java +++ b/src/main/java/org/caosdb/server/database/DatabaseMonitor.java @@ -31,10 +31,9 @@ import org.caosdb.server.database.access.AccessControlAccess; import org.caosdb.server.database.access.InfoAccess; import org.caosdb.server.database.access.InitAccess; import org.caosdb.server.database.access.TransactionAccess; -import org.caosdb.server.entity.container.TransactionContainer; import org.caosdb.server.transaction.AccessControlTransaction; import org.caosdb.server.transaction.TransactionInterface; -import org.caosdb.server.transaction.WriteTransaction; +import org.caosdb.server.transaction.WriteTransactionInterface; import org.caosdb.server.utils.Info; import org.caosdb.server.utils.Initialization; import org.caosdb.server.utils.Observable; diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntity.java deleted file mode 100644 index f8ebcd2af6ff73dd11f1b845d7e5aef58ff925f3..0000000000000000000000000000000000000000 --- a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntity.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * ** header v3.0 - * This file is a part of the CaosDB Project. - * - * Copyright (C) 2018 Research Group Biomedical Physics, - * Max-Planck-Institute for Dynamics and Self-Organization Göttingen - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - * ** end header - */ -package org.caosdb.server.database.backend.transaction; - -import org.caosdb.server.database.BackendTransaction; -import org.caosdb.server.database.exceptions.TransactionException; -import org.caosdb.server.entity.EntityInterface; -import org.caosdb.server.entity.container.TransactionContainer; - -public class DeleteEntityTransaction extends BackendTransaction { - - private final TransactionContainer container; - - public DeleteEntityTransaction(final TransactionContainer container) { - this.container = container; - } - - @Override - public void execute() throws TransactionException { - for (final EntityInterface e : this.container) { - execute(new DeleteEntityProperties(e)); - } - for (final EntityInterface e : this.container) { - execute(new DeleteSparseEntity(e)); - if (e.hasFileProperties()) { - execute(new DeleteFile(e)); - } - } - } -} diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/DeleteEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityTransaction.java similarity index 100% rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/DeleteEntityTransaction.java rename to src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityTransaction.java diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntity.java deleted file mode 100644 index 9c86ba33bf47b8051bc365bb32a6f36d0342ff92..0000000000000000000000000000000000000000 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntity.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * ** header v3.0 - * This file is a part of the CaosDB Project. - * - * Copyright (C) 2018 Research Group Biomedical Physics, - * Max-Planck-Institute for Dynamics and Self-Organization Göttingen - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - * ** end header - */ -package org.caosdb.server.database.backend.transaction; - -import org.caosdb.server.database.BackendTransaction; -import org.caosdb.server.entity.EntityInterface; -import org.caosdb.server.entity.container.TransactionContainer; -import org.caosdb.server.utils.EntityStatus; - -public class InsertEntityTransaction extends BackendTransaction { - - private final TransactionContainer container; - - public InsertEntityTransaction(final TransactionContainer container) { - this.container = container; - } - - @Override - public void execute() { - for (final EntityInterface newEntity : this.container) { - if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) { - execute(new InsertSparseEntity(newEntity)); - } - } - for (final EntityInterface newEntity : this.container) { - if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED && newEntity.hasDatatype()) { - execute(new InsertEntityDatatype(newEntity)); - } - } - for (final EntityInterface newEntity : this.container) { - if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) { - if (newEntity.getQueryTemplateDefinition() != null) { - execute(new SetQueryTemplateDefinition(newEntity)); - } - if (newEntity.hasFileProperties()) { - execute(new InsertFile(newEntity)); - } - execute(new InsertEntityProperties(newEntity)); - execute(new InsertParents(newEntity)); - - if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) { - newEntity.setEntityStatus(EntityStatus.VALID); - } - } - } - } -} diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/InsertEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityTransaction.java similarity index 100% rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/InsertEntityTransaction.java rename to src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityTransaction.java diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntity.java deleted file mode 100644 index 756176fdb65f9df537a4f0e10c89b6a94e0432f3..0000000000000000000000000000000000000000 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntity.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * ** header v3.0 - * This file is a part of the CaosDB Project. - * - * Copyright (C) 2018 Research Group Biomedical Physics, - * Max-Planck-Institute for Dynamics and Self-Organization Göttingen - * Copyright (C) 2020 Timm Fitschen <t.fitschen@indiscale.com> - * Copyright (C) 2020 IndiScale GmbH <info@indiscale.com> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - * ** end header - */ -package org.caosdb.server.database.backend.transaction; - -import java.util.LinkedList; -import java.util.List; -import org.caosdb.server.database.BackendTransaction; -import org.caosdb.server.datatype.ReferenceDatatype; -import org.caosdb.server.datatype.ReferenceValue; -import org.caosdb.server.entity.EntityInterface; -import org.caosdb.server.entity.Message; -import org.caosdb.server.entity.RetrieveEntity; -import org.caosdb.server.entity.Role; -import org.caosdb.server.entity.container.Container; -import org.caosdb.server.entity.wrapper.Property; -import org.caosdb.server.query.Query; -import org.caosdb.server.query.Query.Selection; -import org.caosdb.server.utils.EntityStatus; - -/** - * Retrieve the full entity from the backend - with all parents, properties, file properties and so - * on. - * - * <p>TODO: This class should rather be called FullEntityRetrieval or FullEntityRetrieveTransaction. - * - * <p>When the entity which is to be retrieved has a defined list of {@link Query.Selection} which - * select properties from referenced entities, the referenced entities are retrieved as well. - * Otherwise, only the referenced id is retrieved and the entity stays rather flat. - * - * @author Timm Fitschen <t.fitschen@indiscale.com> - */ -public class RetrieveFullEntityTransaction extends BackendTransaction { - - private final Container<? extends EntityInterface> container; - - public RetrieveFullEntityTransaction(final EntityInterface entity) { - final Container<EntityInterface> c = new Container<>(); - c.add(entity); - this.container = c; - } - - public RetrieveFullEntityTransaction(final Container<? extends EntityInterface> container) { - this.container = container; - } - - public RetrieveFullEntityTransaction(Integer id) { - this(new RetrieveEntity(id)); - } - - @Override - public void execute() { - retrieveFullEntitiesInContainer(this.container); - } - - /** - * Retrieve the entities in the container. - * - * @param container - */ - public void retrieveFullEntitiesInContainer(Container<? extends EntityInterface> container) { - for (final EntityInterface e : container) { - if (e.hasId() && e.getId() > 0 && e.getEntityStatus() == EntityStatus.QUALIFIED) { - retrieveFullEntity(e, e.getSelections()); - } - } - } - - /** - * Retrieve a single full entity. - * - * <p>If the selections are not empty, retrieve the referenced entities matching the 'selections' - * as well. - * - * <p>This method is called recursively during the retrieval of the referenced entities. - * - * @param e The entity. - * @param selections - */ - public void retrieveFullEntity(EntityInterface e, List<Selection> selections) { - execute(new RetrieveSparseEntity(e)); - - if (e.getEntityStatus() == EntityStatus.VALID) { - if (e.getRole() == Role.QueryTemplate) { - execute(new RetrieveQueryTemplateDefinition(e)); - } - execute(new RetrieveParents(e)); - execute(new RetrieveProperties(e)); - execute(new RetrieveVersionInfo(e)); - - // recursion! retrieveSubEntities calls retrieveFull sometimes, but with reduced selectors. - if (selections != null && !selections.isEmpty()) { - retrieveSubEntities(e, selections); - } - } - } - - /** - * Retrieve the Entities which match the selections and are referenced by the Entity 'e'. - * - * @param e - * @param selections - */ - public void retrieveSubEntities(EntityInterface e, List<Selection> selections) { - for (final Selection s : selections) { - if (s.getSubselection() != null) { - - String propertyName = s.getSelector(); - - // Find matching (i.e. referencing) Properties - for (Property p : e.getProperties()) { - // get reference properties by name. - if (propertyName.equalsIgnoreCase(p.getName()) - && p.getDatatype() instanceof ReferenceDatatype) { - if (p.getValue() != null) { - try { - p.parseValue(); - } catch (Message m) { - p.addError(m); - } - - ReferenceValue value = (ReferenceValue) p.getValue(); - RetrieveEntity ref = new RetrieveEntity(value.getId()); - // recursion! (Only for the matching selections) - retrieveFullEntity(ref, getSubSelects(selections, propertyName)); - value.setEntity(ref, true); - } - } - } - } - } - } - - /** - * Return all non-null subselects of those selections which match the given select String. - * - * <p>Effectively, this reduces the depth of the selections by one (and drops non-matching - * selections). - * - * @param selections - * @param select - * @return A new list of Selections. - */ - public List<Selection> getSubSelects(List<Selection> selections, String select) { - List<Selection> result = new LinkedList<>(); - for (Selection s : selections) { - if (s.getSelector().equalsIgnoreCase(select) && s.getSubselection() != null) { - result.add(s.getSubselection()); - } - } - return result; - } - - public Container<? extends EntityInterface> getContainer() { - return container; - } -} diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/RetrieveFullEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java similarity index 100% rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/RetrieveFullEntityTransaction.java rename to src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java b/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java index 09b40ffdaa81dd8f3dd3fc1e41457c4c8581b4e3..d9e7794d4e91e2d6fafd0fb96b7dbdf711af0450 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RuleLoader.java @@ -33,6 +33,7 @@ import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.proto.Rule; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.container.TransactionContainer; +import org.caosdb.server.entity.wrapper.Property; import org.caosdb.server.jobs.Job; import org.caosdb.server.transaction.Transaction; diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java deleted file mode 100644 index b1c55286510bd5ef159ddc0e002dc981705633ee..0000000000000000000000000000000000000000 --- a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * ** header v3.0 - * This file is a part of the CaosDB Project. - * - * Copyright (C) 2018 Research Group Biomedical Physics, - * Max-Planck-Institute for Dynamics and Self-Organization Göttingen - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - * ** end header - */ -package org.caosdb.server.database.backend.transaction; - -import org.caosdb.server.database.BackendTransaction; -import org.caosdb.server.database.exceptions.TransactionException; -import org.caosdb.server.entity.EntityInterface; -import org.caosdb.server.entity.container.TransactionContainer; -import org.caosdb.server.utils.EntityStatus; - -public class UpdateEntityTransaction extends BackendTransaction { - - private final TransactionContainer container; - - public UpdateEntityTransaction(final TransactionContainer container) { - this.container = container; - } - - @Override - public void execute() throws TransactionException { - for (final EntityInterface e : this.container) { - if (e.getEntityStatus() == EntityStatus.QUALIFIED) { - if (e.hasFileProperties()) { - execute(new InsertFile(e)); - } - - execute(new DeleteEntityProperties(e)); - - execute(new UpdateSparseEntity(e)); - - execute(new InsertParents(e)); - - execute(new InsertEntityValue(e)); - - execute(new InsertEntityProperties(e)); - - execute(new RetrieveVersionInfo(e)); - } - } - } -} diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/UpdateEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntityTransaction.java similarity index 100% rename from src/main/java/org/caosdb/server/database/backend/implementation/MySQL/backend/transaction/UpdateEntityTransaction.java rename to src/main/java/org/caosdb/server/database/backend/transaction/UpdateEntityTransaction.java diff --git a/src/main/java/org/caosdb/server/entity/container/WritableContainer.java b/src/main/java/org/caosdb/server/entity/container/WritableContainer.java index dcf663e8b5b1107adf3782cc688786edf18fdf73..3b44056968b7c1cc27903406b992fcee15ec12af 100644 --- a/src/main/java/org/caosdb/server/entity/container/WritableContainer.java +++ b/src/main/java/org/caosdb/server/entity/container/WritableContainer.java @@ -26,7 +26,6 @@ import java.util.HashMap; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import org.caosdb.server.entity.FileProperties; -import org.jdom2.Element; public class WritableContainer extends TransactionContainer { private static final long serialVersionUID = -4097777313518959519L; diff --git a/src/main/java/org/caosdb/server/jobs/Job.java b/src/main/java/org/caosdb/server/jobs/Job.java index 46771b61fb33da77a6697e42efa12a157a9d8f9f..e7985cd777c6c67aeb912ffae1901996a719310d 100644 --- a/src/main/java/org/caosdb/server/jobs/Job.java +++ b/src/main/java/org/caosdb/server/jobs/Job.java @@ -37,7 +37,7 @@ import org.caosdb.server.CaosDBException; import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.transaction.GetIDByName; import org.caosdb.server.database.backend.transaction.IsSubType; -import org.caosdb.server.database.backend.transaction.RetrieveFullEntity; +import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction; import org.caosdb.server.database.backend.transaction.RetrieveParents; import org.caosdb.server.database.backend.transaction.RetrieveSparseEntity; import org.caosdb.server.database.backend.transaction.RuleLoader; diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java b/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java index 917c0f3da0c5f13ceeaf8bee15874cd1b1f16331..037b38b90c94827265d47876e722686d5d030cc0 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckEntityACLRoles.java @@ -26,10 +26,10 @@ import org.caosdb.server.CaosDBServer; import org.caosdb.server.ServerProperties; import org.caosdb.server.accessControl.AuthenticationUtils; import org.caosdb.server.entity.EntityInterface; +import org.caosdb.server.entity.InsertEntity; +import org.caosdb.server.entity.UpdateEntity; import org.caosdb.server.jobs.ContainerJob; import org.caosdb.server.permissions.EntityACI; -import org.caosdb.server.transaction.Insert; -import org.caosdb.server.transaction.Update; import org.caosdb.server.utils.EntityStatus; import org.caosdb.server.utils.ServerMessages; diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java index 07859ed9bcf40887b868b969a976e9c3b8916b0c..7aca2bac3dd3709006497f9ce8f556f267c4ca81 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckParOblPropPresent.java @@ -22,7 +22,7 @@ */ package org.caosdb.server.jobs.core; -import org.caosdb.server.database.backend.transaction.RetrieveFullEntity; +import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.StatementStatus; import org.caosdb.server.jobs.EntityJob; diff --git a/src/main/java/org/caosdb/server/jobs/core/Inheritance.java b/src/main/java/org/caosdb/server/jobs/core/Inheritance.java index fa8ac7c6844d9984ffff0295b28654749b91b027..73704d0625b177a6e7929dcbdc8032011e3b6176 100644 --- a/src/main/java/org/caosdb/server/jobs/core/Inheritance.java +++ b/src/main/java/org/caosdb/server/jobs/core/Inheritance.java @@ -23,15 +23,15 @@ package org.caosdb.server.jobs.core; import java.util.ArrayList; -import org.caosdb.server.database.backend.transaction.RetrieveFullEntity; +import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction; import org.caosdb.server.entity.Entity; import org.caosdb.server.entity.EntityInterface; +import org.caosdb.server.entity.InsertEntity; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.Message.MessageType; +import org.caosdb.server.entity.UpdateEntity; import org.caosdb.server.entity.wrapper.Property; import org.caosdb.server.jobs.EntityJob; -import org.caosdb.server.transaction.Insert; -import org.caosdb.server.transaction.Update; import org.caosdb.server.utils.EntityStatus; public class Inheritance extends EntityJob { diff --git a/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java b/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java index 1ffa978d1009540cf04657e3febae8a5e18fa102..cde08268e53509b4af70e3a10981def7c97de6f3 100644 --- a/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java +++ b/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java @@ -34,16 +34,19 @@ import org.caosdb.server.FileSystem; import org.caosdb.server.ServerProperties; import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.misc.RollBackHandler; -import org.caosdb.server.entity.Entity; +import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.FileProperties; +import org.caosdb.server.entity.InsertEntity; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.Message.MessageType; +import org.caosdb.server.entity.RetrieveEntity; import org.caosdb.server.entity.Role; import org.caosdb.server.jobs.FlagJob; import org.caosdb.server.jobs.Job; import org.caosdb.server.jobs.JobAnnotation; import org.caosdb.server.jobs.JobExecutionTime; import org.caosdb.server.transaction.Retrieve; +import org.caosdb.server.transaction.WriteTransactionInterface; import org.caosdb.server.utils.EntityStatus; import org.caosdb.server.utils.FileUtils; import org.caosdb.server.utils.Undoable; @@ -254,7 +257,7 @@ public class InsertFilesInDir extends FlagJob { } private EntityInterface createEntity(String name) { - if (getTransaction() instanceof WriteTransaction) { + if (getTransaction() instanceof WriteTransactionInterface) { return new InsertEntity(name, Role.File); } EntityInterface result = new RetrieveEntity(name); diff --git a/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java b/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java index d2a9bea701db4960aac7aa5b59a72ef807c200b2..853780fcdf118c4e26ee62e857f863d29d5f13fc 100644 --- a/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java +++ b/src/main/java/org/caosdb/server/resource/EntityOwnerResource.java @@ -22,10 +22,9 @@ */ package org.caosdb.server.resource; +import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.container.RetrieveContainer; -import org.caosdb.server.resource.transaction.EntityResource; -import org.caosdb.server.resource.transaction.handlers.RequestHandler; -import org.caosdb.server.resource.transaction.handlers.RetriveOwnerRequestHandler; +import org.caosdb.server.resource.transaction.RetrieveEntityResource; public class EntityOwnerResource extends RetrieveEntityResource { diff --git a/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java b/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java index 5350d90a0666ef758505abd6262f472a7447ed76..cd06f73dec6e267ec273abc1256d644794a9637e 100644 --- a/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java +++ b/src/main/java/org/caosdb/server/resource/EntityPermissionsResource.java @@ -23,9 +23,8 @@ package org.caosdb.server.resource; import org.caosdb.server.entity.container.RetrieveContainer; -import org.caosdb.server.resource.transaction.EntityResource; -import org.caosdb.server.resource.transaction.handlers.RequestHandler; -import org.caosdb.server.resource.transaction.handlers.RetrieveGlobalEntityPermissionsHandler; +import org.caosdb.server.permissions.EntityPermission; +import org.caosdb.server.resource.transaction.RetrieveEntityResource; public class EntityPermissionsResource extends RetrieveEntityResource { diff --git a/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java b/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java index 69403e2ead388c31939d4bbc6b714b2db81680c5..18dac7b929a4d1d2afc9081e7f1800b899a890f2 100644 --- a/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java +++ b/src/main/java/org/caosdb/server/resource/transaction/EntityNamesResource.java @@ -1,8 +1,6 @@ package org.caosdb.server.resource.transaction; import org.caosdb.server.entity.container.RetrieveContainer; -import org.caosdb.server.resource.transaction.handlers.GetNamesRequestHandler; -import org.caosdb.server.resource.transaction.handlers.RequestHandler; public class EntityNamesResource extends RetrieveEntityResource { diff --git a/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java b/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java index 2adb3ac1e0371342cb5d792323c863fc554ffc28..da01d6f7890604ac8612fb0b8dc931ba53e4771d 100644 --- a/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java +++ b/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java @@ -29,29 +29,18 @@ import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; -======= -package org.caosdb.server.resource.transaction; - -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.sql.SQLException; import org.caosdb.server.CaosDBException; +import org.caosdb.server.FileSystem; import org.caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import org.caosdb.server.entity.container.DeleteContainer; -import org.caosdb.server.entity.container.InsertContainer; -import org.caosdb.server.entity.container.RetrieveContainer; -import org.caosdb.server.entity.container.UpdateContainer; -import org.caosdb.server.resource.AbstractCaosDBServerResource; -import org.caosdb.server.resource.transaction.handlers.FileUploadHandler; -import org.caosdb.server.resource.transaction.handlers.RequestHandler; -import org.caosdb.server.resource.transaction.handlers.SimpleDeleteRequestHandler; -import org.caosdb.server.resource.transaction.handlers.SimpleGetRequestHandler; -import org.caosdb.server.resource.transaction.handlers.SimpleWriteHandler; -import org.caosdb.server.transaction.Delete; -import org.caosdb.server.transaction.Insert; -import org.caosdb.server.transaction.Retrieve; -import org.caosdb.server.transaction.Update; ->>>>>>> f-cleanup-awi:src/main/java/org/caosdb/server/resource/transaction/EntityResource.java +import org.caosdb.server.entity.DeleteEntity; +import org.caosdb.server.entity.FileProperties; +import org.caosdb.server.entity.InsertEntity; +import org.caosdb.server.entity.Message; +import org.caosdb.server.entity.UpdateEntity; +import org.caosdb.server.entity.container.WritableContainer; +import org.caosdb.server.transaction.WriteTransaction; +import org.caosdb.server.transaction.WriteTransactionInterface; +import org.caosdb.server.utils.ServerMessages; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; diff --git a/src/main/java/caosdb/server/resource/transaction/RetrieveEntityResource.java b/src/main/java/org/caosdb/server/resource/transaction/RetrieveEntityResource.java similarity index 85% rename from src/main/java/caosdb/server/resource/transaction/RetrieveEntityResource.java rename to src/main/java/org/caosdb/server/resource/transaction/RetrieveEntityResource.java index f629aba411a32351b79c30191ac27f3c4d2224ed..c9312f8f7f0ed39de3dfc5087f453092681be2f3 100644 --- a/src/main/java/caosdb/server/resource/transaction/RetrieveEntityResource.java +++ b/src/main/java/org/caosdb/server/resource/transaction/RetrieveEntityResource.java @@ -1,13 +1,13 @@ -package caosdb.server.resource.transaction; +package org.caosdb.server.resource.transaction; -import caosdb.server.CaosDBException; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.entity.container.RetrieveContainer; -import caosdb.server.resource.AbstractCaosDBServerResource; -import caosdb.server.transaction.Retrieve; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; +import org.caosdb.server.CaosDBException; +import org.caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import org.caosdb.server.entity.container.RetrieveContainer; +import org.caosdb.server.resource.AbstractCaosDBServerResource; +import org.caosdb.server.transaction.Retrieve; import org.jdom2.Document; import org.jdom2.Element; import org.restlet.representation.Representation; diff --git a/src/main/java/caosdb/server/resource/transaction/handlers/IDHandler.java b/src/main/java/org/caosdb/server/resource/transaction/handlers/IDHandler.java similarity index 100% rename from src/main/java/caosdb/server/resource/transaction/handlers/IDHandler.java rename to src/main/java/org/caosdb/server/resource/transaction/handlers/IDHandler.java diff --git a/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java b/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java index 1debe5ec93613b21cd74e40bb7952362ba9408d9..53f7b58af3e5ac8763085aede75cf64ed8a7cae5 100644 --- a/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java +++ b/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java @@ -34,7 +34,7 @@ import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.Message; -import org.caosdb.server.entity.container.TransactionContainer; +import org.caosdb.server.entity.container.WritableContainer; import org.caosdb.server.utils.FileUtils; /** diff --git a/src/main/java/org/caosdb/server/transaction/Retrieve.java b/src/main/java/org/caosdb/server/transaction/Retrieve.java index 6dbd37968b87be51cf0fa0c96a8b0c56c555bf0d..b54d7aedbdda1e1cf3fd1577de90a2182d9ede40 100644 --- a/src/main/java/org/caosdb/server/transaction/Retrieve.java +++ b/src/main/java/org/caosdb/server/transaction/Retrieve.java @@ -24,7 +24,7 @@ package org.caosdb.server.transaction; import org.apache.shiro.authz.AuthorizationException; import org.caosdb.server.database.access.Access; -import org.caosdb.server.database.backend.transaction.RetrieveFullEntity; +import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.container.RetrieveContainer; import org.caosdb.server.entity.xml.SetFieldStrategy; diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java index ed394784be3232b3a7f3f6f9c6699b7d5931f5e3..f57d4cab002331ffea990b87f518f4f52b8875fa 100644 --- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java +++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java @@ -19,9 +19,35 @@ */ package org.caosdb.server.transaction; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.AuthorizationException; +import org.caosdb.server.CaosDBException; +import org.caosdb.server.database.access.Access; +import org.caosdb.server.database.backend.transaction.DeleteEntityTransaction; +import org.caosdb.server.database.backend.transaction.InsertEntityTransaction; +import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction; +import org.caosdb.server.database.backend.transaction.UpdateEntityTransaction; import org.caosdb.server.database.misc.RollBackHandler; +import org.caosdb.server.entity.DeleteEntity; +import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.FileProperties; +import org.caosdb.server.entity.InsertEntity; +import org.caosdb.server.entity.RetrieveEntity; +import org.caosdb.server.entity.UpdateEntity; import org.caosdb.server.entity.container.TransactionContainer; +import org.caosdb.server.entity.container.WritableContainer; +import org.caosdb.server.entity.wrapper.Parent; +import org.caosdb.server.entity.wrapper.Property; +import org.caosdb.server.permissions.EntityACL; +import org.caosdb.server.permissions.EntityPermission; +import org.caosdb.server.permissions.Permission; +import org.caosdb.server.utils.EntityStatus; +import org.caosdb.server.utils.ServerMessages; public class WriteTransaction extends Transaction<WritableContainer> implements WriteTransactionInterface { @@ -94,7 +120,7 @@ public class WriteTransaction extends Transaction<WritableContainer> final TransactionContainer oldContainer = new TransactionContainer(); final TransactionContainer deleteContainer = new TransactionContainer(); for (final EntityInterface entity : getContainer()) { - if (entity instanceof caosdb.server.entity.UpdateEntity) { + if (entity instanceof UpdateEntity) { // entity has no id -> it cannot be updated. if (!entity.hasId()) { entity.addError(ServerMessages.ENTITY_HAS_NO_ID); @@ -107,7 +133,7 @@ public class WriteTransaction extends Transaction<WritableContainer> final EntityInterface oldEntity = new RetrieveEntity(entity.getId()); oldContainer.add(oldEntity); } - } else if (entity instanceof caosdb.server.entity.DeleteEntity) { + } else if (entity instanceof DeleteEntity) { deleteContainer.add(entity); } } @@ -127,8 +153,7 @@ public class WriteTransaction extends Transaction<WritableContainer> // Check if any updates are to be processed. for (final EntityInterface entity : getContainer()) { - if (entity instanceof caosdb.server.entity.UpdateEntity - && entity.getEntityStatus() == EntityStatus.QUALIFIED) { + if (entity instanceof UpdateEntity && entity.getEntityStatus() == EntityStatus.QUALIFIED) { innerLoop: for (final EntityInterface oldEntity : oldContainer) { if (oldEntity.getId().equals(entity.getId())) { @@ -193,7 +218,7 @@ public class WriteTransaction extends Transaction<WritableContainer> break innerLoop; } } - } else if (entity instanceof caosdb.server.entity.DeleteEntity) { + } else if (entity instanceof DeleteEntity) { if (entity.getEntityStatus() == EntityStatus.NONEXISTENT) { entity.addError(ServerMessages.ENTITY_DOES_NOT_EXIST); continue; @@ -214,7 +239,7 @@ public class WriteTransaction extends Transaction<WritableContainer> entity.addInfo("This entity cannot be deleted"); } - } else if (entity instanceof caosdb.server.entity.InsertEntity + } else if (entity instanceof InsertEntity && entity.hasFileProperties() && entity.getFileProperties().hasTmpIdentifier() && !entity.getFileProperties().isPickupable()) { @@ -273,11 +298,11 @@ public class WriteTransaction extends Transaction<WritableContainer> TransactionContainer updates = new TransactionContainer(); TransactionContainer deletes = new TransactionContainer(); for (EntityInterface entity : getContainer()) { - if (entity instanceof caosdb.server.entity.InsertEntity) { + if (entity instanceof InsertEntity) { inserts.add(entity); - } else if (entity instanceof caosdb.server.entity.UpdateEntity) { + } else if (entity instanceof UpdateEntity) { updates.add(entity); - } else if (entity instanceof caosdb.server.entity.DeleteEntity) { + } else if (entity instanceof DeleteEntity) { deletes.add(entity); } } @@ -293,8 +318,7 @@ public class WriteTransaction extends Transaction<WritableContainer> // set entityStatus to DELETED and add deletion info message if (getContainer().getStatus().ordinal() >= EntityStatus.QUALIFIED.ordinal()) { for (final EntityInterface entity : getContainer()) { - if (entity instanceof caosdb.server.entity.DeleteEntity - && entity.getEntityStatus() == EntityStatus.VALID) { + if (entity instanceof DeleteEntity && entity.getEntityStatus() == EntityStatus.VALID) { entity.setEntityStatus(EntityStatus.DELETED); entity.addInfo(ServerMessages.ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY); } diff --git a/src/main/java/caosdb/server/transaction/WriteTransactionInterface.java b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java similarity index 55% rename from src/main/java/caosdb/server/transaction/WriteTransactionInterface.java rename to src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java index d8f9fe38bdcfeefed4e5dc1d2f50ba142cd38a57..165acb408776a720c6887d31b550cf57e3d6fa0c 100644 --- a/src/main/java/caosdb/server/transaction/WriteTransactionInterface.java +++ b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java @@ -1,6 +1,6 @@ -package caosdb.server.transaction; +package org.caosdb.server.transaction; -import caosdb.server.database.access.Access; +import org.caosdb.server.database.access.Access; public interface WriteTransactionInterface extends TransactionInterface {