changeset 13:84dd614f1414 draft

add LinkConvertGraph.java
author one
date Thu, 23 Aug 2012 07:22:37 +0900
parents bf7863a55cd6
children 1405a0c97c67
files src/howtouse/TestSaxParser.java src/wikigraph/LinkConvertGraph.java src/wikigraph/Neo4jTest.java
diffstat 3 files changed, 205 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/src/howtouse/TestSaxParser.java	Thu Aug 23 03:40:48 2012 +0900
+++ b/src/howtouse/TestSaxParser.java	Thu Aug 23 07:22:37 2012 +0900
@@ -65,7 +65,7 @@
 	}
 
 	public void startDocument() {
-		System.out.println("read start");
+//		System.out.println("read start");
 	}
 
 	public void startElement(String uri, String localName, String qName,
@@ -121,7 +121,7 @@
 	}
 
 	public void endDocument() {
-		System.out.println("end reading file.");
+//		System.out.println("end reading file.");
 	}
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/wikigraph/LinkConvertGraph.java	Thu Aug 23 07:22:37 2012 +0900
@@ -0,0 +1,102 @@
+package wikigraph;
+
+import howtouse.TestSaxParser;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.SAXException;
+
+public class LinkConvertGraph {
+	
+	private String filename;
+	private FileInputStream fis;
+	private SAXParserFactory factory;
+	private SAXParser parser;
+	private TestSaxParser xmlParser;
+
+	private HashMap<String,HashSet<String>> hash;
+
+
+	LinkConvertGraph() throws ParserConfigurationException, SAXException {
+		xmlParser = new TestSaxParser();
+		factory = SAXParserFactory.newInstance();
+		parser = factory.newSAXParser();
+	}
+
+	LinkConvertGraph(final String filename) throws FileNotFoundException, ParserConfigurationException, SAXException {
+		this.filename = filename;
+		fis = new FileInputStream(filename);
+		xmlParser = new TestSaxParser();
+		factory = SAXParserFactory.newInstance();
+		parser = factory.newSAXParser();
+	}
+	
+	private void setFilename(final String filename) throws FileNotFoundException {
+		this.filename = filename;
+		fis = new FileInputStream(filename);
+	}
+	
+	private void parseXml() throws SAXException, IOException {
+		parser.parse(this.fis, this.xmlParser);
+		hash = xmlParser.getHash();
+	}
+	
+	private HashMap<String,HashSet<String>> getHash() {
+		return hash;
+	}
+
+	private void printHash() {
+		for (Map.Entry<String,HashSet<String>> entry : hash.entrySet()) {
+			String title = entry.getKey();
+			System.out.println("title: " + title);
+			for (String link : entry.getValue()) {
+				System.out.println("\t"+link);
+			}
+		}		
+	}
+	
+	public static void main(String[] args) {
+		final String filename = "./resource/article3.xml";
+		try {
+			LinkConvertGraph lcg = new LinkConvertGraph(filename);
+
+			lcg.parseXml();
+			lcg.printHash();
+
+			
+			/*
+			FileInputStream fis = new FileInputStream(filename);
+			TestSaxParser xmlParser = new TestSaxParser();
+
+			SAXParserFactory factory = SAXParserFactory.newInstance();
+			SAXParser parser = factory.newSAXParser();
+
+			parser.parse(fis, xmlParser );
+			HashMap<String,HashSet<String>> hash;
+			hash = xmlParser.getHash();
+*/			
+			
+		
+		
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		} catch (SAXException e) {
+			e.printStackTrace();			
+		} catch (ParserConfigurationException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			System.err.println("Failed to parse xml");
+			e.printStackTrace();
+		}
+
+	}
+}
--- a/src/wikigraph/Neo4jTest.java	Thu Aug 23 03:40:48 2012 +0900
+++ b/src/wikigraph/Neo4jTest.java	Thu Aug 23 07:22:37 2012 +0900
@@ -1,47 +1,120 @@
 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 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();
 
-		Transaction tx = graphDb.beginTx();
-		
-		Node firstNode = graphDb.createNode();
-		firstNode.setProperty("name", "Jason Kidd");
-		firstNode.setProperty("number", "2");
-		
-		tx.success();
-		
-		tx.finish();
-		
+		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));
+		}
 
-		for (Node node: graphOpe.getAllNodes()) {
-			System.out.println("ID="+ node.getId());
-			for (String key: node.getPropertyKeys()) {
-				System.out.println(key + "=" + node.getProperty(key));
-			}
-			System.out.println("--");
-		}
-		
-		
-		
-		
-		
-		
+   		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);
+
+   		
+		tx.success();
+		tx.finish();
 		graphDb.shutdown();
-		
-		
-		
-		
 	}
-	
 }