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