On Thu, Jan 19, 2017 at 11:25 AM, Pascal BASTIEN
<pbasnews-xw...@yahoo.fr> wrote:
> Hello,
> with velocity I have a hashmap: sort of variable with (key:value) that I want 
> to sort, then I use:
> #set ($myHashMap = $collectionstool.getSortedMap(String, String))
> $myHashMap.put('Mykey3','My value 3')
> http://platform.xwiki.org/xwiki/bin/view/ScriptingDocumentation/?url=http:%2F%2Fnexus.xwiki.org%2Fnexus%2Fservice%2Flocal%2Frepositories%2Fpublic%2Farchive%2Forg%2Fxwiki%2Fcommons%2Fxwiki-commons-velocity%2F8.2.1%2Fxwiki-commons-velocity-8.2.1-javadoc.jar%2F!%2Forg%2Fxwiki%2Fvelocity%2Ftools%2FCollectionsTool.html%23getSortedMap--
> It's working well ... except with uppercase because I want a sort with 
> insensitive case.
> I tried to decrypt Javadoc and I found I could use: 
> #set ($myHashMap = 
> $collectionstool.getSortedMap(String.CASE_INSENSITIVE_ORDER, String))
> #set ($myHashMap = $collectionstool.getSortedMap(String::compareToIgnoreCase, 
> String)) with java8
> but unfortunaly it doesn't work (I have xwiki error)

Velocity is very far from supporting Java syntax. Plus here you seems
to be mixing CollectionsTool and TreeMap javadoc. CollectionsTool
contains only one getSortedMap() method and it has no parameter.

There does not seems to be any way to get a TreeMap configured with
String.CASE_INSENSITIVE comparator in Velocity. The main issue is that
you can't create an object or access a static variable in Velocity so
no way to use a method that takes a Comparator as parameter even if
there was one (which is not the case for maps).

Right now the only alternatives seems to be:
* use Groovy
* write a script service in Java that provide the feature
* patch CollectionsTool to add a way to pass a comparator to the various methods

> Any idea to sort my hashmap with with insensitive case?
> (Unfortunaly the better way I found is an ugly way: I mix velocity with a 
> piece of groovy but I'm not satisfied at all because I use velocity loop and 
> other if.)
> Thxs for any help.
> Pascal B

Thomas Mortagne

Reply via email to