cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <blackn...@gmail.com>
Subject Re: in-memory filter by Expression accessing regular methods
Date Tue, 18 Apr 2017 16:23:52 GMT
Hi Maik,

I'm late to this, but you likely could've used
obj.readProperty("responsibleUser") as well.

mrg


On Sun, Apr 16, 2017 at 7:13 AM, Musall, Maik <maik@selbstdenker.ag> wrote:

> 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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message