From a194811d859f6029aa832803281d6bd99d3bd267 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 6 May 2022 18:45:30 +0200 Subject: [PATCH] Fixed Coordinates parsing --- .../engine/bboxes/BBOXByCoordinatePaths.java | 42 ++-- .../cms/sdi/plugins/IndexerTest.java | 22 +- test-data/profiledDocuments/mosiDoc.json | 207 ++++++++++++++++++ 3 files changed, 251 insertions(+), 20 deletions(-) create mode 100644 test-data/profiledDocuments/mosiDoc.json diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java index 7c4960e..8c1b593 100644 --- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java +++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java @@ -44,27 +44,43 @@ public class BBOXByCoordinatePaths extends BBOXEvaluator{ // x if(bean.getX()!=null) - // for found - for(Double x : documentNavigator.getByPath(bean.getX(),Double.class)) { - if(toSet == null) toSet = new GCubeSDILayer.BBOX(); - if (toSet.getMinX()==null || x< toSet.getMinX()) toSet.setMinX(x); - if (toSet.getMaxX()==null || x> toSet.getMaxX()) toSet.setMaxX(x); + // for found + //TODO MANAGE integers vs double + for(Object o : documentNavigator.getByPath(bean.getX(),Object.class)) { + try{ + Double x=Double.parseDouble(o.toString()); + if(toSet == null) toSet = new GCubeSDILayer.BBOX(); + if (toSet.getMinX()==null || x< toSet.getMinX()) toSet.setMinX(x); + if (toSet.getMaxX()==null || x> toSet.getMaxX()) toSet.setMaxX(x); + }catch(Throwable t){ + log.warn("Unable to parse X (Matched value {} from path {}",o,bean.getX(),t); + } } // y if(bean.getY()!=null) // for found - for(Double y : documentNavigator.getByPath(bean.getY(),Double.class)) { - if(toSet == null) toSet = new GCubeSDILayer.BBOX(); - if (toSet.getMinY()==null || y< toSet.getMinY()) toSet.setMinY(y); - if (toSet.getMaxY()==null || y> toSet.getMaxY()) toSet.setMaxY(y); + for(Object o : documentNavigator.getByPath(bean.getY(),Object.class)) { + try{ + Double y=Double.parseDouble(o.toString()); + if(toSet == null) toSet = new GCubeSDILayer.BBOX(); + if (toSet.getMinY()==null || y< toSet.getMinY()) toSet.setMinY(y); + if (toSet.getMaxY()==null || y> toSet.getMaxY()) toSet.setMaxY(y); + }catch(Throwable t){ + log.warn("Unable to parse Y (Matched value {} from path {}",o,bean.getY(),t); + } } // z if(bean.getZ()!=null) // for found - for(Double z : documentNavigator.getByPath(bean.getZ(),Double.class)) { - if(toSet == null) toSet = new GCubeSDILayer.BBOX(); - if (toSet.getMinZ()==null || z< toSet.getMinZ()) toSet.setMinZ(z); - if (toSet.getMaxZ()==null || z> toSet.getMaxZ()) toSet.setMaxZ(z); + for(Object o : documentNavigator.getByPath(bean.getZ(),Object.class)) { + try{ + Double z=Double.parseDouble(o.toString()); + if(toSet == null) toSet = new GCubeSDILayer.BBOX(); + if (toSet.getMinZ()==null || z< toSet.getMinZ()) toSet.setMinZ(z); + if (toSet.getMaxZ()==null || z> toSet.getMaxZ()) toSet.setMaxZ(z); + }catch(Throwable t){ + log.warn("Unable to parse Z (Matched value {} from path {}",o,bean.getZ(),t); + } } } return toSet; diff --git a/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java b/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java index 5beeb53..6aacfb9 100644 --- a/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java +++ b/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java @@ -33,16 +33,26 @@ public class IndexerTest extends BasicPluginTest { @Test public void testIndexRequest() throws PluginExecutionException, JsonProcessingException { assumeTrue(GCubeTest.isTestInfrastructureEnabled()); - UseCaseDescriptor ucd=TestProfiles.profiles.get("sdi-tests"); Project doc= TestDocuments.documentMap.get("dummy.json"); - - doc.setProfileID(ucd.getId()); + doc.setProfileID("sdi-tests"); doc.getTheDocument().put("coordX",10d); doc.getTheDocument().put("coordY",11d); + testIndexing(doc); + } + + @Test + public void testMosiIndexing() throws JsonProcessingException, PluginExecutionException { + assumeTrue(GCubeTest.isTestInfrastructureEnabled()); + Project doc= TestDocuments.documentMap.get("mosiDoc.json"); + testIndexing(doc); + } + + + + private IndexDocumentReport testIndexing(Project doc) throws PluginExecutionException, JsonProcessingException { IndexDocumentRequest request=new IndexDocumentRequest(TestProfiles.profiles.get(doc.getProfileID()), getCurrentUser(),getTestContext(),doc); - Document parameters = new Document(); parameters.put("workspace", "testing_workspace"); parameters.put("indexName", "unique_index"+System.currentTimeMillis()); @@ -57,13 +67,11 @@ public class IndexerTest extends BasicPluginTest { assertTrue(response.getStatus().equals(Report.Status.OK)); assertTrue(response.prepareResult().getIdentificationReferenceByType(SpatialReference.SPATIAL_REFERENCE_TYPE).size()==1); + return response; } - - - @Test public void getIndex() throws ConfigurationException, JsonProcessingException { assumeTrue(GCubeTest.isTestInfrastructureEnabled()); diff --git a/test-data/profiledDocuments/mosiDoc.json b/test-data/profiledDocuments/mosiDoc.json new file mode 100644 index 0000000..1739d26 --- /dev/null +++ b/test-data/profiledDocuments/mosiDoc.json @@ -0,0 +1,207 @@ +{ + "_id": "62754ac902ad3d1565feb58a", + "_version": "1.0.0", + "_info": { + "_creationInfo": { + "_user": { + "_username": "fabio.sinibaldi" + }, + "_context": { + "_id": "/gcube/devsec/devVRE", + "_name": "/devVRE" + }, + "_instant": "2022-05-06T18:20:25.926" + }, + "_lastEditInfo": null, + "_access": { + "_policy": "OPEN", + "_license": "" + } + }, + "_profileID": "GNA-MOSI", + "_profileVersion": "1.0.0", + "_lifecycleInformation": { + "_phase": "DRAFT", + "_lastInvokedStep": null, + "_lastOperationStatus": "OK", + "_errorMessages": [], + "_warningMessages": [], + "_triggeredEvents": [ + { + "event": "INIT_DOCUMENT", + "lastOperationStatus": "OK", + "errorMessages": null, + "warningMessages": null + } + ], + "_notes": null + }, + "_relationships": null, + "_identificationReferences": null, + "_theDocument": { + "CD": { + "TSK": "MOSI", + "CBC": null, + "ACC": { + "ACCE": null, + "ACCC": "SABAP-TO_2019_107_0006_a_b", + "ACCS": null + } + }, + "OG": { + "AMB": "archeologico", + "AMA": "archeologia preventiva", + "OGD": "sito pluristratificato", + "OGT": "{}", + "OGN": "a) Belmonte (Valperga-Pertusio-Prascorsano),\nVersante N (B1), alto versante SE (BE2), sommit\u00e0 Campass (BE3, BE6), alto versan- te S (BE4), riparo da stacco graniti (?, BE5), estremit\u00e0 W del colle (BE7); b-c) Belmonte (Valperga-Pertusio-Prascorsano)" + }, + "LC": { + "LCS": "Italia", + "LCR": "Piemonte", + "LCP": "TO", + "LCC": "Valperga", + "LCI": null, + "PVL": "Belmonte (Valperga-Pertusio-Prascorsano)\n", + "PVZ": null, + "ACB": { + "ACBA": null, + "ACBS": null + } + }, + "DT": { + "DTR": "a) Et\u00e0 del Bronzo medio, fase finale-media Et\u00e0 del Ferro; b) Et\u00e0 romana; c) Et\u00e0 Altomedievale", + "DTT": null + }, + "DA": { + "DES": "a) Et\u00e0 del Bronzo medio, fase finale-media Et\u00e0 del Ferro\nIl quadro generale che emerge dall\u2019analisi della distribuzione dei rinvenimenti appare piuttosto articolato, anche considerando che tutti i siti osservati hanno restituito materiali riferibili a un\u2019unica fase culturale Bronzo Finale - Primo Ferro. I siti BE.1, BE5, BE.6 e parzialmente BE.2 si riferiscono a un villaggio di considerevoli dimensioni localizzato sulla sommit\u00e0 del colle. Questo, data la morfologia aspra dell\u2019intera area, appare formato da un agglomerato di gruppi di capanne situate nei numerosi piccoli ripiani della sommit\u00e0. I due ripari sotto roccia dei siti BE.2 e BE.5 risultano inseriti nell\u2019abitato e impiegati probabilmente come strutture secondarie per il ricovero di animali, derrate e attrezzi. I depositi dei siti BE.3 e BE.4 sono riferibili ad aree marginali all\u2019insediamento e contengono livelli consistenti derivanti da discariche di materiali di ogni genere dall\u2019abitato. Pare significativo che i livelli generati dalle discariche siano contenuti entro vallette e piccoli alvei. Ci\u00f2 pu\u00f2 forse sottolineare un massiccio uso di tutti gli spazi utili e la volont\u00e0 di recuperarne dei nuovi mediante azioni di bonifica. Le ceramiche di Belmonte si riconoscono in un\u2019unica facies culturale sebbene provengano da siti differenti.\nTra le forme vascolari, ricorrono con frequenza i vasi a situla con ordini di tacche incise sulla spalla o sul bordo, oppure ordini di impressioni digitali. Cos\u00ec pure le olle o ollette a gola con decorazioni sul bordo a ordini di tacche incise o impressioni digitali; pi\u00f9 raramente con linee incise in prossimit\u00e0 del collo. Inoltre si sono riconosciute ciotole carenate con breve collo a bordo lineare o ciotole emisferiche talvolta con impressioni di tacche incise oppure serie di linee in prossimit\u00e0 del collo. Frequenti sono anche i vasi biconici con gola e bocca svasata, talvolta finiti molto bene e abbondantemente decorati. Si riscontrano indifferentemente fondi piatti o concavi, mentre i bordi sono di preferenza lineari, praticamente assenti le anse e rarissime le bugne. Gli impasti sono per larga misura rossi o marroni, pi\u00f9 raramente chiari (grigi o gialli), con degrassante eterometrico abbondante. Le finiture superficiali realizzate mediante lisciatoio rigido sono spesso sommarie. Un piccolo quantitativo di reperti presenta un impasto pi\u00f9 fine con degrassante omometrico raro e finitura superficiale (lucidatura) particolarmente curata. Sono pure presenti due figurine fittili di suidi sommariamente modellate, numerose fusaiole e pesi da telaio di varie dimensioni.\nI reperti litici comprendono numerose macine a sella e macinelli, nonch\u00e9 un\u2019industria su quarzite e due perline di collana. Particolarmente scarsi i reperti metallici, com- prendono una fibula del tipo \u00abCertosa\u00bb e un frammento di lama di falcetto in bronzo. Il repertorio di Belmonte, particolarmente quello riguardante i materiali ceramici, trova confronti significativi con la cultura \u00abCampi d\u2019Urne\u00bb tarda della Fossa del Rodano e del Massiccio Centrale e particolarmente con i siti del lago di Bourget (Savoia), la Grotta des Sarasins, l\u2019Eschaillon Saint Quentin e Barne Bigou Fontaine (Is\u00e8re), Chalucet e Fosse de Sous-Clan (Vienne), La Roque Saint Cristophe e Castel R\u00e9aI (P\u00e9rigord), les Agnielles (Gap). Nell\u2019ambiente padano, confronti sono possibili con siti riconoscibili nell\u2019orizzonte Protogolasecca e Golasecca I (Varese), Chiusa Pesio e Bec Bergiassa (Cuneo), Castellaro di Zignago (La Spezia), La Bessa (Vercelli).\nSulla base dei confronti \u00e8 possibile inquadrare il sito di Belmonte nel quadro delle culture del Bronzo Finale alpino, con consistenti riferimenti all\u2019ambiente francese oltre a quelle con la Padania. Pare altres\u00ec presente la transizione all\u2019Et\u00e0 del Ferro e l\u2019antica Et\u00e0 del Ferro con i materiali riconducibili all\u2019ambito Protogolasecca e Golasecca.\nL\u2019abitato di Belmonte sorto nell\u2019XI secolo a.C., cresce e si sviluppa per 4-5 secoli, quindi inspiegabilmente scompare o si riduce drasticamente, al punto da non lasciare tracce significative della sua esistenza oltre il V secolo a.C. Si esclude infatti la presenza di un grande insediamento nella seconda Et\u00e0 del Ferro, analogo a quello del Bronzo Finale.\n\nb) Aprile 1919) durante escursione al santuario scoperte tombe accanto ad un muricciolo; una di esse era coperta da un tegolone con iscrizione in corsivo Orsicinus; altre tre tombe erano a NW della VI stazione della Via crucis, rivestite di laterizi. Agli inizi di giugno un contadino trov\u00f2 una pietra iscritta, poi dispersa (rotolata gi\u00f9 dal monte). cora nel 1919 (?): vari frr. di tegole di cui uno con bollo PRV, entro cartiglio rettango- lare.\nEstate 1970) scavo di fronte alla cappella del \"Cireneo\": rinvenuti numerosi ambienti a S e a N di un muro largo 60 cm. A N due ambienti, uno molto grande a W e l'altro in parte scoperto, divisi da un corridoio di m 1,50; nel vano molto grande numerosi frr. ceramici e di pietra ollare e una fossa con molti oggetti di ferro. Rimuovendo il ceppo di castagno affiorarono alcuni oggetti tardo romani.\nDal grande vano scavato nel 1970: tre monete di Et\u00e0 costantiniana, un manico di specchio in bronzo, molti frammenti di embrici con decorazione impressa, una fibula di bronzo e una pietra dura (corniola) incisa. Rinvenuta anche numerosa ceramica barbarica.\n\nc) Et\u00e0 Altomedievale (Met\u00e0 V-VII secolo d.C) \nRinvenute le strutture di un castrum, racchiuso in un\u2019area di 2,5 ettari da una cinta muraria articolata in pi\u00f9 fasi, relative ad un esteso abitato con edifici, perlopi\u00f9 a pianta rettangolare in pietra e legno, all\u2019interno dei quali si sono recuperate cospicue quantit\u00e0 di reperti metallici. Il rinvenimento di un capitello databile all\u2019VIII d.C. farebbe presumere l\u2019esistenza di una chiesa collegata ad un insediamento ancora vitale.\n\n\n", + "OGM": "{dati bibliografici, dati di archivio}" + }, + "GE": { + "GEL": "localizzazione fisica", + "GET": "georeferenziazione puntuale", + "GEP": "WGS84", + "GEC": { + "GECX": 10, + "GECY": 13 + }, + "GPT": "(rilievo da cartografia senza sopralluogo)", + "GPM": "posizionamento esatto", + "GPB": { + "GPBB": null + } + }, + "TU": { + "CDG": { + "CDGG": "dato non disponibile" + }, + "BPT": "dato non disponibile", + "NVC": { + "NVCT": null, + "NVCM": null, + "NVCE": null, + "NVCP": null + }, + "STU": { + "STUE": null, + "STUT": null, + "STUS": null + } + }, + "RE": { + "RCG": { + "RCGV": "dato non disponibile", + "RCGD": "dato non disponibile", + "RCGT": null, + "RCGE": "archeologia preventiva" + }, + "MTP": { + "MTPC": "{}", + "MTPZ": null + }, + "MTZ": null, + "FOI": { + "FOIT": null, + "FOIR": null, + "FOIA": null, + "FOIQ": null, + "FOIF": null, + "FOIO": null, + "FOIN": null + } + }, + "IP": { + "IAP": { + "IAPN": null, + "IAPR": null, + "IAPI": null, + "IAPS": null + } + }, + "MT": { + "MIS": { + "MISZ": "area", + "MISU": "mq", + "MISM": 290343.01953125 + }, + "MTA": { + "MTAP": null, + "MTAM": null, + "MTAX": null, + "MTAR": null, + "MTAS": null + } + }, + "VR": { + "VRP": { + "VRPI": "sito pluristratificato di Belmonte", + "VRPA": "buona", + "VRPV": null, + "VRPS": "potenziale non valutabile", + "VRPN": null + }, + "VRR": { + "VRRP": "SABAP-TO_2019_107", + "VRRO": "dato non disponibile", + "VRRR": null, + "VRRS": "dato non disponibile", + "VRRN": null + } + }, + "DO": { + "FTA": { + "FTAN": null, + "FTAX": "documentazione allegata", + "FTAP": "fotografia digitale (file)", + "FTAC": null + }, + "DRA": { + "DRAN": null, + "DRAX": "documentazione allegata", + "DRAT": null, + "DRAC": null, + "DRAK": null + }, + "FNT": { + "FNTI": null, + "FNTX": "documentazione allegata", + "FNTP": null, + "FNTS": "SABAP-TO, fasc. Parco Belmonte, IV, 2", + "FNTK": null + }, + "BIB": { + "BIBR": "CIMA-FOZZATI-NISBET 1983; CIMA 1984; PEJRANI BARICCO 1986; MICHELETTO 1998, p. 58", + "BIBX": "bibliografia specifica", + "BIBM": "Carta Archeologica SAP, n. 1287073; CIMA M. \u2013 FOZZATI L. - NISBET R. 1983, Pertusio, Prascorsano, Valperga, loc. Belmonte. Insediamenti del Bron- zo finale e della prima Et\u00e0 del Ferro, in QuadSAP 1983, 3, pp.174-176; CIMA M. 1984, Pertusio, Prascorsano, Valperga, loc. Belmonte. Insediamenti del Bronzo finale e della prima Et\u00e0 del Ferro, in QuadSAP 1984, 4, pp.276-279; PEJRANI BARICCO L. 1986, Pertusio - Prascorsano - Valperga (TO), loc. Belmonte. Insediamento di Et\u00e0 longobarda, in QuadSAP 1986, 5, p.229; MICHELETTO E. 1998, Forme di insediamento tra V e XIII secolo: il contributo dell\u2019archeologia, in a c. di L. Mercando ed E. Micheletto, Archeologia in Piemonte. L\u2019Et\u00e0 medievale, III, Torino, pp. 51-80\n\n", + "BIBN": null + } + }, + "CM": { + "FUR": "Ratto, Stefania", + "CMR": "Leonardi, Micaela", + "CMC": "Nardi, Rosanna", + "CMA": 2019, + "ADP": 1 + } + }, + "_lock": null +} \ No newline at end of file