diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java index e1acfbdc1cecf7eeb54f778be01d79ffc9b2cb53..843449ce833cdf4634435204ed33e9af59c0529f 100644 --- a/src/main/java/org/caosdb/server/entity/Entity.java +++ b/src/main/java/org/caosdb/server/entity/Entity.java @@ -47,7 +47,6 @@ import org.caosdb.server.datatype.Value; import org.caosdb.server.entity.Message.MessageType; import org.caosdb.server.entity.container.ParentContainer; import org.caosdb.server.entity.container.PropertyContainer; -import org.caosdb.server.entity.wrapper.Domain; import org.caosdb.server.entity.wrapper.Parent; import org.caosdb.server.entity.wrapper.Property; import org.caosdb.server.entity.xml.EntityToElementStrategy; @@ -849,23 +848,6 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa } } - @Override - public void setReplacement(final Domain d) { - this.replacement = d; - } - - @Override - public boolean hasReplacement() { - return this.replacement != null; - } - - @Override - public Domain getReplacement() { - return this.replacement; - } - - private Domain replacement = null; - private final HashMap<String, String> flags = new HashMap<String, String>(); @Override diff --git a/src/main/java/org/caosdb/server/entity/EntityInterface.java b/src/main/java/org/caosdb/server/entity/EntityInterface.java index f967b307a1ea13a16d7e9225cb038a15f6883727..d97970ded1cea441c833922ee131e4bdd2cbc97a 100644 --- a/src/main/java/org/caosdb/server/entity/EntityInterface.java +++ b/src/main/java/org/caosdb/server/entity/EntityInterface.java @@ -31,7 +31,6 @@ import org.caosdb.server.datatype.AbstractDatatype; import org.caosdb.server.datatype.Value; import org.caosdb.server.entity.container.ParentContainer; import org.caosdb.server.entity.container.PropertyContainer; -import org.caosdb.server.entity.wrapper.Domain; import org.caosdb.server.entity.wrapper.Parent; import org.caosdb.server.entity.wrapper.Property; import org.caosdb.server.entity.xml.SerializeFieldStrategy; @@ -127,12 +126,6 @@ public interface EntityInterface public abstract void setProperties(PropertyContainer properties); - public abstract void setReplacement(Domain d); - - public abstract boolean hasReplacement(); - - public abstract Domain getReplacement(); - public abstract EntityInterface setDescOverride(boolean b); public abstract boolean isDescOverride(); diff --git a/src/main/java/org/caosdb/server/entity/wrapper/Domain.java b/src/main/java/org/caosdb/server/entity/wrapper/Domain.java deleted file mode 100644 index 146706efd2caa74ff1399568bf499f37683bfdbe..0000000000000000000000000000000000000000 --- a/src/main/java/org/caosdb/server/entity/wrapper/Domain.java +++ /dev/null @@ -1,59 +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.entity.wrapper; - -import org.caosdb.server.datatype.AbstractDatatype; -import org.caosdb.server.datatype.Value; -import org.caosdb.server.entity.Entity; -import org.caosdb.server.entity.EntityInterface; -import org.caosdb.server.entity.Role; -import org.caosdb.server.entity.container.PropertyContainer; - -public class Domain extends Entity { - - private boolean descO; - - public Domain( - final PropertyContainer properties, - final AbstractDatatype datatype, - final Value value, - final org.caosdb.server.entity.StatementStatus statementStatus) { - - setRole(Role.Domain); - setProperties(properties); - setDatatype(datatype); - setValue(value); - setStatementStatus(statementStatus); - } - - @Override - public EntityInterface setDescOverride(final boolean b) { - this.descO = b; - return this; - } - - @Override - public boolean isDescOverride() { - return this.descO; - } -} 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 7da945738ac966114a020098171c049a6fa387a3..f23408df30fb9f56c72a0f319f7b4b7a52e8214e 100644 --- a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java +++ b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java @@ -376,21 +376,6 @@ public abstract class EntityWrapper implements EntityInterface { this.entity.setProperties(properties); } - @Override - public void setReplacement(final Domain d) { - this.entity.setReplacement(d); - } - - @Override - public boolean hasReplacement() { - return this.entity.hasReplacement(); - } - - @Override - public Domain getReplacement() { - return this.entity.getReplacement(); - } - @Override public Map<String, String> getFlags() { return this.entity.getFlags(); diff --git a/src/test/java/org/caosdb/server/database/InsertTest.java b/src/test/java/org/caosdb/server/database/InsertTest.java index e385d6cb2038496b5c90715347cd34e88b8c60c8..0484e623d914cd29b8a4527bbec9ec200e12af7f 100644 --- a/src/test/java/org/caosdb/server/database/InsertTest.java +++ b/src/test/java/org/caosdb/server/database/InsertTest.java @@ -31,6 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayDeque; import java.util.Deque; import java.util.LinkedList; +import java.util.List; import org.caosdb.server.datatype.CollectionValue; import org.caosdb.server.datatype.GenericValue; import org.caosdb.server.datatype.ReferenceValue; @@ -154,7 +155,7 @@ public class InsertTest { assertEquals("V4", ((SingleValue) stage1Inserts.get(2).getValue()).toDatabaseString()); assertTrue(stage1Inserts.get(3) instanceof Replacement); - assertEquals(5, stage1Inserts.get(3).getId().toInteger()); + assertEquals(-1, stage1Inserts.get(3).getId().toInteger()); assertEquals("V5", ((SingleValue) stage1Inserts.get(3).getValue()).toDatabaseString()); assertFalse(stage1Inserts.get(4) instanceof Replacement); @@ -162,11 +163,11 @@ public class InsertTest { assertEquals("V7", ((SingleValue) stage1Inserts.get(4).getValue()).toDatabaseString()); assertTrue(stage1Inserts.get(5) instanceof Replacement); - assertEquals(8, stage1Inserts.get(5).getId().toInteger()); + assertEquals(-2, stage1Inserts.get(5).getId().toInteger()); assertEquals("V8", ((SingleValue) stage1Inserts.get(5).getValue()).toDatabaseString()); assertTrue(stage1Inserts.get(6) instanceof Replacement); - assertEquals(9, stage1Inserts.get(6).getId().toInteger()); + assertEquals(-3, stage1Inserts.get(6).getId().toInteger()); assertEquals("V9", ((SingleValue) stage1Inserts.get(6).getValue()).toDatabaseString()); assertEquals(6, stage2Inserts.size()); @@ -239,7 +240,7 @@ public class InsertTest { assertTrue(stage1Inserts.get(1) instanceof Replacement); assertEquals("V1-2", ((SingleValue) stage1Inserts.get(1).getValue()).toDatabaseString()); - assertEquals(new EntityID(1), stage1Inserts.get(1).getId()); + assertEquals(new EntityID(-1), stage1Inserts.get(1).getId()); assertFalse(stage1Inserts.get(2) instanceof Replacement); assertEquals(new EntityID(-1), stage1Inserts.get(2).getId()); @@ -294,7 +295,7 @@ public class InsertTest { assertEquals(4, stage1Inserts.size()); assertTrue(stage1Inserts.get(0) instanceof Replacement); - assertEquals(new EntityID(1), stage1Inserts.get(0).getId()); + assertEquals(new EntityID(-1), stage1Inserts.get(0).getId()); assertEquals(null, stage1Inserts.get(0).getValue()); assertFalse(stage1Inserts.get(1) instanceof Replacement); @@ -359,11 +360,10 @@ public class InsertTest { assertFalse(stage1Inserts.get(0) instanceof Replacement); assertEquals(new EntityID(1), stage1Inserts.get(0).getId()); - assertFalse(stage1Inserts.get(0).hasReplacement()); assertEquals("V1", ((SingleValue) stage1Inserts.get(0).getValue()).toDatabaseString()); assertTrue(stage1Inserts.get(1) instanceof Replacement); - assertEquals(new EntityID(2), stage1Inserts.get(1).getId()); + assertEquals(new EntityID(-1), stage1Inserts.get(1).getId()); assertTrue(stage1Inserts.get(1).getValue() instanceof CollectionValue); assertFalse(stage1Inserts.get(2) instanceof Replacement); @@ -376,4 +376,128 @@ public class InsertTest { assertEquals(0, stage2Inserts.size()); } + + /** Deeply nested properties without any values, with overridden name and description */ + @Test + public void testTransformation5() { + final Entity r = new InsertEntity("Test", Role.RecordType); + final Property p1 = new Property(new RetrieveEntity(new EntityID(1))); + p1.setRole("Property"); + p1.setDatatype("TEXT"); + p1.setDescription("desc1"); + p1.setDescOverride(true); + p1.setName("P1"); + p1.setNameOverride(true); + p1.setStatementStatus(StatementStatus.RECOMMENDED); + r.addProperty(p1); + + final Property p2 = new Property(new RetrieveEntity(new EntityID(2))); + p2.setRole("Property"); + p2.setDatatype("TEXT"); + p2.setDescription("desc2"); + p2.setDescOverride(true); + p2.setName("P2"); + p2.setNameOverride(true); + p2.setStatementStatus(StatementStatus.RECOMMENDED); + r.addProperty(p2); + + final Property p21 = new Property(new RetrieveEntity(new EntityID(1))); + p21.setRole("Property"); + p21.setDatatype("TEXT"); + p21.setDescription("desc21"); + p21.setDescOverride(true); + p21.setName("P21"); + p21.setNameOverride(true); + p21.setStatementStatus(StatementStatus.FIX); + p2.addProperty(p21); + + final Property p22 = new Property(new RetrieveEntity(new EntityID(2))); + p22.setRole("Property"); + p22.setDatatype("TEXT"); + p22.setDescription("desc22"); + p22.setDescOverride(true); + p22.setName("P22"); + p22.setNameOverride(true); + p22.setStatementStatus(StatementStatus.FIX); + p2.addProperty(p22); + + final Property p3 = new Property(new RetrieveEntity(new EntityID(3))); + p3.setRole("Property"); + p3.setDatatype("TEXT"); + p3.setDescription("desc3"); + p3.setDescOverride(true); + p3.setName("P3"); + p3.setNameOverride(true); + p3.setStatementStatus(StatementStatus.RECOMMENDED); + r.addProperty(p3); + + final Property p31 = new Property(new RetrieveEntity(new EntityID(1))); + p31.setRole("Property"); + p31.setDatatype("TEXT"); + p31.setDescription("desc31"); + p31.setDescOverride(true); + p31.setName("P31"); + p31.setNameOverride(true); + p31.setStatementStatus(StatementStatus.FIX); + p3.addProperty(p31); + + final Property p32 = new Property(new RetrieveEntity(new EntityID(2))); + p32.setRole("Property"); + p32.setDatatype("TEXT"); + p32.setDescription("desc32"); + p32.setDescOverride(true); + p32.setName("P32"); + p32.setNameOverride(true); + p32.setStatementStatus(StatementStatus.FIX); + p3.addProperty(p32); + + final Property p321 = new Property(new RetrieveEntity(new EntityID(1))); + p321.setRole("Property"); + p321.setDatatype("TEXT"); + p321.setDescription("desc321"); + p321.setDescOverride(true); + p321.setName("P321"); + p321.setNameOverride(true); + p321.setStatementStatus(StatementStatus.FIX); + p32.addProperty(p321); + + final Property p322 = new Property(new RetrieveEntity(new EntityID(2))); + p322.setRole("Property"); + p322.setDatatype("TEXT"); + p322.setDescription("desc322"); + p322.setDescOverride(true); + p322.setName("P322"); + p322.setNameOverride(true); + p322.setStatementStatus(StatementStatus.FIX); + p32.addProperty(p322); + + final Property p323 = new Property(new RetrieveEntity(new EntityID(3))); + p323.setRole("Property"); + p323.setDatatype("TEXT"); + p323.setDescription("desc323"); + p323.setDescOverride(true); + p323.setName("P323"); + p323.setNameOverride(true); + p323.setStatementStatus(StatementStatus.FIX); + p32.addProperty(p323); + + final Property p33 = new Property(new RetrieveEntity(new EntityID(3))); + p33.setRole("Property"); + p33.setDatatype("TEXT"); + p33.setDescription("desc33"); + p33.setDescOverride(true); + p33.setName("P33"); + p33.setNameOverride(true); + p33.setStatementStatus(StatementStatus.FIX); + p3.addProperty(p33); + + List<Property> stage1Inserts = new LinkedList<>(); + List<Property> stage2Inserts = new LinkedList<>(); + int c = DatabaseUtils.deriveStage1Inserts(stage1Inserts, r); + DatabaseUtils.deriveStage2Inserts(stage2Inserts, stage1Inserts, registerReplacementIds(c), r); + + assertEquals(4, c); + assertEquals(7, stage1Inserts.size()); + assertEquals(8, stage2Inserts.size()); + } } diff --git a/src/test/java/org/caosdb/server/database/InsertTest2.java b/src/test/java/org/caosdb/server/database/InsertTest2.java deleted file mode 100644 index 58cc58503dbef7e8ee1c300d67888f4d2ff37a7a..0000000000000000000000000000000000000000 --- a/src/test/java/org/caosdb/server/database/InsertTest2.java +++ /dev/null @@ -1,148 +0,0 @@ -package org.caosdb.server.database; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.LinkedList; -import java.util.List; -import org.caosdb.server.entity.Entity; -import org.caosdb.server.entity.EntityID; -import org.caosdb.server.entity.InsertEntity; -import org.caosdb.server.entity.RetrieveEntity; -import org.caosdb.server.entity.Role; -import org.caosdb.server.entity.StatementStatus; -import org.caosdb.server.entity.wrapper.Property; -import org.junit.jupiter.api.Test; - -public class InsertTest2 { - - private Deque<EntityID> registerReplacementIds(int count) { - Deque<EntityID> replacementIds = new ArrayDeque<>(); - for (int i = 1; i < count + 1; i++) { - replacementIds.add(new EntityID(-i)); - } - return replacementIds; - } - - @Test - public void transformation5() { - final Entity r = new InsertEntity("Test", Role.RecordType); - final Property p1 = new Property(new RetrieveEntity(new EntityID(1))); - p1.setRole("Property"); - p1.setDatatype("TEXT"); - p1.setDescription("desc1"); - p1.setDescOverride(true); - p1.setName("P1"); - p1.setNameOverride(true); - p1.setStatementStatus(StatementStatus.RECOMMENDED); - r.addProperty(p1); - - final Property p2 = new Property(new RetrieveEntity(new EntityID(2))); - p2.setRole("Property"); - p2.setDatatype("TEXT"); - p2.setDescription("desc2"); - p2.setDescOverride(true); - p2.setName("P2"); - p2.setNameOverride(true); - p2.setStatementStatus(StatementStatus.RECOMMENDED); - r.addProperty(p2); - - final Property p21 = new Property(new RetrieveEntity(new EntityID(1))); - p21.setRole("Property"); - p21.setDatatype("TEXT"); - p21.setDescription("desc21"); - p21.setDescOverride(true); - p21.setName("P21"); - p21.setNameOverride(true); - p21.setStatementStatus(StatementStatus.RECOMMENDED); - p2.addProperty(p21); - - final Property p22 = new Property(new RetrieveEntity(new EntityID(2))); - p22.setRole("Property"); - p22.setDatatype("TEXT"); - p22.setDescription("desc22"); - p22.setDescOverride(true); - p22.setName("P22"); - p22.setNameOverride(true); - p22.setStatementStatus(StatementStatus.RECOMMENDED); - p2.addProperty(p22); - - final Property p3 = new Property(new RetrieveEntity(new EntityID(3))); - p3.setRole("Property"); - p3.setDatatype("TEXT"); - p3.setDescription("desc3"); - p3.setDescOverride(true); - p3.setName("P3"); - p3.setNameOverride(true); - p3.setStatementStatus(StatementStatus.RECOMMENDED); - r.addProperty(p3); - - final Property p31 = new Property(new RetrieveEntity(new EntityID(1))); - p31.setRole("Property"); - p31.setDatatype("TEXT"); - p31.setDescription("desc31"); - p31.setDescOverride(true); - p31.setName("P31"); - p31.setNameOverride(true); - p31.setStatementStatus(StatementStatus.RECOMMENDED); - p3.addProperty(p31); - - final Property p32 = new Property(new RetrieveEntity(new EntityID(2))); - p32.setRole("Property"); - p32.setDatatype("TEXT"); - p32.setDescription("desc32"); - p32.setDescOverride(true); - p32.setName("P32"); - p32.setNameOverride(true); - p32.setStatementStatus(StatementStatus.RECOMMENDED); - p3.addProperty(p32); - - final Property p321 = new Property(new RetrieveEntity(new EntityID(1))); - p321.setRole("Property"); - p321.setDatatype("TEXT"); - p321.setDescription("desc321"); - p321.setDescOverride(true); - p321.setName("P321"); - p321.setNameOverride(true); - p321.setStatementStatus(StatementStatus.RECOMMENDED); - p32.addProperty(p321); - - final Property p322 = new Property(new RetrieveEntity(new EntityID(2))); - p322.setRole("Property"); - p322.setDatatype("TEXT"); - p322.setDescription("desc322"); - p322.setDescOverride(true); - p322.setName("P322"); - p322.setNameOverride(true); - p322.setStatementStatus(StatementStatus.RECOMMENDED); - p32.addProperty(p322); - - final Property p323 = new Property(new RetrieveEntity(new EntityID(3))); - p323.setRole("Property"); - p323.setDatatype("TEXT"); - p323.setDescription("desc323"); - p323.setDescOverride(true); - p323.setName("P323"); - p323.setNameOverride(true); - p323.setStatementStatus(StatementStatus.RECOMMENDED); - p32.addProperty(p323); - - final Property p33 = new Property(new RetrieveEntity(new EntityID(3))); - p33.setRole("Property"); - p33.setDatatype("TEXT"); - p33.setDescription("desc33"); - p33.setDescOverride(true); - p33.setName("P33"); - p33.setNameOverride(true); - p33.setStatementStatus(StatementStatus.RECOMMENDED); - p3.addProperty(p33); - - List<Property> stage1Inserts = new LinkedList<>(); - List<Property> stage2Inserts = new LinkedList<>(); - int c = DatabaseUtils.deriveStage1Inserts(stage1Inserts, r); - DatabaseUtils.deriveStage2Inserts(stage2Inserts, stage1Inserts, registerReplacementIds(c), r); - assertEquals(7, stage1Inserts.size()); - assertEquals(8, stage2Inserts.size()); - } -}