-
Notifications
You must be signed in to change notification settings - Fork 1k
/
ViewsModule.java
131 lines (105 loc) · 6.23 KB
/
ViewsModule.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package org.graylog.plugins.enterprise;
import com.google.inject.TypeLiteral;
import com.google.inject.binder.ScopedBindingBuilder;
import com.google.inject.multibindings.MapBinder;
import com.google.inject.multibindings.Multibinder;
import io.searchbox.core.search.aggregation.Aggregation;
import org.graylog.plugins.enterprise.search.Search;
import org.graylog.plugins.enterprise.search.SearchType;
import org.graylog.plugins.enterprise.search.elasticsearch.ESQueryDecorator;
import org.graylog.plugins.enterprise.search.elasticsearch.QueryMetadataDecorator;
import org.graylog.plugins.enterprise.search.elasticsearch.searchtypes.ESSearchTypeHandler;
import org.graylog.plugins.enterprise.search.elasticsearch.searchtypes.pivot.ESPivotBucketSpecHandler;
import org.graylog.plugins.enterprise.search.elasticsearch.searchtypes.pivot.ESPivotSeriesSpecHandler;
import org.graylog.plugins.enterprise.search.engine.GeneratedQueryContext;
import org.graylog.plugins.enterprise.search.engine.QueryBackend;
import org.graylog.plugins.enterprise.search.rest.SeriesDescription;
import org.graylog.plugins.enterprise.search.searchtypes.pivot.BucketSpec;
import org.graylog.plugins.enterprise.search.searchtypes.pivot.SeriesSpec;
import org.graylog.plugins.enterprise.search.views.ViewDTO;
import org.graylog.plugins.enterprise.search.views.sharing.SharingStrategy;
import org.graylog2.plugin.PluginMetaData;
import org.graylog2.plugin.PluginModule;
public abstract class ViewsModule extends PluginModule {
protected void registerQueryMetadataDecorator(Class<? extends QueryMetadataDecorator> queryMetadataDecorator) {
queryMetadataDecoratorBinder().addBinding().to(queryMetadataDecorator);
}
protected Multibinder<QueryMetadataDecorator> queryMetadataDecoratorBinder() {
return Multibinder.newSetBinder(binder(), QueryMetadataDecorator.class);
}
protected void registerProvidedViewsCapability(String capability, PluginMetaData plugin) {
viewsCapabilityBinder().addBinding(capability).toInstance(plugin);
}
protected MapBinder<String, PluginMetaData> viewsCapabilityBinder() {
return MapBinder.newMapBinder(binder(), String.class, PluginMetaData.class);
}
protected void registerViewRequirement(Class<? extends Requirement<ViewDTO>> viewRequirement) {
viewRequirementBinder().addBinding().to(viewRequirement);
}
protected Multibinder<Requirement<ViewDTO>> viewRequirementBinder() {
return Multibinder.newSetBinder(binder(), new TypeLiteral<Requirement<ViewDTO>>() {});
}
protected void registerSearchRequirement(Class<? extends Requirement<Search>> searchRequirement) {
searchRequirementBinder().addBinding().to(searchRequirement);
}
protected Multibinder<Requirement<Search>> searchRequirementBinder() {
return Multibinder.newSetBinder(binder(), new TypeLiteral<Requirement<Search>>() {});
}
protected void registerESQueryDecorator(Class<? extends ESQueryDecorator> esQueryDecorator) {
esQueryDecoratorBinder().addBinding().to(esQueryDecorator);
}
protected Multibinder<ESQueryDecorator> esQueryDecoratorBinder() {
return Multibinder.newSetBinder(binder(), ESQueryDecorator.class);
}
protected MapBinder<String, SeriesDescription> seriesSpecBinder() {
return MapBinder.newMapBinder(binder(), String.class, SeriesDescription.class);
}
protected void registerPivotAggregationFunction(String name, Class<? extends SeriesSpec> seriesSpecClass) {
registerJacksonSubtype(seriesSpecClass);
seriesSpecBinder().addBinding(name).toInstance(SeriesDescription.create(name));
}
protected MapBinder<String, SharingStrategy> sharingStrategyBinder() {
return MapBinder.newMapBinder(binder(), String.class, SharingStrategy.class);
}
protected ScopedBindingBuilder registerSharingStrategy(String type, Class<? extends SharingStrategy> sharingStrategy) {
return sharingStrategyBinder().addBinding(type).to(sharingStrategy);
}
protected MapBinder<String, ESPivotBucketSpecHandler<? extends BucketSpec, ? extends Aggregation>> pivotBucketHandlerBinder() {
return MapBinder.newMapBinder(binder(),
TypeLiteral.get(String.class),
new TypeLiteral<ESPivotBucketSpecHandler<? extends BucketSpec, ? extends Aggregation>>() {});
}
protected ScopedBindingBuilder registerPivotBucketHandler(
String name,
Class<? extends ESPivotBucketSpecHandler<? extends BucketSpec, ? extends Aggregation>> implementation
) {
return pivotBucketHandlerBinder().addBinding(name).to(implementation);
}
protected MapBinder<String, ESPivotSeriesSpecHandler<? extends SeriesSpec, ? extends Aggregation>> pivotSeriesHandlerBinder() {
return MapBinder.newMapBinder(binder(),
TypeLiteral.get(String.class),
new TypeLiteral<ESPivotSeriesSpecHandler<? extends SeriesSpec, ? extends Aggregation>>() {});
}
protected ScopedBindingBuilder registerPivotSeriesHandler(
String name,
Class<? extends ESPivotSeriesSpecHandler<? extends SeriesSpec, ? extends Aggregation>> implementation
) {
return pivotSeriesHandlerBinder().addBinding(name).to(implementation);
}
protected MapBinder<String, QueryBackend<? extends GeneratedQueryContext>> queryBackendBinder() {
return MapBinder.newMapBinder(binder(),
TypeLiteral.get(String.class),
new TypeLiteral<QueryBackend<? extends GeneratedQueryContext>>() {});
}
protected ScopedBindingBuilder registerQueryBackend(String name, Class<? extends QueryBackend<? extends GeneratedQueryContext>> implementation) {
return queryBackendBinder().addBinding(name).to(implementation);
}
protected MapBinder<String, ESSearchTypeHandler<? extends SearchType>> esSearchTypeHandlerBinder() {
return MapBinder.newMapBinder(binder(),
TypeLiteral.get(String.class),
new TypeLiteral<ESSearchTypeHandler<? extends SearchType>>() {});
}
protected ScopedBindingBuilder registerESSearchTypeHandler(String name, Class<? extends ESSearchTypeHandler<? extends SearchType>> implementation) {
return esSearchTypeHandlerBinder().addBinding(name).to(implementation);
}
}