package org.gcube.application.geoportal.service.legacy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UncheckedIOException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Properties; import javax.persistence.EntityManagerFactory; import javax.persistence.SharedCacheMode; import javax.persistence.ValidationMode; import javax.persistence.spi.ClassTransformer; import javax.persistence.spi.PersistenceUnitInfo; import javax.persistence.spi.PersistenceUnitTransactionType; import javax.sql.DataSource; 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.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.managers.DefatulEMFProvider; 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.UploadedImage; import org.gcube.application.geoportal.model.fault.ConfigurationException; import org.gcube.application.geoportal.model.report.PublicationReport; import org.gcube.application.geoportal.service.GeoportalService; import org.gcube.application.geoportal.service.engine.ImplementationProvider; import org.gcube.application.geoportal.service.engine.StorageClientProvider; import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest; import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.SHUBFileDescriptor; import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.Section; import org.gcube.application.geoportal.service.utils.Serialization; import org.gcube.com.fasterxml.jackson.core.JsonProcessingException; import org.gcube.contentmanagement.blobstorage.service.IClient; import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException; import org.glassfish.jersey.test.JerseyTest; import org.junit.BeforeClass; import org.junit.Test; import lombok.extern.slf4j.Slf4j; @Slf4j public class Concessioni extends JerseyTest { @Override protected Application configure() { return new GeoportalService(); } @BeforeClass public static void init() { String scope="/gcube/devNext/NextNext"; AbstractRecordManager.setDefaultProvider(new DefatulEMFProvider(){ @Override public EntityManagerFactory getFactory() { // System.err.println("***********************SETTING DEBUG CONTEXT******************"); TokenSetter.set(scope); return super.getFactory(); } }); ImplementationProvider.get().setStorageProvider(new StorageClientProvider() { @Override public IClient getObject() throws ConfigurationException { TokenSetter.set(scope); return super.getObject(); } }); } @Test public void failPublish() throws com.fasterxml.jackson.core.JsonProcessingException, IOException { Concessione toCreate=TestModel.prepareEmptyConcessione(); Concessione conc=pushConcessione(toCreate); System.out.println(publish(conc.getId()+"").prettyPrint()); } @Test public void list() throws JsonProcessingException, IOException{ WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI); System.err.println(target.getUri()); Collection coll=target.request(MediaType.APPLICATION_JSON).get(Collection.class); System.out.println("Size of collection is "+coll.size()); System.out.println("Iterating through objects.. "); 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()); } } @Test public void createNew() throws IOException { Concessione toCreate=TestModel.prepareEmptyConcessione(); pushConcessione(toCreate); } @Test public void publishNew() throws IOException, RemoteBackendException, ConfigurationException { Concessione toCreate=TestModel.prepareEmptyConcessione(); WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI); Response resp=target.request(MediaType.APPLICATION_JSON).put(Entity.entity(toCreate.asJson(), MediaType.APPLICATION_JSON)); String resString=resp.readEntity(String.class); System.out.println("Resp String is "+resString); Concessione registered=Serialization.read(resString, Concessione.class); System.out.println("Registered concessione at : "+registered); Concessione fullTemplate=TestModel.prepareConcessione(); publishSection(registered.getId()+"",formRequest(Section.RELAZIONE,fullTemplate.getRelazioneScavo(),"concessioni/relazione.pdf")); for(UploadedImage img:fullTemplate.getImmaginiRappresentative()) publishSection(registered.getId()+"",formRequest(Section.UPLOADED_IMG,img,"concessioni/immagine.png")); publishSection(registered.getId()+"",formRequest(Section.POSIZIONAMENTO,fullTemplate.getPosizionamentoScavo(),"concessioni/pos.dbf","concessioni/pos.shp")); for(LayerConcessione l:fullTemplate.getPianteFineScavo()) publishSection(registered.getId()+"",formRequest(Section.PIANTA,l,"concessioni/pos.dbf","concessioni/pos.shp")); System.out.println("REPORT IS "+publish(registered.getId()+"")); } private PublicationReport publish(String id) throws com.fasterxml.jackson.core.JsonProcessingException, IOException { WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI); Response resp=target.path(id).request(MediaType.APPLICATION_JSON).post(null); String resString=resp.readEntity(String.class); System.out.println("Resp String is "+resString); PublicationReport registered=Serialization.read(resString, PublicationReport.class); System.out.println("Registered concessione at : "+registered); return registered; } private AddSectionToConcessioneRequest formRequest(Section section,AssociatedContent content,String... files) throws RemoteBackendException, FileNotFoundException, ConfigurationException { AddSectionToConcessioneRequest toReturn=new AddSectionToConcessioneRequest(); toReturn.setSection(section); toReturn.setToRegister(content); for(String f:files) { SHUBFileDescriptor desc=new SHUBFileDescriptor(); desc.setFilename(f.substring(f.lastIndexOf("/"))); String sId=ImplementationProvider.get().getStorageProvider().store( new FileInputStream(Files.getFileFromResources(f))); desc.setShubID(sId); } return toReturn; } private Response publishSection(String id, AddSectionToConcessioneRequest request) { WebTarget target=target(InterfaceConstants.Methods.CONCESSIONI); return target.path(id).request(MediaType.APPLICATION_JSON).put(Entity.entity(request, MediaType.APPLICATION_JSON)); } 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)); String resString=resp.readEntity(String.class); System.out.println("Resp String is "+resString); Concessione registered=Serialization.read(resString, Concessione.class); System.out.println("Registered concessione at : "+registered); return registered; } private static PersistenceUnitInfo archiverPersistenceUnitInfo() { final List MANAGED_CLASSES=Arrays.asList(new String[] { "org.gcube.application.geoportal.model.Record", "org.gcube.application.geoportal.model.concessioni.Concessione", "org.gcube.application.geoportal.model.concessioni.LayerConcessione", "org.gcube.application.geoportal.model.concessioni.RelazioneScavo", "org.gcube.application.geoportal.model.content.AssociatedContent", "org.gcube.application.geoportal.model.content.GeoServerContent", "org.gcube.application.geoportal.model.content.OtherContent", "org.gcube.application.geoportal.model.content.PersistedContent", "org.gcube.application.geoportal.model.content.UploadedImage", "org.gcube.application.geoportal.model.content.WorkspaceContent", "org.gcube.application.geoportal.model.gis.ShapeFileLayerDescriptor", "org.gcube.application.geoportal.model.gis.SDILayerDescriptor"}); return new PersistenceUnitInfo() { @Override public String getPersistenceUnitName() { return "ApplicationPersistenceUnit"; } @Override public String getPersistenceProviderClassName() { return "org.hibernate.jpa.HibernatePersistenceProvider"; } @Override public PersistenceUnitTransactionType getTransactionType() { return PersistenceUnitTransactionType.RESOURCE_LOCAL; } @Override public DataSource getJtaDataSource() { return null; } @Override public DataSource getNonJtaDataSource() { return null; } @Override public List getMappingFileNames() { return Collections.emptyList(); } @Override public List getJarFileUrls() { try { return Collections.list(this.getClass() .getClassLoader() .getResources("")); } catch (IOException e) { throw new UncheckedIOException(e); } } @Override public URL getPersistenceUnitRootUrl() { return null; } @Override public List getManagedClassNames() { return MANAGED_CLASSES; } @Override public boolean excludeUnlistedClasses() { return true; } @Override public SharedCacheMode getSharedCacheMode() { return null; } @Override public ValidationMode getValidationMode() { return null; } @Override public Properties getProperties() { return new Properties(); } @Override public String getPersistenceXMLSchemaVersion() { return null; } @Override public ClassLoader getClassLoader() { return null; } @Override public void addTransformer(ClassTransformer transformer) { } @Override public ClassLoader getNewTempClassLoader() { return null; } }; } }