view src/wikigraph/Neo4jTest.java @ 18:7e4aa7037c7c draft

modify LinkToNode.java
author one
date Thu, 23 Aug 2012 18:49:47 +0900
parents 84dd614f1414
children
line wrap: on
line source

package wikigraph;

import java.util.HashMap;
import java.util.HashSet;


import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Path;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;

import org.neo4j.graphdb.traversal.Evaluators;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.graphdb.traversal.Traverser;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.neo4j.kernel.Traversal;
import org.neo4j.tooling.GlobalGraphOperations;

public class Neo4jTest {

	public static HashSet<String> names = new HashSet<String>();

	public enum RelTypes implements RelationshipType {
		FRIEND
	}

	public static void addName(String name) {
		names.add(name);
	}
	
	public static Node createNodeWithProperty(GraphDatabaseService graphDb, String name) {
		System.out.println("createNode name="+name);
		Node node = graphDb.createNode();
		node.setProperty("name", name);
		return node;
	}
	
	public static void createNodes(GraphDatabaseService graphDb) {
		createNodeWithProperty(graphDb, "Alto Saotome");
		createNodeWithProperty(graphDb, "Sheryl Nome");
		createNodeWithProperty(graphDb, "Ranka Lee");
	}
	
	public static void createRelationships(GraphDatabaseService graphDb) {
		Node alto = graphDb.getNodeById(2);		
		Node sheryl = graphDb.getNodeById(3);
		Node ranka = graphDb.getNodeById(4);
//		Relationship relationship = alto.createRelationshipTo(sheryl, RelTypes.FRIEND);
//		alto.createRelationshipTo(ranka, RelTypes.FRIEND);
		sheryl.createRelationshipTo(ranka, RelTypes.FRIEND);
		ranka.createRelationshipTo(alto, RelTypes.FRIEND);
	}

	public static void printType(RelationshipType type) {
		System.out.println(type);
	}
	
	public static Traverser getFriends( final Node person) {
		TraversalDescription td = Traversal.description()
				.breadthFirst()
				.relationships( RelTypes.FRIEND, Direction.OUTGOING )
				.evaluator( Evaluators.excludeStartPosition());
		return td.traverse( person );
	}

	public static void searchFriends(final Node node) {
		int numberOfFriends = 0;
		String output = node.getProperty("name") + "'s friends:\n";
		Traverser friendsTraverser = getFriends( node );
		for ( Path friendPath : friendsTraverser) {
			output += "At depth " + friendPath.length() + " => "
					+ friendPath.endNode()
						.getProperty("name") + "\n";
			numberOfFriends++;
		}
		output += "Number of friends found: " + numberOfFriends + "\n";
		System.out.println(output);
	}

	public static void printAllNodes(GlobalGraphOperations graphOpe) {
		for (Node n: graphOpe.getAllNodes()) {
			System.out.println("ID="+ n.getId());
			for (String key: n.getPropertyKeys()) {
				System.out.println(key + "=" + n.getProperty(key));
			}
			System.out.println("--");
		}

	}

	public static void main(String[] args) {
		
		GraphDatabaseService graphDb = new EmbeddedGraphDatabase("db");
		GlobalGraphOperations graphOpe = GlobalGraphOperations.at(graphDb);
		Transaction tx = graphDb.beginTx();

		HashMap<String,Long> hash = new HashMap<String,Long>();
		for (Node n: graphOpe.getAllNodes()) {
			if (n.hasProperty("name"))
				hash.put((String)n.getProperty("name"), n.getId());
		}
		for (String name : hash.keySet()) {
			System.out.println("name = "+ name + ", Id = "+ hash.get(name));
		}

   		addName("Alto Saotome");
   		addName("Sheryl Nome");
   		addName("Ranka Lee");
   		addName("Mikhail Blanc");		

   		for (String name : names) {
   			if (hash.get(name) == null)
   				createNodeWithProperty(graphDb, name);
   		}
   		printAllNodes(graphOpe);
   		
   		printType(RelTypes.FRIEND);

   		
		tx.success();
		tx.finish();
		graphDb.shutdown();
	}
}