Hi all, Thanks for the detailed review, Stephane. I have made the changes you suggested with some next steps also done.
Furthermore, I will make changes to the application space once we have confirmed response from Caty or other developers. I have started to work on the other next steps and will provide with updates soon. The original github repo is also updated, so future updates will be available at https://github.com/xwiki-contrib/application-interactive-maps . Thanks, Fawad On Mon, Jun 3, 2019 at 12:38 PM Stéphane Laurière <slauri...@xwiki.com> wrote: > Hi Fawad, Caty, all, > > Good to know where you are, Fawad. You're on the right track indeed imho, > we're in tune. > > I'm sending you below some feedback (part of it is code review that could > take place directly on GitHub, but I feel it easier to discuss about it all > together on the list for now, let's see how it goes, I'm open to any > suggestion). > > == MapClass and MapTemplate == > > - Query field: I'd suggest we use a large string field because the queries > could become more complex in the future > > - I would consider putting the default values directly in the template, so > that the user can know what they are when he creates a map, what do you > think? > > - What about using an integer rather than a long for the zoom level? > > - You probably already have this in mind: this will be handy to create a > MapTemplateProvider as well, for example as indicated on < > https://extensions.xwiki.org/xwiki/bin/view/Extension/Administration+Application#HCreatetheTemplateProvider > > > > == MapSheet == > > - Map creation: usually, class instances get created directly in the space > of the application (see for instance the Diagram application), I would > suggest we do the same here if that's ok with you, i.e. directly in the Map > space, for maps and for points as well. As for test data: we will need to > store test data indeed without the need to recreate it manually everytime, > I'm adding an item about that in the "Next steps" section below. > > - Currently, the sheet issues a call to > com.xpn.xwiki.api.Object:getXWikiObject. This method requires programming > rights. Most of the classes in package com.xpn.xwiki.api give access to > their wrapped core object only to users with programming rights, since it > allows to manipulate the data at a low level. I'm adding some links below > that may help you understand this aspect (you may know them already). > Another option (the one I favour) is to always have the xwiki-platform > source code at hand in the IDE, so that one can check what the API does > exactly. In an XWiki sheet, we typically don't want the programming right > to be required, because sheets are meant to be customized by users, not > necessarily by administrators. You will hence have to generate the target > JSON without resorting to the wrapped BaseObject. > > https://www.xwiki.org/xwiki/bin/view/Documentation/DevGuide/Scripting/ > > http://nexus.xwiki.org/nexus/service/local/repositories/public/archive/org/xwiki/platform/xwiki-platform-oldcore/11.3/xwiki-platform-oldcore-11.3-javadoc.jar/!/index.html > > - I'm wondering if it's necessary to generate a random id for the map > container: couldn't we simply use the lower-case serialized map reference? > > == CommonMacros == > > Yes, the "handleMapQuery" macro is in the right direction. > > == Global code organization == > > - Currently the code uses one space per class. That's an option indeed, > but it seems to me that the usual practice is more to group all classes and > sheets directly in the "Code" space. See for instance the blog application: > https://github.com/xwiki-contrib/application-blog/tree/master/application-blog-ui/src/main/resources/Blog. > What do you think Caty, all? > > - We're currently using the "Maps" space. I know the plural was discussed > for the app name already, I have no further comment about that. In existing > XWiki applications, we use either the singular or the plural for the > application space. For instance, the following apps use the singular: > application-diagram, application-xpoll, application-meeting, batchimport, > application-forum, application-flashmessages (plural in the application > name, singular in the space name in this case). Other use plural > everywhere: application-invoices, application-ideas. Question to Caty and > to all: do we have guidelines for that? This is a minor issue but I have a > slight preference for using the singular in the space name, since to me it > refers primarily to the application itself, not necessarily to the location > where the target instances will be created. Typically, maps could be > created anywhere in the wiki. The map app code, though, will be stored in > that space. Sorry for being picky, I just want to make sure we all agree on > the final name before a potential refactoring becomes more complex. > > == Next steps == > > You probably have several of the next steps if not all in mind already, > I'm listing some of them below so that we make sure to converge and decide: > > - Add a livetable listing all existing maps, in the "WebHome" page of the > top level application space > > - Display page titles in the popups > > - Find a way to plug the query mechanism to the Main.SolrSearch and > Main.SolrSearchMacros (so that we can then use facets). This can be a bit > tricky, let us know if you need help of course, for this aspect or any > other. > > - Add a full-text input widget to the map that will issue Solr queries > asynchronously to the map query service (example: the user inputs > "archeologia" -> only pages matching that word will get returned, and only > the corresponding points will show up on the map), which will return the > documents matching the initial query completed by the added full-text > constraint. > > - Add a contextual paginated list of results. > > - Add facet filters. > > - Test data: for now, we have just a few points to test with, but in the > near future we will need one or several rich data sets samples to test the > application. I'm not sure whether we should put the data and the code to > create it in the same repository as the application itself or if we should > create a dedicated repository. Typically, I foresee some code that will > fetch some data from Wikidata or OpenStreetMap and convert it to several > hundreds or thousands of XWiki pages, which in turn will be consumed by a > map. Example: the query below executed against the endpoint > https://query.wikidata.org/ will return all the museums referenced in > Wikidata with their name, their geographical coordinates and their country. > We could grab the museum JSON representations and turn them into XWiki > pages (I have some code for doing such operations in another context > already, I will commit it soon). I'm wondering if we store the test data > and code in the same repository (this can amount to hundreds of test > pages), or in a distinct one. I'll send a separate question to the list > about this aspect. > > SELECT ?item ?itemLabel ?coord ?lon ?lat ?country ?countryLabel WHERE { > ?item wdt:P17 ?country. > ?item wdt:P31 wd:Q33506. # is a museum > ?item p:P625 ?coordinate. > ?coordinate ps:P625 ?coord. > ?coordinate psv:P625 ?coordinate_node. > ?coordinate_node wikibase:geoLongitude ?lon. > ?coordinate_node wikibase:geoLatitude ?lat. > SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } > } > > - Regarding paths: I saw you mentioned them on #xwiki, that will be an > important feature indeed but I feel like it's more important to make sure > that we have a working prototype consisting of a map, a search input, a > list and facets with points already, before adding more complex objects to > the map, what do you think? > > Cheers > > Stéphane > > > Fawad Ali: > > Hi Stéphane, Ecaterina and all, > > Hope all of you are doing wonderful! > > > > So I am working on the new iteration for the Interactive Maps > Application and have made some progress which I would like to share with > all of you. > > As suggested by Stephane, the application is now being developed on a > new architecture which emphasizes the use of Solr queries for gathering > data to display on the map. The space has also been changed to "Maps" as > suggested by Ecaterina. > > > > Link: https://github.com/9inpachi/interactive-maps-new > > I have not shifted the files to xwiki-contrib because I wanted an > initial review if I am doing the right thing so I don't have to change the > whole repo twice. > > > > I have been able to generate a map and the application is now able to > handle basic queries to include points (markers) inside the map. > > > > I would like you to please give it a look and let me know if I am going > in the right direction. :) > > > > Main application pages: > > - Maps.Code.Map.MapClass => The main map class > > - Maps.Code.Map.MapSheet => Map sheet that renders the map > > - Maps.Code.Map.WebHome => Simple form for creating a map object page > > - Maps.Code.Point.PointClass => Main class for a simple point (marker) > > - Maps.Code.Leaflet => Page where all the javascript and stylesheet > extensions exist > > - Maps.Code.CommonMacros => Some common macros used throughout the > application > > - Maps.MapTesting => Space that contains objects and maps for testing > > > > For adding a Point, create a simple page, add content to it and attach a > PointClass object with a value to it. > > > > If you want to have a look at how the map is rendered, see the MapSheet > and the relevant jsx (leaflet-main) code on the Leaflet page. > > > > I have attached some screenshots to show what the application does at > this point. > > > > Best, > > Fawad > > > > > > On Wed, May 29, 2019 at 5:12 PM Fawad Ali <m.fawaadal...@gmail.com > <mailto:m.fawaadal...@gmail.com>> wrote: > > > > Stéphane, > > > > Thanks for this. It summarizes our discussions perfectly. :) > > It's actually great that we are on the same page now. I will provide > you with updates soon. > > > > Best, > > Fawad > > > > > > On Wed, May 29, 2019 at 4:34 PM Stéphane Laurière < > slauri...@xwiki.com <mailto:slauri...@xwiki.com>> wrote: > > > > Fawad, Caty, all, > > > > A quick update following a video call I had with Fawad: > > > > - The Solr API will be used to query the data to be displayed on > the map, and the Solr facets to apply additional filters > > > > - The data returned by the Solr API will be converted to > GeoJSON. Later on we may consider creating a Solr service that returns > (Geo)JSON directly rather than HTML, to be discussed. > > > > Next steps: > > > > - Creation of a basic Map class with a Solr query field > > > > - Creation of a MapSheet that will render the map itself > > > > - Creation of a Point class that will consist of one field > storing the latitude and the longitude separated by a comma (later on, if > needed, we will consider storing the latitude and the longitude in two > distinct fields) > > > > - Manual creation (or via the BatchImport application) of 1) a > set of sample pages that will consist of: a title, some content, and a > Point object attached to each page, 2) a Map object with a simple Solr > query returning all pages with a Point object in a specific space. > > > > - Conversion of the the results provided by Solr into GeoJSON so > that the data can be consumed and displayed by Leaflet > > > > Fawad, please don't hesitate to mention any complementary aspect > that I may have forgotten or questions you may have. > > > > Cheers > > > > Stéphane > > > > > -- > Stéphane Laurière > XWiki – https://xwiki.com > >