From 77968d28355088c06805b6aedf9d44148eff84d3 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Tue, 2 Feb 2021 15:42:33 +0100 Subject: [PATCH] revisited the business logic to publish on (mongo) server by geoportal-client --- .../server/GeoportalDataEntryServiceImpl.java | 165 ++++++++++++------ .../server/SessionUtil.java | 20 ++- 2 files changed, 125 insertions(+), 60 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java index 3d44f6b..8707bb8 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java @@ -74,7 +74,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen LOG.debug("Built map with form data: " + toMap); GCubeUser user = SessionUtil.getCurrentUser(this.getThreadLocalRequest()); - Concessione concessioneService = null; + Concessione concessioneNew; String mongoId = null; ServiceUtil serviceUtil = new ServiceUtil(); MongoConcessioni clientMongo = null; @@ -97,11 +97,11 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen LOG.debug(ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO + " building with client obj: " + idp); Concessione concessione = ConvertToServiceModel.toConcessione(idp, user); LOG.debug("Built " + ConcessioniFormCardTitle.INFORMAZIONI_DI_PROGETTO + " as server obj: " + concessione); - - //Register New Concessione - concessioneService=clientMongo.createNew(concessione); - mongoId = concessioneService.getMongo_id(); + //Register New Concessione + concessioneNew=clientMongo.createNew(concessione); + + // ABSTRACT_RELAZIONE_DI_SCAVO list = toMap.get(ConcessioniFormCardTitle.ABSTRACT_RELAZIONE_DI_SCAVO); if (list == null || list.isEmpty() || list.get(0) == null || list.get(0).getListGDB() == null) @@ -126,18 +126,10 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen LOG.debug(ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO + " building with client obj: " + rds); RelazioneScavo relazioneDiScavo = ConvertToServiceModel.toRelazioneScavo(abstractRelazioneDiScavo, rds); LOG.debug("Built " + ConcessioniFormCardTitle.RELAZIONE_DI_SCAVO + " as server obj: " + relazioneDiScavo); - //Setting Relazione - concessioneService.setRelazioneScavo(relazioneDiScavo); - // Building TempFile for Relazione - List files = serviceUtil.toTemFiles(rds.getFilesUploaded()); - // Upload file to Concessione - if (files!=null && files.size() > 0) { - // saving into back-end - AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.RELAZIONE, files); - clientMongo.registerFile(mongoId, request); - LOG.info("Registered the mongoId "+mongoId+" request " + Paths.RELAZIONE + "with "+files.size()+" file/s"); - } + //Setting Relazione + concessioneNew.setRelazioneScavo(relazioneDiScavo); + // IMMAGINI_RAPPRESENTATIVE list = toMap.get(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE); @@ -146,22 +138,22 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen "Error: no data found for " + ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE.getTitle()); List imgRaprsLst = list.get(0).getListGDB(); - for (GenericDatasetBean imgRapr : imgRaprsLst) { - LOG.debug("\n\n"); - LOG.debug(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE + " building with client obj: " + imgRapr); - UploadedImage img = ConvertToServiceModel.toImmaginiRappresentative(imgRapr); - LOG.debug("Built " + ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE + " as server obj: " + img); - - // Building TempFile for Immagini - files = serviceUtil.toTemFiles(imgRapr.getFilesUploaded()); - // Upload file to Concessione - if (files!=null && files.size() > 0) { - // saving into back-end - AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.IMMAGINI, files); - clientMongo.registerFile(mongoId, request); - LOG.info("Registered the mongoId "+mongoId+" request " + Paths.IMMAGINI + "with "+files.size()+" file/s"); + List immaginiRappresentativeService = null; + if(imgRaprsLst.size()>0) { + immaginiRappresentativeService = new ArrayList(imgRaprsLst.size()); + for (GenericDatasetBean imgRapr : imgRaprsLst) { + LOG.debug("\n\n"); + LOG.debug(ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE + " building with client obj: " + imgRapr); + UploadedImage img = ConvertToServiceModel.toImmaginiRappresentative(imgRapr); + LOG.debug("Built " + ConcessioniFormCardTitle.IMMAGINI_RAPPRESENTATIVE + " as server obj: " + img); + immaginiRappresentativeService.add(img); } } + + //Setting Immagini Rappresentative + if(immaginiRappresentativeService!=null) { + concessioneNew.setImmaginiRappresentative(immaginiRappresentativeService); + } // POSIZIONAMENTO_DELL_AREA_DI_INDAGINE list = toMap.get(ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE); @@ -171,21 +163,19 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen listGDB = list.get(0).getListGDB(); GenericDatasetBean pad = listGDB.get(0); - LOG.debug("\n\n"); - LOG.debug(ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE + " building with client obj: " - + pad); - LayerConcessione layerPad = ConvertToServiceModel.toLayerConcessione(pad); - LOG.debug("Built " + ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE + " as server obj: " - + layerPad); + LayerConcessione layerPad = null; + if(pad!=null) { + LOG.debug("\n\n"); + LOG.debug(ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE + " building with client obj: " + + pad); + layerPad = ConvertToServiceModel.toLayerConcessione(pad); + LOG.debug("Built " + ConcessioniFormCardTitle.POSIZIONAMENTO_DELL_AREA_DI_INDAGINE + " as server obj: " + + layerPad); + } - // Building TempFile for POSIZIONAMENTO - files = serviceUtil.toTemFiles(pad.getFilesUploaded()); - // Upload file to Concessione - if (files!=null && files.size() > 0) { - // saving into back-end - AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.POSIZIONAMENTO, files); - clientMongo.registerFile(mongoId, request); - LOG.info("Registered the mongoId "+mongoId+" request " + Paths.POSIZIONAMENTO + "with "+files.size()+" file/s"); + //Setting Posizionamento Di Scavo + if(layerPad!=null) { + concessioneNew.setPosizionamentoScavo(layerPad); } // PIANTA_DI_FINE_SCAVO @@ -195,25 +185,91 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen "Error: no data found for " + ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO.getTitle()); listGDB = list.get(0).getListGDB(); + List listPfs = listGDB; //Managing N:N - for (GenericDatasetBean pfs : listGDB) { - LOG.debug("\n\n"); - LOG.debug(ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO + " building with client obj: " + pfs); - LayerConcessione layerPfs = ConvertToServiceModel.toLayerConcessione(pfs); - LOG.debug("Built " + ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO + " as server obj: " + layerPfs); + List pianteFineScavo = null; + if(listPfs.size()>0) { + pianteFineScavo = new ArrayList(listPfs.size()); + for (GenericDatasetBean pfs : listPfs) { + LOG.debug("\n\n"); + LOG.debug(ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO + " building with client obj: " + pfs); + LayerConcessione layerPfs = ConvertToServiceModel.toLayerConcessione(pfs); + LOG.debug("Built " + ConcessioniFormCardTitle.PIANTA_DI_FINE_SCAVO + " as server obj: " + layerPfs); + pianteFineScavo.add(layerPfs); + + } + } + + //Setting Piante fine Scavo + if(pianteFineScavo!=null) { + concessioneNew.setPianteFineScavo(pianteFineScavo); + } + + //Registering Meta + clientMongo.replace(concessioneNew); + mongoId = concessioneNew.getMongo_id(); + LOG.info("Registered the meta. Called mongo.replace for: "+concessioneNew); + + //UPLOADING FILES + LOG.info("Now uploading the files..."); + // Building TempFile for Relazione + SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); + List files = serviceUtil.toTemFiles(rds.getFilesUploaded()); + // Upload file to Concessione. Should be one file. + if (files!=null && files.size() > 0) { + // saving into back-end + AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.RELAZIONE, files); + clientMongo.registerFile(mongoId, request); + LOG.info("Registered the mongoId "+mongoId+" request " + Paths.RELAZIONE + "with "+files.size()+" file/s"); + } - // Building TempFile for PIANTA_DI_FINE_SCAVO - files = serviceUtil.toTemFiles(pfs.getFilesUploaded()); - // Upload file to Concessione Section by Path 'Relazione' + //IMMAGINI RAPPRESENTATIVE + for (int i=0; i 0) { // saving into back-end - AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.PIANTE, files); + AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.imgByIndex(i), files); clientMongo.registerFile(mongoId, request); - LOG.info("Registered the mongoId "+mongoId+" request " + Paths.PIANTE + "with "+files.size()+" file/s"); + LOG.info("Registered the mongoId "+mongoId+" request " + Paths.IMMAGINI + "with "+files.size()+" file/s"); } } + + //POSIZIONAMENTO + // Building TempFile for POSIZIONAMENTO + SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); + files = serviceUtil.toTemFiles(pad.getFilesUploaded()); + // Upload file to Concessione + if (files!=null && files.size() > 0) { + // saving into back-end + AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.POSIZIONAMENTO, files); + clientMongo.registerFile(mongoId, request); + LOG.info("Registered the mongoId "+mongoId+" request " + Paths.POSIZIONAMENTO + "with "+files.size()+" file/s"); + } + + //PIANTE FINE SCAVO + if(listPfs.size()>0) { + for (int i=0; i 0) { + // saving into back-end + AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(Paths.piantaByIndex(i), files); + clientMongo.registerFile(mongoId, request); + LOG.info("Registered the mongoId "+mongoId+" request " + Paths.PIANTE + "with "+files.size()+" file/s"); + } + } + } + } catch (Exception e) { LOG.error("Error on converting form data: ", e); throw new Exception( @@ -224,6 +280,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen Concessione concessione; if(clientMongo!=null && mongoId!=null) { + SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); concessione = clientMongo.publish(mongoId); //server report ValidationReport report = concessione.getReport(); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java index d92dcbc..5b3dc08 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/SessionUtil.java @@ -5,6 +5,7 @@ package org.gcube.portlets.user.geoportaldataentry.server; import javax.servlet.http.HttpServletRequest; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.vomanagement.usermanagement.GroupManager; @@ -67,20 +68,27 @@ public class SessionUtil { * Retrieve the current scope by using the portal manager. * * @param request the request - * @param setInThread the set in thread + * @param setContextsInThread set the scope and the security token into current thread * @return a GcubeUser object */ - public static String getCurrentContext(HttpServletRequest request, boolean setInThread){ + public static String getCurrentContext(HttpServletRequest request, boolean setContextsInThread){ if(request == null) throw new IllegalArgumentException("HttpServletRequest is null!"); PortalContext pContext = PortalContext.getConfiguration(); String context = pContext.getCurrentScope(request); - LOG.debug("Returning context " + context); - - if(context != null && setInThread) - ScopeProvider.instance.set(context); + + if(setContextsInThread) { + GCubeUser user = getCurrentUser(request); + String token = pContext.getCurrentUserToken(context, user.getUsername()); + + if(context!=null) + ScopeProvider.instance.set(context); + + if(token!=null) + SecurityTokenProvider.instance.set(token); + } return context; }