diff --git a/src/main/java/io/hyperfoil/tools/h5m/cli/ListNode.java b/src/main/java/io/hyperfoil/tools/h5m/cli/ListNode.java index ed96595..133b7d1 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/cli/ListNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/cli/ListNode.java @@ -38,7 +38,7 @@ public Integer call() throws Exception { System.out.println( ListCmd.table(80,nodeGroup.sources,List.of("name","type","fqdn","operation"), List.of(n->n.name, - n->n.type, + n->n.type().display(), NodeEntity::getFqdn, n->n.operation ) diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/NodeEntity.java b/src/main/java/io/hyperfoil/tools/h5m/entity/NodeEntity.java index 88d9ded..05214be 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/NodeEntity.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/NodeEntity.java @@ -16,15 +16,36 @@ @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) public abstract class NodeEntity extends PanacheEntity implements Comparable { + public enum Type { + FINGERPRINT("fp"), + FIXED_THRESHOLD("ft"), + JQ("jq"), + JS("js"), + JSONATA("nata"), + RELATIVE_DIFFERENCE("rd"), + ROOT("root"), + SPLIT("split"), + SQL_JSONPATH_ALL_NODE("sql-all"), + SQL_JSONPATH_NODE("sql"), + USER_INPUT("user"); + + private final String display; + + Type(String display) { + this.display = display; + } + + public String display() { + return display; + } + } + public static String FQDN_SEPARATOR = ":"; public static String NAME_SEPARATOR = "="; public static enum MultiIterationType { Length, NxN} public static enum ScalarVariableMethod { First, All} - @Column(insertable=false, updatable=false) - @JsonIgnore - public String type; //maybe we want access to the type? public String name; @Column(columnDefinition = "TEXT") @@ -132,8 +153,10 @@ public String getOperationEncoding(){ protected abstract NodeEntity shallowCopy(); + public abstract Type type(); + public boolean hasNonRootSource(){ - return sources.stream().anyMatch(s->!s.type.equals("root")); + return sources.stream().anyMatch(s-> s.type() != Type.ROOT); } public NodeEntity copy(){ diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/FingerprintNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/FingerprintNode.java index 51452d4..af0a790 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/FingerprintNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/FingerprintNode.java @@ -28,4 +28,9 @@ public FingerprintNode(String name, String operation, List sources) protected NodeEntity shallowCopy() { return new FingerprintNode(name,operation); } + + @Override + public Type type() { + return Type.FINGERPRINT; + } } diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/FixedThreshold.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/FixedThreshold.java index c878c04..c99a67e 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/FixedThreshold.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/FixedThreshold.java @@ -149,6 +149,11 @@ public void setFingerprintFilter(String fingerprintFilter) { operation = config.toString(); } + @Override + public Type type() { + return Type.FIXED_THRESHOLD; + } + @Override protected NodeEntity shallowCopy() { return new FixedThreshold(name, operation); diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/JqNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/JqNode.java index 0f5b930..8c7d235 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/JqNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/JqNode.java @@ -59,25 +59,24 @@ public static JqNode parse(String name, String input, Function sources){ super(name,operation,sources); - this.type = "jq"; } public JqNode(String name,String operation, NodeEntity...sources){ super(name,operation,List.of(sources)); - this.type = "jq"; } + @Override + public Type type() { + return Type.JQ; + } public static String getCwd(){ Path currentRelativePath = Paths.get(""); diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsNode.java index 791dcb1..d2b0034 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsNode.java @@ -152,15 +152,17 @@ public static List getParameterNames(String input, boolean removeSpread) public JsNode(){ super(); - this.type="ecma"; } public JsNode(String name,String operation){ super(name,operation); - this.type="ecma"; } public JsNode(String name,String operation,List sources){ super(name,operation,sources); - this.type="ecma"; + } + + @Override + public Type type() { + return Type.JS; } @Override diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsonataNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsonataNode.java index d6d4d33..d016be2 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsonataNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/JsonataNode.java @@ -67,6 +67,10 @@ public static JsonataNode parse(String name, String input, Function sources){ super(name, operation, sources); - this.type = "split"; + } + + @Override + public Type type() { + return Type.SPLIT; } @Override diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathAllNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathAllNode.java index 98cc598..2415c30 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathAllNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathAllNode.java @@ -59,11 +59,14 @@ public static SqlJsonpathAllNode parse(String name, String input, Function sources){ super(name,operation,sources); - this.type = "sqlall"; + } + + @Override + public Type type() { + return Type.SQL_JSONPATH_ALL_NODE; } @Override diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathNode.java index a7318f4..29106ff 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/SqlJsonpathNode.java @@ -60,11 +60,14 @@ public static SqlJsonpathNode parse(String name, String input, Function sources){ super(name,operation,sources); - this.type = "sql"; + } + + @Override + public Type type() { + return Type.SQL_JSONPATH_NODE; } @Override diff --git a/src/main/java/io/hyperfoil/tools/h5m/entity/node/UserInputNode.java b/src/main/java/io/hyperfoil/tools/h5m/entity/node/UserInputNode.java index 07dafcc..c690a8a 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/entity/node/UserInputNode.java +++ b/src/main/java/io/hyperfoil/tools/h5m/entity/node/UserInputNode.java @@ -13,6 +13,11 @@ public UserInputNode(String name,String operation){ super(name,operation); } + @Override + public Type type() { + return Type.USER_INPUT; + } + @Override protected NodeEntity shallowCopy() { return new UserInputNode(name,operation); diff --git a/src/main/java/io/hyperfoil/tools/h5m/svc/NodeService.java b/src/main/java/io/hyperfoil/tools/h5m/svc/NodeService.java index b191157..bd770e0 100644 --- a/src/main/java/io/hyperfoil/tools/h5m/svc/NodeService.java +++ b/src/main/java/io/hyperfoil/tools/h5m/svc/NodeService.java @@ -251,15 +251,15 @@ public List> calculateSourceValuePermutations(NodeEntit public List calculateValues(NodeEntity node, List roots) throws IOException { List rtrn = new ArrayList<>(); - switch (node.type){ + switch (node.type()){ //nodes that operate one root at a time - case "ecma": - case "jq": - case "nata": - case "sql": - case "sqlall": - case "split": - case "fp": + case JS: + case JQ: + case JSONATA: + case SQL_JSONPATH_ALL_NODE: + case SQL_JSONPATH_NODE: + case SPLIT: + case FINGERPRINT: for(int vIdx=0; vIdx calculateValues(NodeEntity node, List root } } break; - case "rd": + case RELATIVE_DIFFERENCE: RelativeDifference relDiff = (RelativeDifference) node; for(int rIdx=0; rIdx calculateValues(NodeEntity node, List root rtrn.addAll(found); } break; - case "ft": + case FIXED_THRESHOLD: FixedThreshold ft = (FixedThreshold) node; for(int rIdx=0; rIdx calculateValues(NodeEntity node, List root } break; default: - System.err.println("calculateValues unknown node type: " + node.type); + System.err.println("calculateValues unknown node type: " + node.type()); } rtrn.forEach(ValueEntity::getPath);//forcing entities to be loaded is so dirty return rtrn; @@ -298,16 +298,16 @@ public List calculateValues(NodeEntity node, List root @Transactional public List calculateNodeValues(NodeEntity node,Map sourceValues,int startingOrdinal) throws IOException { - return switch(node.type){ - case "jq" -> calculateJqValues((JqNode)node,sourceValues,startingOrdinal+1); - case "ecma" -> calculateJsValues((JsNode)node,sourceValues,startingOrdinal+1); - case "nata" -> calculateJsonataValues((JsonataNode)node,sourceValues,startingOrdinal+1); - case "sql" -> calculateSqlJsonpathValues((SqlJsonpathNode)node,sourceValues,startingOrdinal+1); - case "sqlall" -> calculateSqlAllJsonpathValues((SqlJsonpathAllNode)node, sourceValues, startingOrdinal+1); - case "split" -> calculateSplitValues((SplitNode)node,sourceValues,startingOrdinal+1); - case "fp" -> calculateFpValues((FingerprintNode)node,sourceValues,startingOrdinal+1); + return switch(node.type()){ + case JQ -> calculateJqValues((JqNode)node,sourceValues,startingOrdinal+1); + case JS -> calculateJsValues((JsNode)node,sourceValues,startingOrdinal+1); + case JSONATA -> calculateJsonataValues((JsonataNode)node,sourceValues,startingOrdinal+1); + case SQL_JSONPATH_NODE -> calculateSqlJsonpathValues((SqlJsonpathNode)node,sourceValues,startingOrdinal+1); + case SQL_JSONPATH_ALL_NODE -> calculateSqlAllJsonpathValues((SqlJsonpathAllNode)node, sourceValues, startingOrdinal+1); + case SPLIT -> calculateSplitValues((SplitNode)node,sourceValues,startingOrdinal+1); + case FINGERPRINT -> calculateFpValues((FingerprintNode)node,sourceValues,startingOrdinal+1); default -> { - System.err.println("Unknown node type: "+node.type); + System.err.println("Unknown node type: "+node.type()); yield Collections.emptyList(); } };