1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.server.metadata;
18
19 import static java.util.Objects.requireNonNull;
20
21 import java.util.function.Function;
22
23 import com.linecorp.armeria.common.HttpRequest;
24 import com.linecorp.armeria.common.HttpResponse;
25 import com.linecorp.armeria.server.HttpService;
26 import com.linecorp.armeria.server.Service;
27 import com.linecorp.armeria.server.ServiceRequestContext;
28 import com.linecorp.armeria.server.SimpleDecoratingHttpService;
29
30 import io.netty.util.AttributeKey;
31
32
33
34
35 public final class MetadataServiceInjector extends SimpleDecoratingHttpService {
36
37
38
39
40 public static Function<? super HttpService, MetadataServiceInjector> newDecorator(MetadataService mds) {
41 requireNonNull(mds, "mds");
42 return service -> new MetadataServiceInjector(service, mds);
43 }
44
45 private static final AttributeKey<MetadataService> METADATA_SERVICE_ATTRIBUTE_KEY =
46 AttributeKey.valueOf(MetadataServiceInjector.class, "METADATA");
47
48 private final MetadataService mds;
49
50 private MetadataServiceInjector(HttpService delegate, MetadataService mds) {
51 super(delegate);
52 this.mds = requireNonNull(mds, "mds");
53 }
54
55 @Override
56 public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception {
57 ctx.setAttr(METADATA_SERVICE_ATTRIBUTE_KEY, mds);
58 return unwrap().serve(ctx, req);
59 }
60
61
62
63
64 public static MetadataService getMetadataService(ServiceRequestContext ctx) {
65 final MetadataService mds = ctx.attr(METADATA_SERVICE_ATTRIBUTE_KEY);
66 if (mds != null) {
67 return mds;
68 }
69 throw new IllegalStateException("No metadata service instance exists.");
70 }
71 }