diff --git a/libxtracfg/java/src/main/java/de/ii/xtraplatform/cli/AutoHandler.java b/libxtracfg/java/src/main/java/de/ii/xtraplatform/cli/AutoHandler.java index d64c533..24e153e 100644 --- a/libxtracfg/java/src/main/java/de/ii/xtraplatform/cli/AutoHandler.java +++ b/libxtracfg/java/src/main/java/de/ii/xtraplatform/cli/AutoHandler.java @@ -136,6 +136,9 @@ public static Result generate( String selectedConfig = parameters.get("selectedConfig"); String newId = parameters.get("id"); Map typeObject = parseTypeObject(parameters.get("typeObject")); + boolean createProvider = typeObject.getOrDefault("provider", true); + boolean createService = typeObject.getOrDefault("service", true); + boolean createTileProvider = typeObject.getOrDefault("tileProvider", true); if ("fromScratch".equalsIgnoreCase(createOption)) { return generateBasicEntity(parameters, ldproxyCfg, typeObject); @@ -287,7 +290,7 @@ public static Result generate( List newFiles = new ArrayList<>(); - if (typeObject.getOrDefault("provider", true)) { + if (createProvider) { FeatureProviderDataV2 featureProvider = parseFeatureProvider(parameters, ldproxyCfg, types); AutoEntityFactory autoFactory = @@ -305,7 +308,7 @@ public static Result generate( .toString()); } - if (typeObject.getOrDefault("service", true)) { + if (createService) { OgcApiDataV2 ogcApi = parseOgcApi(parameters, ldproxyCfg); AutoEntityFactory autoFactory2 = @@ -318,6 +321,9 @@ public static Result generate( }); ldproxyCfg.writeEntity(entityData2); + if (createTileProvider) { + ensureTilesApiConfig(ldproxyCfg, entityData2); + } newFiles.add( ldproxyCfg @@ -326,7 +332,7 @@ public static Result generate( .toString()); } - if (typeObject.getOrDefault("tileProvider", true)) { + if (createTileProvider) { TileProviderFeaturesData tileProvider = parseTileProvider(parameters, ldproxyCfg); AutoEntityFactory autoFactory3 = @@ -551,7 +557,11 @@ private static Result generateBasicEntity( List newFiles = new ArrayList<>(); try { - if (typeObject.getOrDefault("provider", true)) { + boolean createProvider = typeObject.getOrDefault("provider", true); + boolean createService = typeObject.getOrDefault("service", true); + boolean createTileProvider = typeObject.getOrDefault("tileProvider", true); + + if (createProvider) { parameters.put("featureProviderType", "PGIS"); FeatureProviderDataV2 featureProvider = @@ -566,7 +576,7 @@ private static Result generateBasicEntity( .toString()); } - if (typeObject.getOrDefault("service", true)) { + if (createService) { OgcApiDataV2 ogcApi = parseOgcApi(parameters, ldproxyCfg); AutoEntityFactory autoFactory = @@ -576,6 +586,9 @@ private static Result generateBasicEntity( }); ldproxyCfg.writeEntity(entityData); + if (createTileProvider) { + ensureTilesApiConfig(ldproxyCfg, entityData); + } newFiles.add( ldproxyCfg @@ -584,7 +597,7 @@ private static Result generateBasicEntity( .toString()); } - if (typeObject.getOrDefault("tileProvider", true)) { + if (createTileProvider) { TileProviderFeaturesData tileProvider = parseTileProvider(parameters, ldproxyCfg); ldproxyCfg.writeEntity(tileProvider); @@ -607,4 +620,40 @@ private static Result generateBasicEntity( return result; } + + private static void ensureTilesApiConfig(LdproxyCfg ldproxyCfg, OgcApiDataV2 service) throws IOException { + File serviceFile = ldproxyCfg.getEntityPath(service).toFile(); + + Map yamlContent = ldproxyCfg.getObjectMapper().readValue(serviceFile, Map.class); + + List> apiEntries = new ArrayList<>(); + Object apiValue = yamlContent.get("api"); + if (apiValue instanceof List existingList) { + for (Object entry : existingList) { + if (entry instanceof Map existingMap) { + apiEntries.add(new LinkedHashMap<>((Map) existingMap)); + } + } + } + + Map tilesEntry = new LinkedHashMap<>(); + tilesEntry.put("buildingBlock", "TILES"); + tilesEntry.put("enabled", true); + + boolean replaced = false; + for (int i = 0; i < apiEntries.size(); i++) { + Object buildingBlock = apiEntries.get(i).get("buildingBlock"); + if ("TILES".equals(buildingBlock)) { + apiEntries.set(i, tilesEntry); + replaced = true; + break; + } + } + if (!replaced) { + apiEntries.add(tilesEntry); + } + + yamlContent.put("api", apiEntries); + ldproxyCfg.getObjectMapper().writeValue(serviceFile, yamlContent); + } }