diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java index 18c994e454a75bb17ea1e69777778d9592e18eab..6528627d0e7080452827f8b70b87c34c78ac6c57 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java @@ -87,19 +87,19 @@ public class DatabaseUtils { private static void processPropertiesStage1( final List<Property> stage1Inserts, final Property p, final EntityInterface e) { + if (!p.isDescOverride() && !p.isNameOverride() && !p.isDatatypeOverride() && (!p.hasProperties() || hasUniquePropertyId(p, e)) && !(p.getDatatype() instanceof AbstractCollectionDatatype)) { stage1Inserts.add(p); - processSubPropertiesStage1(stage1Inserts, p); } else { Replacement r = new Replacement(p); stage1Inserts.add(r); stage1Inserts.add(r.replacement); - processSubPropertiesStage1(stage1Inserts, r); } + processSubPropertiesStage1(stage1Inserts, p); } public static void deriveStage2Inserts( @@ -107,24 +107,21 @@ public class DatabaseUtils { final List<Property> stage1Inserts, Deque<EntityID> replacementIds, EntityInterface entity) { - Map<String, EntityInterface> replacements = new HashMap<>(); for (final Property p : stage1Inserts) { if (p instanceof Replacement) { - if (!p.hasId() || p.getId().isTemporary()) { - EntityID replacementId = replacementIds.pop(); - replacements.put(replacementId.toString(), p); - ((Replacement) p).setReplacementId(replacementId); - } - } - } - for (final Property p : stage1Inserts) { - if (p.hasProperties()) { - if (p instanceof Replacement && ((Replacement) p).isState2Replacement()) { - stage2Inserts.add(((Replacement) p).replacement); + EntityID replacementId = replacementIds.pop(); + ((Replacement) p).setReplacementId(replacementId); + + if (p.hasProperties()) { + for (Property subP : p.getProperties()) { + subP.setDomain(p); + stage2Inserts.add(subP); + } } - for (Property subP : p.getProperties()) { - if (!subP.hasProperties()) { + } else { + if (p.hasProperties()) { + for (Property subP : p.getProperties()) { stage2Inserts.add(subP); } } @@ -145,13 +142,9 @@ public class DatabaseUtils { private static void processSubPropertiesStage1( final List<Property> stage1Inserts, final EntityInterface p) { for (final Property subP : p.getProperties()) { - subP.setDomain(p); if (subP.hasProperties()) { - Replacement r = new Replacement(subP); - r.replacement.setDomain(p); - r.setStage2Replacement(true); - stage1Inserts.add(r); - processSubPropertiesStage1(stage1Inserts, r); + stage1Inserts.add(new Replacement(subP)); + processSubPropertiesStage1(stage1Inserts, subP); } } } @@ -171,10 +164,9 @@ public class DatabaseUtils { if (desc != null) { p.desc = desc; } - final String type_id = bytes2UTF8(rs.getBytes("type_id_override")); - if (type_id != null) { - p.type_id = type_id; - p.type_name = bytes2UTF8(rs.getBytes("type_name_override")); + final String type = bytes2UTF8(rs.getBytes("type_override")); + if (type != null) { + p.type = type; } final String coll = bytes2UTF8(rs.getBytes("collection_override")); if (coll != null) { @@ -229,8 +221,7 @@ public class DatabaseUtils { final SparseEntity ret = parseNameRoleACL(rs); ret.id = rs.getString("EntityID"); ret.description = bytes2UTF8(rs.getBytes("EntityDesc")); - ret.datatype_id = bytes2UTF8(rs.getBytes("DatatypeID")); - ret.datatype_name = bytes2UTF8(rs.getBytes("DatatypeName")); + ret.datatype = bytes2UTF8(rs.getBytes("Datatype")); ret.collection = bytes2UTF8(rs.getBytes("Collection")); ret.filePath = bytes2UTF8(rs.getBytes("FilePath")); @@ -309,14 +300,6 @@ public class DatabaseUtils { if (pp.status.equals(ReplacementStatus.REPLACEMENT.name())) { replacements.put(pp.value, null); } - if (pp.subProperties != null) { - for (ProtoProperty subP : pp.subProperties) { - if (subP.status.equals(ReplacementStatus.REPLACEMENT.name())) { - - replacements.put(subP.value, null); - } - } - } } Iterator<ProtoProperty> iterator = properties.iterator(); while (iterator.hasNext()) { @@ -342,13 +325,6 @@ public class DatabaseUtils { if (pp.status.equals(ReplacementStatus.REPLACEMENT.name())) { replace(pp, replacements.get(pp.value), isHead); } - if (pp.subProperties != null) { - for (ProtoProperty subP : pp.subProperties) { - if (subP.status.equals(ReplacementStatus.REPLACEMENT.name())) { - replace(subP, replacements.get(subP.value), isHead); - } - } - } if (pp.collValues != null) { // sort pp.collValues.sort( @@ -382,8 +358,7 @@ public class DatabaseUtils { } pp.desc = replacement.desc; pp.name = replacement.name; - pp.type_id = replacement.type_id; - pp.type_name = replacement.type_name; + pp.type = replacement.type; pp.collection = replacement.collection; pp.value = replacement.value; pp.collValues = replacement.collValues; diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java index 40c7a40754d823ce20580b671147c9cf21576af7..4260ae03e76eec7fab1e33957a00dedc2ef77e17 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java @@ -62,7 +62,7 @@ public class MySQLInsertEntityDatatype extends MySQLTransaction prepareStatement(STMT_INSERT_ENTITY_DATATYPE); insertEntityDatatypeStmt.setString(1, entity.id); - insertEntityDatatypeStmt.setString(2, entity.datatype_id); + insertEntityDatatypeStmt.setString(2, entity.datatype); insertEntityDatatypeStmt.execute(); diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java index d303acca337cf196ddd251666d71ccb2d21ee21c..cef624dce3a022043a2f86e56acd6ca589d493d1 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java @@ -113,7 +113,7 @@ public class MySQLInsertEntityProperties extends MySQLTransaction stmt.setString(7, fp.status); stmt.setString(8, fp.name); stmt.setString(9, fp.desc); - stmt.setString(10, fp.type_id); + stmt.setString(10, fp.type); stmt.setString(11, fp.collection); stmt.setInt(12, fp.idx); stmt.execute(); @@ -207,7 +207,7 @@ public class MySQLInsertEntityProperties extends MySQLTransaction } if (property.isDatatypeOverride()) { if (property.getDatatype() instanceof AbstractCollectionDatatype) { - fp.type_id = + fp.type = ((AbstractCollectionDatatype) property.getDatatype()) .getDatatype() .getId() @@ -215,7 +215,7 @@ public class MySQLInsertEntityProperties extends MySQLTransaction fp.collection = ((AbstractCollectionDatatype) property.getDatatype()).getCollectionName(); } else { - fp.type_id = property.getDatatype().getId().toString(); + fp.type = property.getDatatype().getId().toString(); } } } diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java index 0957ab539e74b960e5e384ba395bef7156cbda97..8d2af662f32d2f5a788d6470cf6cd526e15d0976 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java @@ -69,8 +69,8 @@ public class MySQLUpdateSparseEntity extends MySQLTransaction implements UpdateS updateEntityStmt.setString(2, spe.name); updateEntityStmt.setString(3, spe.description); updateEntityStmt.setString(4, spe.role); - if (spe.datatype_id != null) { - updateEntityStmt.setString(5, spe.datatype_id); + if (spe.datatype != null) { + updateEntityStmt.setString(5, spe.datatype); } else { updateEntityStmt.setNull(5, Types.VARCHAR); } diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java index fbe2f57e1cdc7868dac239313f7579011e23e868..8ec47231d7d3644bc4c21a2b2125175a75f4bc97 100644 --- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java +++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/Replacement.java @@ -41,18 +41,12 @@ enum ReplacementStatus implements StatementStatusInterface { public class Replacement extends Property { public Property replacement; - private boolean state2Replacement; @Override public EntityID getId() { return replacement.getId(); } - @Override - public boolean hasId() { - return replacement.hasId(); - } - public void setReplacementId(EntityID id) { replacement.getId().link(id); } @@ -61,18 +55,10 @@ public class Replacement extends Property { super(p); replacement = new Property(new RetrieveEntity()); - replacement.setDomain(p); + replacement.setDomain(p.getDomainEntity()); replacement.setId(new EntityID()); replacement.setStatementStatus(ReplacementStatus.REPLACEMENT); replacement.setValue(new ReferenceValue(p.getId())); - replacement.setPIdx(p.getPIdx()); - } - - public void setStage2Replacement(boolean t) { - this.state2Replacement = t; - } - - public boolean isState2Replacement() { - return state2Replacement; + replacement.setPIdx(0); } } diff --git a/src/main/java/org/caosdb/server/database/proto/FlatProperty.java b/src/main/java/org/caosdb/server/database/proto/FlatProperty.java index ecb49147474e156ea3f560edc3e039f8181dd0ca..b2123ce206ce01acee3ef70b1c22151b94f59bd9 100644 --- a/src/main/java/org/caosdb/server/database/proto/FlatProperty.java +++ b/src/main/java/org/caosdb/server/database/proto/FlatProperty.java @@ -33,7 +33,6 @@ public class FlatProperty implements Serializable { public Integer idx = null; public String name = null; public String desc = null; - public String type_id = null; - public String type_name = null; + public String type = null; public String collection = null; } diff --git a/src/main/java/org/caosdb/server/database/proto/SparseEntity.java b/src/main/java/org/caosdb/server/database/proto/SparseEntity.java index f4ff2d41c46ceec3b408b980df906fdc8d10553f..d2292c58825ac6807e24f3ad3d086b29dd8a6e7e 100644 --- a/src/main/java/org/caosdb/server/database/proto/SparseEntity.java +++ b/src/main/java/org/caosdb/server/database/proto/SparseEntity.java @@ -33,8 +33,7 @@ public class SparseEntity extends VerySparseEntity { private static final long serialVersionUID = -560259468853956476L; public String collection = null; - public String datatype_id = null; - public String datatype_name = null; + public String datatype = null; public String fileHash = null; public String filePath = null; public Long fileSize = null; @@ -49,8 +48,7 @@ public class SparseEntity extends VerySparseEntity { .append(this.description) .append(this.role) .append(this.collection) - .append(this.datatype_id) - .append(this.datatype_name) + .append(this.datatype) .append(this.fileHash) .append(this.filePath) .append(this.fileSize) diff --git a/src/main/java/org/caosdb/server/datatype/AbstractCollectionDatatype.java b/src/main/java/org/caosdb/server/datatype/AbstractCollectionDatatype.java index 1d816947d642e2ccb6f9867ced4478ea9a59c2d3..cbd822ee10a24127483fae9adff440404a243771 100644 --- a/src/main/java/org/caosdb/server/datatype/AbstractCollectionDatatype.java +++ b/src/main/java/org/caosdb/server/datatype/AbstractCollectionDatatype.java @@ -25,7 +25,6 @@ package org.caosdb.server.datatype; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.caosdb.server.entity.EntityID; public abstract class AbstractCollectionDatatype extends AbstractDatatype { @@ -51,7 +50,7 @@ public abstract class AbstractCollectionDatatype extends AbstractDatatype { if (matcher.matches()) { final String col = matcher.group(1).toUpperCase(); final String type = matcher.group(2); - return collectionDatatypeFactory(col, null, type); + return collectionDatatypeFactory(col, type); } return null; } @@ -74,9 +73,7 @@ public abstract class AbstractCollectionDatatype extends AbstractDatatype { } public static AbstractCollectionDatatype collectionDatatypeFactory( - final String col, final String id, String name) { - return instances - .get(col) - .createDataType(AbstractDatatype.datatypeFactory(new EntityID(id), name)); + final String col, final String dt) { + return instances.get(col).createDataType(AbstractDatatype.datatypeFactory(dt)); } } diff --git a/src/main/java/org/caosdb/server/datatype/AbstractDatatype.java b/src/main/java/org/caosdb/server/datatype/AbstractDatatype.java index 795ac56dbb1df24f38964edc5eac47e491199c37..583145fb19361adf08ae81bf8c9e338d53ad908f 100644 --- a/src/main/java/org/caosdb/server/datatype/AbstractDatatype.java +++ b/src/main/java/org/caosdb/server/datatype/AbstractDatatype.java @@ -65,24 +65,6 @@ public abstract class AbstractDatatype { return ret; } - public static AbstractDatatype datatypeFactory(final EntityID id, String name) { - AbstractDatatype dt; - if (id.hasId()) { - dt = datatypeFactory(id); - - if (name != null) { - dt.setName(name); - } - } else { - dt = AbstractDatatype.datatypeFactory(name); - } - return dt; - } - - protected void setName(String name) { - this.name = name; - } - public static AbstractDatatype datatypeFactory(final EntityID datatype) { for (final AbstractDatatype abstractDatatype : instances.values()) { if (abstractDatatype.getId().equals(datatype)) { @@ -139,6 +121,6 @@ public abstract class AbstractDatatype { @Override public String toString() { - return "DT." + (getName() != null ? getName() : getId().toString()); + return "DT." + getName(); } } diff --git a/src/main/java/org/caosdb/server/datatype/ReferenceDatatype2.java b/src/main/java/org/caosdb/server/datatype/ReferenceDatatype2.java index cbc080b92b1220b21a36da43aecfd9434515420f..503e4679335381da6c08b746af8ed14665bd409b 100644 --- a/src/main/java/org/caosdb/server/datatype/ReferenceDatatype2.java +++ b/src/main/java/org/caosdb/server/datatype/ReferenceDatatype2.java @@ -30,10 +30,6 @@ public class ReferenceDatatype2 extends ReferenceDatatype { private final ReferenceValue refid; - public ReferenceDatatype2(final EntityID entity) { - refid = ReferenceValue.parseReference(entity); - } - public ReferenceDatatype2(final Object entity) { try { this.refid = ReferenceValue.parseReference(entity); @@ -60,11 +56,6 @@ public class ReferenceDatatype2 extends ReferenceDatatype { return this.refid.getName(); } - @Override - protected void setName(String name) { - this.refid.setName(name); - } - @Override public boolean equals(final Object obj) { if (obj instanceof ReferenceDatatype2) { diff --git a/src/main/java/org/caosdb/server/datatype/ReferenceValue.java b/src/main/java/org/caosdb/server/datatype/ReferenceValue.java index 1a1c33ffe4ebafca0ca6e3011740a2d789750671..e07b1b807c3226cb5bc074aeafd4d8c712ce2ec1 100644 --- a/src/main/java/org/caosdb/server/datatype/ReferenceValue.java +++ b/src/main/java/org/caosdb/server/datatype/ReferenceValue.java @@ -55,10 +55,6 @@ public class ReferenceValue implements SingleValue { private String version = null; private boolean versioned = false; - public static ReferenceValue parseReference(final EntityID reference) { - return new ReferenceValue(reference); - } - public static ReferenceValue parseReference(final Object reference) throws Message { if (reference == null) { return null; @@ -74,7 +70,11 @@ public class ReferenceValue implements SingleValue { } else if (reference instanceof CollectionValue) { throw ServerMessages.DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES; } else { - return new ReferenceValue(reference.toString()); + try { + return new ReferenceValue(reference.toString()); + } catch (final NumberFormatException e) { + return new ReferenceValue(reference.toString()); + } } } @@ -242,8 +242,4 @@ public class ReferenceValue implements SingleValue { } return false; } - - public void setName(String name) { - this.name = name; - } } diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java index 8179375d8f4671f721969e0103a427077ca8e027..b27eaa28e5111d783d1d8d3779f36a1938898173 100644 --- a/src/main/java/org/caosdb/server/entity/Entity.java +++ b/src/main/java/org/caosdb/server/entity/Entity.java @@ -200,6 +200,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa } else { setDatatype(AbstractDatatype.datatypeFactory(datatype)); } + notifyObservers(DATATYPE_CHANGED_EVENT); } @Override @@ -366,12 +367,9 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa if (hasDatatype()) { if (getDatatype() instanceof AbstractCollectionDatatype) { ret.collection = ((AbstractCollectionDatatype) getDatatype()).getCollectionName(); - ret.datatype_id = - ((AbstractCollectionDatatype) getDatatype()).getDatatype().getId().toString(); - ret.datatype_name = ((AbstractCollectionDatatype) getDatatype()).getDatatype().getName(); + ret.datatype = ((AbstractCollectionDatatype) getDatatype()).getDatatype().getName(); } else { - ret.datatype_id = getDatatype().getId().toString(); - ret.datatype_name = getDatatype().getName(); + ret.datatype = getDatatype().getName(); } } if (hasFileProperties()) { @@ -730,13 +728,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa // Parse sub elements which represent PROPERTIES of this // record. - WritableEntity wrapped; - if (this instanceof InsertEntity) { - wrapped = new InsertEntity(pe, Role.Property); - } else { - wrapped = new UpdateEntity(pe, Role.Property); - } - final Property property = new Property(wrapped); + final Property property = new Property(new WritableEntity(pe, Role.Property)); // Ignore parents of properties property.getParents().clear(); @@ -745,13 +737,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa } else if (pe.getName().equalsIgnoreCase("Parent")) { // Parse sub elements which represent PARENTS of this // record. - WritableEntity wrapped; - if (this instanceof InsertEntity) { - wrapped = new InsertEntity(pe, null); - } else { - wrapped = new UpdateEntity(pe, null); - } - final Parent parent = new Parent(wrapped); + final Parent parent = new Parent(new WritableEntity(pe, null)); addParent(parent); } else if (pe.getName().equalsIgnoreCase("EntityACL")) { // Parse and concatenate EntityACL @@ -967,14 +953,18 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa if (!isDescOverride()) { setDescription(spe.description); } - if (!isDatatypeOverride() && spe.datatype_id != null) { - if (spe.collection != null) { - this.setDatatype( - AbstractCollectionDatatype.collectionDatatypeFactory( - spe.collection, spe.datatype_id, spe.datatype_name)); - } else { - this.setDatatype( - AbstractDatatype.datatypeFactory(new EntityID(spe.datatype_id), spe.datatype_name)); + if (!isDatatypeOverride()) { + final String dt = spe.datatype; + final String col = spe.collection; + + if (dt != null + && !dt.equalsIgnoreCase("null") + && (!hasDatatype() || !dt.equalsIgnoreCase(getDatatype().toString()))) { + if (col != null && !col.equalsIgnoreCase("null")) { + this.setDatatype(AbstractCollectionDatatype.collectionDatatypeFactory(col, dt)); + } else { + this.setDatatype(dt); + } } } diff --git a/src/main/java/org/caosdb/server/entity/EntityID.java b/src/main/java/org/caosdb/server/entity/EntityID.java index 5f6c4667bc3eba056a036d718a350aa032bcb8f0..9f61127db2969578300fbe2f12091c0f9f258d90 100644 --- a/src/main/java/org/caosdb/server/entity/EntityID.java +++ b/src/main/java/org/caosdb/server/entity/EntityID.java @@ -59,7 +59,7 @@ public class EntityID implements Serializable { return this.id; } - public boolean hasId() { + boolean hasId() { return this.id != null || this.link != null && this.link.hasId(); } diff --git a/src/main/java/org/caosdb/server/entity/WritableEntity.java b/src/main/java/org/caosdb/server/entity/WritableEntity.java index b17a54b9a68ebcdf21d8e67b9c31b0f7d59d02e8..6c967cc4e3404c7940066dc123bf805785a6e4c3 100644 --- a/src/main/java/org/caosdb/server/entity/WritableEntity.java +++ b/src/main/java/org/caosdb/server/entity/WritableEntity.java @@ -23,7 +23,7 @@ package org.caosdb.server.entity; import org.jdom2.Element; -public abstract class WritableEntity extends Entity { +public class WritableEntity extends Entity { public WritableEntity(final Element element, Role role) { super(); 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 4d2b8e25b8e7518822b13c08ef04623e74d37a29..9268d7f3cb327a70a4cca872657d72e2779fc344 100644 --- a/src/main/java/org/caosdb/server/entity/wrapper/Property.java +++ b/src/main/java/org/caosdb/server/entity/wrapper/Property.java @@ -27,7 +27,6 @@ import org.apache.shiro.authz.Permission; import org.apache.shiro.subject.Subject; import org.caosdb.server.database.proto.ProtoProperty; import org.caosdb.server.datatype.AbstractCollectionDatatype; -import org.caosdb.server.datatype.AbstractDatatype; import org.caosdb.server.datatype.CollectionValue; import org.caosdb.server.datatype.GenericValue; import org.caosdb.server.entity.EntityID; @@ -87,13 +86,12 @@ public class Property extends EntityWrapper { setDescription(pp.desc); setDescOverride(true); } - if (pp.type_id != null) { + if (pp.type != null) { if (pp.collection != null) { this.setDatatype( - AbstractCollectionDatatype.collectionDatatypeFactory( - pp.collection, pp.type_id, pp.type_name)); + AbstractCollectionDatatype.collectionDatatypeFactory(pp.collection, pp.type)); } else { - this.setDatatype(AbstractDatatype.datatypeFactory(new EntityID(pp.type_id), pp.type_name)); + this.setDatatype(pp.type); } setDatatypeOverride(true); } diff --git a/src/main/java/org/caosdb/server/jobs/JobConfig.java b/src/main/java/org/caosdb/server/jobs/JobConfig.java index 83300e00d4be7c463f4b92f4fdbb521c17739a7b..b2bb0d4a1b13a98dd68893c9f0cad7bc8192edba 100644 --- a/src/main/java/org/caosdb/server/jobs/JobConfig.java +++ b/src/main/java/org/caosdb/server/jobs/JobConfig.java @@ -36,7 +36,7 @@ import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.RetrieveEntity; import org.caosdb.server.entity.container.TransactionContainer; -import org.caosdb.server.entity.wrapper.EntityWrapper; +import org.caosdb.server.entity.wrapper.Property; import org.caosdb.server.jobs.core.JobFailureSeverity; import org.caosdb.server.transaction.Transaction; import org.caosdb.server.utils.ConfigurationException; @@ -173,8 +173,8 @@ public class JobConfig { final EntityInterface target, final Transaction<? extends TransactionContainer> transaction) { String transactionType; - if (target instanceof EntityWrapper) { - transactionType = getTransactionType(((EntityWrapper) target).getWrapped()); + if (target instanceof Property) { + transactionType = getTransactionType(((Property) target).getDomainEntity()); } else { transactionType = getTransactionType(target); } diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java b/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java index 4a43d4a2985ad3607bb5cb9b2789acd085cc31e0..b3a06ca09d7870da843a2f3ad295e019ab683c12 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java @@ -28,7 +28,6 @@ import org.caosdb.server.database.exceptions.EntityWasNotUniqueException; import org.caosdb.server.datatype.AbstractCollectionDatatype; import org.caosdb.server.datatype.AbstractDatatype; import org.caosdb.server.datatype.ReferenceDatatype2; -import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.InsertEntity; import org.caosdb.server.entity.Message; @@ -116,11 +115,7 @@ public final class CheckDatatypePresent extends EntityJob { } private void checkReference2(final ReferenceDatatype2 datatype) throws Message { - EntityID datatypeId = datatype.getId(); - if (datatypeId == null) { - datatypeId = new EntityID(datatype.getName()); - } - EntityInterface datatypeEntity = resolve(datatypeId, datatype.getName(), (String) null); + EntityInterface datatypeEntity = resolve(datatype.getId(), datatype.getName(), (String) null); if (datatypeEntity == null) { throw ServerMessages.UNKNOWN_DATATYPE; diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckRefidValid.java b/src/main/java/org/caosdb/server/jobs/core/CheckRefidValid.java index 78d257eadf4fa1de4331bd9bf38855ca04ccdd9e..86e95542aaa0e6f373521149d9f7376f09d3972c 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckRefidValid.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckRefidValid.java @@ -28,7 +28,6 @@ import org.caosdb.server.datatype.CollectionValue; import org.caosdb.server.datatype.IndexedSingleValue; import org.caosdb.server.datatype.ReferenceValue; import org.caosdb.server.entity.Entity; -import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.Message; import org.caosdb.server.jobs.EntityJob; @@ -81,11 +80,7 @@ public class CheckRefidValid extends EntityJob implements Observer { } private void checkRefValue(final ReferenceValue ref) throws Message { - EntityID refId = ref.getId(); - if (refId == null) { - refId = new EntityID(ref.getName()); - } - EntityInterface referencedEntity = resolve(refId, ref.getName(), ref.getVersion()); + EntityInterface referencedEntity = resolve(ref.getId(), ref.getName(), ref.getVersion()); if (referencedEntity == null) { throw ServerMessages.REFERENCED_ENTITY_DOES_NOT_EXIST; } diff --git a/src/main/java/org/caosdb/server/transaction/Transaction.java b/src/main/java/org/caosdb/server/transaction/Transaction.java index b460085db94864e9936a1b7d0e8c12e74555bb1f..69dde0ea3602a650e52dadcdbc0107ff7cf12ded 100644 --- a/src/main/java/org/caosdb/server/transaction/Transaction.java +++ b/src/main/java/org/caosdb/server/transaction/Transaction.java @@ -197,7 +197,7 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra this.schedule.addAll(loadJobs); // additionally load datatype job - if (e.hasValue() || e.hasDatatype()) { + if (e.hasValue()) { this.schedule.add(new CheckDatatypePresent().init(JobFailureSeverity.ERROR, e, this)); } diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java index 939d0bf6473611cb1a0bb1ee28bfd91a568babd3..b780d3d68f20cb6973c902cbe92fbd4fd46d51c1 100644 --- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java +++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java @@ -398,17 +398,14 @@ public class WriteTransaction extends Transaction<WritableContainer> } // new datatype? - if ((newEntity.hasDatatype() + if (newEntity.hasDatatype() && oldEntity.hasDatatype() - && !newEntity.getDatatype().equals(oldEntity.getDatatype())) + && !newEntity.getDatatype().equals(oldEntity.getDatatype()) || newEntity.hasDatatype() ^ oldEntity.hasDatatype()) { needPermissions.add(EntityPermission.UPDATE_DATA_TYPE); updatetable = true; } else { - if (oldEntity.hasDatatype()) { - newEntity.setDatatypeOverride(oldEntity.isDatatypeOverride()); - newEntity.setDatatype(oldEntity.getDatatype()); - } + newEntity.setDatatypeOverride(oldEntity.isDatatypeOverride()); } // entity role diff --git a/src/test/java/org/caosdb/server/caching/TestCaching.java b/src/test/java/org/caosdb/server/caching/TestCaching.java index 90b642f17070e2f67312d533331ee7929117b447..8ff05660afde6e67d65e94011b662f09bdda9294 100644 --- a/src/test/java/org/caosdb/server/caching/TestCaching.java +++ b/src/test/java/org/caosdb/server/caching/TestCaching.java @@ -26,7 +26,6 @@ import java.io.IOException; import org.apache.commons.jcs.JCS; import org.apache.commons.jcs.access.CacheAccess; import org.caosdb.server.CaosDBServer; -import org.caosdb.server.ServerProperties; import org.caosdb.server.accessControl.Pam; import org.caosdb.server.database.backend.transaction.RetrieveProperties; import org.junit.jupiter.api.BeforeAll; @@ -37,7 +36,6 @@ public class TestCaching { @BeforeAll public static void init() throws IOException { CaosDBServer.initServerProperties(); - CaosDBServer.getServerProperties().setProperty(ServerProperties.KEY_CACHE_DISABLE, "FALSE"); CaosDBServer.initCaching(); JCSCacheHelper.init(); } diff --git a/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java b/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java index e8749510b906a12c97daed5bf3971f826d26d477..feee1360bf7fa0ae865422b31d8a2ad2bcf64ebe 100644 --- a/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java +++ b/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java @@ -174,23 +174,20 @@ public class InsertTest { assertEquals("V3", ((SingleValue) stage2Inserts.get(0).getValue()).toDatabaseString()); assertEquals(new EntityID("2"), stage2Inserts.get(0).getDomain()); - assertEquals(new EntityID("-1"), stage2Inserts.get(1).getId()); - assertEquals(ReplacementStatus.REPLACEMENT, stage2Inserts.get(1).getStatementStatus()); - assertEquals(new EntityID("5"), ((ReferenceValue) stage2Inserts.get(1).getValue()).getId()); + assertEquals(new EntityID("5"), stage2Inserts.get(1).getId()); + assertEquals("V5", ((SingleValue) stage2Inserts.get(1).getValue()).toDatabaseString()); assertEquals(new EntityID("4"), stage2Inserts.get(1).getDomain()); assertEquals(new EntityID("6"), stage2Inserts.get(2).getId()); assertEquals("V6", ((SingleValue) stage2Inserts.get(2).getValue()).toDatabaseString()); assertEquals(new EntityID("-1"), stage2Inserts.get(2).getDomain()); - assertEquals(new EntityID("-2"), stage2Inserts.get(3).getId()); - assertEquals(ReplacementStatus.REPLACEMENT, stage2Inserts.get(3).getStatementStatus()); - assertEquals(new EntityID("8"), ((ReferenceValue) stage2Inserts.get(3).getValue()).getId()); + assertEquals(new EntityID("8"), stage2Inserts.get(3).getId()); + assertEquals("V8", ((SingleValue) stage2Inserts.get(3).getValue()).toDatabaseString()); assertEquals(new EntityID("7"), stage2Inserts.get(3).getDomain()); - assertEquals(new EntityID("-3"), stage2Inserts.get(4).getId()); - assertEquals(ReplacementStatus.REPLACEMENT, stage2Inserts.get(4).getStatementStatus()); - assertEquals(new EntityID("9"), ((ReferenceValue) stage2Inserts.get(4).getValue()).getId()); + assertEquals(new EntityID("9"), stage2Inserts.get(4).getId()); + assertEquals("V9", ((SingleValue) stage2Inserts.get(4).getValue()).toDatabaseString()); assertEquals(new EntityID("-2"), stage2Inserts.get(4).getDomain()); assertEquals(new EntityID("10"), stage2Inserts.get(5).getId());