Mercurial > hg > Members > nobuyasu > TestNeo4j
view src/wikigraph/LinkToNode.java @ 20:2c3a10047ec6 draft
add ReadWikiLink.java and LinkToNode.java
author | one |
---|---|
date | Mon, 27 Aug 2012 04:30:53 +0900 |
parents | |
children | f9ef906676eb |
line wrap: on
line source
package wikigraph; import java.util.HashMap; import org.neo4j.graphdb.Direction; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Path; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.traversal.Evaluators; import org.neo4j.graphdb.traversal.TraversalDescription; import org.neo4j.graphdb.traversal.Traverser; import org.neo4j.kernel.Traversal; import org.neo4j.tooling.GlobalGraphOperations; public class LinkToNode { GraphDatabaseService graphDb; GlobalGraphOperations graphOpe; public final String PAGE_TITLE = "page_title"; // private HashSet<String> names = new HashSet<String>(); private HashMap<String,Long> namesTable = new HashMap<String,Long>(); public enum RelTypes implements RelationshipType { HAS_LINK } LinkToNode(GraphDatabaseService graphDb) { this.graphDb = graphDb; this.graphOpe = GlobalGraphOperations.at(graphDb); } void setGraphDb(GraphDatabaseService graphDb) { this.graphDb = graphDb; this.graphOpe = GlobalGraphOperations.at(graphDb); } Long getId(String pageTitle) { return namesTable.get(pageTitle); } private Node createNode() { return graphDb.createNode(); } private Node createNodeWithProperty(String key, Object value) { Node node = createNode(); node.setProperty(key,value); return node; } Node createNodeWithPageTitle(String pageTitle){ Node node = createNodeWithProperty(PAGE_TITLE, pageTitle); namesTable.put(pageTitle, node.getId()); return node; } Node getNode(String name) { long id = namesTable.get(name); return graphDb.getNodeById(id); } void setRelationship(Node node1, Node node2, RelTypes type) { node1.createRelationshipTo(node2, type); } void setHasLink(Node node1, Node node2) { setRelationship(node1, node2, RelTypes.HAS_LINK); } void searchPageTitleAllNodes() { for (Node n: graphOpe.getAllNodes()) { if (n.hasProperty(PAGE_TITLE)) namesTable.put((String)n.getProperty(PAGE_TITLE), n.getId()); } } HashMap<String,Long> getNamesTable() { return namesTable; } public void printAllNodes() { for (Node n: graphOpe.getAllNodes()) { System.out.println("ID="+ n.getId()); for (String key: n.getPropertyKeys()) { System.out.println(key + "=" + n.getProperty(key)); } Iterable<Relationship> relIter = n.getRelationships(RelTypes.HAS_LINK); for (Relationship rel : relIter ) { System.out.println(rel); } System.out.println("--"); } } public Traverser getHasLink( final Node person) { TraversalDescription td = Traversal.description() .breadthFirst() .relationships( RelTypes.HAS_LINK, Direction.OUTGOING ) .evaluator( Evaluators.excludeStartPosition()); return td.traverse( person ); } public void searchHasLink(final Node node) { int numberOfLinkPages = 0; String output = node.getProperty(PAGE_TITLE) + " have link pages:\n"; Traverser hasLinkTraverser = getHasLink( node ); for ( Path hasLinkPath : hasLinkTraverser) { output += "At depth " + hasLinkPath.length() + " => " + hasLinkPath.endNode() .getProperty(PAGE_TITLE) + "\n"; numberOfLinkPages++; } output += "Number of link pages: " + numberOfLinkPages + "\n"; System.out.println(output); } }