diff --git a/Calculator-1.0.0.zip b/Calculator-1.0.0.zip index bb923e5..88cc87d 100644 Binary files a/Calculator-1.0.0.zip and b/Calculator-1.0.0.zip differ diff --git a/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java b/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java index 313939d..d95e658 100644 --- a/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java +++ b/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java @@ -2,6 +2,7 @@ package cz.trask.migration.impl.v45; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -23,6 +24,7 @@ import cz.trask.migration.model.ApiDefinition32; import cz.trask.migration.model.ApiDefinition45; import cz.trask.migration.model.FileType; import cz.trask.migration.model.HttpResponse; +import cz.trask.migration.model.OperationPolicySpecification45; import cz.trask.migration.model.RegisterResponse; import cz.trask.migration.model.TokenResponse; import io.apicurio.registry.rest.client.RegistryClient; @@ -192,16 +194,19 @@ public class ExportToWso2FromV32 extends AbstractProcess { if (FileType.POLICY_IN.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_OUT.toString().equals(amd.getGroupId())) { subDir = "Policies/"; specialName = r.getName().replace(".xml", "_v1_common.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"); content = convertSequenceToPolicy(content); + addGenericPolicyMetadata(zos, baseDir + subDir, specialName.replace(".j2", ".yaml"), r); } else if (FileType.OPENAPI.toString().equals(amd.getGroupId())) { subDir = "Definitions/"; contentStr = new String(content); @@ -234,6 +239,32 @@ public class ExportToWso2FromV32 extends AbstractProcess { } } + private void addGenericPolicyMetadata(ZipOutputStream zos, String subDir, String fileName, ArtifactReference r) + throws Exception { + OperationPolicySpecification45 ops = new OperationPolicySpecification45(); + ops.setVersion("v4.5.0"); + ops.setType("operation_policy_specification"); + OperationPolicySpecification45.Data data = new OperationPolicySpecification45.Data(); + data.setName(r.getName().replace(".xml", "")); + data.setCategory("Mediation"); + data.setDescription("Generic Migrated policy " + r.getName()); + data.setDisplayName(r.getName().replace(".xml", "")); + data.setVersion("v1"); + data.setApplicableFlows(new ArrayList<>()); + data.getApplicableFlows().add("request"); + data.getApplicableFlows().add("response"); + data.setSupportedGateways(new ArrayList<>()); + data.getSupportedGateways().add("Synapse"); + data.setSupportedApiTypes(new ArrayList<>()); + data.getSupportedApiTypes().add("HTTP"); + data.setPolicyAttributes(new ArrayList<>()); + ops.setData(data); + + zos.putNextEntry(new ZipEntry(subDir + fileName)); + zos.write(mapperYaml.writeValueAsBytes(ops)); + zos.closeEntry(); + } + private byte[] convertSequenceToPolicy(byte[] content) throws Exception { if (content != null && content.length > 0) { Pattern pattern = Pattern.compile("]*>(.*?)", Pattern.DOTALL); diff --git a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java index 2b3a32b..ea42ae3 100644 --- a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java +++ b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java @@ -152,8 +152,8 @@ public class ApiDefinitionMapper { if (oldApi != null && oldApi.getInSequence() != null && !oldApi.getInSequence().isEmpty()) { ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy(); requestPolicy.setPolicyName(oldApi.getInSequence()); - requestPolicy.setPolicyType(""); - requestPolicy.setPolicyVersion(""); + requestPolicy.setPolicyType("api"); + requestPolicy.setPolicyVersion("v1"); requestPolicy.setPolicyId(""); requestPolicy.setParameters(Collections.emptyMap()); apiPolicies.setRequest(List.of(requestPolicy)); @@ -163,7 +163,7 @@ public class ApiDefinitionMapper { if (oldApi != null && oldApi.getOutSequence() != null && !oldApi.getOutSequence().isEmpty()) { ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy(); requestPolicy.setPolicyName(oldApi.getOutSequence()); - requestPolicy.setPolicyType("common"); + requestPolicy.setPolicyType("api"); requestPolicy.setPolicyVersion("v1"); requestPolicy.setPolicyId(""); requestPolicy.setParameters(Collections.emptyMap()); @@ -174,7 +174,7 @@ public class ApiDefinitionMapper { if (oldApi != null && oldApi.getFaultSequence() != null && !oldApi.getFaultSequence().isEmpty()) { ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy(); requestPolicy.setPolicyName(oldApi.getFaultSequence()); - requestPolicy.setPolicyType("common"); + requestPolicy.setPolicyType("api"); requestPolicy.setPolicyVersion("v1"); requestPolicy.setPolicyId(""); requestPolicy.setParameters(Collections.emptyMap()); diff --git a/src/main/java/cz/trask/migration/model/OperationPolicySpecification45.java b/src/main/java/cz/trask/migration/model/OperationPolicySpecification45.java new file mode 100644 index 0000000..a94b0d7 --- /dev/null +++ b/src/main/java/cz/trask/migration/model/OperationPolicySpecification45.java @@ -0,0 +1,35 @@ +package cz.trask.migration.model; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class OperationPolicySpecification45 { + + private String type; + private String version; + private Data data; + + @lombok.Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Data { + + private String category; + private String name; + private String version; // version of the policy itself + private String displayName; + private String description; + + private List applicableFlows; + private List supportedGateways; + private List supportedApiTypes; + + private List policyAttributes = new ArrayList<>(); + + } +}