This commit is contained in:
Fabio Sinibaldi 2020-12-18 12:40:46 +01:00
parent ab1d97ad3b
commit dea72bf237
4 changed files with 117 additions and 18 deletions

View File

@ -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<Concessione> 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) {

View File

@ -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<Document> collection = database.getCollection(collectionName);
collection.insertOne(Document.parse(proj.toJson()));
return proj.getObjectId("_id");
MongoCollection<Document> 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<Document> 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<Document> 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<Document> 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));
}

View File

@ -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;
}
}

View File

@ -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));
}
}