Introduced ForwardingResolver
[groupbasedpolicy.git] / groupbasedpolicy / src / main / java / org / opendaylight / groupbasedpolicy / resolver / ForwardingResolver.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.resolver;
10
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
13 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.groupbasedpolicy.util.DataTreeChangeHandler;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.ForwardingByTenant;
17 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
18
19 import com.google.common.annotations.VisibleForTesting;
20 import com.google.common.base.Preconditions;
21
22 public class ForwardingResolver extends DataTreeChangeHandler<ForwardingByTenant> {
23
24     public ForwardingResolver(DataBroker dataProvider) {
25         super(dataProvider);
26     }
27
28     @Override
29     protected void onWrite(DataObjectModification<ForwardingByTenant> rootNode,
30             InstanceIdentifier<ForwardingByTenant> rootIdentifier) {
31         ForwardingByTenant forwardingByTenant = rootNode.getDataAfter();
32         updateForwarding(rootIdentifier, forwardingByTenant);
33     }
34
35     @Override
36     protected void onDelete(DataObjectModification<ForwardingByTenant> rootNode,
37             InstanceIdentifier<ForwardingByTenant> rootIdentifier) {
38         WriteTransaction wTx = dataProvider.newWriteOnlyTransaction();
39         wTx.delete(LogicalDatastoreType.OPERATIONAL, rootIdentifier);
40         wTx.submit();
41     }
42
43     @Override
44     protected void onSubtreeModified(DataObjectModification<ForwardingByTenant> rootNode,
45             InstanceIdentifier<ForwardingByTenant> rootIdentifier) {
46         ForwardingByTenant forwardingByTenant = rootNode.getDataAfter();
47         updateForwarding(rootIdentifier, forwardingByTenant);
48     }
49
50     @VisibleForTesting
51     void updateForwarding(InstanceIdentifier<ForwardingByTenant> rootIdentifier,
52             ForwardingByTenant forwardingByTenant) {
53         Preconditions.checkNotNull(rootIdentifier);
54         Preconditions.checkNotNull(forwardingByTenant);
55         // TODO add validation of forwarding
56         WriteTransaction wTx = dataProvider.newWriteOnlyTransaction();
57         wTx.put(LogicalDatastoreType.OPERATIONAL, rootIdentifier, forwardingByTenant);
58         wTx.submit();
59     }
60
61 }