Serialization tests

This commit is contained in:
Fabio Sinibaldi 2020-11-26 16:08:41 +01:00
parent d8656f3a73
commit 69954c3a3d
3 changed files with 95 additions and 12 deletions

View File

@ -1,4 +1,4 @@
package org.gcube.application.geoportal.service.rest;
package org.gcube.application.geoportal.service.rest;
import java.util.Collection;
@ -10,6 +10,7 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response.Status;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.managers.ConcessioneManager;
@ -67,8 +68,10 @@ public class Concessioni {
try {
log.info("Loading Concessione by id {} ",id);
Concessione toReturn=(Concessione) ConcessioneManager.getByID(Long.parseLong(id));
if(toReturn==null)
throw new WebApplicationException("Concessione non trovata",Status.NOT_FOUND);
log.debug("Loaded object {} ",toReturn);
return toReturn.asJson();
return Serialization.write(toReturn);
}catch(WebApplicationException e){
log.warn("Unable to serve request",e);
throw e;
@ -87,7 +90,7 @@ public class Concessioni {
Concessione conc=Serialization.read(toRegister, Concessione.class);
ConcessioneManager manager=ManagerFactory.registerNew(conc);
manager.commitSafely(false);
return manager.getRecord().asJson();
return Serialization.write(manager.getRecord());
}catch(WebApplicationException e){
log.warn("Unable to serve request",e);
throw e;
@ -134,7 +137,7 @@ public class Concessioni {
// PublicationReport report=manager.commitSafely(false);
Concessione c=manager.commit(false);
log.debug("Published "+c.asJson());
log.debug("Published "+Serialization.write(c));
return c.validate().prettyPrint();
}catch(WebApplicationException e){
log.warn("Unable to serve request",e);
@ -156,7 +159,7 @@ public class Concessioni {
log.debug("Found "+toReturn.size()+" elements..");
JSONArray array=new JSONArray();
for(Concessione found:toReturn) {
array.put(found.asJson());
array.put(Serialization.write(found));
}
return array.toString();
}catch(WebApplicationException e){

View File

@ -2,6 +2,14 @@ package org.gcube.application.geoportal.service.utils;
import java.io.IOException;
import org.gcube.application.geoportal.model.Record;
import org.gcube.application.geoportal.model.concessioni.Concessione;
import org.gcube.application.geoportal.model.concessioni.LayerConcessione;
import org.gcube.application.geoportal.model.content.AssociatedContent;
import org.gcube.application.geoportal.model.content.OtherContent;
import org.gcube.application.geoportal.model.content.PersistedContent;
import org.gcube.application.geoportal.model.content.UploadedImage;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -14,13 +22,69 @@ public class Serialization {
static {
mapper=new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
mapper.registerModule(new JavaTimeModule());
mapper.registerModule(new JavaTimeModule());
}
public static <T> T read(String jsonString,Class<T> clazz) throws JsonProcessingException, IOException {
return mapper.readerFor(clazz).readValue(jsonString);
}
public static String write(Object toWrite) throws JsonProcessingException {
return mapper.writeValueAsString(toWrite);
if(toWrite instanceof Concessione)
detach((Concessione) toWrite);
String toReturn= mapper.writeValueAsString(toWrite);
if(toWrite instanceof Concessione)
reattach((Concessione) toWrite);
return toReturn;
}
// Avoid infiniteLoop in JPA
private static void detach(Concessione c) {
if (c!=null) {
detach(c.getRelazioneScavo());
detach(c.getPosizionamentoScavo());
if(c.getPianteFineScavo()!=null)
c.getPianteFineScavo().forEach((LayerConcessione l)->{detach(l);});
if(c.getImmaginiRappresentative()!=null)
c.getImmaginiRappresentative().forEach(((UploadedImage u)->{detach(u);}));
if(c.getGenericContent()!=null)
c.getGenericContent().forEach(((OtherContent u)->{detach(u);}));
}
}
private static void detach(AssociatedContent a) {
if(a!=null) {
a.setRecord(null);
if(a.getActualContent()!=null)
a.getActualContent().forEach((PersistedContent p)->{p.setAssociated(null);});
}
}
private static void reattach(Concessione c) {
if(c!=null) {
reattach(c.getRelazioneScavo(),c);
reattach(c.getPosizionamentoScavo(),c);
if(c.getPianteFineScavo()!=null)
c.getPianteFineScavo().forEach((LayerConcessione l)->{reattach(l,c);});
if(c.getImmaginiRappresentative()!=null)
c.getImmaginiRappresentative().forEach(((UploadedImage u)->{reattach(u,c);}));
if(c.getGenericContent()!=null)
c.getGenericContent().forEach(((OtherContent u)->{reattach(u,c);}));
}
}
private static void reattach(AssociatedContent a,Record r) {
if(a!=null) {
a.setRecord(r);
if(a.getActualContent()!=null)
a.getActualContent().forEach((PersistedContent p)->{p.setAssociated(a);});
}
}
}

View File

@ -9,6 +9,7 @@ import java.io.IOException;
import java.util.Collection;
import javax.persistence.EntityManagerFactory;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Application;
@ -17,6 +18,7 @@ import javax.ws.rs.core.Response;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.managers.AbstractRecordManager;
import org.gcube.application.geoportal.model.concessioni.Concessione;
import org.gcube.application.geoportal.model.concessioni.LayerConcessione;
import org.gcube.application.geoportal.model.content.AssociatedContent;
@ -55,7 +57,9 @@ public class ConcessioniTest extends JerseyTest {
@BeforeClass
public static void init() {
String scope="/gcube/devsec/devVRE";
ImplementationProvider.get().setEmfProvider(new ScopedEMFProvider(){
AbstractRecordManager.setDefaultProvider(
new ScopedEMFProvider(){
@Override
public EntityManagerFactory getFactory() {
@ -75,6 +79,18 @@ public class ConcessioniTest extends JerseyTest {
}
@Test
public void readId() {
WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI);
try{
System.out.println(target.path("1").request(MediaType.APPLICATION_JSON).get(String.class));
}catch(WebApplicationException e) {
if(e.getResponse().getStatus()==404)
System.out.println("Object not found");
else throw e;
}
}
@Test
public void list() throws JsonProcessingException, IOException{
WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI);
@ -86,7 +102,7 @@ public class ConcessioniTest extends JerseyTest {
for(Object o:coll) {
System.out.println("Object class is "+o.getClass());
Concessione c=Serialization.read(o.toString(), Concessione.class);
System.out.println("Concessione is : "+c.asJson());
System.out.println("Concessione is : "+Serialization.write(c));
}
}
@ -112,7 +128,7 @@ public class ConcessioniTest extends JerseyTest {
public void publishNew() throws IOException, RemoteBackendException, ConfigurationException {
Concessione toCreate=TestModel.prepareEmptyConcessione();
Concessione registered = pushConcessione(toCreate);
System.out.println("Registered at "+registered.asJson());
System.out.println("Registered at "+Serialization.write(registered));
Concessione fullTemplate=TestModel.prepareConcessione();
//Push Relazione
@ -138,7 +154,7 @@ public class ConcessioniTest extends JerseyTest {
Concessione reloaded = getById(registered.getId()+"");
System.out.println("Goind to publish "+reloaded.asJson());
System.out.println("Goind to publish "+Serialization.write(reloaded));
PublicationReport report=publish(registered.getId()+"");
System.out.println("REPORT IS "+report.prettyPrint()+"");
// System.out.println("Concessione is "+report.getTheRecord().asJson());
@ -188,7 +204,7 @@ public class ConcessioniTest extends JerseyTest {
private Concessione pushConcessione(Concessione c) throws com.fasterxml.jackson.core.JsonProcessingException, IOException {
WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI);
Response resp=target.request(MediaType.APPLICATION_JSON).put(Entity.entity(c.asJson(), MediaType.APPLICATION_JSON));
Response resp=target.request(MediaType.APPLICATION_JSON).put(Entity.entity(Serialization.write(c), MediaType.APPLICATION_JSON));
String resString=resp.readEntity(String.class);
System.out.println("Resp String is "+resString);
Concessione registered=Serialization.read(resString, Concessione.class);