P - type of the parent resource. For a top level collection this should always be TopLevelResource.R - type of resource operated on by each view.public interface RestCollection<P extends RestResource,R extends RestResource>
To build a collection declare a resource, the map in a module, and the collection itself accepting the map:
public class MyResource implements RestResource {
public static final TypeLiteral<RestView<MyResource>> MY_KIND =
new TypeLiteral<RestView<MyResource>>() {};
}
public class MyModule extends AbstractModule {
@Override
protected void configure() {
DynamicMap.mapOf(binder(), MyResource.MY_KIND);
get(MyResource.MY_KIND, "action").to(MyAction.class);
}
}
public class MyCollection extends RestCollection<TopLevelResource, MyResource> {
private final DynamicMap<RestView<MyResource>> views;
@Inject
MyCollection(DynamicMap<RestView<MyResource>> views) {
this.views = views;
}
public DynamicMap<RestView<MyResource>> views() {
return views;
}
}
To build a nested collection, implement ChildCollection.
| Modifier and Type | Method and Description |
|---|---|
RestView<P> |
list()
Create a view to list the contents of the collection.
|
R |
parse(P parent,
IdString id)
Parse a path component into a resource handle.
|
DynamicMap<RestView<R>> |
views()
Get the views that support this collection.
|
RestView<P> list() throws ResourceNotFoundException, AuthException
The returned view should accept the parent type to scope the search, and may want to take a "q" parameter option to narrow the results.
ResourceNotFoundException - if the collection cannot be listed.AuthException - if the collection requires authentication.R parse(P parent, IdString id) throws ResourceNotFoundException, java.lang.Exception
parent - the handle to the collection.id - string identifier supplied by the client. In a URL such as /changes/1234/abandon this string is "1234".ResourceNotFoundException - the object does not exist, or the caller is not permitted to
know if the resource exists.java.lang.Exception - if the implementation had any errors converting to a resource handle. This
results in an HTTP 500 Internal Server Error.DynamicMap<RestView<R>> views()
Within a resource the views are accessed as RESOURCE/plugin~view.