diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5c259d7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,35 @@
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+# https://github.com/takari/maven-wrapper#usage-without-binary-jar
+.mvn/wrapper/maven-wrapper.jar
+
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
\ No newline at end of file
diff --git a/link-serv.iml b/link-serv.iml
new file mode 100644
index 0000000..64c6c51
--- /dev/null
+++ b/link-serv.iml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkserv.iml b/linkserv.iml
new file mode 100644
index 0000000..64c6c51
--- /dev/null
+++ b/linkserv.iml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..4108a7f
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,98 @@
+
+
+ 4.0.0
+
+ link-serv
+ link-serv
+ 1.0-SNAPSHOT
+ war
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ LATEST
+
+
+
+ 14
+ org.bibalex.linkserv.MainLinkServ
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework
+ spring-web
+ LATEST
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-rest
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+
+ org.neo4j
+ neo4j
+ LATEST
+
+
+
+ org.neo4j.driver
+ neo4j-java-driver
+ LATEST
+
+
+
+ org.json
+ json
+ 20180130
+
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.13.2
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.7
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/bibalex/linkserv/MainLinkServ.java b/src/main/java/org/bibalex/linkserv/MainLinkServ.java
new file mode 100644
index 0000000..dc503cf
--- /dev/null
+++ b/src/main/java/org/bibalex/linkserv/MainLinkServ.java
@@ -0,0 +1,27 @@
+package org.bibalex.linkserv;
+
+import org.bibalex.linkserv.handlers.PropertiesHandler;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+import java.io.IOException;
+
+@SpringBootApplication
+public class MainLinkServ extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(MainLinkServ.class);
+ }
+
+ public static void main (String [] args){
+ try {
+ PropertiesHandler.initializeProperties();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ SpringApplication.run(MainLinkServ.class, args);
+ }
+}
diff --git a/src/main/java/org/bibalex/linkserv/controllers/LinkServController.java b/src/main/java/org/bibalex/linkserv/controllers/LinkServController.java
new file mode 100644
index 0000000..8965c67
--- /dev/null
+++ b/src/main/java/org/bibalex/linkserv/controllers/LinkServController.java
@@ -0,0 +1,52 @@
+package org.bibalex.linkserv.controllers;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.bibalex.linkserv.errors.OperationNotFoundException;
+import org.bibalex.linkserv.handlers.PropertiesHandler;
+import org.bibalex.linkserv.services.LinkServService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/")
+public class LinkServController {
+
+ @Autowired
+ private LinkServService linkServService;
+
+ private static final Logger LOGGER = LogManager.getLogger(LinkServController.class);
+
+ @RequestMapping(value = "/{workspaceName}", method = RequestMethod.POST)
+ public ResponseEntity updateGraph(@PathVariable("workspaceName") String workspaceName,
+ @RequestBody String jsonGraph,
+ @RequestParam String operation) {
+
+ LOGGER.info("Updating Graph with Parameters: " + workspaceName);
+ if (operation.equals(PropertiesHandler.getProperty("updateGraph"))) {
+ LOGGER.info("Response Status: 200");
+ return ResponseEntity.ok(linkServService.updateGraph(jsonGraph));
+ } else {
+ LOGGER.error("Response Status: 500, Operation Not Found: " + operation);
+ throw new OperationNotFoundException(operation);
+ }
+ }
+
+ @RequestMapping(method = RequestMethod.GET, value = "/{workspaceName}")
+ public ResponseEntity getGraph(@PathVariable("workspaceName") String workspaceName,
+ @RequestParam String operation,
+ @RequestParam(required = false, defaultValue = "1") Integer depth) {
+
+ LOGGER.info("Getting Graph with Parameters: " + workspaceName + " and Depth: " + depth);
+ if (operation.equals(PropertiesHandler.getProperty("getGraph"))) {
+ LOGGER.info("Response Status: 200");
+ return ResponseEntity.ok(linkServService.getGraph(workspaceName, depth));
+ } else {
+ LOGGER.error("Response Status: 500, Operation Not Found: " + operation);
+ throw new OperationNotFoundException(operation);
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/bibalex/linkserv/errors/OperationNotFoundException.java b/src/main/java/org/bibalex/linkserv/errors/OperationNotFoundException.java
new file mode 100644
index 0000000..ae9bc68
--- /dev/null
+++ b/src/main/java/org/bibalex/linkserv/errors/OperationNotFoundException.java
@@ -0,0 +1,9 @@
+package org.bibalex.linkserv.errors;
+
+public class OperationNotFoundException extends RuntimeException {
+
+ public OperationNotFoundException(String operation) {
+ super("Invalid operation: " + operation);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/bibalex/linkserv/handlers/JSONHandler.java b/src/main/java/org/bibalex/linkserv/handlers/JSONHandler.java
new file mode 100644
index 0000000..ed4c2b0
--- /dev/null
+++ b/src/main/java/org/bibalex/linkserv/handlers/JSONHandler.java
@@ -0,0 +1,174 @@
+package org.bibalex.linkserv.handlers;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.bibalex.linkserv.models.Edge;
+import org.bibalex.linkserv.models.Node;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
+public class JSONHandler {
+
+ private Neo4jHandler neo4jHandler;
+ private ArrayList