2 * Copyright (c) 2018 AT&T Intellectual Property. 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.protocol.bgp.openconfig.routing.policy.spi.registry;
11 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer.routeAttributeContainerTrue;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes;
15 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.ActionsAugPolicy;
16 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.BgpActionAugPolicy;
17 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.BgpActionPolicy;
18 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.BgpConditionsAugmentationPolicy;
19 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.BgpConditionsPolicy;
20 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.ConditionsAugPolicy;
21 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
22 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryImportParameters;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.BgpMatchConditions;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.policy.definitions.policy.definition.statements.statement.actions.BgpActions;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.policy.definitions.policy.definition.statements.statement.conditions.BgpConditions;
26 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.policy.definitions.policy.definition.statements.Statement;
27 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.policy.definitions.policy.definition.statements.statement.Actions;
28 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.policy.definitions.policy.definition.statements.statement.Conditions;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.Attributes;
30 import org.opendaylight.yangtools.concepts.AbstractRegistration;
31 import org.opendaylight.yangtools.yang.binding.Augmentation;
32 import org.opendaylight.yangtools.yang.binding.ChildOf;
34 public final class StatementRegistry implements StatementRegistryConsumer, StatementRegistryProvider {
35 private final ConditionsRegistryImpl conditionsRegistry;
36 private final ActionsRegistryImpl actionsRegistry;
38 public StatementRegistry(final DataBroker databroker) {
39 this.conditionsRegistry = new ConditionsRegistryImpl(databroker);
40 this.actionsRegistry = new ActionsRegistryImpl();
44 public RouteAttributeContainer applyExportStatement(
45 final RouteEntryBaseAttributes routeEntryInfo,
46 final BGPRouteEntryExportParameters routeEntryExportParameters,
47 final RouteAttributeContainer attributes,
48 final Statement statement) {
49 final Attributes att = attributes.getAttributes();
50 if (att == null || !this.conditionsRegistry.matchExportConditions(
52 routeEntryExportParameters,
54 statement.getConditions())) {
57 return routeAttributeContainerTrue(this.actionsRegistry.applyExportAction(
59 routeEntryExportParameters,
60 attributes.getAttributes(),
61 statement.getActions()));
65 public RouteAttributeContainer applyImportStatement(
66 final RouteEntryBaseAttributes routeEntryInfo,
67 final BGPRouteEntryImportParameters routeEntryImportParameters,
68 final RouteAttributeContainer attributes,
69 final Statement statement) {
70 final Attributes att = attributes.getAttributes();
71 if (att == null || !this.conditionsRegistry.matchImportConditions(
73 routeEntryImportParameters,
74 attributes.getAttributes(),
75 statement.getConditions())) {
78 return routeAttributeContainerTrue(this.actionsRegistry.applyImportAction(
80 routeEntryImportParameters,
82 statement.getActions()));
86 public AbstractRegistration registerConditionPolicy(
87 final Class<? extends Augmentation<Conditions>> conditionPolicyClass,
88 final ConditionsAugPolicy conditionPolicy) {
89 return this.conditionsRegistry.registerConditionPolicy(conditionPolicyClass, conditionPolicy);
93 public <T extends ChildOf<BgpMatchConditions>, N> AbstractRegistration registerBgpConditionsPolicy(
94 final Class<T> conditionPolicyClass,
95 final BgpConditionsPolicy<T, N> conditionPolicy) {
96 return this.conditionsRegistry.registerBgpConditionsPolicy(conditionPolicyClass, conditionPolicy);
100 public AbstractRegistration registerActionPolicy(
101 final Class<? extends Augmentation<Actions>> actionPolicyClass,
102 final ActionsAugPolicy actionPolicy) {
103 return this.actionsRegistry.registerActionPolicy(actionPolicyClass, actionPolicy);
107 public <T extends Augmentation<BgpConditions>, N> AbstractRegistration registerBgpConditionsAugmentationPolicy(
108 final Class<T> conditionPolicyClass,
109 final BgpConditionsAugmentationPolicy<T, N> conditionPolicy) {
110 return this.conditionsRegistry.registerBgpConditionsAugmentationPolicy(conditionPolicyClass, conditionPolicy);
114 public <T extends Augmentation<BgpActions>> AbstractRegistration registerBgpActionAugmentationPolicy(
115 final Class<T> bgpActionPolicyClass,
116 final BgpActionAugPolicy<T> bgpActionPolicy) {
117 return this.actionsRegistry.registerBgpActionAugmentationPolicy(bgpActionPolicyClass, bgpActionPolicy);
121 public <T extends ChildOf<BgpActions>> AbstractRegistration registerBgpActionPolicy(
122 final Class<T> bgpActionPolicyClass,
123 final BgpActionPolicy<T> bgpActionPolicy) {
124 return this.actionsRegistry.registerBgpActionPolicy(bgpActionPolicyClass, bgpActionPolicy);