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 static org.forgerock.api.models.ApiDescription.*;
20 import static org.forgerock.api.models.Paths.*;
21 import static org.forgerock.api.models.VersionedPath.*;
22 import static org.forgerock.util.Reject.*;
23
24 import org.forgerock.api.models.ApiDescription;
25 import org.forgerock.api.models.Resource;
26 import org.wrensecurity.guava.common.base.Optional;
27 import org.forgerock.http.ApiProducer;
28 import org.forgerock.services.context.Context;
29 import org.forgerock.services.descriptor.Describable;
30
31
32
33
34
35
36
37
38
39 final class DescribableResourceHandler implements Describable<ApiDescription, Request> {
40
41 private final ApiDescription definitionDescriptions;
42 private ApiDescription api;
43 private Optional<Resource> resource;
44
45 DescribableResourceHandler() {
46
47
48
49
50 this.definitionDescriptions = apiDescription().id("fake:id").version("0.0").build();
51 }
52
53 ApiDescription getDefinitionDescriptions() {
54 return definitionDescriptions;
55 }
56
57 void describes(Resource resource) {
58 rejectStateIfTrue(this.resource != null, "Already described API");
59 this.resource = Optional.fromNullable(resource);
60 }
61
62 @Override
63 public final ApiDescription api(ApiProducer<ApiDescription> producer) {
64 rejectStateIfTrue(resource == null, "Not yet described API");
65 if (api == null && resource.isPresent()) {
66 api = producer.addApiInfo(ApiDescription.apiDescription().id("fake:id").version("0.0")
67 .definitions(definitionDescriptions.getDefinitions())
68 .errors(definitionDescriptions.getErrors())
69 .services(definitionDescriptions.getServices())
70 .paths(paths().put("", versionedPath().put(UNVERSIONED, resource.get()).build()).build())
71 .build());
72 }
73 return api;
74 }
75
76 @Override
77 public ApiDescription handleApiRequest(Context context, Request request) {
78 rejectStateIfTrue(api == null, "Not ready for API Descriptor requests");
79 return api;
80 }
81
82 @Override
83 public void addDescriptorListener(Describable.Listener listener) {
84
85 }
86
87 @Override
88 public void removeDescriptorListener(Describable.Listener listener) {
89
90 }
91 }