2 * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
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
9 package org.opendaylight.controller.config.yang.config.groupbasedpolicy;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
13 import org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistry;
14 import org.opendaylight.groupbasedpolicy.location.resolver.LocationResolver;
15 import org.opendaylight.groupbasedpolicy.renderer.RendererManager;
16 import org.opendaylight.groupbasedpolicy.resolver.ForwardingResolver;
17 import org.opendaylight.groupbasedpolicy.sf.SubjectFeatureDefinitionProvider;
18 import org.opendaylight.groupbasedpolicy.sf.SupportedActionDefinitionListener;
19 import org.opendaylight.groupbasedpolicy.sf.SupportedClassifierDefinitionListener;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
23 public class GroupbasedpolicyModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.AbstractGroupbasedpolicyModule {
25 private static final Logger LOG = LoggerFactory.getLogger(GroupbasedpolicyModule.class);
27 public GroupbasedpolicyModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
28 super(identifier, dependencyResolver);
31 public GroupbasedpolicyModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.groupbasedpolicy.GroupbasedpolicyModule oldModule, java.lang.AutoCloseable oldInstance) {
32 super(identifier, dependencyResolver, oldModule, oldInstance);
36 public void customValidation() {
37 // add custom validation form module attributes here.
41 * On module start, creates SubjectFeatureDefinitionProvider instance, in order to put known Subject Feature Definitions to operational Datastore
43 * @return SubjectFeatureDefinitionProvider
46 public java.lang.AutoCloseable createInstance() {
47 DataBroker dataProvider = getDataBrokerDependency();
48 PolicyValidatorRegistry validatorRegistry = getPolicyValidatorRegistryDependency();
51 Instance instance = new Instance(dataProvider, validatorRegistry);
52 LOG.info("{} successfully started.", GroupbasedpolicyModule.class.getCanonicalName());
54 } catch (TransactionCommitFailedException e) {
56 "Error creating instance of SubjectFeatureDefinitionProvider; Subject Feature Definitions were not put to Datastore");
57 throw new RuntimeException(e);
61 private static class Instance implements AutoCloseable {
63 private final SubjectFeatureDefinitionProvider sfdp;
64 private final SupportedClassifierDefinitionListener supportedClassifierDefinitionListener;
65 private final SupportedActionDefinitionListener supportedActionDefinitionListener;
66 private final LocationResolver locationResolver;
67 private final RendererManager rendererManager;
68 private final ForwardingResolver forwardingResolver;
70 Instance(DataBroker dataProvider, PolicyValidatorRegistry validatorRegistry) throws TransactionCommitFailedException {
71 sfdp = new SubjectFeatureDefinitionProvider(dataProvider);
72 supportedClassifierDefinitionListener = new SupportedClassifierDefinitionListener(dataProvider, validatorRegistry);
73 supportedActionDefinitionListener = new SupportedActionDefinitionListener(dataProvider);
74 locationResolver = new LocationResolver(dataProvider);
75 rendererManager = new RendererManager(dataProvider);
76 forwardingResolver = new ForwardingResolver(dataProvider);
80 public void close() throws Exception {
82 supportedClassifierDefinitionListener.close();
83 supportedActionDefinitionListener.close();
84 locationResolver.close();
85 rendererManager.close();
86 forwardingResolver.close();