From ee5defdbef05226fe317f8263f1471004963b291 Mon Sep 17 00:00:00 2001
From: Dean Fi <djf@informatik.uni-kiel.de>
Date: Fri, 11 Dec 2015 11:10:08 +0100
Subject: [PATCH] added matcher

---
 NeoSuit/src/main/java/controller/Matcher.java | 60 +++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 NeoSuit/src/main/java/controller/Matcher.java

diff --git a/NeoSuit/src/main/java/controller/Matcher.java b/NeoSuit/src/main/java/controller/Matcher.java
new file mode 100644
index 0000000..7fb0412
--- /dev/null
+++ b/NeoSuit/src/main/java/controller/Matcher.java
@@ -0,0 +1,60 @@
+package controller;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.neo4j.graphdb.GraphDatabaseService;
+import org.neo4j.graphdb.Result;
+import org.neo4j.graphdb.Transaction;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+import java2sdg.db.Neo4Jdb;
+
+public class Matcher {
+
+	public ArrayList<String> applyCP(String pathToDB, String pathToPatternFolder)
+			throws ParserConfigurationException, SAXException, IOException {
+
+		File dir = new File(pathToPatternFolder);
+		ArrayList<String> matchingCPs = new ArrayList<String>();
+
+		if (dir.isDirectory()) {
+			File[] patterns = dir.listFiles();
+
+			if (patterns.length > 0) {
+				DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+				DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+				Document doc;
+				Element root;
+
+				GraphDatabaseService db = new Neo4Jdb(pathToDB).getGraphDatabaseService();
+
+				for (int i = 0; i < patterns.length; i++) {
+					doc = dBuilder.parse(patterns[i]);
+					doc.normalize();
+					root = doc.getDocumentElement();
+					String name = root.getElementsByTagName("name").item(0).getTextContent();
+					String cpQuery = root.getElementsByTagName("cp").item(0).getTextContent();
+
+					try (Transaction tx = db.beginTx(); Result result = db.execute(cpQuery)) {
+						if (result.hasNext()) {
+							matchingCPs.add(name);
+						}
+						tx.success();
+					}
+				}
+
+				db.shutdown();
+			}
+		}
+
+		return matchingCPs;
+	}
+}
\ No newline at end of file
-- 
GitLab