You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Dan Haywood (JIRA)" <ji...@apache.org> on 2017/03/19 15:58:41 UTC

[jira] [Created] (ISIS-1598) Extend RO API to handle pagination parameter

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)