Merge "Reduce/enhance logging in AbstractLeader"
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / config / yang / md / sal / dom / impl / DomBrokerImplModule.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.config.yang.md.sal.dom.impl;
9
10 import com.google.common.collect.ClassToInstanceMap;
11 import com.google.common.collect.MutableClassToInstanceMap;
12 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
13 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
14 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService;
15 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
16 import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService;
17 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
18 import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter;
19 import org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter;
20 import org.opendaylight.controller.md.sal.dom.broker.impl.compat.BackwardsCompatibleDataBroker;
21 import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
22 import org.opendaylight.controller.sal.core.api.BrokerService;
23 import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
24 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
25 import org.opendaylight.controller.sal.core.api.data.DataProviderService;
26 import org.opendaylight.controller.sal.core.api.model.SchemaService;
27 import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
28 import org.opendaylight.controller.sal.core.api.mount.MountService;
29 import org.opendaylight.controller.sal.dom.broker.BackwardsCompatibleMountPointManager;
30 import org.opendaylight.controller.sal.dom.broker.BrokerImpl;
31 import org.opendaylight.controller.sal.dom.broker.GlobalBundleScanningSchemaServiceImpl;
32 import org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker;
33 import org.opendaylight.controller.sal.dom.broker.impl.SchemaContextProviders;
34
35 /**
36 *
37 */
38 public final class DomBrokerImplModule extends org.opendaylight.controller.config.yang.md.sal.dom.impl.AbstractDomBrokerImplModule
39 {
40
41     public DomBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
42         super(identifier, dependencyResolver);
43     }
44
45     public DomBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final DomBrokerImplModule oldModule, final java.lang.AutoCloseable oldInstance) {
46         super(identifier, dependencyResolver, oldModule, oldInstance);
47     }
48
49     @Override
50     public void validate(){
51         super.validate();
52     }
53
54     @Override
55     public java.lang.AutoCloseable createInstance() {
56         final DOMDataBroker asyncBroker= getAsyncDataBrokerDependency();
57
58         final ClassToInstanceMap<BrokerService> services = MutableClassToInstanceMap.create();
59
60         // TODO: retrieve from config subsystem
61         final int queueDepth = 1024;
62
63         final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(queueDepth);
64         services.putInstance(DOMNotificationService.class, domNotificationRouter);
65         services.putInstance(DOMNotificationPublishService.class, domNotificationRouter);
66
67         final SchemaService schemaService = getSchemaServiceImpl();
68         services.putInstance(SchemaService.class, schemaService);
69         final SchemaAwareRpcBroker router = new SchemaAwareRpcBroker("/", SchemaContextProviders
70                 .fromSchemaService(schemaService));
71         services.putInstance(RpcProvisionRegistry.class, router);
72
73         services.putInstance(DOMDataBroker.class, asyncBroker);
74         final DataProviderService legacyData = new BackwardsCompatibleDataBroker(asyncBroker,schemaService);
75         services.putInstance(DataProviderService.class,legacyData);
76         services.putInstance(DataBrokerService.class, legacyData);
77
78         final DOMRpcRouter rpcRouter = new DOMRpcRouter();
79         schemaService.registerSchemaContextListener(rpcRouter);
80         services.putInstance(DOMRpcService.class, rpcRouter);
81         services.putInstance(DOMRpcProviderService.class, rpcRouter);
82
83         final DOMMountPointService mountService = new DOMMountPointServiceImpl();
84         services.putInstance(DOMMountPointService.class, mountService);
85
86         // TODO remove backwards service, use only new DOMMountPointService
87         final MountProvisionService backwardsMountService = new BackwardsCompatibleMountPointManager(mountService);
88         services.putInstance(MountService.class, backwardsMountService);
89         services.putInstance(MountProvisionService.class, backwardsMountService);
90
91         return new BrokerImpl(router, services);
92     }
93
94     private SchemaService getSchemaServiceImpl() {
95         final SchemaService schemaService;
96         if(getRootSchemaService() != null) {
97             schemaService = getRootSchemaServiceDependency();
98         } else {
99             schemaService = GlobalBundleScanningSchemaServiceImpl.getInstance();
100         }
101         return schemaService;
102     }
103 }