CypherCode:LineReader

From PRGs Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This is a really simple project that loads data from a file and put it into a Neo4J data. It assumes that each line of the file is an individual cypher command. It's great for building a network offline in a text file, and then you can simply run the program and it will put the data in neo4j.

Obviously you need to provide it with the server address, and a username/password if needed. It just runs so make sure you don't send all the data to the wrong place!

package net.prgarnett.cypherlinereader;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Session;
import org.neo4j.driver.v1.Transaction;

/**
 *
 * @author philip
 */
public class LineReader {
    
    private final Driver driver;
    
    /**
     * Load up the driver, using the address, pword, and username.
     * 
     * @param serveradd
     * @param password
     * @param username 
     */
    public LineReader(String serveradd, String password, String username)
    {
        this.driver = GraphDatabase.driver(serveradd, AuthTokens.basic(username, password));
    }
    
    /**
     * Give the method the path to the file, it will read any line that does not
     * start with a '#'.
     * 
     * @param path 
     */
    public void ExecuteLines(String path)
    {
        try{
            File targetFile = new File(path);
        
            try(Session session = driver.session())
            {
                Scanner lineScanner = new Scanner(targetFile);
                while(lineScanner.hasNext())
                {
                    String line = lineScanner.nextLine();
                    if(!line.startsWith("#"))
                    {
                        this.processLine(line, session);
                    }
                }
            }
        }
        catch (FileNotFoundException e)
        {
            System.err.println(e.getMessage());
        }
    }
    
    /**
     * Private method that processes the line in a transaction, requires the
     * session to be past.
     * 
     * @param line
     * @param session 
     */
    private void processLine(String line, Session session)
    {
        try (Transaction tx = session.beginTransaction())
        {
            
            System.out.println(line);
            tx.run(line);
            tx.success();
        }
    }
}