diff --git a/pom.xml b/pom.xml
index f8a11d5..8642ade 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,8 @@
5.9.0
5.7.0
+ UTF-8
+ UTF-8
diff --git a/src/main/java/tabby/algo/BasePathFinding.java b/src/main/java/tabby/algo/BasePathFinding.java
index f249933..8a78fe4 100644
--- a/src/main/java/tabby/algo/BasePathFinding.java
+++ b/src/main/java/tabby/algo/BasePathFinding.java
@@ -20,13 +20,13 @@
public class BasePathFinding {
public static Stream findPathWithState(Node sourceNode, String direct, Node sinkNode, String state,
- long maxNodeLength, boolean isDepthFirst, boolean checkAuth, boolean isCheckType,
+ Number maxNodeLength, boolean isDepthFirst, boolean checkAuth, boolean isCheckType,
GraphDatabaseService db, Transaction tx){
PathExpander expander;
TraversalPathFinder algo;
Iterable allPaths;
- int maxDepth = (int) maxNodeLength;
+ Number maxDepth = maxNodeLength;
if(">".equals(direct)){
expander = new TabbyPathExpander(false, false, isCheckType);
@@ -35,19 +35,19 @@ public static Stream findPathWithState(Node sourceNode, String direc
algo = new TabbyTraversalPathFinder(
new BasicEvaluationContext(tx, db),
expander, initialState, sinkState,
- maxDepth, isDepthFirst, checkAuth, false);
+ maxNodeLength, isDepthFirst, checkAuth, false);
allPaths = algo.findAllPaths(sourceNode, sinkNode);
}else if("<".equals(direct)){
expander = new TabbyPathExpander(false, true, isCheckType);
TabbyState initialState = TabbyState.initialState(sinkNode, state);
if(initialState == null){
- maxNodeLength = 0;
+ maxDepth = 0;
}
algo = new TabbyTraversalPathFinder(
new BasicEvaluationContext(tx, db),
expander, initialState, null,
- (int) maxNodeLength, isDepthFirst, false, true);
+ maxDepth, isDepthFirst, false, true);
allPaths = algo.findAllPaths(sinkNode, sourceNode);
}else{
@@ -57,7 +57,7 @@ public static Stream findPathWithState(Node sourceNode, String direc
TabbyState sinkState = TabbyState.initialState(sinkNode, state);
algo = new TabbyBidirectionalTraversalPathFinder(new BasicEvaluationContext(tx, db),
- expander, sourceState, sinkState, (int) maxNodeLength, isDepthFirst);
+ expander, sourceState, sinkState, maxNodeLength, isDepthFirst);
allPaths = algo.findAllPaths(sourceNode, sinkNode);
}
diff --git a/src/main/java/tabby/algo/beta/PathFinding.java b/src/main/java/tabby/algo/beta/PathFinding.java
index d6e5b54..66789f0 100644
--- a/src/main/java/tabby/algo/beta/PathFinding.java
+++ b/src/main/java/tabby/algo/beta/PathFinding.java
@@ -30,7 +30,7 @@ public class PathFinding extends BasePathFinding {
public Stream findPath(@Name("source") Node sourceNode,
@Name("direct") String direct,
@Name("sink") Node sinkNode,
- @Name("maxNodeLength") long maxNodeLength,
+ @Name("maxNodeLength") Number maxNodeLength,
@Name("isDepthFirst") boolean isDepthFirst){
return findPathWithState(sourceNode, direct, sinkNode, null, maxNodeLength, isDepthFirst, false, true, db, tx);
}
@@ -52,7 +52,7 @@ public Stream findPathWithState(@Name("source") Node sourceNode,
@Name("direct") String direct,
@Name("sink") Node sinkNode,
@Name("state") String state,
- @Name("maxNodeLength") long maxNodeLength,
+ @Name("maxNodeLength") Number maxNodeLength,
@Name("isDepthFirst") boolean isDepthFirst){
return findPathWithState(sourceNode, direct, sinkNode, state, maxNodeLength, isDepthFirst, false, true, db, tx);
}
@@ -62,7 +62,7 @@ public Stream findPathWithState(@Name("source") Node sourceNode,
" - using findPath to get source-sink path with maxNodeLength")
public Stream findPathWithAuth(@Name("source") Node sourceNode,
@Name("sink") Node sinkNode,
- @Name("maxNodeLength") long maxNodeLength,
+ @Name("maxNodeLength") Number maxNodeLength,
@Name("isDepthFirst") boolean isDepthFirst){
return findPathWithState(sourceNode, ">", sinkNode, null, maxNodeLength, isDepthFirst, true, true, db, tx);
diff --git a/src/main/java/tabby/algo/release/JavaGadgetPathFinding.java b/src/main/java/tabby/algo/release/JavaGadgetPathFinding.java
index 935b9b6..bb09502 100644
--- a/src/main/java/tabby/algo/release/JavaGadgetPathFinding.java
+++ b/src/main/java/tabby/algo/release/JavaGadgetPathFinding.java
@@ -37,7 +37,7 @@ public Stream findJavaGadget(
@Name("source") Node sourceNode,
@Name("direct") String direct,
@Name("sink") Node sinkNode,
- @Name("maxNodeLength") long maxNodeLength,
+ @Name("maxNodeLength") Number maxNodeLength,
@Name("isDepthFirst") boolean isDepthFirst) {
return findJavaGadgetWithState(sourceNode, direct, sinkNode, null, maxNodeLength, isDepthFirst);
@@ -51,7 +51,7 @@ public Stream findJavaGadgetWithState(
@Name("direct") String direct,
@Name("sink") Node sinkNode,
@Name("sinkState") String state,
- @Name("maxNodeLength") long maxNodeLength,
+ @Name("maxNodeLength") Number maxNodeLength,
@Name("isDepthFirst") boolean isDepthFirst) {
boolean isBackward = "<".equals(direct);
String processor = isBackward ? "JavaGadgetBackward":"JavaGadget";
@@ -69,7 +69,7 @@ public Stream findJavaGadgetWithState(
MonoDirectionalTraversalPathFinder algo = new MonoDirectionalTraversalPathFinder(
new BasicEvaluationContext(tx, db),
- expander, (int) maxNodeLength, initialState, isDepthFirst
+ expander, maxNodeLength, initialState, isDepthFirst
);
Iterable allPaths;
diff --git a/src/main/java/tabby/algo/release/PathFinding.java b/src/main/java/tabby/algo/release/PathFinding.java
index 890325c..941e715 100644
--- a/src/main/java/tabby/algo/release/PathFinding.java
+++ b/src/main/java/tabby/algo/release/PathFinding.java
@@ -30,7 +30,7 @@ public class PathFinding extends BasePathFinding {
public Stream findPath(@Name("source") Node sourceNode,
@Name("direct") String direct,
@Name("sink") Node sinkNode,
- @Name("maxNodeLength") long maxNodeLength,
+ @Name("maxNodeLength") Number maxNodeLength,
@Name("isDepthFirst") boolean isDepthFirst){
return findPathWithState(sourceNode, direct, sinkNode, null, maxNodeLength, isDepthFirst, false, false, db, tx);
}
diff --git a/src/main/java/tabby/evaluator/MonoPathEvaluator.java b/src/main/java/tabby/evaluator/MonoPathEvaluator.java
index 61909ac..4101b35 100644
--- a/src/main/java/tabby/evaluator/MonoPathEvaluator.java
+++ b/src/main/java/tabby/evaluator/MonoPathEvaluator.java
@@ -15,10 +15,10 @@
public class MonoPathEvaluator extends PathEvaluator.Adapter {
private Node endNode;
- private int maxDepth;
+ private Number maxDepth;
private boolean checkAuth;
- public MonoPathEvaluator(Node endNode, int maxDepth, boolean checkAuth) {
+ public MonoPathEvaluator(Node endNode, Number maxDepth, boolean checkAuth) {
this.endNode = endNode;
this.maxDepth = maxDepth;
this.checkAuth = checkAuth;
@@ -28,10 +28,10 @@ public MonoPathEvaluator(Node endNode, int maxDepth, boolean checkAuth) {
public Evaluation evaluate(Path path, BranchState state) {
boolean includes = true;
boolean continues = true;
- int length = path.length();
+ long length = path.length();
Node node = path.endNode();
- if(length >= maxDepth){
+ if((Long)length >= (Long)maxDepth){
continues = false; // 超出长度 不继续进行
if(endNode != null && !endNode.equals(node)){
includes = false; // 最后的节点不是endNode,不保存当前结果
@@ -48,7 +48,7 @@ public Evaluation evaluate(Path path, BranchState state) {
return Evaluation.of(includes, continues);
}
- public static MonoPathEvaluator of(Node endNode, int maxDepth){
+ public static MonoPathEvaluator of(Node endNode, Number maxDepth){
return new MonoPathEvaluator(endNode, maxDepth, false);
}
diff --git a/src/main/java/tabby/evaluator/TabbyEvaluator.java b/src/main/java/tabby/evaluator/TabbyEvaluator.java
index e844b0a..fcb6622 100644
--- a/src/main/java/tabby/evaluator/TabbyEvaluator.java
+++ b/src/main/java/tabby/evaluator/TabbyEvaluator.java
@@ -16,12 +16,12 @@
public class TabbyEvaluator extends PathEvaluator.Adapter{
private Node endNode;
- private int maxDepth;
+ private Number maxDepth;
private boolean checkAuth;
private boolean isBackward;
private Pollution endPol = null;
- public TabbyEvaluator(Node endNode, TabbyState endState, int maxDepth, boolean checkAuth, boolean isBackward) {
+ public TabbyEvaluator(Node endNode, TabbyState endState, Number maxDepth, boolean checkAuth, boolean isBackward) {
this.endNode = endNode;
this.maxDepth = maxDepth;
this.checkAuth = checkAuth;
@@ -31,17 +31,17 @@ public TabbyEvaluator(Node endNode, TabbyState endState, int maxDepth, boolean c
}
}
- public static TabbyEvaluator of(Node endNode, TabbyState endState, int maxDepth, boolean checkAuth, boolean isBackward){
+ public static TabbyEvaluator of(Node endNode, TabbyState endState, Number maxDepth, boolean checkAuth, boolean isBackward){
return new TabbyEvaluator(endNode, endState, maxDepth, checkAuth, isBackward);
}
@Override
public Evaluation evaluate(Path path, BranchState branchState) {
boolean includes = true;
boolean continues = true;
- int length = path.length();
+ Long length = (long) path.length();
Node node = path.endNode();
- if(length >= maxDepth){
+ if(length >= (Long)maxDepth){
continues = false; // 超出长度 不继续进行
if(endNode != null && !endNode.equals(node)){
includes = false; // 最后的节点不是endNode,不保存当前结果
diff --git a/src/main/java/tabby/path/BasePathFinder.java b/src/main/java/tabby/path/BasePathFinder.java
index b508bbe..2964877 100644
--- a/src/main/java/tabby/path/BasePathFinder.java
+++ b/src/main/java/tabby/path/BasePathFinder.java
@@ -13,10 +13,10 @@ public abstract class BasePathFinder extends TraversalPathFinder {
public final PathExpander expander;
public final EvaluationContext context;
- public final int maxDepth;
+ public final Number maxDepth;
public final boolean depthFirst;
- public BasePathFinder(EvaluationContext context, PathExpander expander, int maxDepth, boolean depthFirst) {
+ public BasePathFinder(EvaluationContext context, PathExpander expander, Number maxDepth, boolean depthFirst) {
this.expander = expander;
this.context = context;
this.maxDepth = maxDepth;
diff --git a/src/main/java/tabby/path/BidirectionalTraversalPathFinder.java b/src/main/java/tabby/path/BidirectionalTraversalPathFinder.java
index 87e943f..bc478a7 100644
--- a/src/main/java/tabby/path/BidirectionalTraversalPathFinder.java
+++ b/src/main/java/tabby/path/BidirectionalTraversalPathFinder.java
@@ -22,7 +22,7 @@ public class BidirectionalTraversalPathFinder extends BasePathFinder{
public BidirectionalTraversalPathFinder(EvaluationContext context,
PathExpander expander,
- int maxDepth,
+ Number maxDepth,
State sourceState,
State sinkState,
boolean depthFirst) {
@@ -43,8 +43,8 @@ protected Traverser instantiateTraverser(Node start, Node end) {
}
return transaction.bidirectionalTraversalDescription()
- .startSide( base.expand( expander, sourceState ).evaluator( toDepth( maxDepth / 2 ) ) )
- .endSide( base.expand( expander.reverse(), sinkState ).evaluator( toDepth( maxDepth - maxDepth / 2 ) ) )
+ .startSide( base.expand( expander, sourceState ).evaluator( toDepth( (Integer)maxDepth / 2 ) ) )
+ .endSide( base.expand( expander.reverse(), sinkState ).evaluator( toDepth( (Integer)maxDepth - (Integer)maxDepth / 2 ) ) )
.traverse( start, end );
}
}
diff --git a/src/main/java/tabby/path/MonoDirectionalTraversalPathFinder.java b/src/main/java/tabby/path/MonoDirectionalTraversalPathFinder.java
index 9bf2aaf..7e4ccfe 100644
--- a/src/main/java/tabby/path/MonoDirectionalTraversalPathFinder.java
+++ b/src/main/java/tabby/path/MonoDirectionalTraversalPathFinder.java
@@ -24,7 +24,7 @@ public class MonoDirectionalTraversalPathFinder extends BasePathFinder{
public MonoDirectionalTraversalPathFinder(EvaluationContext context,
PathExpander expander,
- int maxDepth,
+ Number maxDepth,
State state,
boolean depthFirst
) {
diff --git a/src/main/java/tabby/path/TabbyBidirectionalTraversalPathFinder.java b/src/main/java/tabby/path/TabbyBidirectionalTraversalPathFinder.java
index b4b3832..bc47582 100644
--- a/src/main/java/tabby/path/TabbyBidirectionalTraversalPathFinder.java
+++ b/src/main/java/tabby/path/TabbyBidirectionalTraversalPathFinder.java
@@ -25,7 +25,7 @@ public class TabbyBidirectionalTraversalPathFinder extends BasePathFinder expander,
TabbyState sourceState,
- TabbyState sinkState, int maxDepth,
+ TabbyState sinkState, Number maxDepth,
boolean depthFirst) {
super(context, expander, maxDepth, depthFirst);
this.sourceState = new InitialBranchState.State<>(sourceState, TabbyState.of());
@@ -38,8 +38,8 @@ protected Traverser instantiateTraverser(Node start, Node end) {
TraversalDescription base = getBaseDescription(transaction);
return transaction.bidirectionalTraversalDescription()
- .startSide( base.expand( expander, sourceState ).evaluator( toDepth( maxDepth / 2 ) ) )
- .endSide( base.expand( expander.reverse(), sinkState ).evaluator( toDepth( maxDepth - maxDepth / 2 ) ) )
+ .startSide( base.expand( expander, sourceState ).evaluator( toDepth( (Integer)maxDepth / 2 ) ) )
+ .endSide( base.expand( expander.reverse(), sinkState ).evaluator( toDepth( (Integer)maxDepth - (Integer)maxDepth / 2 ) ) )
.collisionEvaluator(Evaluators.all())
.collisionPolicy(CollisionDetector::new)
.traverse( start, end );
diff --git a/src/main/java/tabby/path/TabbyTraversalPathFinder.java b/src/main/java/tabby/path/TabbyTraversalPathFinder.java
index 94613b0..922646a 100644
--- a/src/main/java/tabby/path/TabbyTraversalPathFinder.java
+++ b/src/main/java/tabby/path/TabbyTraversalPathFinder.java
@@ -24,7 +24,7 @@ public class TabbyTraversalPathFinder extends BasePathFinder {
public TabbyTraversalPathFinder(EvaluationContext context,
PathExpander expander,
TabbyState initialState,
- TabbyState endState, int maxDepth,
+ TabbyState endState, Number maxDepth,
boolean depthFirst, boolean checkAuth, boolean isBackward) {
super(context, expander, maxDepth, depthFirst);
this.state = new InitialBranchState.State<>(initialState, TabbyState.of());