Uploaded image for project: 'Sling'
  1. Sling
  2. SLING-792

Adapt Sling(Node|Property)Store to Dojo 1.2 and some extensions

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • None
    • Extensions
    • None

    Description

      Creating issue from the extension provided by Rory Douglas in https://issues.apache.org/jira/browse/SLING-301?focusedCommentId=12658420#action_12658420:

      The current store implementations don't work well with some common widgets (in particular ComboBox and FilteringSelect), in latest 1.2 Dojo releases.

      There are 2 problems: one, these widgets use the "query" parameter to pass a wildcarded fragment of user input to accomplish the autocomplete feature, but the SlingNodeStore/SlingPropertyStore currently only do exact string matches against the query; and two, this autocomplete query overwrites the filtering query specified on the store itself, when it really should be merged/ANDed with it.

      I've fixed the 2 classes to accomodate these wildcard queries (copied code from ItemFileReadStore). I've also made some changes/enhancements to the SlingNodeStore :

      1) Moved 'level' out of 'query', put it in optional 'queryOptions' param instead (and renamed to 'depth')

      2) Use common 'queryOptions' parameters 'deep' (along with 'depth') to control how hierarchy below target node is returned
      2)a)If 'deep' is true, return all nodes below target up to 'depth'. If 'depth' not specified, use 'infinity'.
      b)If 'deep' is false, return only nodes at 'depth' below target node. If 'depth' not specified, use 1.

      So, with the following hierarchy, and store url="/test"

      /samplenodes
      /content/
      /list1
      /nodeA
      /subNodeA
      /list2
      /nodeB
      /data
      /nodeC

      deep=true, depth=2 gives [samplenodes,content,list1,nodeA,list2,nodeB,nodeC,data]
      deep=true, no depth gives [samplenodes,content,list1,nodeA,subNodeA,nodeB,list2,nodeC,data]
      deep=false, depth=2 gives [nodeA,nodeB]
      deep=false, no depth gives [samplenodes]

      The behavior is consistent when used with ComboBox, but a little weird for Trees (where deep=false is default). Overriding deep to true for a tree can put the same node into the tree multiple times at different levels. Setting a depth for a ComboBox with deep=false sets the level from which nodes are retrieved, but for a Tree it only sets the depth at which the tree starts, it doesn't actually restrict the depth of the tree. So I've added another property 'treeDepth' (set in 'overrideDepth') which sets the the tree depth limit. This parameter has no effect on ComboBoxes since it's only enforced in the get/hasChildren methods.

      3) Added attributes 'overrideDeep' and 'overrideDepth' to enable store to override values passed in via 'queryOptions' for 'deep' and 'depth'. Primarily useful since 'deep' defaults to 'false' for DataStores, but is hard-coded to 'true' in requests from ComboBox.

      4) Merged specified store query with incoming queries from widgets before executing feth

      5) Added attributes 'statement' and 'searchprops' to enable specifying a search query for the JsonQueryServlet, rather than a JsonRendererServlet URL.

      The modified files are attached as a zip (dojo.sling.patch.20081221.zip). Also includes a new demo page (demo4.html) and a set of sample nodes (samplenodes.json) used by the demo.

      Attachments

        Activity

          People

            fmeschbe Felix Meschberger
            fmeschbe Felix Meschberger
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: