class GrpcStoreNodeImpl implements HgStoreNode {

    private final GrpcStoreSessionClient sessionClient;
    private final GrpcStoreStreamClient streamClient;
    private final HgStoreNodeManager nodeManager;
    private String address;
    private Long nodeId;

    GrpcStoreNodeImpl(HgStoreNodeManager nodeManager, GrpcStoreSessionClient sessionClient,
                      GrpcStoreStreamClient streamClient) {
        this.nodeManager = nodeManager;
        this.sessionClient = sessionClient;
        this.streamClient = streamClient;
    }

    @Override
    public Long getNodeId() {
        return this.nodeId;
    }

    GrpcStoreNodeImpl setNodeId(Long nodeId) {
        this.nodeId = nodeId;
        return this;
    }

    @Override
    public String getAddress() {
        return this.address;
    }

    GrpcStoreNodeImpl setAddress(String address) {
        this.address = address;
        return this;
    }

    @Override
    public HgStoreSession openSession(String graphName) {
        // HgAssert.isFalse(HgAssert.isInvalid(graphName), "the argument: graphName is invalid.");
        // return new GrpcStoreNodeSessionImpl2(this, graphName,this.nodeManager, this
        // .sessionClient, this
        // .streamClient);
        return new GrpcStoreNodeSessionImpl(this, graphName, this.nodeManager, this.sessionClient,
                                            this.streamClient);
    }

    @Override
    public boolean equals(Object o) {<FILL_FUNCTION_BODY>}

    @Override
    public int hashCode() {
        return Objects.hash(address, nodeId);
    }

    @Override
    public String toString() {
        return "storeNode: {" +
               "address: \"" + address + "\"" +
               ", nodeId: " + nodeId +
               "}";
    }
}

        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GrpcStoreNodeImpl that = (GrpcStoreNodeImpl) o;
        return Objects.equals(address, that.address) && Objects.equals(nodeId, that.nodeId);
    
<no_super_class>