Fixup Augmentable and Identifiable methods changing
[bgpcep.git] / bgp / openconfig-rp-spi / src / main / java / org / opendaylight / protocol / bgp / openconfig / routing / policy / spi / registry / StatementRegistry.java
1 /*
2  * Copyright (c) 2018 AT&T Intellectual Property. 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.protocol.bgp.openconfig.routing.policy.spi.registry;
10
11 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer.routeAttributeContainerTrue;
12
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;
33
34 public final class StatementRegistry implements StatementRegistryConsumer, StatementRegistryProvider {
35     private final ConditionsRegistryImpl conditionsRegistry;
36     private final ActionsRegistryImpl actionsRegistry;
37
38     public StatementRegistry() {
39         this.conditionsRegistry = new ConditionsRegistryImpl();
40         this.actionsRegistry = new ActionsRegistryImpl();
41     }
42
43     @Override
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(
52                 afiSafi,
53                 routeEntryInfo,
54                 routeEntryExportParameters,
55                 att,
56                 statement.getConditions())) {
57             return attributes;
58         }
59         return routeAttributeContainerTrue(this.actionsRegistry.applyExportAction(
60                 routeEntryInfo,
61                 routeEntryExportParameters,
62                 attributes.getAttributes(),
63                 statement.getActions()));
64     }
65
66     @Override
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(
75                 afiSafi,
76                 routeEntryInfo,
77                 routeEntryImportParameters,
78                 attributes.getAttributes(),
79                 statement.getConditions())) {
80             return attributes;
81         }
82         return routeAttributeContainerTrue(this.actionsRegistry.applyImportAction(
83                 routeEntryInfo,
84                 routeEntryImportParameters,
85                 att,
86                 statement.getActions()));
87     }
88
89     @Override
90     public AbstractRegistration registerConditionPolicy(
91             final Class<? extends Augmentation<Conditions>> conditionPolicyClass,
92             final ConditionsAugPolicy conditionPolicy) {
93         return this.conditionsRegistry.registerConditionPolicy(conditionPolicyClass, conditionPolicy);
94     }
95
96     @Override
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);
101     }
102
103     @Override
104     public AbstractRegistration registerActionPolicy(
105             final Class<? extends Augmentation<Actions>> actionPolicyClass,
106             final ActionsAugPolicy actionPolicy) {
107         return this.actionsRegistry.registerActionPolicy(actionPolicyClass, actionPolicy);
108     }
109
110     @Override
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);
115     }
116
117     @Override
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);
122     }
123
124     @Override
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);
129     }
130 }