From b426cbea32dc1186257425b4df257bc078ed8989 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Mon, 2 Aug 2021 12:27:07 +0200 Subject: [PATCH] WIP: fix server 154 --- .../jobs/core/CheckDatatypePresent.java | 38 +++++++++++++------ .../server/jobs/core/CheckPropValid.java | 9 ----- 2 files changed, 26 insertions(+), 21 deletions(-) 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 f9c7704c..53d99eda 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckDatatypePresent.java @@ -23,6 +23,7 @@ package org.caosdb.server.jobs.core; import java.util.List; +import java.util.Objects; import org.caosdb.server.database.exceptions.EntityDoesNotExistException; import org.caosdb.server.database.exceptions.EntityWasNotUniqueException; import org.caosdb.server.datatype.AbstractCollectionDatatype; @@ -153,28 +154,41 @@ public final class CheckDatatypePresent extends EntityJob { checkPermission(datatype, EntityPermission.USE_AS_DATA_TYPE); } + private void checkIfOverride(final EntityInterface foreign) { + if (foreign.hasDatatype() && !foreign.getDatatype().equals(getEntity().getDatatype())) { + // is override! + getEntity().setDatatypeOverride(true); + } else if (!foreign.hasDatatype()) { + // non-matching reference datatype + if (getEntity().getDatatype() instanceof ReferenceDatatype2) { + final ReferenceDatatype2 datatype = (ReferenceDatatype2) getEntity().getDatatype(); + if (!Objects.equals(foreign.getId(), datatype.getId()) + && !(Objects.equals(foreign.getName(), datatype.getName()) + && datatype.getId() == null)) { + getEntity().setDatatypeOverride(true); + } + } else { + getEntity().setDatatypeOverride(true); + } + } + } + private void checkIfOverride() throws Message { if (getEntity().hasId() && getEntity().getId() > 0) { // get data type from database final EntityInterface foreign = retrieveValidSparseEntityById(getEntity().getId(), null); + checkIfOverride(foreign); - if (foreign.hasDatatype() && !foreign.getDatatype().equals(getEntity().getDatatype())) { - // is override! - getEntity().setDatatypeOverride(true); - } } else { // get data type from container - EntityInterface abstractProperty = null; + EntityInterface foreign = null; if (getEntity().hasId()) { - abstractProperty = getEntityById(getEntity().getId()); + foreign = getEntityById(getEntity().getId()); } else if (getEntity().hasName()) { - abstractProperty = getEntityByName(getEntity().getName()); + foreign = getEntityByName(getEntity().getName()); } - if (abstractProperty != null && abstractProperty.hasDatatype()) { - if (!getEntity().getDatatype().equals(abstractProperty.getDatatype())) { - // is override! - getEntity().setDatatypeOverride(true); - } + if (foreign != null) { + checkIfOverride(foreign); } } } diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java b/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java index 390deedd..bc75a5b6 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckPropValid.java @@ -167,14 +167,5 @@ public class CheckPropValid extends EntityJob { child.setDescription(parent.getDescription()); } } - if (!Objects.equal(child.getDatatype(), parent.getDatatype())) { - if (child.hasDatatype() - // FIXME why this? - && (!child.getDatatype().toString().equals("REFERENCE") || parent.hasDatatype())) { - child.setDatatypeOverride(true); - } else { - child.setDatatype(parent.getDatatype()); - } - } } } -- GitLab