Is your key “customerNameForSorting”? On Mon, Jul 17, 2017 at 7:40 AM, Musall, Maik <[email protected]> wrote:
> Hi John, > > > Am 17.07.2017 um 16:08 schrieb John Huss <[email protected]>: > > > > 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 <[email protected]> > 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 > >> > >> > >
