cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Musall, Maik" <m...@selbstdenker.ag>
Subject Re: Ordering using non-property values
Date Mon, 17 Jul 2017 14:40:39 GMT
Hi John,

> Am 17.07.2017 um 16:08 schrieb John Huss <johnthuss@gmail.com>:
> 
> Expressions will work with non-modeled properties as long as the methods
> look like getters - have the "get" prefix and no arguments.

Unfortunately not:

Caused by: java.lang.IllegalArgumentException: Property 'getCustomerNameForSorting' is not
readable
	at org.apache.cayenne.reflect.BeanAccessor.<init>(BeanAccessor.java:92)
	at org.apache.cayenne.reflect.PropertyUtils.createSegmentAccessor(PropertyUtils.java:115)
	at org.apache.cayenne.reflect.PropertyUtils.getOrCreateSegmentAccessor(PropertyUtils.java:102)
	at org.apache.cayenne.reflect.PropertyUtils$PathAccessor.getValue(PropertyUtils.java:232)
	at org.apache.cayenne.reflect.PropertyUtils.getProperty(PropertyUtils.java:124)
	at org.apache.cayenne.CayenneDataObject.readSimpleProperty(CayenneDataObject.java:161)
	at org.apache.cayenne.CayenneDataObject.readNestedProperty(CayenneDataObject.java:127)
	at org.apache.cayenne.CayenneDataObject.readNestedProperty(CayenneDataObject.java:147)
	at org.apache.cayenne.exp.parser.ASTObjPath.evaluateNode(ASTObjPath.java:60)
	at org.apache.cayenne.exp.parser.SimpleNode.evaluate(SimpleNode.java:417)

Signature is: public String getCustomerNameForSorting()


> But I would use this:
> 
> Collections.sort(list, (a,b) -> a.getSomeProp().compareTo(b.getSomeProp()));

Thought of that, but it would require me to re-implement the path segment tokenization and
everything.

Maik


> On Mon, Jul 17, 2017 at 8:08 AM Musall, Maik <maik@selbstdenker.ag> wrote:
> 
>> Hi all,
>> 
>> I have a UI with a list of objects and user-configurable filters and
>> sorting criteria. Most of the sorting criteria are plain db path
>> expressions, so I can just feed them into Ordering.orderedList(objects).
>> 
>> A couple of them however are path expressions with the last segment being
>> not a Property, but a method name that is supposed to be invoked, which
>> would then return a String, after which the list is to be ordered. This
>> worked fine in the past using EOF and EOSortOrdering, but Cayenne's
>> ordering throws an ExpressionException on evaluate().
>> 
>> What is the usual way in Cayenne to deal with this?
>> 
>> Thanks
>> Maik
>> 
>> 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message