From 62692a05fc9ff860088211a9100f89999b7a202f Mon Sep 17 00:00:00 2001
From: JamieHoch <jamie.hochrainer@student.uibk.ac.at>
Date: Mon, 6 Dec 2021 21:46:34 +0100
Subject: [PATCH] model and rest endpoint (Post and Get) for Constraints, Graph
 and Result

---
 .../com/kgshape/app/model/Constraints.java    | 80 ++++++++++++++++++-
 .../java/com/kgshape/app/model/Graph.java     | 17 +++-
 .../java/com/kgshape/app/model/Result.java    | 75 ++++++++++++++++-
 .../kgshape/app/model/demo/ComplexObject.java |  2 +-
 .../kgshape/app/rest/ConstraintsEndpoint.java | 40 +++++++++-
 .../com/kgshape/app/rest/GraphEndpoint.java   | 32 +++++++-
 .../com/kgshape/app/rest/ResultEndpoint.java  | 30 ++++++-
 7 files changed, 268 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/kgshape/app/model/Constraints.java b/src/main/java/com/kgshape/app/model/Constraints.java
index e4b497a..5f0db0f 100644
--- a/src/main/java/com/kgshape/app/model/Constraints.java
+++ b/src/main/java/com/kgshape/app/model/Constraints.java
@@ -1,5 +1,83 @@
-package com.kgshape.app.model.demo;
+package com.kgshape.app.model;
 
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.util.List;
+
+@XmlRootElement
 public class Constraints {
+    private long id;
+
+    //we get the constraints by query of the Graph
+    private Graph graph;
+
+    // e.g. Person
+    private String typeName;
+
+    // e.g ["anna","carol"]
+    private List<String> nodes;
+
+    // e.g. [hasAge,hasName]
+    private List<String> properties;
+
+    @Override
+    public String toString() {
+        return "Constraints{" +
+                "id=" + id +
+                ", graph=" + graph +
+                ", typeName='" + typeName + '\'' +
+                ", nodes=" + nodes +
+                ", properties=" + properties +
+                '}';
+    }
+
+    public Constraints(){}
+
+    public Constraints(long id, Graph graph, String typeName, List<String> nodes, List<String> properties) {
+        this.id = id;
+        this.graph = graph;
+        this.typeName = typeName;
+        this.nodes = nodes;
+        this.properties = properties;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public Graph getGraph() {
+        return graph;
+    }
+
+    public void setGraph(Graph graph) {
+        this.graph = graph;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public List<String> getNodes() {
+        return nodes;
+    }
+
+    public void setNodes(List<String> nodes) {
+        this.nodes = nodes;
+    }
+
+    public List<String> getProperties() {
+        return properties;
+    }
 
+    public void setProperties(List<String> properties) {
+        this.properties = properties;
+    }
 }
diff --git a/src/main/java/com/kgshape/app/model/Graph.java b/src/main/java/com/kgshape/app/model/Graph.java
index a71f8e9..54d4b30 100644
--- a/src/main/java/com/kgshape/app/model/Graph.java
+++ b/src/main/java/com/kgshape/app/model/Graph.java
@@ -1,4 +1,4 @@
-package com.kgshape.app.model.demo;
+package com.kgshape.app.model;
 
 import jakarta.xml.bind.annotation.XmlRootElement;
 
@@ -8,14 +8,19 @@ public class Graph {
     private long id;
     // e.g. RiverBodyOfWater or Airport or Person
     private String rdfType;
+
     private String graphFileLocation;
 
+    private String query;
+
+
     public Graph(){}
 
-    public Graph(long id, String rdfType, String graphFileLocation) {
+    public Graph(long id, String rdfType, String graphFileLocation, String query) {
         this.id = id;
         this.rdfType = rdfType;
         this.graphFileLocation = graphFileLocation;
+        this.query = query;
     }
 
     @Override
@@ -50,4 +55,12 @@ public class Graph {
     public void setGraphFileLocation(String graphFileLocation) {
         this.graphFileLocation = graphFileLocation;
     }
+
+    public String getQuery() {
+        return query;
+    }
+
+    public void setQuery(String query) {
+        this.query = query;
+    }
 }
diff --git a/src/main/java/com/kgshape/app/model/Result.java b/src/main/java/com/kgshape/app/model/Result.java
index eca2653..231a6bf 100644
--- a/src/main/java/com/kgshape/app/model/Result.java
+++ b/src/main/java/com/kgshape/app/model/Result.java
@@ -1,2 +1,75 @@
-package com.kgshape.app.model;public class Result {
+package com.kgshape.app.model;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.util.List;
+
+@XmlRootElement
+public class Result {
+
+    private long id;
+
+    // output of KG verificator
+    private boolean verified;
+
+    // e.g. age
+    private List<String> missingProperties;
+
+    // unmodified contraints
+    private Constraints constraints;
+
+    // contstaints that the user has modified
+    private Constraints modifiedConstraints;
+
+    public Result(){}
+
+    public Result(long id, boolean verified, List<String> missingProperties, Constraints constraints, Constraints modifiedConstraints) {
+        this.id = id;
+        this.verified = verified;
+        this.missingProperties = missingProperties;
+        this.constraints = constraints;
+        this.modifiedConstraints = modifiedConstraints;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public boolean isVerified() {
+        return verified;
+    }
+
+    public void setVerified(boolean verified) {
+        this.verified = verified;
+    }
+
+    public List<String> getMissingProperties() {
+        return missingProperties;
+    }
+
+    public void setMissingProperties(List<String> missingProperties) {
+        this.missingProperties = missingProperties;
+    }
+
+    public Constraints getConstraints() {
+        return constraints;
+    }
+
+    public void setConstraints(Constraints constraints) {
+        this.constraints = constraints;
+    }
+
+    public Constraints getModifiedConstraints() {
+        return modifiedConstraints;
+    }
+
+    public void setModifiedConstraints(Constraints modifiedConstraints) {
+        this.modifiedConstraints = modifiedConstraints;
+    }
+
+
 }
diff --git a/src/main/java/com/kgshape/app/model/demo/ComplexObject.java b/src/main/java/com/kgshape/app/model/demo/ComplexObject.java
index 76b11dc..af948c3 100644
--- a/src/main/java/com/kgshape/app/model/demo/ComplexObject.java
+++ b/src/main/java/com/kgshape/app/model/demo/ComplexObject.java
@@ -1,4 +1,4 @@
-package com.kgshape.app.model;
+package com.kgshape.app.model.demo;
 
 import jakarta.xml.bind.annotation.XmlRootElement;
 
diff --git a/src/main/java/com/kgshape/app/rest/ConstraintsEndpoint.java b/src/main/java/com/kgshape/app/rest/ConstraintsEndpoint.java
index dc24f74..aa0a420 100644
--- a/src/main/java/com/kgshape/app/rest/ConstraintsEndpoint.java
+++ b/src/main/java/com/kgshape/app/rest/ConstraintsEndpoint.java
@@ -1,2 +1,40 @@
-package com.kgshape.app.rest;public class ConstraintsEndpoint {
+package com.kgshape.app.rest;
+
+import com.kgshape.app.model.Constraints;
+import com.kgshape.app.model.Graph;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RequestScoped
+@Path("/constraints")
+public class ConstraintsEndpoint {
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Constraints getConstraints() {
+        List<String> nodes = new ArrayList<>();
+        List<String> properties = new ArrayList<>();
+        nodes.add("carol");
+        nodes.add("anna");
+        properties.add("hasAge");
+        return new Constraints(1,new Graph(), "Person",nodes,properties);
+    }
+
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Constraints createConstraintsbyGraph(Graph graph){
+        Constraints constraints = new Constraints();
+        constraints.setGraph(graph);
+        // todo use kgShaper on the graph to get constraints
+        //constraints.setTypeName("...");
+        //constraints.setNodes(...);
+        //constraints.setProperties(...);
+        return constraints;
+    }
+
+
 }
diff --git a/src/main/java/com/kgshape/app/rest/GraphEndpoint.java b/src/main/java/com/kgshape/app/rest/GraphEndpoint.java
index e4d40bb..13ad838 100644
--- a/src/main/java/com/kgshape/app/rest/GraphEndpoint.java
+++ b/src/main/java/com/kgshape/app/rest/GraphEndpoint.java
@@ -1,2 +1,32 @@
-package com.kgshape.app.rest;public class GraphEndpoint {
+package com.kgshape.app.rest;
+
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.ws.rs.*;
+import com.kgshape.app.model.Graph;
+import jakarta.ws.rs.core.MediaType;
+
+@RequestScoped
+@Path("/graph")
+public class GraphEndpoint {
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Graph getGraph() {
+        return new Graph(1, "myRiverBody","hihi","myquery");
+    }
+
+    // post request that takes in a rdfType (e.g. RiverBodyOfWater) and fetches that data type
+    // from sparql for local use.
+    // Returns result of sparql query (i.e. graph)
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Graph createGraph(String rdfType){
+        Graph graphToCreate = new Graph();
+        graphToCreate.setRdfType(rdfType);
+        graphToCreate.setQuery("queryHardCoded");
+        graphToCreate.setGraphFileLocation("somethingHardCoded");
+        // todo run query on rdf Type, this will do some stuff
+        // return Response.accepted().build();
+        return graphToCreate;
+    }
 }
diff --git a/src/main/java/com/kgshape/app/rest/ResultEndpoint.java b/src/main/java/com/kgshape/app/rest/ResultEndpoint.java
index 8808408..30909b6 100644
--- a/src/main/java/com/kgshape/app/rest/ResultEndpoint.java
+++ b/src/main/java/com/kgshape/app/rest/ResultEndpoint.java
@@ -1,2 +1,30 @@
-package com.kgshape.app.rest;public class ResultEndpoint {
+package com.kgshape.app.rest;
+
+import com.kgshape.app.model.Constraints;
+import com.kgshape.app.model.Graph;
+import com.kgshape.app.model.Result;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+
+@RequestScoped
+@Path("/result")
+public class ResultEndpoint {
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Result getResult() {
+        return new Result();
+    }
+
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Result createResult(Constraints constraints){
+        Result result = new Result();
+        result.setConstraints(constraints);
+        // todo use kgVerificator on constraints to get result
+        //result.setVerified(false);
+        //result.setMissingProperties(...);
+        return result;
+    }
 }
-- 
GitLab