Correct problem with project id and exported/imported project
authorymh <ymh.work@gmail.com>
Wed, 25 Jun 2014 15:37:02 +0200
changeset 308 7fcb9d12e181
parent 307 eaadfa988db4
child 309 0c3e6e66881f
Correct problem with project id and exported/imported project
.classpath
server/pom.xml
server/src/main/java/org/iri_research/renkan/controller/RenkanController.java
server/src/main/java/org/iri_research/renkan/models/Edge.java
server/src/main/java/org/iri_research/renkan/models/Node.java
server/src/main/java/org/iri_research/renkan/rest/ProjectsResource.java
server/src/main/webapp/WEB-INF/templates/projectIndex.html
server/src/test/java/org/iri_research/renkan/test/controller/RenkanControllerTest.java
server/src/test/java/org/iri_research/renkan/test/rest/ProjectRestTest.java
server/src/test/resources/org/iri_research/renkan/test/rest/test-project.json
--- a/.classpath	Sat Jun 14 13:44:22 2014 +0200
+++ b/.classpath	Wed Jun 25 15:37:02 2014 +0200
@@ -205,5 +205,6 @@
 	<classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.2.3/jackson-jaxrs-base-2.2.3.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-collections4/4.0/commons-collections4-4.0.jar"/>
 	<classpathentry kind="var" path="M2_REPO/com/google/guava/guava/17.0/guava-17.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-io/commons-io/2.4/commons-io-2.4.jar"/>
 	<classpathentry kind="output" path="server/target/classes"/>
 </classpath>
--- a/server/pom.xml	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/pom.xml	Wed Jun 25 15:37:02 2014 +0200
@@ -42,6 +42,8 @@
         <fasterxml-java-uuid-generator-version>3.1.3</fasterxml-java-uuid-generator-version>
         <guava-version>17.0</guava-version>
         <json-path-version>0.9.1</json-path-version>
+        <commons-collections-version>4.0</commons-collections-version>
+        <commons-io-version>2.4</commons-io-version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 
@@ -427,7 +429,7 @@
             <groupId>javax.validation</groupId>
             <artifactId>validation-api</artifactId>
             <version>${javax-validation-api-version}</version>
-        </dependency>        
+        </dependency>
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-validator</artifactId>
@@ -441,7 +443,7 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-collections4</artifactId>
-            <version>4.0</version>
+            <version>${commons-collections-version}</version>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
@@ -454,6 +456,12 @@
             <version>${json-path-version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${commons-io-version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <organization>
         <name>IRI</name>
--- a/server/src/main/java/org/iri_research/renkan/controller/RenkanController.java	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/main/java/org/iri_research/renkan/controller/RenkanController.java	Wed Jun 25 15:37:02 2014 +0200
@@ -180,6 +180,7 @@
             nodeIds.put(nodeId, atId);
             nodeNode.put("@id", atId);
             nodeNode.remove("id");
+            nodeNode.remove("project_id");
         }
         
         Iterator<JsonNode> edges = jsonNode.get("edges").elements();
@@ -188,6 +189,7 @@
             edgeNode.put("from", nodeIds.get(edgeNode.get("from").asText()));
             edgeNode.put("to", nodeIds.get(edgeNode.get("to").asText()));
             edgeNode.remove("id");
+            edgeNode.remove("project_id");
         }
 
         String res =  mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode);
--- a/server/src/main/java/org/iri_research/renkan/models/Edge.java	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/main/java/org/iri_research/renkan/models/Edge.java	Wed Jun 25 15:37:02 2014 +0200
@@ -62,6 +62,10 @@
     public String getProjectId() {
         return projectId;
     }
+    
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
 
     public String getCreatedBy() {
         return createdBy;
--- a/server/src/main/java/org/iri_research/renkan/models/Node.java	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/main/java/org/iri_research/renkan/models/Node.java	Wed Jun 25 15:37:02 2014 +0200
@@ -69,6 +69,10 @@
     public String getProjectId() {
         return projectId;
     }
+    
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
 
     @JsonProperty("created_by")
     public String getCreatedBy() {
--- a/server/src/main/java/org/iri_research/renkan/rest/ProjectsResource.java	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/main/java/org/iri_research/renkan/rest/ProjectsResource.java	Wed Jun 25 15:37:02 2014 +0200
@@ -7,6 +7,8 @@
 import javax.ws.rs.Path;
 
 import org.iri_research.renkan.Constants;
+import org.iri_research.renkan.models.Edge;
+import org.iri_research.renkan.models.Node;
 import org.iri_research.renkan.models.Project;
 import org.iri_research.renkan.repositories.EdgesRepository;
 import org.iri_research.renkan.repositories.IRenkanRepository;
@@ -25,7 +27,6 @@
 @Component
 public class ProjectsResource extends RenkanResource<Project, String> {
 
-    @SuppressWarnings("unused")
     private Logger logger = LoggerFactory.getLogger(ProjectsResource.class);
 
     @Autowired
@@ -51,6 +52,13 @@
             obj.setCreated(new DateTime());
         }
         obj.setUpdated(new DateTime());
+        
+        for (Node node : obj.getNodes()) {
+            node.setProjectId(obj.getId());
+        }
+        for (Edge edge : obj.getEdges()) {
+            edge.setProjectId(obj.getId());
+        }
     }
 
     @Override
@@ -66,6 +74,7 @@
     @Override
     protected Project saveObjectPost(Project obj) {
         
+        logger.debug("Project Resource : Save object post " + obj.getTitle());
         this.nodesRepository.save(obj.getNodes());
         this.edgesRepository.save(obj.getEdges());
         return super.saveObjectPost(obj);
--- a/server/src/main/webapp/WEB-INF/templates/projectIndex.html	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/main/webapp/WEB-INF/templates/projectIndex.html	Wed Jun 25 15:37:02 2014 +0200
@@ -135,7 +135,7 @@
                   });
               }
               else {
-                  fr = new FileReader();
+                  var fr = new FileReader();
                   fr.onload = function() {
                       var new_renkan = JSON.parse(fr.result);
                       if(renkantitle.length > 0) {
--- a/server/src/test/java/org/iri_research/renkan/test/controller/RenkanControllerTest.java	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/test/java/org/iri_research/renkan/test/controller/RenkanControllerTest.java	Wed Jun 25 15:37:02 2014 +0200
@@ -187,5 +187,5 @@
         logger.debug("testExportProjectContentExclude resp : "
                 + res.getResponse().getContentAsString());
     }
-
+    
 }
--- a/server/src/test/java/org/iri_research/renkan/test/rest/ProjectRestTest.java	Sat Jun 14 13:44:22 2014 +0200
+++ b/server/src/test/java/org/iri_research/renkan/test/rest/ProjectRestTest.java	Wed Jun 25 15:37:02 2014 +0200
@@ -1,16 +1,23 @@
 package org.iri_research.renkan.test.rest;
 
+import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.TimeZone;
 import java.util.UUID;
 
+import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 
+import org.apache.commons.io.IOUtils;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.iri_research.renkan.models.Edge;
@@ -41,6 +48,7 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.fasterxml.jackson.datatype.joda.JodaModule;
 import com.mongodb.BasicDBObject;
 import com.mongodb.DBCollection;
@@ -82,6 +90,8 @@
     private String spaceId = UUID.randomUUID().toString();
     private String projectId = UUID.randomUUID().toString();
     
+    private File tempFile = null;
+    
     private ObjectMapper getObjectMapper() {
         ObjectMapper mapper = new ObjectMapper();
         mapper.registerModule(new JodaModule());
@@ -145,6 +155,12 @@
         }
 
         this.projectsRepository.save(testProject);
+        try {
+            this.tempFile = File.createTempFile("export_json", ".json");
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
 
     }
 
@@ -156,6 +172,9 @@
         projectRevisionsRepository.deleteAll();
         projectsRepository.deleteAll();
         spacesRepository.deleteAll();
+        if(this.tempFile != null) {
+            this.tempFile.deleteOnExit();
+        }
     }
     
     @Test
@@ -166,7 +185,7 @@
         Assert.assertNotNull("get resp String not empty", respString);
         Assert.assertFalse("get resp String non empty", respString.isEmpty());
         
-        PrintWriter writer = new PrintWriter("/Users/ymh/tmp/export_json.json", "UTF-8");
+        PrintWriter writer = new PrintWriter(this.tempFile, "UTF-8");
         writer.write(respString);
         writer.close();
         
@@ -234,5 +253,65 @@
         }
 
     }
+    
+    @Test
+    public void testPostProject() throws IOException {
+        InputStream in = this.getClass().getResourceAsStream("/org/iri_research/renkan/test/rest/test-project.json");
+        StringWriter sw = new StringWriter();
+        IOUtils.copy(in, sw, "utf-8");
+        
+        String jsonStr = sw.toString().replaceAll("\\<space_id\\>", this.spaceId);
+        
+        WebTarget webResource = this.target();
+        Response resp = webResource.path("projects").request(MediaType.APPLICATION_JSON).post(Entity.entity(jsonStr, MediaType.APPLICATION_JSON), Response.class);
+        
+        Assert.assertEquals("Status must be OK", 201, resp.getStatus());
+        
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode node = mapper.readTree(resp.readEntity(String.class));
+        
+        Assert.assertNotNull("Must have a project in response", node);
+        
+        JsonNode idNode = node.findValue("id");
+        Assert.assertNotNull("Project must have an id", idNode);
+        String id = idNode.asText();
+        Assert.assertNotNull("Project must have an id not null", id);
+        Assert.assertNotEquals("Project must have an id not empty", "", id);
+        
+        Iterator<JsonNode> edges = node.get("edges").elements();
+        int totalEdges = 0;
+        while(edges.hasNext()) {
+            ObjectNode edgeNode = (ObjectNode) edges.next();
+            totalEdges++;
+            JsonNode edgeIdNode = edgeNode.get("id");
+            Assert.assertNotNull("Edge must have an id", edgeIdNode);
+            String edgeId = edgeIdNode.asText();
+            Assert.assertNotNull("Edge must have an id not null",edgeId);
+            Assert.assertNotEquals("Edge must have an id not empty", "", edgeId);
+            JsonNode projIdNode = edgeNode.findValue("project_id");
+            Assert.assertNotNull("Edge project id node not null",projIdNode);
+            Assert.assertNotNull("Edge project id not null",projIdNode.asText());
+            Assert.assertEquals("Edge project id must be" + id, id, projIdNode.asText());
+        }
+        Assert.assertEquals("Must have one edge", 1, totalEdges);
+
+        Iterator<JsonNode> nodes = node.get("nodes").elements();
+        int totalNodes = 0;
+        while(nodes.hasNext()) {
+            ObjectNode nodeNode = (ObjectNode) nodes.next();
+            totalNodes++;
+            JsonNode nodeIdNode = nodeNode.get("id");
+            Assert.assertNotNull("Edge must have an id", nodeIdNode);
+            String nodeId = nodeIdNode.asText();
+            Assert.assertNotNull("Edge must have an id not null",nodeId);
+            Assert.assertNotEquals("Edge must have an id not empty", "", nodeId);
+            JsonNode projIdNode = nodeNode.findValue("project_id");
+            Assert.assertNotNull("Edge project id node not null",projIdNode);
+            Assert.assertNotNull("Edge project id not null",projIdNode.asText());
+            Assert.assertEquals("Edge project id must be" + id, id, projIdNode.asText());
+        }
+        Assert.assertEquals("Must have 2 nodes", 2, totalNodes);
+
+    }
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/test/resources/org/iri_research/renkan/test/rest/test-project.json	Wed Jun 25 15:37:02 2014 +0200
@@ -0,0 +1,47 @@
+{
+  "title" : "Project Rest Post Test",
+  "description" : "",
+  "uri" : null,
+  "color" : null,
+  "revCounter" : 6,
+  "nodes" : [ {
+    "@id" : "f286bae5-4303-49c1-8534-43520e117940",
+    "title" : "storytelling",
+    "description" : "Tag 'storytelling'",
+    "uri" : "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/search/?search=storytelling&field=all",
+    "color" : null,
+    "position" : {
+      "x" : 7.5,
+      "y" : -76.0
+    },
+    "image" : "http://localhost:8080/renkan/static/img/ldt-tag.png",
+    "size" : 0,
+    "created_by" : "roster_user-084bccad-8030-4dcf-96a0-d7acc32a1503"
+  }, {
+    "@id" : "b49ee549-d98a-4b54-b6f0-73ef84a2eccb",
+    "title" : "Introduction générale par Hidetaka Ishida",
+    "description" : "石田英敬によるイントロダクション (langue française フランス語)",
+    "uri" : "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/e328e188-ff2f-11e0-b9e1-00145ea49a02/#id=s_A91AB45B-AB6B-EFCA-4A08-40B2F74F294F",
+    "color" : null,
+    "position" : {
+      "x" : -283.5,
+      "y" : 39.0
+    },
+    "image" : "http://localhost:8080/renkan/static/img/ldt-segment.png",
+    "size" : 0,
+    "created_by" : "roster_user-084bccad-8030-4dcf-96a0-d7acc32a1503"
+  } ],
+  "edges" : [ {
+    "@id" : "15cedd4c-99be-4d83-b849-3ee7d9d26a2c",
+    "title" : "",
+    "description" : "",
+    "uri" : "",
+    "color" : null,
+    "from" : "b49ee549-d98a-4b54-b6f0-73ef84a2eccb",
+    "to" : "f286bae5-4303-49c1-8534-43520e117940",
+    "created_by" : "roster_user-084bccad-8030-4dcf-96a0-d7acc32a1503"
+  } ],
+  "views" : [ ],
+  "users" : [ ],
+  "space_id" : "<space_id>"
+}
\ No newline at end of file