CypherCode:LineReader

From PRGs Wiki
Jump to navigation Jump to search

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();
        }
    }
}