John P
John P

Reputation: 1221

neo4j Java beginner. Cypher Execution Engine

The user logs in on the website and creates different events. This event is saved into the neo4j database as a node and I make the "EVENT_CREATOR" realtionship between the user and the event node.

I am trying to implement pagination for all the user's events on my website (using Play2 framework) and I need for example if user accesses the first page, I load the first ten events; 2nd page to load the 10th- 20th events, and so on...

this is my query:

match(n);
...
skip k;
limit 10;
return n;

At the moment I am getting all the events created by the user and add them to the array list.

private static List<PublicEvent> getEvents(int page, int pageSize) {

    List<PublicEvent> events = new ArrayList<PublicEvent>();

    GraphDatabaseService db = Neo4JHelper.getDatabase();
    try (Transaction tx = db.beginTx()) {

        Index<Node> userIndex = db.index().forNodes(ModelIndex.Users);

        IndexHits<Node> userNodes = userIndex.get(ModelGraphProperty.UserProfile.UserName, SessionUtilities.getCurrentUser());
        Node me = userNodes.next(); //current logged in user

        PagingIterator paginator = new PagingIterator(me.getRelationships(GraphRelation.RelTypes.EVENT_CREATOR).iterator(), pageSize); // get all the events that were created by this user
        paginator.page(page);

        // adding all the created events by this user to an array
        if (paginator.hasNext()) {
            Relationship eventCreator = (Relationship)paginator.next();
            Node event = eventCreator.getOtherNode(me);
            events.add(new PublicEvent(event));
        }

        tx.success();
    }

    db.shutdown();

    return events;
}

I want to update the code to run Cypher queries and I add the following lines of code (using the example https://www.tutorialspoint.com/neo4j/neo4j_cypher_api_example.htm )

GraphDatabaseService db = Neo4JHelper.getDatabase();
ExecutionEngine execEngine = new ExecutionEngine(db); //HERE I GET AN ERROR
ExecutionResult execResult = execEngine.execute("MATCH (n) RETURN n");
String results = execResult.dumpToString();
System.out.println(results);

it is expecting a second parameter: logger. What is the error or is there anything I am doing wrong?

Upvotes: 2

Views: 262

Answers (1)

Andrew
Andrew

Reputation: 106

  RestGraphDatabase db= (RestGraphDatabase)Neo4JHelper.getDatabase();
        RestCypherQueryEngine engine=new RestCypherQueryEngine(db.getRestAPI());
        Map<String, Object> params = new HashMap<String, Object>();
        params.put( "id", eventId );
        String query="match (s) where id(s) = {id} return s;";
        QueryResult result=engine.query(query,params);

        if(result.iterator().hasNext()) {

           //HERE PUT WHATEVER YOU NEED
        }

Take a look at the documentation:

https://neo4j.com/docs/java-reference/current/

Upvotes: 1

Related Questions