diff --git a/backend/molgenis-emx2-sql/src/main/java/org/molgenis/emx2/sql/SqlTypeUtils.java b/backend/molgenis-emx2-sql/src/main/java/org/molgenis/emx2/sql/SqlTypeUtils.java index 01fd57e040..a6df428810 100644 --- a/backend/molgenis-emx2-sql/src/main/java/org/molgenis/emx2/sql/SqlTypeUtils.java +++ b/backend/molgenis-emx2-sql/src/main/java/org/molgenis/emx2/sql/SqlTypeUtils.java @@ -62,7 +62,8 @@ public static void applyValidationAndComputed(List columns, Row row) { row.set(c.getName(), c.getDefaultValue()); } } else if (c.getComputed() != null) { - row.set(c.getName(), executeJavascriptOnMap(c.getComputed(), graph)); + Object computedValue = executeJavascriptOnMap(c.getComputed(), graph); + TypeUtils.addFieldObjectToRow(c, computedValue, row); } else if (columnIsVisible(c, graph)) { checkRequired(c, row, graph); checkValidation(c, graph); @@ -282,7 +283,7 @@ public static String checkRequiredExpression( } static Map convertRowToMap(List columns, Row row) { - Map map = new LinkedHashMap<>(); + Map map = new LinkedHashMap<>(row.getValueMap()); for (Column c : columns) { if (c.isReference()) { map.put(c.getIdentifier(), getRefFromRow(row, c)); diff --git a/backend/molgenis-emx2/src/main/java/org/molgenis/emx2/utils/TypeUtils.java b/backend/molgenis-emx2/src/main/java/org/molgenis/emx2/utils/TypeUtils.java index 4037321b60..6372456c4f 100644 --- a/backend/molgenis-emx2/src/main/java/org/molgenis/emx2/utils/TypeUtils.java +++ b/backend/molgenis-emx2/src/main/java/org/molgenis/emx2/utils/TypeUtils.java @@ -488,27 +488,12 @@ public static LocalDateTime millisecondsToLocalDateTime(long milliseconds) { public static Iterable convertToRows(TableMetadata metadata, List> map) { List rows = new ArrayList<>(); - for (Map object : map) { + for (Map field : map) { Row row = new Row(); for (Column column : metadata.getColumns()) { - if (object.containsKey(column.getIdentifier())) { - if (column.isRef()) { - convertRefToRow((Map) object.get(column.getIdentifier()), row, column); - } else if (column.isReference()) { - // REFBACK, REF_ARRAY - convertRefArrayToRow( - (List>) object.get(column.getIdentifier()), row, column); - } else if (column.isFile()) { - BinaryFileWrapper bfw = (BinaryFileWrapper) object.get(column.getIdentifier()); - if (bfw == null || !bfw.isSkip()) { - // also necessary in case of 'null' to ensure all file metadata fields are made empty - // skip is used when use submitted only metadata (that they received in query) - row.setBinary( - column.getName(), (BinaryFileWrapper) object.get(column.getIdentifier())); - } - } else { - row.set(column.getName(), object.get(column.getIdentifier())); - } + if (field.containsKey(column.getIdentifier())) { + Object fieldValue = field.get(column.getIdentifier()); + addFieldObjectToRow(column, fieldValue, row); } } rows.add(row); @@ -516,6 +501,24 @@ public static Iterable convertToRows(TableMetadata metadata, List) object, row, column); + } else if (column.isReference()) { + // REFBACK, REF_ARRAY + convertRefArrayToRow((List>) object, row, column); + } else if (column.isFile()) { + BinaryFileWrapper bfw = (BinaryFileWrapper) object; + if (bfw == null || !bfw.isSkip()) { + // also necessary in case of 'null' to ensure all file metadata fields are made empty + // skip is used when use submitted only metadata (that they received in query) + row.setBinary(column.getName(), (BinaryFileWrapper) object); + } + } else { + row.set(column.getName(), object); + } + } + protected static void convertRefArrayToRow( List> list, Row row, Column column) {