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.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes;
14 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.ActionsAugPolicy;
15 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.BgpActionAugPolicy;
16 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.BgpActionPolicy;
17 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.BgpConditionsAugmentationPolicy;
18 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.BgpConditionsPolicy;
19 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.ConditionsAugPolicy;
20 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
21 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryImportParameters;
22 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.BgpMatchConditions;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.policy.definitions.policy.definition.statements.statement.actions.BgpActions;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.policy.definitions.policy.definition.statements.statement.conditions.BgpConditions;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
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.rev180329.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() {
39 this.conditionsRegistry = new ConditionsRegistryImpl();
40 this.actionsRegistry = new ActionsRegistryImpl();
44 public RouteAttributeContainer applyExportStatement(
45 final RouteEntryBaseAttributes routeEntryInfo,
46 final Class<? extends AfiSafiType> afiSafi,
47 final BGPRouteEntryExportParameters routeEntryExportParameters,
48 final RouteAttributeContainer attributes,
49 final Statement statement) {
50 final Attributes att = attributes.getAttributes();
51 if (att == null || !this.conditionsRegistry.matchExportConditions(
54 routeEntryExportParameters,
56 statement.getConditions())) {
59 return routeAttributeContainerTrue(this.actionsRegistry.applyExportAction(
61 routeEntryExportParameters,
62 attributes.getAttributes(),
63 statement.getActions()));
67 public RouteAttributeContainer applyImportStatement(
68 final RouteEntryBaseAttributes routeEntryInfo,
69 final Class<? extends AfiSafiType> afiSafi,
70 final BGPRouteEntryImportParameters routeEntryImportParameters,
71 final RouteAttributeContainer attributes,
72 final Statement statement) {
73 final Attributes att = attributes.getAttributes();
74 if (att == null || !this.conditionsRegistry.matchImportConditions(
77 routeEntryImportParameters,
78 attributes.getAttributes(),
79 statement.getConditions())) {
82 return routeAttributeContainerTrue(this.actionsRegistry.applyImportAction(
84 routeEntryImportParameters,
86 statement.getActions()));
90 public AbstractRegistration registerConditionPolicy(
91 final Class<? extends Augmentation<Conditions>> conditionPolicyClass,
92 final ConditionsAugPolicy conditionPolicy) {
93 return this.conditionsRegistry.registerConditionPolicy(conditionPolicyClass, conditionPolicy);
97 public <T extends ChildOf<BgpMatchConditions>, N> AbstractRegistration registerBgpConditionsPolicy(
98 final Class<T> conditionPolicyClass,
99 final BgpConditionsPolicy<T, N> conditionPolicy) {
100 return this.conditionsRegistry.registerBgpConditionsPolicy(conditionPolicyClass, conditionPolicy);
104 public AbstractRegistration registerActionPolicy(
105 final Class<? extends Augmentation<Actions>> actionPolicyClass,
106 final ActionsAugPolicy actionPolicy) {
107 return this.actionsRegistry.registerActionPolicy(actionPolicyClass, actionPolicy);
111 public <T extends Augmentation<BgpConditions>, N> AbstractRegistration registerBgpConditionsAugmentationPolicy(
112 final Class<T> conditionPolicyClass,
113 final BgpConditionsAugmentationPolicy<T, N> conditionPolicy) {
114 return this.conditionsRegistry.registerBgpConditionsAugmentationPolicy(conditionPolicyClass, conditionPolicy);
118 public <T extends Augmentation<BgpActions>> AbstractRegistration registerBgpActionAugmentationPolicy(
119 final Class<T> bgpActionPolicyClass,
120 final BgpActionAugPolicy<T> bgpActionPolicy) {
121 return this.actionsRegistry.registerBgpActionAugmentationPolicy(bgpActionPolicyClass, bgpActionPolicy);
125 public <T extends ChildOf<BgpActions>> AbstractRegistration registerBgpActionPolicy(
126 final Class<T> bgpActionPolicyClass,
127 final BgpActionPolicy<T> bgpActionPolicy) {
128 return this.actionsRegistry.registerBgpActionPolicy(bgpActionPolicyClass, bgpActionPolicy);