cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Musall, Maik" <m...@selbstdenker.ag>
Subject Re: in-memory filter by Expression accessing regular methods
Date Sun, 16 Apr 2017 11:13:12 GMT
Wow, Mark, good guess!

That's it. Added a get… method around each part of the path's accessed methods, and it works.
Didn't occur to me at all, because those methods are not getters in the strict sense. But
I could have discovered this before, by looking at the BeanAcccessor implementation. Dang.

I suppose there is no way in Cayenne to inject a different behaviour for this, through DI
or something? It doesn't look like it from the code (BeanAccessor, PropertyUtils, and the
readSimpleProperty() method  in CayennDataObject is even marked final). Because I know I will
run into this again and again, given the existing large code base.

Maik



> Am 15.04.2017 um 23:18 schrieb Mark Wardle <mark@wardle.org>:
> 
> Can't try it as only have phone at the moment but have you tried adding "get" as a prefix
to your method declaration?
> 
> I still find it difficult to not name getters without the get. 
> 
> -- 
> Dr. Mark Wardle
> Consultant Neurologist, Cardiff, UK
> (Sent from my mobile)
> 
> 
>> On 13 Apr 2017, at 10:44, Musall, Maik <maik@selbstdenker.ag> wrote:
>> 
>> Hi John,
>> 
>> can you elaborate that on this example?
>> 
>> Previously, I did this to filter:
>> 
>>   result = ExpressionFactory.matchExp( filterPath, filterValue ).filterObjects( result
);
>> 
>> Now I tried:
>> 
>>   result = result.stream()
>>       .filter( obj -> PropertyUtils.getProperty( obj, filterPath ).equals( filterValue
) )
>>       .collect( Collectors.toList() );
>> 
>> Both times, I get:
>> 
>> java.lang.IllegalArgumentException: Property 'responsibleUser' is not readable
>> 
>> where "result" is like a List<Foo> with Foo being a DataObject that has a method
called "responsibleUser", returning another DataObject subclass.
>> 
>> Maik
>> 
>> 
>>> Am 12.04.2017 um 19:11 schrieb John Huss <johnthuss@gmail.com>:
>>> 
>>> Ok, you can use property utils in conjunction to call a method using
>>> reflection (with a string name)
>>>> On Wed, Apr 12, 2017 at 6:07 PM Musall, Maik <maik@selbstdenker.ag>
wrote:
>>>> 
>>>> Hi John,
>>>> 
>>>> how do you mean that? Those filter paths come from the UI, passed on by
>>>> the user assembling filter criteria. I wouldn't use string filter paths if
>>>> the criteria would be constant.
>>>> 
>>>> Maik
>>>> 
>>>>> Am 12.04.2017 um 19:03 schrieb John Huss <johnthuss@gmail.com>:
>>>>> 
>>>>> Just use a java 8 stream and lambda in addition or instead of.
>>>>> On Wed, Apr 12, 2017 at 4:48 PM Musall, Maik <maik@selbstdenker.ag>
>>>> wrote:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> when filtering a list of objects by expression.filterObjects( list
), is
>>>>>> there a way for the expression to access regular methods instead
of
>>>> Cayenne
>>>>>> db properties?
>>>>>> 
>>>>>> Use Case: I have a class A that has several relationships to class
B,
>>>> and
>>>>>> it depends on a number of factors which is relevant in this case.
So
>>>> there
>>>>>> is a method that returns either this or that relation to class B.
I
>>>> would
>>>>>> like to include the method name in the expression path. (This was
>>>> possible
>>>>>> in EOF, and I just found that it doesn't work in Cayenne.)
>>>>>> 
>>>>>> Thanks
>>>>>> Maik
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 


Mime
View raw message