Skip to content

Commit

Permalink
fix: added 'mg_tableclass' for expressions in de backend (#4158)
Browse files Browse the repository at this point in the history
* fix: make copy of rows in returned map in convertRowToMap

* handle ontology computed values

* added computed parse logic to typeutils
  • Loading branch information
harmbrugge authored Sep 11, 2024
1 parent d04d436 commit 9cde143
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ public static void applyValidationAndComputed(List<Column> 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);
Expand Down Expand Up @@ -282,7 +283,7 @@ public static String checkRequiredExpression(
}

static Map<String, Object> convertRowToMap(List<Column> columns, Row row) {
Map<String, Object> map = new LinkedHashMap<>();
Map<String, Object> map = new LinkedHashMap<>(row.getValueMap());
for (Column c : columns) {
if (c.isReference()) {
map.put(c.getIdentifier(), getRefFromRow(row, c));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -488,34 +488,37 @@ public static LocalDateTime millisecondsToLocalDateTime(long milliseconds) {

public static Iterable<Row> convertToRows(TableMetadata metadata, List<Map<String, Object>> map) {
List<Row> rows = new ArrayList<>();
for (Map<String, Object> object : map) {
for (Map<String, Object> field : map) {
Row row = new Row();
for (Column column : metadata.getColumns()) {
if (object.containsKey(column.getIdentifier())) {
if (column.isRef()) {
convertRefToRow((Map<String, Object>) object.get(column.getIdentifier()), row, column);
} else if (column.isReference()) {
// REFBACK, REF_ARRAY
convertRefArrayToRow(
(List<Map<String, Object>>) 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);
}
return rows;
}

public static void addFieldObjectToRow(Column column, Object object, Row row) {
if (column.isRef()) {
convertRefToRow((Map<String, Object>) object, row, column);
} else if (column.isReference()) {
// REFBACK, REF_ARRAY
convertRefArrayToRow((List<Map<String, Object>>) 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<Map<String, Object>> list, Row row, Column column) {

Expand Down

0 comments on commit 9cde143

Please sign in to comment.