/* * Copyright (c) 2016 Cisco 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.infra.distro.data.context; import com.google.inject.PrivateModule; import com.google.inject.Singleton; import com.google.inject.name.Names; import io.fd.honeycomb.data.ModifiableDataManager; import io.fd.honeycomb.data.init.DataTreeInitializer; import io.fd.honeycomb.infra.distro.data.BindingDataBrokerProvider; import io.fd.honeycomb.infra.distro.data.DataTreeProvider; import io.fd.honeycomb.infra.distro.data.PersistingDataTreeProvider; import io.fd.honeycomb.infra.distro.initializer.PersistedFileInitializerProvider; import io.fd.honeycomb.translate.MappingContext; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; public class ContextPipelineModule extends PrivateModule { public static final String HONEYCOMB_CONTEXT_NOPERSIST = "honeycomb-context-nopersist"; public static final String HONEYCOMB_CONTEXT = "honeycomb-context"; @Override protected void configure() { // Non persisting data tree for context DataTreeProvider.ContextDataTreeProvider noPersistDataTreeProvider = new DataTreeProvider.ContextDataTreeProvider(); bind(DataTree.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT_NOPERSIST)) .toProvider(noPersistDataTreeProvider).in(Singleton.class); expose(DataTree.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT_NOPERSIST)); // Persisting data tree wrapper for context PersistingDataTreeProvider.ContextPersistingDataTreeProvider dataTreeProvider = new PersistingDataTreeProvider.ContextPersistingDataTreeProvider(); bind(DataTree.class).toProvider(dataTreeProvider).in(Singleton.class); // Data Tree manager (without any delegation) on top of context data tree bind(ModifiableDataManager.class).toProvider(ModifiableDTMgrProvider.class).in(Singleton.class); // DOMDataBroker interface on top of data tree manager HoneycombContextDOMDataBrokerProvider domBrokerProvider = new HoneycombContextDOMDataBrokerProvider(); bind(DOMDataBroker.class).toProvider(domBrokerProvider).in(Singleton.class); // BA version of data broker for context bind(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT)).toProvider(BindingDataBrokerProvider.class) .in(Singleton.class); expose(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT)); // Create initializer to init persisted config data bind(DataTreeInitializer.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT)) .toProvider(PersistedFileInitializerProvider.PersistedContextInitializerProvider.class) .in(Singleton.class); expose(DataTreeInitializer.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT)); // Mapping context is just a small adapter on top of BA data broker to simplify CRUD of context data bind(MappingContext.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT)) .toProvider(RealtimeMappingContextProvider.class).in(Singleton.class); expose(MappingContext.class).annotatedWith(Names.named(HONEYCOMB_CONTEXT)); } }