Dan Haywood created ISIS-1598:
---------------------------------

             Summary: Extend RO API to handle pagination parameter
                 Key: ISIS-1598
                 URL: https://issues.apache.org/jira/browse/ISIS-1598
             Project: Isis
          Issue Type: New Feature
          Components: Core: Viewer: RestfulObjects
    Affects Versions: 1.14.0
            Reporter: Dan Haywood
             Fix For: 1.17.0


as per 
https://lists.apache.org/thread.html/9e663076e7af01a7cbc625a0046b62c13d533fb89df1f395f5078457@%3Cusers.isis.apache.org%3E

{code}
We are mostly using Restful Objects. 
We were able to do this type of pagination on Action, by modifying the 
"ObjectActionArgHelper.java" to populate the pagination details.

On method: public List<ObjectAdapter> parseAndValidateArguments(final 
JsonRepresentation arguments) {...}

// Handle page parameters
if (paramSpec.getCorrespondingClass() == Pageable.class
&& argRepr != null
/*&& argRepr.mapHas("value")
&& !argRepr.isNull("value")*/) {
/*final JsonRepresentation token = argRepr.getRepresentation("value");

final String tokenAsString = token.asString();*/

final PageRequest pageRequest;

if (argRepr.getString("sort") != null) {
final String[] split = argRepr.getString("sort").split(": ");
final Sort.Direction dir = Sort.Direction.fromStringOrNull(split[1]);
pageRequest = new PageRequest(Integer.parseInt(argRepr.getString("pageNumber")),
Integer.parseInt(argRepr.getString("pageSize")),
new Sort(dir, split[0]));
} else {
pageRequest = new PageRequest(Integer.parseInt(argRepr.getString("pageNumber")),
Integer.parseInt(argRepr.getString("pageSize")));
}


if (pageRequest != null) {
// Encode pageable. This shall be deserialized later on.
final ObjectAdapter adapter = getPersistenceSession().adapterFor(pageRequest);
final EncodableFacet encodableFacet = paramSpec.getFacet(EncodableFacet.class);
argRepr = JsonRepresentation.newMap();
argRepr.mapPut("value", encodableFacet.toEncodedString(adapter));
} else {
// No file for given token; throw error
final String reason = "There is something wrong with your page parameters.";
argRepr.mapPut("invalidReason", reason);
throw new IllegalArgumentException(reason);
}
}


What we are thinking for the implementation:

METHOD 1: Modify the existing metamodels.

1. On "ObjectCollectionReprRenderer.java" [1], we are thinking that we can 
insert Pageable arguments to this line
2. On " ObjectAssociation.java" [2], we might end up changing this line as well 
to accept Pageable parameter. 


METHOD 2: Create new metamodels which extends the existing metamodels.

As mention, we are able to do this on Actions. And our intent to do this as 
well on Collections.

We might as well asks for your suggestion on how to do this Dan or if there are 
any better implementation for this one.


[1] 
https://github.com/apache/isis/blob/master/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java#L84
[2] 
https://github.com/apache/isis/blob/master/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java#L67
 

Thanks and best regards,
Arjun Gica Manipes

{code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to