summaryrefslogtreecommitdiffstats
path: root/dcaedt_tools/src
diff options
context:
space:
mode:
Diffstat (limited to 'dcaedt_tools/src')
-rw-r--r--dcaedt_tools/src/main/java/json/templateInfo/NodeToDelete.java30
-rw-r--r--dcaedt_tools/src/main/java/json/templateInfo/TemplateInfo.java20
-rw-r--r--dcaedt_tools/src/main/java/tools/DeployTemplate.java58
-rw-r--r--dcaedt_tools/src/main/java/tools/ItemAndAlias.java20
-rw-r--r--dcaedt_tools/src/main/java/tools/LoggerError.java5
-rw-r--r--dcaedt_tools/src/main/java/tools/Main.java6
-rw-r--r--dcaedt_tools/src/main/java/tools/NodeData.java12
-rw-r--r--dcaedt_tools/src/main/java/tools/TemplateContainer.java136
-rw-r--r--dcaedt_tools/src/main/java/utilities/DcaeRestClient.java7
-rw-r--r--dcaedt_tools/src/main/java/utilities/IDcaeRestClient.java2
-rw-r--r--dcaedt_tools/src/main/resources/conf/config.json252
-rw-r--r--dcaedt_tools/src/test/java/BaseTest.java14
-rw-r--r--dcaedt_tools/src/test/java/DeployTemplateTest.java2
-rw-r--r--dcaedt_tools/src/test/java/TemplateContainerTest.java32
14 files changed, 478 insertions, 118 deletions
diff --git a/dcaedt_tools/src/main/java/json/templateInfo/NodeToDelete.java b/dcaedt_tools/src/main/java/json/templateInfo/NodeToDelete.java
new file mode 100644
index 0000000..f79be40
--- /dev/null
+++ b/dcaedt_tools/src/main/java/json/templateInfo/NodeToDelete.java
@@ -0,0 +1,30 @@
+package json.templateInfo;
+
+import com.google.gson.annotations.SerializedName;
+
+import javax.annotation.Generated;
+
+@Generated("net.hexar.json2pojo")
+public class NodeToDelete {
+
+ @SerializedName("type")
+ private String type;
+ @SerializedName("nodeName")
+ private String nodeName;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getNodeName() {
+ return nodeName;
+ }
+
+ public void setNodeName(String nodeName) {
+ this.nodeName = nodeName;
+ }
+}
diff --git a/dcaedt_tools/src/main/java/json/templateInfo/TemplateInfo.java b/dcaedt_tools/src/main/java/json/templateInfo/TemplateInfo.java
index c34aaef..c7e69db 100644
--- a/dcaedt_tools/src/main/java/json/templateInfo/TemplateInfo.java
+++ b/dcaedt_tools/src/main/java/json/templateInfo/TemplateInfo.java
@@ -17,8 +17,12 @@ public class TemplateInfo {
private String Description;
@SerializedName("name")
private String Name;
+ @SerializedName("flowType")
+ private String FlowType;
@SerializedName("relations")
private List<Relation> Relations;
+ @SerializedName("nodesToDelete")
+ private List<NodeToDelete> NodesToDelete;
@SerializedName("subCategory")
private String SubCategory;
@SerializedName("updateIfExist")
@@ -56,6 +60,22 @@ public class TemplateInfo {
Name = name;
}
+ public String getFlowType() {
+ return FlowType;
+ }
+
+ public void setFlowType(String flowType) {
+ FlowType = flowType;
+ }
+
+ public List<NodeToDelete> getNodesToDelete() {
+ return NodesToDelete;
+ }
+
+ public void setNodesToDelete(List<NodeToDelete> nodesToDelete) {
+ NodesToDelete = nodesToDelete;
+ }
+
public List<Relation> getRelations() {
return Relations;
}
diff --git a/dcaedt_tools/src/main/java/tools/DeployTemplate.java b/dcaedt_tools/src/main/java/tools/DeployTemplate.java
index d5c368f..d319542 100644
--- a/dcaedt_tools/src/main/java/tools/DeployTemplate.java
+++ b/dcaedt_tools/src/main/java/tools/DeployTemplate.java
@@ -29,10 +29,18 @@ public class DeployTemplate {
}
public void deploy(Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap) {
- List<ResourceDetailed> vfcmtList = dcaeRestClient.getAllVfcmts();
+ ArrayList<ResourceDetailed> vfcmtList = new ArrayList();
+ List<ResourceDetailed> regularVfcmtList = dcaeRestClient.getAllVfcmts();
+ if (regularVfcmtList != null) {
+ vfcmtList.addAll(regularVfcmtList);
+ }
+ List<ResourceDetailed> baseVfcmtList = dcaeRestClient.getAllBaseVfcmts();
+ if (baseVfcmtList != null) {
+ vfcmtList.addAll(baseVfcmtList);
+ }
List<TemplateInfo> updatedTemplateInfos = new ArrayList<>();
- vfcmtList.stream().forEach(vfcmt ->
+ vfcmtList.forEach(vfcmt ->
templateInfoToJsonObjectMap.keySet().stream().filter(templateInfo -> templateInfo.getName().equalsIgnoreCase(vfcmt.getName())).forEach(templateInfo -> {
update(vfcmt, templateInfo, templateInfoToJsonObjectMap.get(templateInfo));
updatedTemplateInfos.add(templateInfo);
@@ -47,9 +55,17 @@ public class DeployTemplate {
private void verify(Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap) {
AtomicInteger foundCount = new AtomicInteger();
debugLogger.log("Starting verify deployment");
- List<ResourceDetailed> vfcmtList = dcaeRestClient.getAllVfcmts();
+ ArrayList<ResourceDetailed> vfcmtList = new ArrayList();
+ List<ResourceDetailed> regularVfcmtList = dcaeRestClient.getAllVfcmts();
+ if (regularVfcmtList != null) {
+ vfcmtList.addAll(regularVfcmtList);
+ }
+ List<ResourceDetailed> baseVfcmtList = dcaeRestClient.getAllBaseVfcmts();
+ if (baseVfcmtList != null) {
+ vfcmtList.addAll(baseVfcmtList);
+ }
- templateInfoToJsonObjectMap.keySet().stream()
+ templateInfoToJsonObjectMap.keySet()
.forEach(templateInfo -> vfcmtList.stream()
.filter(vfcmt -> vfcmt.getName().equalsIgnoreCase(templateInfo.getName()))
.forEach(vfcmt -> foundCount.getAndIncrement()));
@@ -73,8 +89,6 @@ public class DeployTemplate {
createVFCMTRequest.setCategory(templateInfo.getCategory());
ResourceDetailed vfcmt = dcaeRestClient.createResource(createVFCMTRequest);
- jsonObject.addProperty("cid", vfcmt.getUuid());
-
saveAndCertify(jsonObject, vfcmt);
} catch (HttpServerErrorException e) {
@@ -87,13 +101,13 @@ public class DeployTemplate {
private void update(ResourceDetailed vfcmt, TemplateInfo templateInfo, JsonObject jsonObject) {
ResourceDetailed checkedoutVfcmt = vfcmt;
try {
- Boolean checkoutChecking = checkUserIfResourceCheckedOut(dcaeRestClient.getUserId(), vfcmt);
- if (checkoutChecking != null && checkoutChecking) {
+ boolean vfcmtIsCheckedOut = isCheckedOut(vfcmt);
+ if (vfcmtIsCheckedOut && differentUserCannotCheckout(dcaeRestClient.getUserId(), vfcmt)){
report.addErrorMessage(FAILED_UPDATE_VFCMT + vfcmt.getName() + ", cannot checkout vfcmt");
return;
}
if (templateInfo.getUpdateIfExist()) {
- if (checkoutChecking == null) {
+ if (!vfcmtIsCheckedOut) {
checkedoutVfcmt = dcaeRestClient.checkoutVfcmt(vfcmt.getUuid());
}
if (checkedoutVfcmt != null) {
@@ -114,6 +128,7 @@ public class DeployTemplate {
}
private void saveAndCertify(JsonObject jsonObject, ResourceDetailed checkedoutVfcmt) {
+ jsonObject.addProperty("cid", checkedoutVfcmt.getUuid());
if (saveCompositionAndCertify(checkedoutVfcmt, jsonObject)) {
report.addUpdatedMessage("vfcmt: " + checkedoutVfcmt.getName() + " updated successfully");
} else {
@@ -140,18 +155,19 @@ public class DeployTemplate {
return true;
}
- private Boolean checkUserIfResourceCheckedOut(String userId, ResourceDetailed asset) {
- if (DcaeBeConstants.LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT == DcaeBeConstants.LifecycleStateEnum.findState(asset.getLifecycleState())) {
- String lastUpdaterUserId = asset.getLastUpdaterUserId();
- if (lastUpdaterUserId != null && !lastUpdaterUserId.equals(userId)) {
- String msg = "User conflicts. Operation not allowed for user "+userId+" on resource checked out by "+lastUpdaterUserId;
- report.addErrorMessage(msg);
- errLogger.log(msg);
- return true;
- } else {
- return false;
- }
+ private boolean isCheckedOut(ResourceDetailed asset) {
+ return DcaeBeConstants.LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT == DcaeBeConstants.LifecycleStateEnum.findState(asset.getLifecycleState());
+ }
+
+ private Boolean differentUserCannotCheckout(String userId, ResourceDetailed asset) {
+ String lastUpdaterUserId = asset.getLastUpdaterUserId();
+ if (lastUpdaterUserId != null && !lastUpdaterUserId.equals(userId)) {
+ String msg = "User conflicts. Operation not allowed for user "+userId+" on resource checked out by "+lastUpdaterUserId;
+ report.addErrorMessage(msg);
+ errLogger.log(msg);
+ return true;
+ } else {
+ return false;
}
- return null;
}
}
diff --git a/dcaedt_tools/src/main/java/tools/ItemAndAlias.java b/dcaedt_tools/src/main/java/tools/ItemAndAlias.java
new file mode 100644
index 0000000..e282a58
--- /dev/null
+++ b/dcaedt_tools/src/main/java/tools/ItemAndAlias.java
@@ -0,0 +1,20 @@
+package tools;
+
+import json.response.ItemsResponse.Item;
+
+public class ItemAndAlias {
+ private final Item item;
+ private final String alias;
+ public ItemAndAlias(Item item, String alias) {
+ this.item = item;
+ this.alias = alias;
+ }
+
+ public Item getItem() {
+ return item;
+ }
+
+ public String getAlias() {
+ return alias;
+ }
+}
diff --git a/dcaedt_tools/src/main/java/tools/LoggerError.java b/dcaedt_tools/src/main/java/tools/LoggerError.java
index 325bfc1..9ec985b 100644
--- a/dcaedt_tools/src/main/java/tools/LoggerError.java
+++ b/dcaedt_tools/src/main/java/tools/LoggerError.java
@@ -10,4 +10,9 @@ public class LoggerError {
public void log(String logLine) {
System.err.println(logLine);
}
+
+ public void log(String logLine, Exception e) {
+ System.err.println(logLine);
+ e.printStackTrace();
+ }
}
diff --git a/dcaedt_tools/src/main/java/tools/Main.java b/dcaedt_tools/src/main/java/tools/Main.java
index 72b6e42..bf02c44 100644
--- a/dcaedt_tools/src/main/java/tools/Main.java
+++ b/dcaedt_tools/src/main/java/tools/Main.java
@@ -61,11 +61,11 @@ public class Main {
debugLogger.log( "VFCMT template deployment completed successfully");
} catch (RuntimeException e) {
- errLogger.log("ERROR - Template deployment failed with error " + e);
+ errLogger.log("ERROR - Template deployment failed with error " + e, e);
} catch (ConnectException e) {
- errLogger.log( "ERROR - Failed connection to server, are you on AT&T network? {}" + e);
+ errLogger.log( "ERROR - Failed connection to server, are you on AT&T network? {}" + e, e);
} catch (IOException e) {
- errLogger.log( "ERROR - Fatal Error! " + e);
+ errLogger.log( "ERROR - Fatal Error! " + e, e);
} finally {
debugLogger.log(report.toString());
}
diff --git a/dcaedt_tools/src/main/java/tools/NodeData.java b/dcaedt_tools/src/main/java/tools/NodeData.java
index f89105b..e9043de 100644
--- a/dcaedt_tools/src/main/java/tools/NodeData.java
+++ b/dcaedt_tools/src/main/java/tools/NodeData.java
@@ -9,13 +9,15 @@ public class NodeData {
private final JsonArray properties;
private final JsonObject typeInfo;
private final String nodeName;
+ private final String aliasBelong;
- NodeData(JsonArray capabilities, JsonArray requirements, JsonArray properties, JsonObject typeInfo, String nodeName) {
+ NodeData(JsonArray capabilities, JsonArray requirements, JsonArray properties, JsonObject typeInfo, String nodeName, String aliasBelong) {
this.capabilities = capabilities;
this.requirements = requirements;
this.properties = properties;
this.typeInfo = typeInfo;
this.nodeName = nodeName;
+ this.aliasBelong = aliasBelong;
}
public JsonArray getCapabilities() {
@@ -37,4 +39,12 @@ public class NodeData {
public String getName() {
return nodeName;
}
+
+ public String getNameWithAlias() {
+ return aliasBelong + "." + nodeName;
+ }
+
+ public String getAliasBelong() {
+ return aliasBelong;
+ }
}
diff --git a/dcaedt_tools/src/main/java/tools/TemplateContainer.java b/dcaedt_tools/src/main/java/tools/TemplateContainer.java
index ee16d22..a5bca1f 100644
--- a/dcaedt_tools/src/main/java/tools/TemplateContainer.java
+++ b/dcaedt_tools/src/main/java/tools/TemplateContainer.java
@@ -6,6 +6,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import json.response.ItemsResponse.Item;
import json.templateInfo.Composition;
+import json.templateInfo.NodeToDelete;
import json.templateInfo.Relation;
import json.templateInfo.TemplateInfo;
import org.apache.commons.lang3.StringUtils;
@@ -19,6 +20,7 @@ import java.util.concurrent.atomic.AtomicReference;
public class TemplateContainer {
private static final String NODES = "nodes";
private static final String RELATIONSHIP = "relationship";
+ public static final String ASSIGNMENT = "assignment";
private static long nidCounter = 0;
private final IReport report;
private final IDcaeRestClient dcaeRestClient;
@@ -34,12 +36,12 @@ public class TemplateContainer {
this.elementsByFolderNames = elementsByFolderNames;
}
- private List<Item> findTemplate(TemplateInfo templateInfo) {
- AtomicReference<List<Item>> items = new AtomicReference<>();
+ private List<ItemAndAlias> findTemplate(TemplateInfo templateInfo) {
+ AtomicReference<List<ItemAndAlias>> items = new AtomicReference<>();
items.set(new ArrayList<>());
elementsByFolderNames.keySet().stream()
.forEach(folderName -> {
- List<Item> itemList = returnMatchedTemplate(folderName, templateInfo);
+ List<ItemAndAlias> itemList = returnMatchedTemplate(folderName, templateInfo);
items.get().addAll(itemList);
});
if (items.get().size() == templateInfo.getComposition().size()) {
@@ -48,13 +50,13 @@ public class TemplateContainer {
return new ArrayList<>();
}
- private List<Item> returnMatchedTemplate(String folderName, TemplateInfo templateInfo) {
- List<Item> items = new ArrayList<>();
+ private List<ItemAndAlias> returnMatchedTemplate(String folderName, TemplateInfo templateInfo) {
+ List<ItemAndAlias> items = new ArrayList<>();
elementsByFolderNames.get(folderName).stream()
.forEach(item -> templateInfo.getComposition().stream().forEach(composition ->
{
if (composition.getType().equalsIgnoreCase(item.getName())) {
- items.add(item);
+ items.add(new ItemAndAlias(item, composition.getAlias()));
}
}));
return items;
@@ -64,7 +66,7 @@ public class TemplateContainer {
public Map<TemplateInfo, JsonObject> getCdumps() {
Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap = new HashMap<>();
for (TemplateInfo templateInfo : templateInfos) {
- List<Item> items = findTemplate(templateInfo);
+ List<ItemAndAlias> items = findTemplate(templateInfo);
if (items == null || items.isEmpty()) {
report.addErrorMessage("vfcmt: " + templateInfo.getName() + ". DCAE Component not found");
continue;
@@ -74,37 +76,35 @@ public class TemplateContainer {
return templateInfoToJsonObjectMap;
}
- private JsonObject getCdumpJsonObject(List<Item> items, TemplateInfo templateInfo) {
+ private JsonObject getCdumpJsonObject(List<ItemAndAlias> ItemsAndAlias, TemplateInfo templateInfo) {
JsonObject cdumpJsonObject = generateCdumpInput(templateInfo);
- Map<Item, Map<String, NodeData>> itemMapHashMap = new HashMap<>();
+ Map<ItemAndAlias, Map<String, NodeData>> itemMapHashMap = new HashMap<>();
JsonArray relationsJsonArray = new JsonArray();
- for (Item item : items) {
+ for (ItemAndAlias itemAndAlias : ItemsAndAlias) {
+ Item item = itemAndAlias.getItem();
debugLogger.log("Creating cdump for item: " + item.getName());
JsonArray jsonArrayNode = cdumpJsonObject.getAsJsonArray(NODES);
JsonParser jsonParser = new JsonParser();
JsonArray allNodeTemplates = jsonParser.parse(dcaeRestClient.getItemModel(item.getItemId())).getAsJsonObject().get("data").getAsJsonObject().get("model").getAsJsonObject().get(NODES).getAsJsonArray();
Map<String, NodeData> stringRelationsDataMap = new HashMap<>();
for (JsonElement nodeElement : allNodeTemplates) {
+ if (checkIfNeedToSkip(templateInfo.getNodesToDelete(), nodeElement, item.getName())) {
+ continue;
+ }
JsonObject responseModelJson = nodeElement.getAsJsonObject();
JsonObject responseTypeInfoJson = jsonParser.parse(dcaeRestClient.getItemType(item.getItemId(), responseModelJson.get("type").getAsString())).getAsJsonObject().get("data").getAsJsonObject().get("type").getAsJsonObject();
- JsonObject jsonObjectElement = newVfcmtJSON(responseModelJson.get("name").getAsString(), item.getModels().get(0).getItemId());
+ String nodeName = itemAndAlias.getAlias() + "." + responseModelJson.get("name").getAsString();
+ JsonObject jsonObjectElement = newNodeTemplate(nodeName, item.getModels().get(0).getItemId());
jsonObjectElement.addProperty("id", responseTypeInfoJson.get("itemId").getAsString().split("/")[0]);
String nid = "n." + new Date().getTime() + "." + nidCounter++;
jsonObjectElement.addProperty("nid", nid);
- NodeData nodeData = createNodeData(responseModelJson, responseTypeInfoJson, responseModelJson.get("name").getAsString());
+ NodeData nodeData = createNodeData(responseModelJson, responseTypeInfoJson, responseModelJson.get("name").getAsString(), itemAndAlias.getAlias());
+ fillPropertiesValue(nodeData);
stringRelationsDataMap.put(nid, nodeData);
- jsonObjectElement.add("capabilities", nodeData.getCapabilities());
- jsonObjectElement.add("requirements", nodeData.getRequirements());
- jsonObjectElement.add("properties", nodeData.getProperties());
- jsonObjectElement.add("typeinfo", nodeData.getTypeInfo());
- JsonObject typeJsonObject = new JsonObject();
- typeJsonObject.addProperty("name", responseModelJson.get("type").getAsString());
- jsonObjectElement.add("type", typeJsonObject);
- JsonElement ndataElement = createNData(responseModelJson.get("name").getAsString(), nid);
- jsonObjectElement.add("ndata", ndataElement);
+ addCdumpData(responseModelJson, jsonObjectElement, nid, nodeData);
jsonArrayNode.add(jsonObjectElement);
}
- itemMapHashMap.put(item, stringRelationsDataMap);
+ itemMapHashMap.put(itemAndAlias, stringRelationsDataMap);
}
JsonElement jsonElement = createTemplateInfoRelations(templateInfo, itemMapHashMap);
if (jsonElement != null && jsonElement.isJsonArray()) {
@@ -123,6 +123,56 @@ public class TemplateContainer {
return cdumpJsonObject;
}
+ private void addCdumpData(JsonObject responseModelJson, JsonObject jsonObjectElement, String nid, NodeData nodeData) {
+ jsonObjectElement.add("capabilities", nodeData.getCapabilities());
+ jsonObjectElement.add("requirements", nodeData.getRequirements());
+ jsonObjectElement.add("properties", nodeData.getProperties());
+ jsonObjectElement.add("typeinfo", nodeData.getTypeInfo());
+ JsonObject typeJsonObject = new JsonObject();
+ typeJsonObject.addProperty("name", responseModelJson.get("type").getAsString());
+ jsonObjectElement.add("type", typeJsonObject);
+ JsonElement ndataElement = createNData(responseModelJson.get("name").getAsString(), nid);
+ jsonObjectElement.add("ndata", ndataElement);
+ }
+
+ private void fillPropertiesValue(NodeData nodeData) {
+ for (Iterator<JsonElement> iterator = nodeData.getProperties().iterator(); iterator.hasNext(); ) {
+ JsonElement property = iterator.next();
+ if (!property.isJsonObject()) {
+ continue;
+ }
+ if (property.getAsJsonObject().has("value")) {
+ continue;
+ }
+ JsonElement jsonElement = new JsonObject();
+ if (property.getAsJsonObject().has(ASSIGNMENT) &&
+ property.getAsJsonObject().get(ASSIGNMENT).getAsJsonObject().has("value")) {
+ jsonElement = property.getAsJsonObject().get(ASSIGNMENT).getAsJsonObject().get("value");
+ } else if (property.getAsJsonObject().has("default")) {
+ jsonElement = property.getAsJsonObject().get("default");
+ } else if (property.getAsJsonObject().has(ASSIGNMENT) &&
+ property.getAsJsonObject().get(ASSIGNMENT).getAsJsonObject().has("input") &&
+ property.getAsJsonObject().get(ASSIGNMENT).getAsJsonObject().get("input").getAsJsonObject().has("default")) {
+ jsonElement = property.getAsJsonObject().get(ASSIGNMENT).getAsJsonObject().get("input").getAsJsonObject().get("default");
+ }
+ property.getAsJsonObject().add("value", jsonElement);
+ }
+
+ }
+
+ private boolean checkIfNeedToSkip(List<NodeToDelete> nodesToDelete, JsonElement nodeElement, String itemName) {
+ return nodesToDelete != null && nodesToDelete.stream().anyMatch(nodeToDelete -> {
+ if (nodeToDelete.getType().equalsIgnoreCase(itemName)) {
+ String nodeName = nodeElement.getAsJsonObject().get("name").toString().replace("\"", "");
+ if (nodeToDelete.getNodeName().equalsIgnoreCase(nodeName)) {
+ debugLogger.log("Skipping node: " + nodeToDelete.getNodeName() + ", Item name: " + itemName);
+ return true;
+ }
+ }
+ return false;
+ });
+ }
+
//We need it only for printing the relations (front end requirement)
private JsonElement createNData(String name, String nid) {
JsonObject ndataElement = new JsonObject();
@@ -138,9 +188,9 @@ public class TemplateContainer {
return ndataElement;
}
- private JsonElement createSelfRelations(Map<Item, Map<String, NodeData>> nodeDataByNidByItem) {
+ private JsonElement createSelfRelations(Map<ItemAndAlias, Map<String, NodeData>> nodeDataByNidByItem) {
JsonArray jsonArrayRelations = new JsonArray();
- for (Item item : nodeDataByNidByItem.keySet()) {
+ for (ItemAndAlias item : nodeDataByNidByItem.keySet()) {
Map<String, NodeData> nodeDataByNid = nodeDataByNidByItem.get(item);
if (nodeDataByNid.size() < 2) {
continue;
@@ -173,12 +223,12 @@ public class TemplateContainer {
NodeData fromNode = nodeDataByNidByItem.get(item).get(nidListByRequirement.get(requirement));
relationElement.addProperty("rid", "ink." + nidListByRequirement.get(requirement) + "." + nidCounter++);
relationElement.addProperty("n1", nidListByRequirement.get(requirement));
- relationElement.addProperty("name1", fromNode.getName());
+ relationElement.addProperty("name1", fromNode.getNameWithAlias());
JsonObject metaData = new JsonObject();
metaData.addProperty("n1", nidListByRequirement.get(requirement));
metaData.addProperty("p1", requirement.get("name").toString().replaceAll("\"", ""));
relationElement.addProperty("n2", toNId);
- relationElement.addProperty("name2", toNodeName);
+ relationElement.addProperty("name2", fromNode.getAliasBelong() + "." + toNodeName);
metaData.addProperty("n2", toNId);
String capabilityFullName = requirement.get("capability").getAsJsonObject().get("name").toString();
String capabilityShortName = StringUtils.substringAfterLast(capabilityFullName, ".");
@@ -202,14 +252,14 @@ public class TemplateContainer {
return jsonArrayRelations;
}
- private NodeData createNodeData(JsonObject responseModelJson, JsonObject responseTypeInfoJson, String nodeName) {
+ private NodeData createNodeData(JsonObject responseModelJson, JsonObject responseTypeInfoJson, String nodeName, String aliasBelong) {
JsonArray capabilities = responseModelJson.get("capabilities").getAsJsonArray();
JsonArray requirements = responseModelJson.get("requirements").getAsJsonArray();
JsonArray properties = responseModelJson.get("properties").getAsJsonArray();
- return new NodeData(capabilities, requirements, properties, responseTypeInfoJson, nodeName);
+ return new NodeData(capabilities, requirements, properties, responseTypeInfoJson, nodeName, aliasBelong);
}
- private JsonArray createTemplateInfoRelations(TemplateInfo templateInfo, Map<Item, Map<String, NodeData>> nodeDataByNidByItem) {
+ private JsonArray createTemplateInfoRelations(TemplateInfo templateInfo, Map<ItemAndAlias, Map<String, NodeData>> nodeDataByNidByItem) {
JsonArray jsonArrayRelations = new JsonArray();
if (templateInfo.getRelations() == null) {
@@ -226,19 +276,26 @@ public class TemplateContainer {
String toComponentNodeName = StringUtils.substringAfterLast(toComponent, ".");
boolean findTo = false;
boolean findFrom = false;
- for (Item item : nodeDataByNidByItem.keySet()) {
+ for (ItemAndAlias item : nodeDataByNidByItem.keySet()) {
Map<String, NodeData> nodeDataByNid = nodeDataByNidByItem.get(item);
for (String nid : nodeDataByNid.keySet()) {
NodeData currentNodeData = nodeDataByNid.get(nid);
Optional<Composition> isFoundComposition = templateInfo.getComposition().stream()
- .filter(element -> fromComponentAlias.equalsIgnoreCase(element.getAlias()) && element.getType().equalsIgnoreCase(item.getName()) && fromComponentNodeName.equalsIgnoreCase(currentNodeData.getName())).findAny();
+ .filter(element -> fromComponentAlias.equalsIgnoreCase(element.getAlias())
+ && element.getAlias().equalsIgnoreCase(currentNodeData.getAliasBelong())
+ && element.getAlias().equalsIgnoreCase(item.getAlias())
+ && element.getType().equalsIgnoreCase(item.getItem().getName())
+ && fromComponentNodeName.equalsIgnoreCase(currentNodeData.getName())).findAny();
if (isFoundComposition.isPresent()) {
boolean isFound = findNode(relation.getFromRequirement(), currentNodeData.getRequirements());
if (isFound) {
+ if (findFrom) {
+ report.addErrorMessage("Found 2 match nodes, using the second one. from relation: " + relation.getFromRequirement());
+ }
relationElement.addProperty("rid", "ink." + nid + "." + nidCounter++);
relationElement.addProperty("n1", nid);
- relationElement.addProperty("name1", currentNodeData.getName());
+ relationElement.addProperty("name1", currentNodeData.getNameWithAlias());
metaData.addProperty("n1", nid);
metaData.addProperty("p1", relation.getFromRequirement());
JsonArray relationship = new JsonArray();
@@ -257,12 +314,19 @@ public class TemplateContainer {
}
isFoundComposition = templateInfo.getComposition().stream()
- .filter(element -> toComponentAlias.equalsIgnoreCase(element.getAlias()) && element.getType().equalsIgnoreCase(item.getName()) && toComponentNodeName.equalsIgnoreCase(currentNodeData.getName())).findAny();
+ .filter(element -> toComponentAlias.equalsIgnoreCase(element.getAlias())
+ && element.getAlias().equalsIgnoreCase(currentNodeData.getAliasBelong())
+ && element.getAlias().equalsIgnoreCase(item.getAlias())
+ && element.getType().equalsIgnoreCase(item.getItem().getName())
+ && toComponentNodeName.equalsIgnoreCase(currentNodeData.getName())).findAny();
if (isFoundComposition.isPresent()) {
boolean isFound = findNode(relation.getToCapability(), currentNodeData.getCapabilities());
if (isFound) {
+ if (findTo) {
+ report.addErrorMessage("Found 2 match nodes, using the second one. to relation: " + relation.getToCapability());
+ }
relationElement.addProperty("n2", nid);
- relationElement.addProperty("name2", currentNodeData.getName());
+ relationElement.addProperty("name2", currentNodeData.getNameWithAlias());
metaData.addProperty("n2", nid);
metaData.addProperty("p2", relation.getToCapability());
findTo = true;
@@ -307,7 +371,7 @@ public class TemplateContainer {
return false;
}
- private JsonObject newVfcmtJSON(String name, String description) {
+ private JsonObject newNodeTemplate(String name, String description) {
JsonObject json = new JsonObject();
json.addProperty("name", name);
json.addProperty("description", description);
@@ -317,7 +381,7 @@ public class TemplateContainer {
private JsonObject generateCdumpInput(TemplateInfo templateInfo) {
JsonObject json = new JsonObject();
json.addProperty("version", 0);
- json.addProperty("flowType", templateInfo.getName());
+ json.addProperty("flowType", templateInfo.getFlowType());
json.add(NODES, new JsonArray());
json.add("inputs", new JsonArray());
diff --git a/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java b/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java
index 5e81038..7e991d7 100644
--- a/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java
+++ b/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java
@@ -17,6 +17,7 @@ import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.PostConstruct;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -74,6 +75,12 @@ public class DcaeRestClient implements IDcaeRestClient {
}
@Override
+ public List<ResourceDetailed> getAllBaseVfcmts() {
+ String url = buildRequestPath("/getResourcesByMonitoringTemplateCategory");
+ return Arrays.asList(client.getForObject(url, ResourceDetailed[].class));
+ }
+
+ @Override
public ResourceDetailed createResource(CreateVFCMTRequest resource) {
String url = buildRequestPath(CREATE_VFCMT);
return client.postForObject(url, new HttpEntity<>(resource, postResourceHeaders(credential.getUsername())), ResourceDetailed.class);
diff --git a/dcaedt_tools/src/main/java/utilities/IDcaeRestClient.java b/dcaedt_tools/src/main/java/utilities/IDcaeRestClient.java
index 677175b..bfe3595 100644
--- a/dcaedt_tools/src/main/java/utilities/IDcaeRestClient.java
+++ b/dcaedt_tools/src/main/java/utilities/IDcaeRestClient.java
@@ -15,6 +15,8 @@ public interface IDcaeRestClient {
List<ResourceDetailed> getAllVfcmts();
+ List<ResourceDetailed> getAllBaseVfcmts();
+
ResourceDetailed createResource(CreateVFCMTRequest resource);
ResourceDetailed checkoutVfcmt(String vfcmtUuid);
diff --git a/dcaedt_tools/src/main/resources/conf/config.json b/dcaedt_tools/src/main/resources/conf/config.json
index 5b0f542..4ca81cc 100644
--- a/dcaedt_tools/src/main/resources/conf/config.json
+++ b/dcaedt_tools/src/main/resources/conf/config.json
@@ -1,51 +1,207 @@
{
"templateInfo": [{
- "name": "SNMP Fault",
- "description": "SNMP FM with Map-Supplement-Enrich",
- "category": "Template",
- "subCategory":"Base Monitoring Template",
- "updateIfExist": "true",
- "composition": [{
- "type": "Map",
- "alias": "mapper"
- }, {
- "type": "Supplement",
- "alias": "sup"
- }, {
- "type": "Enrich",
- "alias": "enrich"
- }]
- },
- {
- "name": "FOI",
- "description": "FOI SFTP with FOI-Collector and Docker-Map",
- "category": "Template",
- "subCategory":"Base Monitoring Template",
- "updateIfExist": "true",
- "composition": [{
- "type": "foi",
- "alias": "collector"
- }, {
- "type": "DockerMap",
- "alias": "map"
- }],
- "relations": [{
- "fromComponent": "collector.foi",
- "fromRequirement": "stream_publish_0",
- "toComponent": "map.feed0",
- "toCapability": "feed"
- }]
- },
- {
- "name": "Syslog non-VES Collector",
- "description": "Syslog flow with Syslog Collector",
- "category": "Template",
- "subCategory": "Base Monitoring Template",
- "updateIfExist": "true",
- "composition": [{
- "type": "Syslog",
- "alias": "collector"
- }]
- }
- ]
+ "name": "Syslog Collector Template",
+ "flowType": "Syslog Collector",
+ "description": "Syslog Collector",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "SyslogCollector",
+ "alias": "Syslog"
+ }, {
+ "type": "Existing Topic",
+ "alias": "eTopic"
+ }],
+ "relations": [{
+ "fromComponent": "Syslog.SyslogCollector",
+ "fromRequirement": "stream_publish_0",
+ "toComponent": "eTopic.topic",
+ "toCapability": "topic"
+ }],
+ "nodesToDelete": [
+ {
+ "type": "SyslogCollector",
+ "nodeName": "topic0"
+ }]
+ },{
+ "name": "Syslog MSEA Template",
+ "flowType": "Syslog MSEA",
+ "description": "Syslog MSEA",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "Map",
+ "alias": "Map"
+ }, {
+ "type": "Supplement",
+ "alias": "Sup"
+ }, {
+ "type": "Enrich",
+ "alias": "Enr"
+ }, {
+ "type": "Alert",
+ "alias": "Ale"
+ }],
+ "relations": [{
+ "fromComponent": "Sup.Supplement",
+ "fromRequirement": "dependency",
+ "toComponent": "Map.Map",
+ "toCapability": "feature"
+ },{
+ "fromComponent": "Enr.Enrich",
+ "fromRequirement": "dependency",
+ "toComponent": "Sup.Supplement",
+ "toCapability": "feature"
+ },{
+ "fromComponent": "Ale.Alert",
+ "fromRequirement": "dependency",
+ "toComponent": "Enr.Enrich",
+ "toCapability": "feature"
+ }]
+ },{
+ "name": "Status Poller Collector Template",
+ "flowType": "Status Poller Collector",
+ "description": "Status Poller Collector",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "StatusPoller",
+ "alias": "sPoller"
+ }, {
+ "type": "Existing Topic",
+ "alias": "eTopic0"
+ }],
+ "relations": [{
+ "fromComponent": "sPoller.StatusPoller",
+ "fromRequirement": "stream_publish_0",
+ "toComponent": "eTopic0.topic",
+ "toCapability": "topic"
+ }],
+ "nodesToDelete": [
+ {
+ "type": "StatusPoller",
+ "nodeName": "topic0"
+ }]
+ }, {
+ "name": "Status Poller MSE Template",
+ "flowType": "Status Poller MSE",
+ "description": "Status Poller MSE",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "Map",
+ "alias": "Map"
+ }, {
+ "type": "Supplement",
+ "alias": "Sup"
+ }, {
+ "type": "Enrich",
+ "alias": "Enr"
+ }],
+ "relations": [{
+ "fromComponent": "Sup.Supplement",
+ "fromRequirement": "dependency",
+ "toComponent": "Map.Map",
+ "toCapability": "feature"
+ },{
+ "fromComponent": "Enr.Enrich",
+ "fromRequirement": "dependency",
+ "toComponent": "Sup.Supplement",
+ "toCapability": "feature"
+ }]
+ }, {
+ "name": "FOI Collector Template",
+ "flowType": "FOI Collector",
+ "description": "FOI Collector",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "FOICollector",
+ "alias": "fCollector"
+ }, {
+ "type": "Existing Feed",
+ "alias": "eFeed"
+ }],
+ "relations": [{
+ "fromComponent": "fCollector.FoiSftp",
+ "fromRequirement": "stream_publish_0",
+ "toComponent": "eFeed.feed",
+ "toCapability": "feed"
+ }],
+ "nodesToDelete": [
+ {
+ "type": "FOICollector",
+ "nodeName": "feed0"
+ }]
+ }, {
+ "name": "SNMP MSE Template",
+ "flowType": "SNMP MSE",
+ "description": "SNMP MSE",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "Map",
+ "alias": "Map"
+ }, {
+ "type": "Supplement",
+ "alias": "Sup"
+ }, {
+ "type": "Enrich",
+ "alias": "Enr"
+ }],
+ "relations": [{
+ "fromComponent": "Sup.Supplement",
+ "fromRequirement": "dependency",
+ "toComponent": "Map.Map",
+ "toCapability": "feature"
+ },{
+ "fromComponent": "Enr.Enrich",
+ "fromRequirement": "dependency",
+ "toComponent": "Sup.Supplement",
+ "toCapability": "feature"
+ }]
+ }, {
+ "name": "Docker Map Template",
+ "flowType": "Docker Map",
+ "description": "Docker Map",
+ "category": "Template",
+ "subCategory":"Base Monitoring Template",
+ "updateIfExist": "false",
+ "composition": [{
+ "type": "DockerMap",
+ "alias": "dMp"
+ }, {
+ "type": "Existing Feed",
+ "alias": "eFeed"
+ }, {
+ "type": "Existing Topic",
+ "alias": "eTopic"
+ }],
+ "relations": [{
+ "fromComponent": "dMp.DockerMap",
+ "fromRequirement": "stream_subscribe_0",
+ "toComponent": "eFeed.feed",
+ "toCapability": "feed"
+ }, {
+ "fromComponent": "dMp.DockerMap",
+ "fromRequirement": "stream_publish_0",
+ "toComponent": "eTopic.topic",
+ "toCapability": "topic"
+ }],
+ "nodesToDelete": [
+ {
+ "type": "DockerMap",
+ "nodeName": "feed0"
+ },
+ {
+ "type": "DockerMap",
+ "nodeName": "topic0"
+ }]
+ }]
} \ No newline at end of file
diff --git a/dcaedt_tools/src/test/java/BaseTest.java b/dcaedt_tools/src/test/java/BaseTest.java
index 49534a5..f618f2d 100644
--- a/dcaedt_tools/src/test/java/BaseTest.java
+++ b/dcaedt_tools/src/test/java/BaseTest.java
@@ -21,6 +21,7 @@ import static org.mockito.Mockito.when;
abstract class BaseTest {
static final String USER_ID = "userId";
static final String TEMPLATE_INFO_NAME = "templateInfoName";
+ static final String TEMPLATE_INFO_FLOWTYPE = "templateInfoFlowType";
static final String VFCMT_NAME1 = "my vfcmt1";
static final String UUID1 = "my uuid1";
static final String VFCMT_NAME2 = "my vfcmt2";
@@ -127,25 +128,26 @@ abstract class BaseTest {
resourceDetailed.setUuid(UUID3);
resourceDetaileds.add(resourceDetailed);
- List<ResourceDetailed> resourceDetaileds2 = new ArrayList<>();
+ List<ResourceDetailed> resourceDetailed2 = new ArrayList<>();
resourceDetailed = new ResourceDetailed();
resourceDetailed.setName(VFCMT_NAME1);
resourceDetailed.setUuid(UUID1);
resourceDetailed.setLifecycleState("NOT_CERTIFIED_CHECKOUT");
resourceDetailed.setLastUpdaterUserId(USER_ID);
- resourceDetaileds2.add(resourceDetailed);
+ resourceDetailed2.add(resourceDetailed);
resourceDetailed = new ResourceDetailed();
resourceDetailed.setName(VFCMT_NAME2);
resourceDetailed.setUuid(UUID2);
- resourceDetaileds2.add(resourceDetailed);
+ resourceDetailed2.add(resourceDetailed);
resourceDetailed = new ResourceDetailed();
resourceDetailed.setName(VFCMT_NAME3);
resourceDetailed.setUuid(UUID3);
- resourceDetaileds2.add(resourceDetailed);
+ resourceDetailed2.add(resourceDetailed);
resourceDetailed = new ResourceDetailed();
resourceDetailed.setName(TEMPLATE_INFO_NAME);
resourceDetailed.setUuid(UUID3);
- resourceDetaileds2.add(resourceDetailed);
- when(dcaeRestClient.getAllVfcmts()).thenReturn(resourceDetaileds, resourceDetaileds2);
+ resourceDetailed2.add(resourceDetailed);
+ when(dcaeRestClient.getAllVfcmts()).thenReturn(resourceDetaileds, resourceDetailed2);
+ when(dcaeRestClient.getAllBaseVfcmts()).thenReturn(new ArrayList<>());
}
}
diff --git a/dcaedt_tools/src/test/java/DeployTemplateTest.java b/dcaedt_tools/src/test/java/DeployTemplateTest.java
index 3fe0a7d..6a8a019 100644
--- a/dcaedt_tools/src/test/java/DeployTemplateTest.java
+++ b/dcaedt_tools/src/test/java/DeployTemplateTest.java
@@ -26,6 +26,7 @@ public class DeployTemplateTest extends BaseTest {
templateInfoToJsonObjectMap = new HashMap<>();
TemplateInfo templateInfo = new TemplateInfo();
templateInfo.setName(VFCMT_NAME1);
+ templateInfo.setFlowType(TEMPLATE_INFO_FLOWTYPE);
templateInfo.setCategory("category");
templateInfo.setSubCategory("subCategory");
templateInfo.setDescription("description");
@@ -33,6 +34,7 @@ public class DeployTemplateTest extends BaseTest {
templateInfoToJsonObjectMap.put(templateInfo, new JsonObject());
templateInfo = new TemplateInfo();
templateInfo.setName(TEMPLATE_INFO_NAME);
+ templateInfo.setFlowType(TEMPLATE_INFO_FLOWTYPE);
templateInfo.setCategory("category");
templateInfo.setSubCategory("subCategory");
templateInfo.setDescription("description");
diff --git a/dcaedt_tools/src/test/java/TemplateContainerTest.java b/dcaedt_tools/src/test/java/TemplateContainerTest.java
index 7c3d287..b4ddc17 100644
--- a/dcaedt_tools/src/test/java/TemplateContainerTest.java
+++ b/dcaedt_tools/src/test/java/TemplateContainerTest.java
@@ -2,6 +2,7 @@ import com.google.gson.JsonObject;
import json.response.ItemsResponse.Item;
import json.response.ItemsResponse.Model;
import json.templateInfo.Composition;
+import json.templateInfo.NodeToDelete;
import json.templateInfo.Relation;
import json.templateInfo.TemplateInfo;
import org.junit.Assert;
@@ -28,6 +29,7 @@ public class TemplateContainerTest extends BaseTest {
templateInfos = new ArrayList<>();
TemplateInfo templateInfo = new TemplateInfo();
templateInfo.setName(TEMPLATE_INFO_NAME);
+ templateInfo.setFlowType(TEMPLATE_INFO_FLOWTYPE);
Composition composition = new Composition();
composition.setType(ELEMENT_NAME3);
composition.setAlias(ALIAS_NAME3);
@@ -84,10 +86,28 @@ public class TemplateContainerTest extends BaseTest {
}
@Test
+ public void getCdumpsWithDeleteNode_returnOneCdumpWithDeletedNode() {
+ NodeToDelete nodeToDelete = new NodeToDelete();
+ nodeToDelete.setNodeName("SomeNameFromRequirement");
+ nodeToDelete.setType("my element3");
+ templateInfos.get(0).setNodesToDelete(Collections.singletonList(nodeToDelete));
+ templateContainer = new TemplateContainer(report, dcaeRestClient, templateInfos, elementsByFolderNames);
+
+ Map<TemplateInfo, JsonObject> templateInfoJsonObjectMap = templateContainer.getCdumps();
+ JsonObject jsonObject = templateInfoJsonObjectMap.get(templateInfos.get(0));
+ String result = jsonObject.toString();
+
+ verifyDeletedNodeCdump(result);
+ verify(report, times(0)).addErrorMessage(anyString());
+ Assert.assertTrue(templateInfoJsonObjectMap.size() == 1);
+ }
+
+ @Test
public void getChumps_returnOneChumpWithRelations() {
templateInfos = new ArrayList<>();
TemplateInfo templateInfo = new TemplateInfo();
templateInfo.setName(TEMPLATE_INFO_NAME);
+ templateInfo.setFlowType(TEMPLATE_INFO_FLOWTYPE);
List<Composition> compositionList = new ArrayList<>();
Composition composition = new Composition();
composition.setType(ELEMENT_NAME3);
@@ -141,17 +161,23 @@ public class TemplateContainerTest extends BaseTest {
Assert.assertTrue(result.contains("\"relationship\":["));
Assert.assertTrue(result.contains("\"n1\":\"n."));
Assert.assertTrue(result.contains("\"relations\":[{"));
- Assert.assertTrue(result.contains("\"name1\":\"SomeNameFromRequirement\""));
+ Assert.assertTrue(result.contains(",\"name2\":\"my alias2.SomeNameToCapability\","));
+ Assert.assertTrue(result.contains(",\"name1\":\"my alias3.SomeNameFromRequirement\","));
Assert.assertTrue(result.contains("\"n2\":\"n."));
Assert.assertTrue(result.contains("\"p1\":\"SomeNameFromRequirement\""));
}
private void verifyCdump(String result) {
- String expectedResultStart = "{\"version\":0,\"flowType\":\"templateInfoName\",\"nodes\":[{\"name\":\"SomeNameFromRequirement\",\"description\":\"\",\"id\":\"e45ec9d7-01df-4cb1-896f-aff2a6ca5a8b\",\"nid\":\"n.";
- String expectedResultMid = "\",\"capabilities\":[{\"name\":\"SomeNameToCapability\"}],\"requirements\":[{\"name\":\"SomeNameFromRequirement\"}],\"properties\":[{}],\"typeinfo\":{\"itemId\":\"e45ec9d7-01df-4cb1-896f-aff2a6ca5a8b/tosca.dcae.nodes.cdapApp.Map\",\"typeinfo\":\"typeInfo\"},\"type\":{\"name\":\"type\"},\"ndata\":{\"name\":\"n.";
+ String expectedResultStart = "{\"version\":0,\"flowType\":\"templateInfoFlowType\",\"nodes\":[{\"name\":\"my alias3.SomeNameFromRequirement\",\"description\":\"\",\"id\":\"e45ec9d7-01df-4cb1-896f-aff2a6ca5a8b\",\"nid\":\"n.";
+ String expectedResultMid = "\",\"capabilities\":[{\"name\":\"SomeNameToCapability\"}],\"requirements\":[{\"name\":\"SomeNameFromRequirement\"}],\"properties\":[{\"value\":{}}],\"typeinfo\":{\"itemId\":\"e45ec9d7-01df-4cb1-896f-aff2a6ca5a8b/tosca.dcae.nodes.cdapApp.Map\",\"typeinfo\":\"typeInfo\"},\"type\":{\"name\":\"type\"},\"ndata\":{\"name\":\"n.";
String expectedResultEnd = "\",\"label\":\"SomeNameFromRequirement\",\"x\":438,\"y\":435,\"px\":437,\"py\":434,\"ports\":[],\"radius\":30}}],\"inputs\":[],\"outputs\":[],\"relations\":[]}";
Assert.assertTrue(result.startsWith(expectedResultStart));
Assert.assertTrue(result.contains(expectedResultMid));
Assert.assertTrue(result.endsWith(expectedResultEnd));
}
+
+ private void verifyDeletedNodeCdump(String result) {
+ String expectedResult = "{\"version\":0,\"flowType\":\"templateInfoFlowType\",\"nodes\":[],\"inputs\":[],\"outputs\":[],\"relations\":[]}";
+ Assert.assertEquals(expectedResult, result);
+ }
}