Java tinkerpop gremlin中有错误的函数吗?

Java tinkerpop gremlin中有错误的函数吗?,java,gremlin,tinkerpop,Java,Gremlin,Tinkerpop,我们有一个照片共享服务,可以允许或拒绝其他用户查看或不查看。我们将此服务公开为API/view?caller=userId&photoId=photoId。我们使用AWS Neptune Graph数据库服务来维护此授权,并使用tinkerpop java库 为了代码的可维护性,我们从其他类方法获取可能的路径,并从外部调用canUserView方法 Public class Authorizer { List<Role> roles; public Auth

我们有一个照片共享服务,可以允许或拒绝其他用户查看或不查看。我们将此服务公开为API/view?caller=userId&photoId=photoId。我们使用AWS Neptune Graph数据库服务来维护此授权,并使用tinkerpop java库

为了代码的可维护性,我们从其他类方法获取可能的路径,并从外部调用canUserView方法

Public class Authorizer {
    List<Role> roles;
    
    public Authorizer(List<Role> roles) {
        this.roles = roles;
    }
    
    public boolean canUserView(User user, String photoId) {
        return graph.V(user.getId()).hasLabel("user").or(getPossibleTraversals(user)).hasId("photoId")
    }

    private GraphTraversal<Object, Vertex>[] getPossibleTraversals(User user) {
        List<GraphTraversal<Vertex, Vertex>> traversals = roles.getTraversal(user).map(traversal -> traversal).collect(Collectors.toList())
        return traversals.toArray(GraphTraversal[]::new);
    }
}
公共类授权人{
列出角色;
公共授权人(列出角色){
this.roles=角色;
}
公共布尔canUserView(用户,字符串ID){
返回graph.V(user.getId()).hasLabel(“用户”)或(getPossibleTraversals(用户)).hasId(“photoId”)
}
私有GraphTraversal[]getPossibleTraversals(用户){
列表遍历=角色.getTraversal(用户).map(遍历->遍历).collect(收集器.toList())
返回遍历。toArray(GraphTraversal[]::新建);
}
}
在代码性能的角色类getTraversal中,根据用户信息,我提供所需的遍历,或者我可以提供失败遍历

现在的问题是如何在这里提供失败遍历。现在,我们假设一些不可用的顶点Id用于失败遍历。代码如下所示

public class Role {

    public GraphTraversal<Object, Vertex> getTraversal(User user) {
        if(user.satisfies(this)) {
            return __.V("assumedUnavailableVertexId").hasLabel("absolutelynotpossible"); //This ID and label assumed
        } else {
            return actualTraversal();   //This will construct the possible traversals
        }
    }
}
公共类角色{
公共图形Traversal getTraversal(用户){
如果(用户满足(本)){
return _uuu.V(“assumedUnavailableEvertexId”).hasLabel(“AbsolutelyNotable”);//假定此ID和标签
}否则{
return actualTraversal();//这将构造可能的遍历
}
}
}

如何为角色中的if案例返回失败遍历?有什么方法可以消除这种假设吗?

我经常看到在遍历需要返回错误/问题指示时使用像
常量('Not allowed')
这样简单的方法


在这种情况下(如果需要编译器等进行干净的泛型检查),您需要从
遍历
开始,因为通过代码的不同路径现在可能返回不同类型的遍历。

我不确定是否完全理解您的问题。您是否在寻求一种简单的方法来返回表示某个操作失败的遍历?我经常看到在这种情况下使用像
constant('Not allowed')
这样简单的东西。是的,我需要遍历失败的东西。constant(“Not allowed”)的问题是,.constant()的返回类型是GraphTraversal。在成功的案例中,它将是GraphTraversal。如果我在没有type参数的情况下设置了返回类型,即public-GraphTraversal getTraversal(),那么我们的sonarqube会抱怨,泛型类型参数是must。在这种情况下,你能接受
遍历吗?在Gremlin中,一次遍历可以根据它所使用的分支产生不同的结果,这一点并不少见。我想这很好。常量(“不允许”)将在此处工作。有时很难遵守Qube规则。谢谢@KelvinLawrence