diff --git a/RFS/src/main/java/com/rfs/version_os_2_11/GlobalMetadataCreator_OS_2_11.java b/RFS/src/main/java/com/rfs/version_os_2_11/GlobalMetadataCreator_OS_2_11.java index b40328b2f..7890550dc 100644 --- a/RFS/src/main/java/com/rfs/version_os_2_11/GlobalMetadataCreator_OS_2_11.java +++ b/RFS/src/main/java/com/rfs/version_os_2_11/GlobalMetadataCreator_OS_2_11.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -109,8 +110,6 @@ private List createTemplates( IClusterMetadataContext context ) { - var templatesToCreate = new HashMap(); - var templateList = new ArrayList(); log.info("Setting {} ...", templateType); if (templates == null) { @@ -121,7 +120,17 @@ private List createTemplates( if (templateAllowlist != null && templateAllowlist.isEmpty()) { log.info("No {} in specified allowlist", templateType); return List.of(); - } else if (templateAllowlist != null) { + } + + var templatesToCreate = getTemplatesToCreate(templates, templateAllowlist, templateType); + + return processTemplateCreation(templatesToCreate, templateType, mode, context); + } + + private Map getTemplatesToCreate(ObjectNode templates, List templateAllowlist, TemplateTypes templateType) { + var templatesToCreate = new HashMap(); + + if (templateAllowlist != null) { for (String templateName : templateAllowlist) { if (!templates.has(templateName) || templates.get(templateName) == null) { log.warn("{} not found: {}", templateType, templateName); @@ -131,23 +140,29 @@ private List createTemplates( templatesToCreate.put(templateName, settings); } } else { - // Get the template names - List templateKeys = new ArrayList<>(); - templates.fieldNames().forEachRemaining(templateKeys::add); - - // Create each template - for (String templateName : templateKeys) { + templates.fieldNames().forEachRemaining(templateName -> { ObjectNode settings = (ObjectNode) templates.get(templateName); templatesToCreate.put(templateName, settings); - } + }); } + return templatesToCreate; + } + + private List processTemplateCreation( + Map templatesToCreate, + TemplateTypes templateType, + MigrationMode mode, + IClusterMetadataContext context + ) { + + List templateList = new ArrayList<>(); + templatesToCreate.forEach((templateName, templateBody) -> { log.info("Creating {}: {}", templateType, templateName); if (mode == MigrationMode.SIMULATE) { - var alreadyExists = templateType.alreadyExistsCheck.templateAlreadyExists(client, templateName); - if (!alreadyExists) { + if (!templateType.alreadyExistsCheck.templateAlreadyExists(client, templateName)) { templateList.add(templateName); } else { log.warn("Template {} already exists on the target, it will not be created during a migration", templateName); diff --git a/RFS/src/main/java/com/rfs/version_universal/RemoteReaderClient.java b/RFS/src/main/java/com/rfs/version_universal/RemoteReaderClient.java index 5e0c5474a..6eee6fc05 100644 --- a/RFS/src/main/java/com/rfs/version_universal/RemoteReaderClient.java +++ b/RFS/src/main/java/com/rfs/version_universal/RemoteReaderClient.java @@ -117,31 +117,43 @@ Mono getJsonForTemplateApis(HttpResponse resp) { if (resp.statusCode != 200) { return Mono.error(new OperationFailed("Unexpected status code " + resp.statusCode, resp)); } + try { var tree = (ObjectNode) objectMapper.readTree(resp.body); + if (tree.size() == 1) { - var dearrayed = objectMapper.createObjectNode(); - // This is OK because there is only a single item in this collection - var fieldName = tree.fieldNames().next(); - var arrayOfItems = tree.get(fieldName); - for (var child : arrayOfItems) { - var node = (ObjectNode)child; - if (node.size() == 2) { - var fields = node.fieldNames(); - var f1 = fields.next(); - var f2 = fields.next(); - var itemName = node.get(f1).isTextual() ? node.get(f1).asText() : node.get(f2).asText(); - var detailsNode = !node.get(f1).isTextual() ? node.get(f1) : node.get(f2); - dearrayed.set(itemName, detailsNode); - } - } - return Mono.just(dearrayed); + return Mono.just(handleSingleItemTree(tree)); } + return Mono.just(tree); } catch (Exception e) { return logAndReturnJsonError(e, resp); } } + + private ObjectNode handleSingleItemTree(ObjectNode tree) { + var dearrayed = objectMapper.createObjectNode(); + var fieldName = tree.fieldNames().next(); + var arrayOfItems = tree.get(fieldName); + + for (var child : arrayOfItems) { + processChildNode((ObjectNode) child, dearrayed); + } + + return dearrayed; + } + + private void processChildNode(ObjectNode node, ObjectNode dearrayed) { + if (node.size() == 2) { + var fields = node.fieldNames(); + var f1 = fields.next(); + var f2 = fields.next(); + var itemName = node.get(f1).isTextual() ? node.get(f1).asText() : node.get(f2).asText(); + var detailsNode = !node.get(f1).isTextual() ? node.get(f1) : node.get(f2); + + dearrayed.set(itemName, detailsNode); + } + } Mono logAndReturnJsonError(Exception e, HttpResponse resp) { String errorPrefix = "Unable to get json response: ";