Serialization tests
This commit is contained in:
parent
d8656f3a73
commit
69954c3a3d
|
@ -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){
|
||||
|
|
|
@ -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);});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Reference in New Issue