package org.gcube.portlets.user.geoportaldataviewer.server; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import org.gcube.application.geoportal.common.model.legacy.AccessPolicy; import org.gcube.application.geoportal.common.model.legacy.BBOX; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.legacy.LayerConcessione; import org.gcube.application.geoportal.common.model.legacy.OtherContent; import org.gcube.application.geoportal.common.model.legacy.PersistedContent; import org.gcube.application.geoportal.common.model.legacy.RelazioneScavo; import org.gcube.application.geoportal.common.model.legacy.UploadedImage; import org.gcube.application.geoportal.common.model.legacy.WorkspaceContent; import org.gcube.portlets.user.geoportaldataviewer.server.util.URLParserUtil; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.content.OtherContentDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.content.WorkspaceContentDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.AbstractRelazioneScavoDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.LayerConcessioneDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.RelazioneScavoDV; import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.UploadedImageDV; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * The Class ConvertToGUIModel. * * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) * * Nov 2, 2020 */ public class ConvertToDataViewModel { private static final String NO_TIME = "T00:00"; /** The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(ConvertToDataViewModel.class); public static final String DATE_FORMAT = "dd-MM-yyyy"; public static final String HOURS_MINUTES_SEPARATOR = ":"; public static final String TIME_FORMAT = "HH" + HOURS_MINUTES_SEPARATOR + "mm"; /** * To concessione. * * @param concessione the concessione * @return the concessione * @throws Exception the exception */ public static ConcessioneDV toConcessione(Concessione concessione) throws Exception { LOG.debug("called toConcessione for: "+concessione); if (concessione == null) return null; try { ConcessioneDV theConcessione = new ConcessioneDV(); theConcessione.setPolicy(toPolicy(concessione.getPolicy())); //theConcessione.setAuthors(concessione.getAuthors()); theConcessione.setCentroidLat(concessione.getCentroidLat()); theConcessione.setCentroidLong(concessione.getCentroidLong()); theConcessione.setContributore(concessione.getContributore()); theConcessione.setCreationTime(toDateFormatString(concessione.getCreationTime())); theConcessione.setCreationUser(toUser(concessione.getCreationUser())); theConcessione.setDataFineProgetto(toDateFormatString(concessione.getDataFineProgetto())); theConcessione.setDataInizioProgetto(toDateFormatString(concessione.getDataInizioProgetto())); theConcessione.setDescrizioneContenuto(concessione.getDescrizioneContenuto()); theConcessione.setEditore(concessione.getEditore()); theConcessione.setFontiFinanziamento(concessione.getFontiFinanziamento()); theConcessione.setId(concessione.getId()); theConcessione.setNome(concessione.getNome()); theConcessione.setIntroduzione(concessione.getIntroduzione()); theConcessione.setLastUpdateTime(toDateFormatString(concessione.getLastUpdateTime())); theConcessione.setLastUpdateUser(toUser(concessione.getLastUpdateUser())); theConcessione.setLicenzaID(concessione.getLicenzaID()); theConcessione.setNome(concessione.getNome()); theConcessione.setParoleChiaveICCD(concessione.getParoleChiaveICCD()); theConcessione.setParoleChiaveLibere(concessione.getParoleChiaveLibere()); theConcessione.setResponsabile(concessione.getResponsabile()); theConcessione.setRisorseCorrelate(concessione.getRisorseCorrelate()); theConcessione.setSoggetto(concessione.getSoggetto()); theConcessione.setTitolariCopyright(concessione.getTitolareCopyright()); theConcessione.setTitolariLicenza(concessione.getTitolareLicenza()); theConcessione.setTitolari(concessione.getTitolari()); theConcessione.setVersion(concessione.getVersion()); theConcessione.setRecordType(concessione.getRecordType().name()); theConcessione.setAbstractRelazioneScavo(toAbstractRelazioneScavo(concessione.getRelazioneScavo())); theConcessione.setRelazioneScavo(toRelazioneScavo(concessione.getRelazioneScavo())); if (concessione.getImmaginiRappresentative() != null) { List uploadedImagesDV = new ArrayList( concessione.getImmaginiRappresentative().size()); for (UploadedImage ui : concessione.getImmaginiRappresentative()) { uploadedImagesDV.add(toUploadedImage(ui)); } theConcessione.setImmaginiRappresentative(uploadedImagesDV); } if (concessione.getGenericContent() != null) { List otherContentsDV = new ArrayList( concessione.getGenericContent().size()); for (OtherContent gc : concessione.getGenericContent()) { otherContentsDV.add(toOtherContentDV(gc)); } theConcessione.setGenericContent(otherContentsDV); } if (concessione.getPianteFineScavo() != null) { List piantaScavoDV = new ArrayList( concessione.getPianteFineScavo().size()); for (LayerConcessione lc : concessione.getPianteFineScavo()) { piantaScavoDV.add(toLayerConcessione(lc)); } theConcessione.setPianteFineScavo(piantaScavoDV); } if (concessione.getPosizionamentoScavo() != null) { LayerConcessioneDV thePosizScavo = toLayerConcessione(concessione.getPosizionamentoScavo()); theConcessione.setPosizionamentoScavo(thePosizScavo); } LOG.debug("Returning concessione: " + theConcessione); return theConcessione; }catch (Exception e) { LOG.error("Error on converting concessione: "+concessione, e); return null; } } //TO AVOID SERIALIZATION ISSUE AGAINST GWT // public static List toListString(List orginList){ // if(orginList==null) // return null; // // List destList = new ArrayList(orginList.size()); // for (String orgValue : orginList) { // destList.add(orgValue); // } // // return destList; // } /** * To user. * * @param username the username * @return the string */ public static String toUser(String username) { if(username==null) return null; return username; } /** * To policy. * * @param policy the policy * @return the string */ public static String toPolicy(AccessPolicy policy) { if(policy==null) return null; return policy.name(); } /** * To date format string. * * @param dateTime the date time * @return the string */ public static String toDateFormatString(LocalDateTime dateTime) { if(dateTime==null) return null; String time = dateTime.toString(); DateTimeFormatter formatter = null; try { if(!time.endsWith(NO_TIME)) { formatter = DateTimeFormatter.ofPattern(DATE_FORMAT + " " + TIME_FORMAT); }else { time = time.replace(NO_TIME, ""); formatter = DateTimeFormatter.ofPattern(DATE_FORMAT); } }catch (Exception e) { LOG.warn("Parsing error: ",e); } try { if(formatter!=null) return dateTime.format(formatter); }catch (Exception e) { LOG.warn("Date format error: ",e); } return dateTime.toString(); } /** * To abstract relazione scavo. * * @param relazioneScavo the relazione scavo * @return the abstract relazione scavo DV */ public static AbstractRelazioneScavoDV toAbstractRelazioneScavo(RelazioneScavo relazioneScavo) { if (relazioneScavo == null) return null; AbstractRelazioneScavoDV theRelazioneDiScavo = new AbstractRelazioneScavoDV(); theRelazioneDiScavo.setAbstractSectionIta(relazioneScavo.getAbstractIta()); theRelazioneDiScavo.setAbstractSectionEng(relazioneScavo.getAbstractEng()); theRelazioneDiScavo.setCreationTime(toDateFormatString(relazioneScavo.getCreationTime())); theRelazioneDiScavo.setId(relazioneScavo.getId()); theRelazioneDiScavo.setLicenseID(relazioneScavo.getLicenseID()); theRelazioneDiScavo.setPolicy(toPolicy(relazioneScavo.getPolicy())); //theRelazioneDiScavo.setRecord(recordDV); theRelazioneDiScavo.setResponsabili(relazioneScavo.getResponsabili()); theRelazioneDiScavo.setSoggetto(relazioneScavo.getSoggetto()); theRelazioneDiScavo.setTitolo(relazioneScavo.getTitolo()); LOG.debug("Returning: " + theRelazioneDiScavo); return theRelazioneDiScavo; } /** * To relazione scavo. * * @param relazioneScavo the relazione scavo * @return the relazione scavo data view */ public static RelazioneScavoDV toRelazioneScavo(RelazioneScavo relazioneScavo) { if (relazioneScavo == null) return null; RelazioneScavoDV theRelazioneDiScavo = new RelazioneScavoDV(); theRelazioneDiScavo.setCreationTime(toDateFormatString(relazioneScavo.getCreationTime())); theRelazioneDiScavo.setId(relazioneScavo.getId()); theRelazioneDiScavo.setLicenseID(relazioneScavo.getLicenseID()); theRelazioneDiScavo.setPolicy(toPolicy(relazioneScavo.getPolicy())); //theRelazioneDiScavo.setRecord(recordDV); theRelazioneDiScavo.setResponsabili(relazioneScavo.getResponsabili()); theRelazioneDiScavo.setSoggetto(relazioneScavo.getSoggetto()); theRelazioneDiScavo.setTitolo(relazioneScavo.getTitolo()); List actContent = relazioneScavo.getActualContent(); if(actContent!=null && actContent.size()>0) { List listWsContent = new ArrayList(); for (PersistedContent content : actContent) { if(content!=null && content instanceof WorkspaceContent) { listWsContent.add(toWorkspaceContent((WorkspaceContent)content)); } } theRelazioneDiScavo.setListWsContent(listWsContent); } LOG.debug("Returning: " + theRelazioneDiScavo); return theRelazioneDiScavo; } /** * To uploaded image. * * @param uploadedImage the uploaded image * @return the uploaded image data-view */ public static UploadedImageDV toUploadedImage(UploadedImage uploadedImage) { if (uploadedImage == null) return null; UploadedImageDV theUploadedImageDV = new UploadedImageDV(); theUploadedImageDV.setCreationTime(toDateFormatString(uploadedImage.getCreationTime())); theUploadedImageDV.setDidascalia(uploadedImage.getDidascalia()); theUploadedImageDV.setFormat(uploadedImage.getFormat()); theUploadedImageDV.setId(uploadedImage.getId()); theUploadedImageDV.setLicenseID(uploadedImage.getLicenseID()); theUploadedImageDV.setPolicy(toPolicy(uploadedImage.getPolicy())); //theUploadedImageDV.setRecord(recordDV); theUploadedImageDV.setResponsabili(uploadedImage.getResponsabili()); theUploadedImageDV.setSoggetto(uploadedImage.getSoggetto()); theUploadedImageDV.setTitolo(uploadedImage.getTitolo()); List actContent = uploadedImage.getActualContent(); if(actContent!=null && actContent.size()>0) { List listWsContent = new ArrayList(); for (PersistedContent content : actContent) { if(content!=null && content instanceof WorkspaceContent) { listWsContent.add(toWorkspaceContent((WorkspaceContent)content)); } } theUploadedImageDV.setListWsContent(listWsContent); } LOG.debug("Returning: " + theUploadedImageDV); return theUploadedImageDV; } /** * To workspace content. * * @param wContent the w content * @return the workspace content DV */ public static WorkspaceContentDV toWorkspaceContent(WorkspaceContent wContent){ if (wContent == null) return null; WorkspaceContentDV theWSDV = new WorkspaceContentDV(); theWSDV.setLink(wContent.getLink()); theWSDV.setMimetype(wContent.getMimetype()); theWSDV.setStorageID(wContent.getStorageID()); theWSDV.setId(wContent.getId()); return theWSDV; } /** * To layer concessione. * * @param layerConcessione the layer concessione * @return the layer concessione data view */ public static LayerConcessioneDV toLayerConcessione(LayerConcessione layerConcessione) { if (layerConcessione == null) return null; LOG.debug("Converting: "+layerConcessione); LayerConcessioneDV theLayerConessione = new LayerConcessioneDV(); theLayerConessione.setAbstractSection(layerConcessione.getAbstractSection()); String wmsLink = layerConcessione.getWmsLink(); String layerName = null; BoundsMap bounds = null; //reading layer name from wmsLink //string bbox if(wmsLink!=null) { layerName = URLParserUtil.extractValueOfParameterFromURL("layers", wmsLink); String bbox = URLParserUtil.extractValueOfParameterFromURL("bbox", wmsLink); String wmsVersion = URLParserUtil.extractValueOfParameterFromURL("version", wmsLink); bounds = toBoundMap(wmsVersion, bbox, ","); LOG.debug("Built bounds from wmsLInk: "+bounds); } if(layerName!=null) theLayerConessione.setLayerName(layerName); else theLayerConessione.setLayerName(layerConcessione.getLayerName()); theLayerConessione.setWmsLink(wmsLink); theLayerConessione.setLayerID(layerConcessione.getLayerID()); theLayerConessione.setLayerUUID(layerConcessione.getLayerUUID()); theLayerConessione.setAuthors(layerConcessione.getAuthors()); if(bounds==null) bounds = toBoundMap(layerConcessione.getBbox()); theLayerConessione.setBbox(bounds); theLayerConessione.setCreationTime(toDateFormatString(layerConcessione.getCreationTime())); theLayerConessione.setId(layerConcessione.getId()); theLayerConessione.setLicenseID(layerConcessione.getLicenseID()); theLayerConessione.setMetodoRaccoltaDati(layerConcessione.getMetodoRaccoltaDati()); theLayerConessione.setPolicy(toPolicy(layerConcessione.getPolicy())); //theLayerConessione.setRecord(recordDV); theLayerConessione.setScalaAcquisizione(layerConcessione.getScalaAcquisizione()); theLayerConessione.setSubTopic(layerConcessione.getSubTopic()); theLayerConessione.setTitolo(layerConcessione.getTitolo()); theLayerConessione.setTopicCategory(layerConcessione.getTopicCategory()); theLayerConessione.setValutazioneQualita(layerConcessione.getValutazioneQualita()); LOG.debug("Returning: " + theLayerConessione); return theLayerConessione; } /** * To other content DV. * * @param otherContent the other content * @return the other content DV */ public static OtherContentDV toOtherContentDV(OtherContent otherContent) { if (otherContent == null) return null; OtherContentDV theOtherContent = new OtherContentDV(); theOtherContent.setCreationTime(toDateFormatString(otherContent.getCreationTime())); theOtherContent.setId(otherContent.getId()); theOtherContent.setLicenseID(otherContent.getLicenseID()); theOtherContent.setPolicy(toPolicy(otherContent.getPolicy())); //theOtherContent.setRecord(recordDV); theOtherContent.setTitolo(otherContent.getTitolo()); return theOtherContent; } /** * To bound map. * * @param bbox the bbox * @return the bounds map */ public static BoundsMap toBoundMap(BBOX bbox) { if (bbox == null) return null; return new BoundsMap(bbox.getMinLong(), bbox.getMinLat(), bbox.getMaxLong(), bbox.getMaxLat(), null); } /** * To bound map. * * @param wmsVersion the wms version * @param bbox the bbox * @param separator the separator * @return the bounds map */ public static BoundsMap toBoundMap(String wmsVersion, String bbox, String separator) { if (bbox == null) return null; if(wmsVersion==null) return null; if(separator==null) separator = ","; try { String[] bboxArr = bbox.split(separator); if(wmsVersion.startsWith("1.3")) { //is 1.3.x return new BoundsMap(toDouble(bboxArr[1]), toDouble(bboxArr[0]), toDouble(bboxArr[3]), toDouble(bboxArr[2]), wmsVersion); }else { //should be 1.1.X return new BoundsMap(toDouble(bboxArr[0]), toDouble(bboxArr[1]), toDouble(bboxArr[2]), toDouble(bboxArr[3]), wmsVersion); } }catch (Exception e) { LOG.warn("Error on creating Bounds for wmsVersion "+wmsVersion+" and bbox "+bbox+" : ",e); return null; } } /** * To double. * * @param value the value * @return the double */ public static Double toDouble(String value) { try { return Double.parseDouble(value); }catch (Exception e) { LOG.warn("Error on parsing "+value+" as double: ",e); return null; } } }