1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.forgerock.json.resource;
18
19 import org.forgerock.api.annotations.CollectionProvider;
20 import org.forgerock.api.annotations.Delete;
21 import org.forgerock.api.annotations.Patch;
22 import org.forgerock.api.annotations.Read;
23 import org.forgerock.api.annotations.Update;
24 import org.forgerock.services.context.Context;
25 import org.forgerock.util.promise.Promise;
26
27
28
29
30
31
32
33
34
35
36 class AnnotationCollectionInstance extends InterfaceCollectionInstance {
37
38 private final AnnotatedMethod readMethod;
39 private final AnnotatedMethod updateMethod;
40 private final AnnotatedMethod deleteMethod;
41 private final AnnotatedMethod patchMethod;
42 private final AnnotatedActionMethods actionMethods;
43
44 AnnotationCollectionInstance(Object requestHandler) {
45 super(null);
46 if (!requestHandler.getClass().isAnnotationPresent(CollectionProvider.class)) {
47 throw new IllegalArgumentException("CollectionProvider missing from class: "
48 + requestHandler.getClass().getName());
49 }
50 this.readMethod = AnnotatedMethod.findMethod(requestHandler, Read.class, true);
51 this.updateMethod = AnnotatedMethod.findMethod(requestHandler, Update.class, true);
52 this.deleteMethod = AnnotatedMethod.findMethod(requestHandler, Delete.class, true);
53 this.patchMethod = AnnotatedMethod.findMethod(requestHandler, Patch.class, true);
54 this.actionMethods = AnnotatedActionMethods.findAll(requestHandler, true);
55 }
56
57 @Override
58 public Promise<ResourceResponse, ResourceException> handleRead(Context context, ReadRequest request) {
59 return readMethod.invoke(context, request, Resources.idOf(context));
60 }
61
62 @Override
63 public Promise<ResourceResponse, ResourceException> handleUpdate(Context context, UpdateRequest request) {
64 return updateMethod.invoke(context, request, Resources.idOf(context));
65 }
66
67 @Override
68 public Promise<ResourceResponse, ResourceException> handleDelete(Context context, DeleteRequest request) {
69 return deleteMethod.invoke(context, request, Resources.idOf(context));
70 }
71
72 @Override
73 public Promise<ResourceResponse, ResourceException> handlePatch(Context context, PatchRequest request) {
74 return patchMethod.invoke(context, request, Resources.idOf(context));
75 }
76
77 @Override
78 public Promise<ActionResponse, ResourceException> handleAction(Context context, ActionRequest request) {
79 return actionMethods.invoke(context, request, Resources.idOf(context));
80 }
81 }