cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Ordering using non-property values
Date Tue, 18 Jul 2017 11:05:27 GMT
From the stack, some code somewhere passes 'getCustomerNameForSorting' instead of 'customerNameForSorting'
to Cayenne. Can it be a typo in the property name?

Andrus

> On Jul 18, 2017, at 1:26 PM, Musall, Maik <maik@selbstdenker.ag> wrote:
> 
> Yep.
> 
>> Am 17.07.2017 um 17:50 schrieb Lon Varscsak <lon.varscsak@gmail.com>:
>> 
>> Is your key ‚ÄúcustomerNameForSorting‚ÄĚ?
>> 
>> On Mon, Jul 17, 2017 at 7:40 AM, Musall, Maik <maik@selbstdenker.ag> wrote:
>> 
>>> 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
View raw message