From 5eb12c6526b92124afdc674c0c249bb29221dbf1 Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Fri, 24 Oct 2025 16:12:25 +0200 Subject: [PATCH] rewritten endpoint parsing --- Calculator-1.0.0.zip | Bin 0 -> 5653 bytes .../impl/v45/ExportToWso2FromV32.java | 15 +- .../mapper/ApiDefinitionMapper32to45.java | 181 +++++++++++------- .../migration/model/v32/ApiDefinition32.java | 58 +----- .../migration/model/v45/ApiDefinition45.java | 43 +---- 5 files changed, 125 insertions(+), 172 deletions(-) create mode 100644 Calculator-1.0.0.zip diff --git a/Calculator-1.0.0.zip b/Calculator-1.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..280e3ea7c12856eca7df48114a01e994599e3855 GIT binary patch literal 5653 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 0 && fileName != null && !fileName.isEmpty()) { int responseCode = publishApiToWso2(fileName, data, tokenResponse); @@ -185,12 +186,12 @@ public class ExportToWso2FromV32 extends AbstractProcess { addGenericPolicyMetadata(zos, baseDir + subDir, specialName.replace(".j2", ".yaml"), r); } else if (FileType.POLICY_OUT.toString().equals(amd.getGroupId())) { subDir = "Policies/"; - specialName = r.getName().replace(".xml", "_v1_common.j2"); + specialName = r.getName().replace(".xml", "_v1_api.j2"); content = convertSequenceToPolicy(content); addGenericPolicyMetadata(zos, baseDir + subDir, specialName.replace(".j2", ".yaml"), r); } else if (FileType.POLICY_FAULT.toString().equals(amd.getGroupId())) { subDir = "Policies/"; - specialName = r.getName().replace(".xml", "_v1_common.j2"); + specialName = r.getName().replace(".xml", "_v1_api.j2"); content = convertSequenceToPolicy(content); addGenericPolicyMetadata(zos, baseDir + subDir, specialName.replace(".j2", ".yaml"), r); } else if (FileType.OPENAPI.toString().equals(amd.getGroupId())) { diff --git a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper32to45.java b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper32to45.java index 5d35ed3..c6658d9 100644 --- a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper32to45.java +++ b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper32to45.java @@ -3,12 +3,12 @@ package cz.trask.migration.mapper; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import cz.trask.migration.AbstractProcess; @@ -17,7 +17,6 @@ import cz.trask.migration.model.v45.ApiDefinition45; import cz.trask.migration.model.v45.ApiDefinition45.ApiPolicies; import cz.trask.migration.model.v45.ApiDefinition45.Operation; import cz.trask.migration.model.v45.ApiDefinition45.OperationPolicies; -import cz.trask.migration.util.CredentialsDecoder; public class ApiDefinitionMapper32to45 { @@ -100,7 +99,7 @@ public class ApiDefinitionMapper32to45 { data.setCorsConfiguration(mapCors(oldApi.getCorsConfiguration())); // ---------- endpoint ---------- - data.setEndpointConfig(mapEndpointConfig(oldApi.getEndpointConfig())); + data.setEndpointConfig(oldApi.getEndpointConfig()); data.setEndpointImplementationType(oldApi.getImplementation()); // ---------- API policies ---------- @@ -124,9 +123,15 @@ public class ApiDefinitionMapper32to45 { data.setGatewayType("wso2/synapse"); // ---------- business & monetization ---------- - data.setBusinessInformation(oldApi.getMonetizationProperties()); - data.setAdditionalProperties(Collections.emptyList()); - data.setAdditionalPropertiesMap(oldApi.getAdditionalProperties()); + data.setBusinessInformation(new HashMap<>()); + data.getBusinessInformation().put("businessOwner", oldApi.getBusinessOwner()); + data.getBusinessInformation().put("businessOwnerEmail", oldApi.getBusinessOwnerEmail()); + data.getBusinessInformation().put("technicalOwner", oldApi.getTechnicalOwner()); + data.getBusinessInformation().put("technicalOwnerEmail", oldApi.getTechnicalOwnerEmail()); + + // ---------- additional properties ---------- + data.setAdditionalProperties(mapAdditionalProperties(oldApi.getAdditionalProperties())); + data.setAdditionalPropertiesMap(mapAdditionalPropertiesMap(oldApi.getAdditionalProperties())); // ---------- subscription ---------- data.setSubscriptionAvailability(oldApi.getSubscriptionAvailability().toUpperCase()); @@ -146,6 +151,36 @@ public class ApiDefinitionMapper32to45 { return newApi; } + private static List mapAdditionalProperties(Map additionalProperties) { + if (additionalProperties != null && !additionalProperties.isEmpty()) { + List list = new ArrayList<>(); + for (Map.Entry entry : additionalProperties.entrySet()) { + Map map = new HashMap<>(); + map.put("name", entry.getKey()); + map.put("value", entry.getValue()); + map.put("display", "false"); + list.add(map); + } + return list; + } + return null; + } + + private static Map mapAdditionalPropertiesMap(Map additionalProperties) { + if (additionalProperties != null && !additionalProperties.isEmpty()) { + Map res = new HashMap<>(); + for (Map.Entry entry : additionalProperties.entrySet()) { + Map map = new HashMap<>(); + map.put("name", entry.getKey()); + map.put("value", entry.getValue()); + map.put("display", "false"); + res.put(entry.getKey(), map); + } + return res; + } + return null; + } + private static ApiPolicies mapApiPolicies(ApiDefinition32 oldApi) { ApiDefinition45.ApiPolicies apiPolicies = new ApiDefinition45.ApiPolicies(); // ---------- request policies ---------- @@ -197,73 +232,73 @@ public class ApiDefinitionMapper32to45 { return cors; } - private static ApiDefinition45.EndpointConfig mapEndpointConfig(ApiDefinition32.EndpointConfig oldEndpoint) { - if (oldEndpoint == null) - return null; - - ApiDefinition45.EndpointConfig newEndpoint = new ApiDefinition45.EndpointConfig(); - newEndpoint.setEndpoint_type(oldEndpoint.getEndpointType()); - - if (oldEndpoint.getSandboxEndpoints() != null) { - ApiDefinition45.EndpointGroup sandbox = new ApiDefinition45.EndpointGroup(); - sandbox.setUrl(oldEndpoint.getSandboxEndpoints().getUrl()); - newEndpoint.setSandbox_endpoints(sandbox); - } - - if (oldEndpoint.getProductionEndpoints() != null) { - ApiDefinition45.EndpointGroup production = new ApiDefinition45.EndpointGroup(); - production.setUrl(oldEndpoint.getProductionEndpoints().getUrl()); - newEndpoint.setProduction_endpoints(production); - } - - if (oldEndpoint.getEndpointSecurity() != null) { - ApiDefinition45.EndpointSecurity security = new ApiDefinition45.EndpointSecurity(); - security.setSandbox(mapSecurityEnv(oldEndpoint.getEndpointSecurity().getSandbox())); - security.setProduction(mapSecurityEnv(oldEndpoint.getEndpointSecurity().getProduction())); - newEndpoint.setEndpoint_security(security); - } - - return newEndpoint; - } - - private static ApiDefinition45.SecurityEnv mapSecurityEnv(ApiDefinition32.SecurityEnvironment oldSec) { - if (oldSec == null) - return null; - - ApiDefinition45.SecurityEnv newSec = new ApiDefinition45.SecurityEnv(); - newSec.setType(oldSec.getType()); - newSec.setTokenUrl(oldSec.getTokenUrl()); - newSec.setClientId(oldSec.getClientId()); - newSec.setClientSecret( - CredentialsDecoder.decodeCredentials(oldSec.getClientSecret(), AbstractProcess.PRIVATE_KEY_APIM_32)); - newSec.setUsername(oldSec.getUsername()); - newSec.setPassword(oldSec.getPassword()); - newSec.setGrantType(oldSec.getGrantType()); - newSec.setEnabled(oldSec.isEnabled()); - newSec.setConnectionTimeoutDuration(0); - newSec.setSocketTimeoutDuration(0); - newSec.setConnectionRequestTimeoutDuration(0); - newSec.setProxyConfigs(new ApiDefinition45.ProxyConfigs()); - - // ---------- parse customParameters JSON string ---------- - if (oldSec.getCustomParameters() != null && !oldSec.getCustomParameters().isEmpty()) { - try { - Map map = AbstractProcess.mapperYaml.readValue(oldSec.getCustomParameters(), - new TypeReference<>() { - }); - newSec.setCustomParameters(map); - } catch (Exception e) { - newSec.setCustomParameters(Collections.emptyMap()); - } - } else { - newSec.setCustomParameters(Collections.emptyMap()); - } - - // ---------- parse additionalProperties JSON string ---------- - newSec.setAdditionalProperties(Collections.emptyMap()); - - return newSec; - } +// private static ApiDefinition45.EndpointConfig mapEndpointConfig(ApiDefinition32.EndpointConfig oldEndpoint) { +// if (oldEndpoint == null) +// return null; +// +// ApiDefinition45.EndpointConfig newEndpoint = new ApiDefinition45.EndpointConfig(); +// newEndpoint.setEndpoint_type(oldEndpoint.getEndpointType()); +// +// if (oldEndpoint.getSandboxEndpoints() != null) { +// ApiDefinition45.EndpointGroup sandbox = new ApiDefinition45.EndpointGroup(); +// sandbox.setUrl(oldEndpoint.getSandboxEndpoints().getUrl()); +// newEndpoint.setSandbox_endpoints(sandbox); +// } +// +// if (oldEndpoint.getProductionEndpoints() != null) { +// ApiDefinition45.EndpointGroup production = new ApiDefinition45.EndpointGroup(); +// production.setUrl(oldEndpoint.getProductionEndpoints().getUrl()); +// newEndpoint.setProduction_endpoints(production); +// } +// +// if (oldEndpoint.getEndpointSecurity() != null) { +// ApiDefinition45.EndpointSecurity security = new ApiDefinition45.EndpointSecurity(); +// security.setSandbox(mapSecurityEnv(oldEndpoint.getEndpointSecurity().getSandbox())); +// security.setProduction(mapSecurityEnv(oldEndpoint.getEndpointSecurity().getProduction())); +// newEndpoint.setEndpoint_security(security); +// } +// +// return newEndpoint; +// } +// +// private static ApiDefinition45.SecurityEnv mapSecurityEnv(ApiDefinition32.SecurityEnvironment oldSec) { +// if (oldSec == null) +// return null; +// +// ApiDefinition45.SecurityEnv newSec = new ApiDefinition45.SecurityEnv(); +// newSec.setType(oldSec.getType()); +// newSec.setTokenUrl(oldSec.getTokenUrl()); +// newSec.setClientId(oldSec.getClientId()); +// newSec.setClientSecret( +// CredentialsDecoder.decodeCredentials(oldSec.getClientSecret(), AbstractProcess.PRIVATE_KEY_APIM_32)); +// newSec.setUsername(oldSec.getUsername()); +// newSec.setPassword(oldSec.getPassword()); +// newSec.setGrantType(oldSec.getGrantType()); +// newSec.setEnabled(oldSec.isEnabled()); +// newSec.setConnectionTimeoutDuration(0); +// newSec.setSocketTimeoutDuration(0); +// newSec.setConnectionRequestTimeoutDuration(0); +// newSec.setProxyConfigs(new ApiDefinition45.ProxyConfigs()); +// +// // ---------- parse customParameters JSON string ---------- +// if (oldSec.getCustomParameters() != null && !oldSec.getCustomParameters().isEmpty()) { +// try { +// Map map = AbstractProcess.mapperYaml.readValue(oldSec.getCustomParameters(), +// new TypeReference<>() { +// }); +// newSec.setCustomParameters(map); +// } catch (Exception e) { +// newSec.setCustomParameters(Collections.emptyMap()); +// } +// } else { +// newSec.setCustomParameters(Collections.emptyMap()); +// } +// +// // ---------- parse additionalProperties JSON string ---------- +// newSec.setAdditionalProperties(Collections.emptyMap()); +// +// return newSec; +// } public static List mapOperations(String swaggerYamlString) throws Exception { JsonNode root = AbstractProcess.mapperYaml.readTree(swaggerYamlString); diff --git a/src/main/java/cz/trask/migration/model/v32/ApiDefinition32.java b/src/main/java/cz/trask/migration/model/v32/ApiDefinition32.java index 2198d19..b528970 100644 --- a/src/main/java/cz/trask/migration/model/v32/ApiDefinition32.java +++ b/src/main/java/cz/trask/migration/model/v32/ApiDefinition32.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Map; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -18,12 +17,12 @@ import lombok.Data; @JsonIgnoreProperties(ignoreUnknown = true) public class ApiDefinition32 { - public static class EndpointConfigDeserializer extends JsonDeserializer { + public static class EndpointConfigDeserializer extends JsonDeserializer { @Override - public EndpointConfig deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + public Map deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String json = p.getValueAsString(); ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(json, EndpointConfig.class); + return mapper.readValue(json, Map.class); } } @@ -56,7 +55,7 @@ public class ApiDefinition32 { private String subscriptionAvailability; private CorsConfiguration corsConfiguration; @JsonDeserialize(using = EndpointConfigDeserializer.class) - private EndpointConfig endpointConfig; + private Map endpointConfig; private String responseCache; private int cacheTimeout; private String implementation; @@ -79,6 +78,10 @@ public class ApiDefinition32 { private String accessControl; private double rating; private boolean isLatest; + private String businessOwner; + private String businessOwnerEmail; + private String technicalOwner; + private String technicalOwnerEmail; // -------------------- inner classes -------------------- @@ -115,51 +118,6 @@ public class ApiDefinition32 { private List accessControlAllowMethods; } - // ----------- typový objekt endpointConfig ----------- - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class EndpointConfig { - @JsonProperty("endpoint_type") - private String endpointType; - - @JsonProperty("sandbox_endpoints") - private Endpoint sandboxEndpoints; - - @JsonProperty("production_endpoints") - private Endpoint productionEndpoints; - - @JsonProperty("endpoint_security") - private EndpointSecurity endpointSecurity; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class Endpoint { - private String url; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class EndpointSecurity { - private SecurityEnvironment sandbox; - private SecurityEnvironment production; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class SecurityEnvironment { - private String tokenUrl; - private String clientId; - private String clientSecret; - private String password; - private String username; - private String type; - private String grantType; - private boolean enabled; - private String customParameters; - } - @Data @JsonIgnoreProperties(ignoreUnknown = true) public static class ProxyConfigs { diff --git a/src/main/java/cz/trask/migration/model/v45/ApiDefinition45.java b/src/main/java/cz/trask/migration/model/v45/ApiDefinition45.java index e10b023..ecf50b5 100644 --- a/src/main/java/cz/trask/migration/model/v45/ApiDefinition45.java +++ b/src/main/java/cz/trask/migration/model/v45/ApiDefinition45.java @@ -63,7 +63,7 @@ public class ApiDefinition45 { private String createdTime; private String lastUpdatedTimestamp; private String lastUpdatedTime; - private EndpointConfig endpointConfig; + private Map endpointConfig; private String endpointImplementationType; private SubtypeConfiguration subtypeConfiguration; private List scopes; @@ -115,47 +115,6 @@ public class ApiDefinition45 { private String signatureHeader; } - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class EndpointConfig { - private String endpoint_type; - private EndpointGroup sandbox_endpoints; - private EndpointGroup production_endpoints; - private EndpointSecurity endpoint_security; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class EndpointGroup { - private String url; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class EndpointSecurity { - private SecurityEnv sandbox; - private SecurityEnv production; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class SecurityEnv { - private String tokenUrl; - private String clientId; - private int connectionTimeoutDuration; - private String type; - private int socketTimeoutDuration; - private boolean enabled; - private ProxyConfigs proxyConfigs; - private String password; - private String clientSecret; - private Map customParameters; - private Map additionalProperties; - private String grantType; - private int connectionRequestTimeoutDuration; - private String username; - } - @Data @JsonIgnoreProperties(ignoreUnknown = true) public static class ProxyConfigs {