From dea72bf237d2c42d7a78ee08690c93d1f1815b26 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 18 Dec 2020 12:40:46 +0100 Subject: [PATCH] Fixes --- .../engine/mongo/ConcessioniMongoManager.java | 21 +++-- .../service/engine/mongo/MongoManager.java | 28 +++++-- .../service/BasicServiceTestUnit.java | 4 +- .../service/ConcessioniOverMongoTest.java | 82 +++++++++++++++++++ 4 files changed, 117 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java index 6b38c5f..f49fe00 100644 --- a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java +++ b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java @@ -26,7 +26,7 @@ public class ConcessioniMongoManager extends MongoManager{ super(); // TODO Auto-generated constructor stub } - private static final String collectionName="legacy-concessioni"; + private static final String collectionName="legacyConcessioni"; private static final String DB_NAME="gna_dev"; @@ -42,8 +42,10 @@ public class ConcessioniMongoManager extends MongoManager{ } protected static Document asDocument (Concessione c) throws JsonProcessingException { - return Document.parse(Serialization.write(c)); - + Document toReturn=Document.parse(Serialization.write(c)); + if(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty()) + toReturn.append(ID, new ObjectId(c.getMongo_id())); + return toReturn; } protected static Concessione asConcessione (Document d) throws JsonProcessingException, IOException { @@ -52,14 +54,15 @@ public class ConcessioniMongoManager extends MongoManager{ public Concessione registerNew(Concessione toRegister) throws IOException { ObjectId id=insert(asDocument(toRegister), collectionName); + Concessione toReturn=asConcessione(getById(id,collectionName)); toReturn.setMongo_id(id.toHexString()); - update(asDocument(toRegister),collectionName); - return toReturn; + + return asConcessione(update(asDocument(toReturn),collectionName)); } - public void update(Concessione toRegister) throws JsonProcessingException { - update(asDocument(toRegister),collectionName); + public Concessione update(Concessione toRegister) throws IOException { + return asConcessione(update(asDocument(toRegister),collectionName)); } public List list(){ @@ -76,6 +79,7 @@ public class ConcessioniMongoManager extends MongoManager{ } public Concessione getById(String id) throws JsonProcessingException, IOException { + log.debug("Loading by ID "+id); return asConcessione(getById(new ObjectId(id),collectionName)); } public void deleteById(String id) { @@ -87,8 +91,7 @@ public class ConcessioniMongoManager extends MongoManager{ toReturn.setDefaults(); toReturn.validate(); publish(toReturn); - update(asDocument(toReturn),collectionName); - return toReturn; + return asConcessione(update(asDocument(toReturn),collectionName)); } private static PublicationReport publish(Concessione c) { diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java index d217299..354575e 100644 --- a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java +++ b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java @@ -12,6 +12,8 @@ import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.FindOneAndReplaceOptions; +import com.mongodb.client.model.ReturnDocument; import lombok.extern.slf4j.Slf4j; @@ -20,7 +22,7 @@ public abstract class MongoManager { protected MongoClient client=null; - + protected static final String ID="_id"; public MongoManager() throws ConfigurationException { @@ -42,16 +44,24 @@ public abstract class MongoManager { // NB BsonId protected ObjectId insert(Document proj, String collectionName) { MongoDatabase database=getDatabase(); - MongoCollection collection = database.getCollection(collectionName); - collection.insertOne(Document.parse(proj.toJson())); - return proj.getObjectId("_id"); + MongoCollection collection = database.getCollection(collectionName); + // Check if _id is present + ObjectId id=proj.getObjectId(ID); + if(id==null) { + proj.append(ID, new ObjectId()); + id=proj.getObjectId(ID); + } + + + collection.insertOne(Document.parse(proj.toJson())); + return id; } public void delete(ObjectId id, String collectionName) { MongoDatabase database=getDatabase(); MongoCollection collection = database.getCollection(collectionName); - collection.deleteOne(eq("_id",id)); + collection.deleteOne(eq(ID,id)); } @@ -59,7 +69,7 @@ public abstract class MongoManager { public Document getById(ObjectId id,String collectionName) { MongoDatabase database=getDatabase(); MongoCollection coll=database.getCollection(collectionName); - return coll.find(new Document("_id",id)).first(); + return coll.find(new Document(ID,id)).first(); } @@ -82,10 +92,12 @@ public abstract class MongoManager { return coll.find(filter,clazz); } - public void update(Document toUpdate,String collectionName) { + public Document update(Document toUpdate,String collectionName) { MongoDatabase database=getDatabase(); MongoCollection coll=database.getCollection(collectionName); - coll.findOneAndReplace(eq("_id",toUpdate.getObjectId("_id")), toUpdate); + return coll.findOneAndReplace( + eq(ID,toUpdate.getObjectId(ID)), toUpdate,new FindOneAndReplaceOptions().returnDocument(ReturnDocument.AFTER)); + } diff --git a/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java b/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java index 77fb6f5..e05a8f9 100644 --- a/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java +++ b/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java @@ -78,6 +78,8 @@ public class BasicServiceTestUnit extends JerseyTest { if(resp.getStatus()<200||resp.getStatus()>=300) throw new Exception("RESP STATUS IS "+resp.getStatus()+". Message : "+resString); System.out.println("Resp String is "+resString); - return Serialization.read(resString, clazz); + if(clazz!=null) + return Serialization.read(resString, clazz); + else return null; } } diff --git a/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java b/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java index 8642243..fb7840c 100644 --- a/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java +++ b/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java @@ -10,6 +10,7 @@ import javax.ws.rs.core.Response; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.service.utils.Serialization; +import org.junit.Assert; import org.junit.Test; public class ConcessioniOverMongoTest extends BasicServiceTestUnit{ @@ -17,6 +18,9 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{ private static final String PATH="mongo-concessioni"; + private static final String PUBLISH_PATH="publish"; + private static final String FILES_PATH="registerFiles"; + @Test public void list() { @@ -30,7 +34,85 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{ Concessione conc=TestModel.prepareConcessione(); Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON)); Concessione c=check(resp,Concessione.class); + Assert.assertTrue(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty()); System.out.println("ID IS "+c.getMongo_id()); } + + @Test + public void delete() throws Exception { + WebTarget target=target(PATH); + Concessione conc=TestModel.prepareConcessione(); + Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON)); + Concessione c=check(resp,Concessione.class); + System.out.println("ID IS "+c.getMongo_id()); + + Assert.assertTrue(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty()); + + resp=target.path(c.getMongo_id()).request(MediaType.APPLICATION_JSON).delete(); + check(resp,null); + } + + + @Test + public void getById() throws Exception { + WebTarget target=target(PATH); + Concessione conc=TestModel.prepareConcessione(); + Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON)); + Concessione c=check(resp,Concessione.class); + + Assert.assertTrue(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty()); + + resp=target.path(c.getMongo_id()).request(MediaType.APPLICATION_JSON).get(); + Concessione loaded=check(resp,Concessione.class); + System.out.println("Got by ID "+loaded); + + Assert.assertTrue(loaded.getMongo_id()!=null&&!loaded.getMongo_id().isEmpty()); + } + + + @Test + public void update() throws Exception { + WebTarget target=target(PATH); + Concessione conc=TestModel.prepareConcessione(); + Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON)); + Concessione c=check(resp,Concessione.class); + + resp=target.path(c.getMongo_id()).request(MediaType.APPLICATION_JSON).get(); + Concessione loaded=check(resp,Concessione.class); + + Assert.assertTrue(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty()); + System.out.println("Modifying "+loaded); + String newTitle="Questo titolo l'ho modificato mo'"; + loaded.setNome(newTitle); + + resp=target.request(MediaType.APPLICATION_JSON).put(Entity.entity(Serialization.write(loaded), MediaType.APPLICATION_JSON)); + Assert.assertTrue(check(resp,Concessione.class).getNome().equals(newTitle)); + + } + + @Test + public void uploadFile() { + // TODO + } + + @Test + public void publish() throws Exception { + WebTarget target=target(PATH); + Concessione conc=TestModel.prepareConcessione(); + Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON)); + Concessione c=check(resp,Concessione.class); +// System.out.println("ID IS "+c.getMongo_id()); + resp=target.path(c.getMongo_id()).request(MediaType.APPLICATION_JSON).get(); + Concessione loaded=check(resp,Concessione.class); + System.out.println("Modifying "+loaded); + String newTitle="Questo titolo l'ho modificato mo'"; + loaded.setNome(newTitle); + + resp=target.path(PUBLISH_PATH).path(c.getMongo_id()).request(MediaType.APPLICATION_JSON). + put(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON)); + + // TODO Validation +// Assert.assertTrue(check(resp,Concessione.class).getNome().equals(newTitle)); + } }