blob: ee47cc3577f5db4f7707cc9e683b3cd8a8f8b3c5 (
plain)
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
|
/*
* Copyright (c) 2016 Intel and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.fd.honeycomb.vppnsh.impl;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
import io.fd.honeycomb.data.init.DataTreeInitializer;
import io.fd.honeycomb.translate.read.ReaderFactory;
import io.fd.honeycomb.translate.vpp.util.NamingContext;
import io.fd.honeycomb.translate.write.WriterFactory;
import io.fd.honeycomb.vppnsh.impl.cfgattrs.VppNshConfiguration;
import io.fd.honeycomb.vppnsh.impl.config.VppNshWriterFactory;
import io.fd.honeycomb.vppnsh.impl.init.VppNshInitializer;
import io.fd.honeycomb.vppnsh.impl.oper.VppNshReaderFactory;
import io.fd.honeycomb.vppnsh.impl.util.JVppNshProvider;
import net.jmob.guice.conf.core.ConfigurationModule;
import org.openvpp.jvpp.nsh.future.FutureJVppNsh;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This is some glue code necessary for Honeycomb distribution to pick up the plugin classes
*/
public final class VppNshModule extends AbstractModule {
private static final Logger LOG = LoggerFactory.getLogger(VppNshModule.class);
@Override
protected void configure() {
// TODO HONEYCOMB-207 workaround:
if (!isEnabled()) {
LOG.info("VppNshModule is disabled. Skipping module configuration.");
return;
}
LOG.info("Configuring VppNsh module");
// Naming contexts
bind(NamingContext.class)
.annotatedWith(Names.named("nsh-entry-context"))
.toInstance(new NamingContext("nsh-entry-", "nsh-entry-context"));
bind(NamingContext.class)
.annotatedWith(Names.named("nsh-map-context"))
.toInstance(new NamingContext("nsh-map-", "nsh-map-context"));
// Bind to Plugin's JVPP.
bind(FutureJVppNsh.class).toProvider(JVppNshProvider.class).in(Singleton.class);
// Below are classes picked up by HC framework
Multibinder.newSetBinder(binder(), WriterFactory.class).addBinding().to(VppNshWriterFactory.class);
Multibinder.newSetBinder(binder(), ReaderFactory.class).addBinding().to(VppNshReaderFactory.class);
Multibinder.newSetBinder(binder(), DataTreeInitializer.class).addBinding().to(VppNshInitializer.class);
LOG.info("NSH module successfully configured");
}
private static boolean isEnabled() {
final Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
// These are plugin specific config attributes
install(ConfigurationModule.create());
requestInjection(VppNshConfiguration.class);
}
});
final VppNshConfiguration cfgAttributes = injector.getInstance(VppNshConfiguration.class);
LOG.debug("Configuration for VppNsh module: {}", cfgAttributes);
return cfgAttributes.isNshEnabled();
}
}
|