diff --git a/src/main/java/org/caosdb/server/FileSystem.java b/src/main/java/org/caosdb/server/FileSystem.java index 67587f3da7930dd2cbf3e76d3ed06f19508efef7..c05314655b8e1112e60576cc8c96b9f6b30ce2fa 100644 --- a/src/main/java/org/caosdb/server/FileSystem.java +++ b/src/main/java/org/caosdb/server/FileSystem.java @@ -39,6 +39,7 @@ import org.caosdb.server.database.access.Access; import org.caosdb.server.database.backend.transaction.GetFileRecordByPath; import org.caosdb.server.database.exceptions.EntityDoesNotExistException; import org.caosdb.server.database.misc.TransactionBenchmark; +import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.Message; @@ -332,7 +333,7 @@ public class FileSystem { // this is usually the case when target is a directory } if (t.getEntity() != null) { - final Integer foreign = t.getId(); + final EntityID foreign = t.getId(); if (foreign != null && foreign.equals(entity.getId())) { // entity already owns this path return true; diff --git a/src/main/java/org/caosdb/server/database/DatabaseUtils.java b/src/main/java/org/caosdb/server/database/DatabaseUtils.java index 8cc4aa8904a9143cbfdce871e435e5b49d9780f7..47e8a9afe4fb2d81d40e71aff01c81ea314a26ca 100644 --- a/src/main/java/org/caosdb/server/database/DatabaseUtils.java +++ b/src/main/java/org/caosdb/server/database/DatabaseUtils.java @@ -28,6 +28,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.caosdb.server.database.proto.FlatProperty; import org.caosdb.server.database.proto.ProtoProperty; import org.caosdb.server.database.proto.SparseEntity; @@ -238,7 +239,7 @@ public class DatabaseUtils { public static <K extends EntityInterface> K parseEntityFromVerySparseEntity( final K entity, final VerySparseEntity vse) { - entity.setId(vse.id); + entity.setId(new EntityID(vse.id)); entity.setName(vse.name); entity.setRole(vse.role); entity.setDescription(vse.description); diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRegisterSubDomain.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRegisterSubDomain.java index ca4997281c76ec18e54dd1c165ca082eee5e0893..1e14600e71023dff544a09910fabe0dc8b17ca42 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRegisterSubDomain.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRegisterSubDomain.java @@ -30,6 +30,7 @@ import java.util.Deque; import org.caosdb.server.database.access.Access; import org.caosdb.server.database.backend.interfaces.RegisterSubDomainImpl; import org.caosdb.server.database.exceptions.TransactionException; +import org.caosdb.server.entity.EntityID; public class MySQLRegisterSubDomain extends MySQLTransaction implements RegisterSubDomainImpl { @@ -40,15 +41,15 @@ public class MySQLRegisterSubDomain extends MySQLTransaction implements Register public static final String STMT_REGISTER_SUBDOMAIN = "call registerSubdomain(?)"; @Override - public Deque<Integer> execute(final int domainCount) throws TransactionException { + public Deque<EntityID> execute(final int domainCount) throws TransactionException { try { final PreparedStatement stmt = prepareStatement(STMT_REGISTER_SUBDOMAIN); stmt.setInt(1, domainCount); final ResultSet rs = stmt.executeQuery(); try { - final ArrayDeque<Integer> ret = new ArrayDeque<Integer>(); + final Deque<EntityID> ret = new ArrayDeque<>(); while (rs.next()) { - ret.add(rs.getInt(1)); + ret.add(new EntityID(rs.getInt(1))); } return ret; } finally { diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/RegisterSubDomainImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/RegisterSubDomainImpl.java index e9df6f8897b4753a273be9877c8a5fa49b106932..87ea0c85db6a698f49c103506b520342deff2fb0 100644 --- a/src/main/java/org/caosdb/server/database/backend/interfaces/RegisterSubDomainImpl.java +++ b/src/main/java/org/caosdb/server/database/backend/interfaces/RegisterSubDomainImpl.java @@ -24,8 +24,9 @@ package org.caosdb.server.database.backend.interfaces; import java.util.Deque; import org.caosdb.server.database.exceptions.TransactionException; +import org.caosdb.server.entity.EntityID; public interface RegisterSubDomainImpl extends BackendTransactionImpl { - public abstract Deque<Integer> execute(int domainCount) throws TransactionException; + public abstract Deque<EntityID> execute(int domainCount) throws TransactionException; } diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/SetFileChecksumImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/SetFileChecksumImpl.java index fdda7c542c644ccefe6fb83f8b30a043a74d6b54..26cb7ce19ce6d946c34c784a9849c29d4f8f4888 100644 --- a/src/main/java/org/caosdb/server/database/backend/interfaces/SetFileChecksumImpl.java +++ b/src/main/java/org/caosdb/server/database/backend/interfaces/SetFileChecksumImpl.java @@ -1,7 +1,6 @@ package org.caosdb.server.database.backend.interfaces; import org.caosdb.server.entity.EntityID; -import org.caosdb.server.filesystem.Hash; /** * Store the checksum and timestamp of the checksum for a File entity. @@ -17,7 +16,6 @@ public interface SetFileChecksumImpl extends BackendTransactionImpl { * * @param id * @param checksum - * @param timestamp */ - void execute(EntityID id, Hash hash); + void execute(EntityID id, String checksum); } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/GetFileRecordByPath.java b/src/main/java/org/caosdb/server/database/backend/transaction/GetFileRecordByPath.java index 1a7fa8635366cce858c35f54378090ebad72fb8f..dde055049a76b2d45ca7fb66ae3396cec2b5f89c 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/GetFileRecordByPath.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/GetFileRecordByPath.java @@ -31,6 +31,7 @@ import org.caosdb.server.database.backend.interfaces.GetFileRecordByPathImpl; import org.caosdb.server.database.exceptions.EntityDoesNotExistException; import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.proto.SparseEntity; +import org.caosdb.server.entity.EntityID; public class GetFileRecordByPath extends CacheableBackendTransaction<String, SparseEntity> { @@ -70,8 +71,8 @@ public class GetFileRecordByPath extends CacheableBackendTransaction<String, Spa return result; } - public Integer getId() { - return this.entity.id; + public EntityID getId() { + return new EntityID(this.entity.id); } public Long getSize() { diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java index aa139e7db565ae82073d6983915c0c53e9cd8b51..382dde551c3e8ec53e51d0668bdd45f3b7e12184 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java @@ -4,6 +4,7 @@ import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.interfaces.InsertEntityDatatypeImpl; import org.caosdb.server.database.exceptions.IntegrityException; import org.caosdb.server.database.proto.SparseEntity; +import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.utils.ServerMessages; @@ -28,6 +29,6 @@ public class InsertEntityDatatype extends BackendTransaction { throw exc; } - this.entity.setId(e.id); + this.entity.setId(new EntityID(e.id)); } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityProperties.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityProperties.java index f16e5f6b664f366917a42e387c112c8b4705297c..f9af6a482efaccf896a1a85fc65d0e1217bd6a53 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityProperties.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityProperties.java @@ -62,7 +62,7 @@ public class InsertEntityProperties extends BackendTransaction { final int domainCount = DatabaseUtils.deriveStage2Inserts(stage2Inserts, stage1Inserts); - final Deque<Integer> domainIds = execute(new RegisterSubDomain(domainCount)).getDomains(); + final Deque<EntityID> domainIds = execute(new RegisterSubDomain(domainCount)).getDomains(); insertStages(t, domainIds, stage1Inserts, this.entity.getDomain(), this.entity.getId()); insertStages(t, domainIds, stage2Inserts, this.entity.getId(), null); @@ -70,7 +70,7 @@ public class InsertEntityProperties extends BackendTransaction { private void insertStages( final InsertEntityPropertiesImpl t, - final Deque<Integer> domainIds, + final Deque<EntityID> domainIds, final List<EntityInterface> stage1Inserts, final EntityID domain, final EntityID entity) diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java index 213c7529766dcac4cc002f81380bf8d141cd8065..9c9c1902019077735445295a61dfed70ce98f9fa 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java @@ -27,10 +27,10 @@ import org.caosdb.server.database.backend.interfaces.InsertSparseEntityImpl; import org.caosdb.server.database.exceptions.IntegrityException; import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.proto.SparseEntity; +import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.Version; import org.caosdb.server.utils.ServerMessages; -import org.caosdb.server.utils.Undoable; public class InsertSparseEntity extends BackendTransaction { @@ -40,8 +40,6 @@ public class InsertSparseEntity extends BackendTransaction { this.entity = entity; } - private Integer oldId; - @Override public void execute() throws TransactionException { final InsertSparseEntityImpl t = getImplementation(InsertSparseEntityImpl.class); @@ -55,19 +53,7 @@ public class InsertSparseEntity extends BackendTransaction { throw exc; } - getUndoHandler() - .append( - new Undoable() { - - @Override - public void undo() { - InsertSparseEntity.this.entity.setId(InsertSparseEntity.this.oldId); - } - - @Override - public void cleanUp() {} - }); - this.entity.setId(e.id); + this.entity.setId(new EntityID(e.id)); this.entity.setVersion(new Version(e.versionId)); this.entity.getVersion().setHead(true); } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RegisterSubDomain.java b/src/main/java/org/caosdb/server/database/backend/transaction/RegisterSubDomain.java index ecae501d40d4e6ed9ae54e44e12d37a7628699fd..0321a621a82a9ae2841d31b55b05a46743f963bd 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RegisterSubDomain.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RegisterSubDomain.java @@ -26,11 +26,12 @@ import java.util.Deque; import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.interfaces.RegisterSubDomainImpl; import org.caosdb.server.database.exceptions.TransactionException; +import org.caosdb.server.entity.EntityID; public class RegisterSubDomain extends BackendTransaction { private final int domainCount; - private Deque<Integer> list; + private Deque<EntityID> list; public RegisterSubDomain(final int domainCount) { this.domainCount = domainCount; @@ -42,7 +43,7 @@ public class RegisterSubDomain extends BackendTransaction { this.list = t.execute(this.domainCount); } - public Deque<Integer> getDomains() { + public Deque<EntityID> getDomains() { return this.list; } } diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java index b86789fba7c7d6aac37faed9d9efb2425bc625aa..2668e770d6f779e0b3121f30aa1778dccf6c9d93 100644 --- a/src/main/java/org/caosdb/server/entity/Entity.java +++ b/src/main/java/org/caosdb/server/entity/Entity.java @@ -206,11 +206,6 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa return this.id; } - @Override - public final void setId(final Integer id) { - this.id.setId(id); - } - @Override public final boolean hasId() { return this.id.hasId(); @@ -303,6 +298,11 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa notifyObservers(ENTITY_STATUS_CHANGED_EVENT); } + @Override + public final boolean hasEntityStatus() { + return this.entityStatus != null; + } + @Override public final Role getRole() { return this.role; @@ -380,15 +380,8 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa public Entity() {} - public Entity(final Element e) { - try { - setRole(e.getName().toUpperCase()); - parseFromElement(e); - } catch (final NoSuchRoleException exc) { - parseFromElement(e); - setEntityStatus(EntityStatus.UNQUALIFIED); - addError(ServerMessages.NO_SUCH_ENTITY_ROLE(e.getName())); - } + public Entity(EntityID id) { + setId(id); } public Entity(final EntityID id, final Role role) { @@ -654,7 +647,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa // Parse ID. Generate error if it isn't an integer. if (element.getAttribute("id") != null && !element.getAttributeValue("id").equals("")) { try { - setId(Integer.parseInt(element.getAttributeValue("id"))); + setId(new EntityID(Integer.parseInt(element.getAttributeValue("id")))); } catch (final NumberFormatException e) { addInfo("Id was " + element.getAttributeValue("id") + "."); addError(ServerMessages.PARSING_FAILED); @@ -959,7 +952,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa @Override public final EntityInterface parseSparseEntity(final SparseEntity spe) { - setId(spe.id); + setId(new EntityID(spe.id)); this.setRole(spe.role); setEntityACL(spe.acl); if (spe.versionId != null) { diff --git a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java index 754c6e3f8faad9fca9cf44b96f499be01aa3a4dd..7da945738ac966114a020098171c049a6fa387a3 100644 --- a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java +++ b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java @@ -101,11 +101,6 @@ public abstract class EntityWrapper implements EntityInterface { return this.entity.getId(); } - @Override - public void setId(final Integer id) { - this.entity.setId(id); - } - @Override public void setId(final EntityID id) { this.entity.setId(id); diff --git a/src/main/java/org/caosdb/server/entity/wrapper/Property.java b/src/main/java/org/caosdb/server/entity/wrapper/Property.java index 9a959e3528393c12c735ea4f9cb193137501b480..efa1a6857a8dec0b3d7dcc45ec689d5b3bc0f745 100644 --- a/src/main/java/org/caosdb/server/entity/wrapper/Property.java +++ b/src/main/java/org/caosdb/server/entity/wrapper/Property.java @@ -73,7 +73,7 @@ public class Property extends EntityWrapper { } public Property parseFlatProperty(final FlatProperty fp) { - setId(fp.id); + setId(new EntityID(fp.id)); setStatementStatus(fp.status); setPIdx(fp.idx); if (fp.name != null) { diff --git a/src/main/java/org/caosdb/server/jobs/EntityFlagJob.java b/src/main/java/org/caosdb/server/jobs/EntityFlagJob.java new file mode 100644 index 0000000000000000000000000000000000000000..e00b7aee7fa68471acd4375251e2bc55efeef0af --- /dev/null +++ b/src/main/java/org/caosdb/server/jobs/EntityFlagJob.java @@ -0,0 +1,42 @@ +/* + * ** 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.jobs; + +public abstract class EntityFlagJob extends EntityJob { + + protected String value = null; + + public void setValue(final String value) { + this.value = value; + } + + @Override + protected void run() { + if (this.value == null) { + this.value = this.getClass().getAnnotation(JobAnnotation.class).defaultValue(); + } + job(this.value); + } + + protected abstract void job(final String value); +} diff --git a/src/main/java/org/caosdb/server/resource/FileSystemResource.java b/src/main/java/org/caosdb/server/resource/FileSystemResource.java index f09f97eab5fbb1ea49930bc8cae227cb2b5fba05..9b1baa5b9e02d2ce87d7b603b624a475a0472435 100644 --- a/src/main/java/org/caosdb/server/resource/FileSystemResource.java +++ b/src/main/java/org/caosdb/server/resource/FileSystemResource.java @@ -35,7 +35,6 @@ import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.Message.MessageType; import org.caosdb.server.entity.RetrieveEntity; -import org.caosdb.server.entity.container.TransactionContainer; import org.caosdb.server.permissions.EntityPermission; import org.caosdb.server.transaction.RetrieveSparseEntityByPath; import org.caosdb.server.transaction.Transaction; @@ -200,12 +199,10 @@ public class FileSystemResource extends AbstractCaosDBServerResource { */ private Entity getEntity(final String path) throws Exception { final long t1 = System.currentTimeMillis(); - final TransactionContainer c = new TransactionContainer(); - final Entity e = new RetrieveEntity(0); + final Entity e = new RetrieveEntity(); final FileProperties fp = new FileProperties(null, path, null); e.setFileProperties(fp); - c.add(e); - final Transaction<?> t = new RetrieveSparseEntityByPath(c); + final Transaction<?> t = new RetrieveSparseEntityByPath(e); t.execute(); final long t2 = System.currentTimeMillis(); getBenchmark().addMeasurement(this.getClass().getSimpleName() + ".getEntity", t2 - t1); 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 ee247210a80d30d5c2dad0848971ddcecb200f3c..4cd7b2fcbd4ae9e9dd3d047555194172c4224d38 100644 --- a/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java +++ b/src/main/java/org/caosdb/server/resource/transaction/EntityResource.java @@ -32,8 +32,8 @@ import org.caosdb.server.CaosDBException; import org.caosdb.server.FileSystem; import org.caosdb.server.database.backend.implementation.MySQL.ConnectionException; import org.caosdb.server.entity.DeleteEntity; -import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.EntityID; +import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.InsertEntity; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.UpdateEntity; diff --git a/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java b/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java index 56fc07da22d9fac5bfbe713d1a9cd36b2d25a9ba..1f52ca8d8d19abd16848e6506eaa5d3ada32cb6a 100644 --- a/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java +++ b/src/main/java/org/caosdb/server/transaction/ChecksumUpdater.java @@ -31,6 +31,7 @@ import org.caosdb.server.database.backend.transaction.GetUpdateableChecksums; import org.caosdb.server.database.backend.transaction.RetrieveSparseEntity; import org.caosdb.server.database.backend.transaction.SetFileChecksum; import org.caosdb.server.database.exceptions.TransactionException; +import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.Message; @@ -137,7 +138,7 @@ public class ChecksumUpdater extends WriteTransaction synchronized (instance.running) { // test for updatable checksums - final Integer id = execute(new GetUpdateableChecksums(), weakAccess).getID(); + final EntityID id = execute(new GetUpdateableChecksums(), weakAccess).getID(); if (id == null) { // nothing to be updated... instance.running = false; diff --git a/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java b/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java index 1ce1aa566ad28d048a36f91d50bb297b1a709d14..59d12c73ccdcf620f0e7c2f2f3bbb51233f51d84 100644 --- a/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java +++ b/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java @@ -39,6 +39,7 @@ import org.caosdb.server.database.backend.transaction.RetrieveAllUncheckedFiles; import org.caosdb.server.database.backend.transaction.SetFileCheckedTimestamp; import org.caosdb.server.database.exceptions.EntityDoesNotExistException; import org.caosdb.server.database.proto.SparseEntity; +import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.xml.ToElementable; import org.caosdb.server.utils.SHA512; @@ -135,7 +136,7 @@ public class FileStorageConsistencyCheck extends Thread this.results.put(entity.filePath, result); } - execute(new SetFileCheckedTimestamp(entity.id, this.ts), this.access); + execute(new SetFileCheckedTimestamp(new EntityID(entity.id), this.ts), this.access); } } catch (final Exception e) { diff --git a/src/main/java/org/caosdb/server/transaction/RetrieveSparseEntityByPath.java b/src/main/java/org/caosdb/server/transaction/RetrieveSparseEntityByPath.java index 6784ae65bcbb9e6af7c5de4db2b9409f7a1d742c..1c8c6778100539b3f6eb8076bf06e346bbbe856d 100644 --- a/src/main/java/org/caosdb/server/transaction/RetrieveSparseEntityByPath.java +++ b/src/main/java/org/caosdb/server/transaction/RetrieveSparseEntityByPath.java @@ -22,19 +22,17 @@ */ package org.caosdb.server.transaction; -import org.caosdb.server.database.backend.transaction.GetFileEntityByPath; +import org.caosdb.server.database.backend.transaction.GetFileRecordByPath; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.container.TransactionContainer; -import org.caosdb.server.filesystem.Path; public class RetrieveSparseEntityByPath extends Transaction<TransactionContainer> { - private final Path path; private EntityInterface entity; - public RetrieveSparseEntityByPath(final Path path) { + public RetrieveSparseEntityByPath(final EntityInterface entity) { super(new TransactionContainer()); - this.path = path; + this.entity = entity; } @Override @@ -59,8 +57,9 @@ public class RetrieveSparseEntityByPath extends Transaction<TransactionContainer @Override protected void transaction() throws Exception { - final GetFileEntityByPath r = execute(new GetFileEntityByPath(path), getAccess()); - entity = r.getEntity(); + String path = entity.getFileProperties().getPath(); + final GetFileRecordByPath r = execute(new GetFileRecordByPath(path), getAccess()); + entity.parseSparseEntity(r.getEntity()); } @Override diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java index 67a461aa4a9fbb90ee66181fbe20907d61b5dcfc..47b7a53c71ddebb7c1b062c2c8599cf44eabe039 100644 --- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java +++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java @@ -58,7 +58,6 @@ import org.caosdb.server.permissions.Permission; import org.caosdb.server.query.Query; import org.caosdb.server.utils.EntityStatus; import org.caosdb.server.utils.ServerMessages; -import org.caosdb.server.utils.Undoable; /** * This class is responsible for inserting, updating and deleting entities which are held in the diff --git a/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java b/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java index 9814a9be62fde2a466acb290a71ad00881e5d81a..d39a803f9cfe3ce0a4cf23265683d121b3bc688d 100644 --- a/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java +++ b/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java @@ -8,6 +8,8 @@ import java.util.TimeZone; import org.caosdb.datetime.DateTimeFactory2; import org.caosdb.server.datatype.GenericValue; import org.caosdb.server.datatype.Value; +import org.caosdb.server.entity.EntityID; +import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.RetrieveEntity; import org.caosdb.server.entity.Role; @@ -15,10 +17,6 @@ import org.caosdb.server.entity.StatementStatus; import org.caosdb.server.entity.wrapper.Parent; import org.caosdb.server.entity.wrapper.Property; import org.caosdb.server.entity.xml.IdAndServerMessagesOnlyStrategy; -import org.caosdb.server.filesystem.FSODescriptor; -import org.caosdb.server.filesystem.FSODescriptorInterface; -import org.caosdb.server.filesystem.Hash; -import org.caosdb.server.filesystem.Path; import org.junit.jupiter.api.Test; public class CaosDBToGrpcConvertersTest { @@ -59,10 +57,7 @@ public class CaosDBToGrpcConvertersTest { RetrieveEntity entity = new RetrieveEntity(); CaosDBToGrpcConverters converters = new CaosDBToGrpcConverters(null); assertEquals(converters.convert(entity).toString(), "entity {\n}\n"); - FSODescriptorInterface fsoDescriptor = new FSODescriptor(new Path("the/path")); - fsoDescriptor.setSize(1024L); - fsoDescriptor.setHash(Hash.create("checksum1234", 0, "SHA-512")); - entity.setFSODescriptor(fsoDescriptor); + entity.setFileProperties(new FileProperties("checksum1234", "the/path", 1024L)); assertEquals( converters.convert(entity).toString(), "entity {\n file_descriptor {\n path: \"the/path\"\n size: 1024\n }\n}\n"); @@ -74,7 +69,7 @@ public class CaosDBToGrpcConvertersTest { RetrieveEntity entity = new RetrieveEntity(); // must be printed - entity.setId(1234); + entity.setId(new EntityID(1234)); entity.addInfo("info"); entity.addWarning(new Message("warning")); entity.addError(new Message("error")); @@ -86,8 +81,7 @@ public class CaosDBToGrpcConvertersTest { entity.setName("dont print"); entity.setDescription("dont print"); entity.setRole(Role.File); - entity.setFSODescriptor( - new FSODescriptor(null, new Path("dont print path"), 0L, "tmpid", false)); + entity.setFileProperties(new FileProperties("dont print checksum", "dont print path", 1234L)); Property p = new Property(new RetrieveEntity()); p.setStatementStatus(StatementStatus.FIX); p.setName("dont print property"); diff --git a/src/test/java/org/caosdb/server/transaction/UpdateTest.java b/src/test/java/org/caosdb/server/transaction/UpdateTest.java index 710b218b9c57ff6fbf201015d6caf9be4493d7b3..a0891a3eb34e1759100c78916d0fb250de149ef8 100644 --- a/src/test/java/org/caosdb/server/transaction/UpdateTest.java +++ b/src/test/java/org/caosdb/server/transaction/UpdateTest.java @@ -109,7 +109,7 @@ public class UpdateTest { throws NoSuchAlgorithmException, IOException, CaosDBException { final EntityInterface magicUnit = new RetrieveEntity(new EntityID(1234)); magicUnit.setName("Unit"); - magicUnit.setId(24); + magicUnit.setId(new EntityID(24)); magicUnit.setDatatype("TEXT"); final Entity newEntity = new RetrieveEntity(new EntityID(1234)); @@ -151,7 +151,7 @@ public class UpdateTest { throws NoSuchAlgorithmException, IOException, CaosDBException { final EntityInterface magicUnit = new RetrieveEntity(new EntityID(1234)); magicUnit.setName("Unit"); - magicUnit.setId(24); + magicUnit.setId(new EntityID(24)); magicUnit.setDatatype("TEXT"); final Entity newEntity = new RetrieveEntity(new EntityID(1234));