On 06/12/12 11:10, Marek Posolda wrote:
On 05/12/12 23:21, Shane Bryzak wrote:
> On 12/06/2012 08:09 AM, Marek Posolda wrote:
>> Hi all,
>>
>> I have possible request for API change and hope it's not too late for
>> first IDM iteration.
>>
>> My suggestion is to have method on class IdentityStore with signature like:
>>
>> int countQueryResults(Map<QueryParameter,Object> parameters);
>>
>> in addition to current:
>>
>> List<IdentityType> fetchQueryResults(Map<QueryParameter,Object>
parameters);
>>
>>
>> Example use-case could be: give me count of all users with first name
"John"
>>
>> My motivation is, that for proper pagination support (searching
>> use-cases), you usually need to know total number of pages (records) and
>> then show searching results only from first page. Then user can browse
>> between pages (if more than one page is available). Something like
>>
www.google.com is doing :-) Also we need to support this in GateIn portal.
>>
>> Note that having this method is redundant at first look, as you can
>> always obtain same results with: fetchQueryResults(queryParams).size()
>> But then we are obviously losing performance. For example in JPA (DB)
>> it's way more performant to call DB query like: select count(id) from
>> users;
>> instead of: select * from users;
>>
>> Also to properly support this, we may also need additional method on
>> IdentityQuery with signature like:
>>
>> int getResultCount();
> I have no problem adding this.
>
>>
>> Also with respect to IdentityQuery, I am not sure how are information
>> about offset and limit propagated to IdentityStore? For example I have:
>> IdentityQuery query = IdentityManager().<User> createQuery(User.class);
>> query.setParameter(User.FIRST_NAME, "John");
>> query.setOffset(0);
>> query.setLimit(10);
>> query.getResultList();
>>
>> Calling of "getResultList" on last line will invoke
>> "fetchQueryResults(queryParams)" of configured IdentityStore. But how
is
>> ensured that result from IdentityStore will return only first 10 records
>> as requested? So I think we can either:
>>
>> a) Change signature of method on IdentityStore to be:
>>
>> List<IdentityType> fetchQueryResults(Map<QueryParameter,Object>
>> parameters, int offset, int limit);
> We should probably just support this:
>
> List<IdentityType> fetchQueryResults(IdentityQuery query);
That would mean that we need additional getter methods on IdentityQuery
interface, so that IdentityStore have access to all needed info.
Something like:
Class<T> getIdentityType();
Map<QueryParameter, Object[]> getParameters();
int getOffset();
int getLimit();
Seems that this topic was forgotten or ignored or lost among other
ML
discussions:-)
I sent pull request for this
https://github.com/picketlink/picketlink/pull/26
I am using the approach with "List<IdentityType>
fetchQueryResults(IdentityQuery query);" and adding getter methods into
IdentityQuery interface for offset, limit, parameters and identityType.
So all informations are encapsulated inside IdentityQuery object and
IdentityStore is able to read them.
WDYT?
Thanks,
Marek
Other approach is to have offset, limit and identityType available as
additional queryParameters (like mentioned below in approach (b)) and on
IdentityStore supports only this:
<T extends IdentityType> List<T> fetchQueryResults(Class<T>
identityType, Map<QueryParameter,Object[]> parameters);
<T extends IdentityType> int
countQueryResults(Map<QueryParameter,Object[]> parameters);
Marek
>
>
>> b) Add QueryParameters for pagination support, which will be sent to
>> IdentityStore. Maybe we can have something like this on IdentityQuery
>> class:
>>
>> QueryParameter OFFSET = new QueryParameter() {};
>>
>> QueryParameter LIMIT = new QueryParameter() {};
>>
>> And something like this on DefaultIdentityQuery class:
>>
>> @Override
>> public IdentityQuery<T> setOffset(int offset) {
>> parameters.put(IdentityQuery.OFFSET, offset);
>> return this;
>> }
>>
>> @Override
>> public IdentityQuery<T> setLimit(int limit) {
>> parameters.put(IdentityQuery.LIMIT, limit);
>> return this;
>> }
>>
>> Currently I am not seeing any query parameters for pagination in codebase.
>>
>> WDYT?
>> Marek
>>
>> _______________________________________________
>> security-dev mailing list
>> security-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/security-dev
> _______________________________________________
> security-dev mailing list
> security-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/security-dev
_______________________________________________
security-dev mailing list
security-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/security-dev