ba8193ed4d91258bcb9a5cb151129966c67aaffa
[groupbasedpolicy.git] / sxp-mapper / src / main / java / org / opendaylight / groupbasedpolicy / sxp / mapper / impl / SxpMapperProviderImpl.java
1 /*
2  * Copyright (c) 2016 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
9 package org.opendaylight.groupbasedpolicy.sxp.mapper.impl;
10
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
13 import org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry;
14 import org.opendaylight.groupbasedpolicy.api.EndpointAugmentor;
15 import org.opendaylight.groupbasedpolicy.sxp.mapper.api.EPTemplateListener;
16 import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SimpleCachedDao;
17 import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SxpMapperReactor;
18 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.dao.EPForwardingTemplateDaoImpl;
19 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.dao.EPPolicyTemplateDaoImpl;
20 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.dao.EpPolicyTemplateValueKeyFactory;
21 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.dao.MasterDatabaseBindingDaoImpl;
22 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.dao.SimpleCachedDaoEPForwardingTemplateImpl;
23 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.dao.SimpleCachedDaoImpl;
24 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.listen.EPForwardingTemplateListenerImpl;
25 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.listen.EPPolicyTemplateListenerImpl;
26 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.listen.MasterDatabaseBindingListenerImpl;
27 import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.EPTemplateUtil;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 /**
38  * SxpMapper provider implementation.
39  */
40 public class SxpMapperProviderImpl implements AutoCloseable {
41
42     private static final Logger LOG = LoggerFactory.getLogger(SxpMapperProviderImpl.class);
43
44     private final MasterDatabaseBindingListenerImpl sxpDatabaseListener;
45     private final SxpMapperReactor sxpMapperReactor;
46     private final EPTemplateListener epPolicyTemplateListener;
47     private final EPTemplateListener epForwardingTemplateListener;
48     private final DomainSpecificRegistry domainSpecificRegistry;
49     private final EndpointAugmentor sxpEndpointAugmentor;
50
51     public SxpMapperProviderImpl(final DataBroker dataBroker, final RpcProviderRegistry rpcRegistryDependency,
52             final DomainSpecificRegistry domainSpecificRegistry) {
53         LOG.info("starting SxmMapper ..");
54         this.domainSpecificRegistry = domainSpecificRegistry;
55
56         final BaseEndpointService endpointService = rpcRegistryDependency.getRpcService(BaseEndpointService.class);
57         sxpMapperReactor = new SxpMapperReactorImpl(endpointService, dataBroker);
58
59         final SimpleCachedDao<Sgt, EndpointPolicyTemplateBySgt> epPolicyTemplateCachedDao = new SimpleCachedDaoImpl<>();
60         final SimpleCachedDao<IpPrefix, EndpointForwardingTemplateBySubnet> epForwardingTemplateCachedDao =
61                 new SimpleCachedDaoEPForwardingTemplateImpl();
62         final SimpleCachedDao<IpPrefix, MasterDatabaseBinding> masterDBBindingCachedDao = new SimpleCachedDaoImpl<>();
63
64         final EpPolicyTemplateValueKeyFactory epPolicyTemplateKeyFactory = new EpPolicyTemplateValueKeyFactory(
65                 EPTemplateUtil.createEndpointGroupIdOrdering(), EPTemplateUtil.createConditionNameOrdering());
66         final EPPolicyTemplateDaoImpl epPolicyTemplateDao = new EPPolicyTemplateDaoImpl(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory);
67         final EPForwardingTemplateDaoImpl epForwardingTemplateDao = new EPForwardingTemplateDaoImpl(dataBroker,
68                 epForwardingTemplateCachedDao);
69         final  MasterDatabaseBindingDaoImpl masterDBBindingDao = new MasterDatabaseBindingDaoImpl(dataBroker, masterDBBindingCachedDao);
70
71         sxpDatabaseListener = new MasterDatabaseBindingListenerImpl(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
72                 epPolicyTemplateDao, epForwardingTemplateDao);
73         epPolicyTemplateListener = new EPPolicyTemplateListenerImpl(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
74                 masterDBBindingDao, epForwardingTemplateDao);
75         epForwardingTemplateListener = new EPForwardingTemplateListenerImpl(dataBroker, sxpMapperReactor, epForwardingTemplateCachedDao,
76                 masterDBBindingDao, epPolicyTemplateDao);
77         sxpEndpointAugmentor = new SxpEndpointAugmentorImpl(epPolicyTemplateDao, epPolicyTemplateKeyFactory);
78         domainSpecificRegistry.getEndpointAugmentorRegistry().register(sxpEndpointAugmentor);
79         LOG.info("started SxmMapper");
80     }
81
82     @Override
83     public void close() throws Exception {
84         //TODO: stub
85         sxpDatabaseListener.close();
86         epPolicyTemplateListener.close();
87         epForwardingTemplateListener.close();
88         domainSpecificRegistry.getEndpointAugmentorRegistry().unregister(sxpEndpointAugmentor);
89     }
90 }