resolved checkstyle warnings
[vpnservice.git] / vpnmanager-impl / src / main / java / org / opendaylight / vpnservice / AbstractDataChangeListener.java
1 /*\r
2  * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.vpnservice;\r
9 \r
10 import com.google.common.base.Optional;\r
11 import com.google.common.base.Preconditions;\r
12 \r
13 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;\r
14 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;\r
15 import org.opendaylight.yangtools.yang.binding.DataObject;\r
16 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
17 \r
18 import java.util.Collections;\r
19 import java.util.Map;\r
20 import java.util.Set;\r
21 \r
22 /**\r
23  * AbstractDataChangeListener implemented basic {@link DataChangeListener} processing for\r
24  * VPN related Data Objects.\r
25  */\r
26 public abstract class AbstractDataChangeListener<T extends DataObject> implements DataChangeListener {\r
27 \r
28     protected final Class<T> clazz;\r
29 \r
30     /**\r
31      * \r
32      * @param clazz - for which the data change event is received\r
33      */\r
34     public AbstractDataChangeListener(Class<T> clazz) {\r
35         this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!");\r
36     }\r
37 \r
38     @Override\r
39     public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changeEvent) {\r
40         Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!");\r
41 \r
42         /* All DataObjects for create */\r
43         final Map<InstanceIdentifier<?>, DataObject> createdData = changeEvent.getCreatedData() != null\r
44                 ? changeEvent.getCreatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();\r
45         /* All DataObjects for remove */\r
46         final Set<InstanceIdentifier<?>> removeData = changeEvent.getRemovedPaths() != null\r
47                 ? changeEvent.getRemovedPaths() : Collections.<InstanceIdentifier<?>>emptySet();\r
48         /* All DataObjects for updates */\r
49         final Map<InstanceIdentifier<?>, DataObject> updateData = changeEvent.getUpdatedData() != null\r
50                 ? changeEvent.getUpdatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();\r
51         /* All Original DataObjects */\r
52         final Map<InstanceIdentifier<?>, DataObject> originalData = changeEvent.getOriginalData() != null\r
53                 ? changeEvent.getOriginalData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();\r
54 \r
55         this.createData(createdData);\r
56         this.updateData(updateData, originalData);\r
57         this.removeData(removeData, originalData);\r
58     }\r
59 \r
60     @SuppressWarnings("unchecked")\r
61     private void createData(final Map<InstanceIdentifier<?>, DataObject> createdData) {\r
62         final Set<InstanceIdentifier<?>> keys = createdData.keySet() != null\r
63                 ? createdData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();\r
64         for (InstanceIdentifier<?> key : keys) {\r
65             if (clazz.equals(key.getTargetType())) {\r
66                 InstanceIdentifier<T> createKeyIdent = key.firstIdentifierOf(clazz);\r
67                 final Optional<DataObject> value = Optional.of(createdData.get(key));\r
68                 if (value.isPresent()) {\r
69                     this.add(createKeyIdent, (T)value.get());\r
70                 }\r
71             }\r
72         }\r
73     }\r
74 \r
75     @SuppressWarnings("unchecked")\r
76     private void updateData(final Map<InstanceIdentifier<?>, DataObject> updateData,\r
77             final Map<InstanceIdentifier<?>, DataObject> originalData) {\r
78 \r
79         final Set<InstanceIdentifier<?>> keys = updateData.keySet() != null\r
80                 ? updateData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();\r
81         for (InstanceIdentifier<?> key : keys) {\r
82             if (clazz.equals(key.getTargetType())) {\r
83                 InstanceIdentifier<T> updateKeyIdent = key.firstIdentifierOf(clazz);\r
84                 final Optional<DataObject> value = Optional.of(updateData.get(key));\r
85                 final Optional<DataObject> original = Optional.of(originalData.get(key));\r
86                 if (value.isPresent() && original.isPresent()) {\r
87                     this.update(updateKeyIdent, (T)original.get(), (T)value.get());\r
88                 }\r
89             }\r
90         }\r
91     }\r
92 \r
93     @SuppressWarnings("unchecked")\r
94     private void removeData(final Set<InstanceIdentifier<?>> removeData,\r
95             final Map<InstanceIdentifier<?>, DataObject> originalData) {\r
96 \r
97         for (InstanceIdentifier<?> key : removeData) {\r
98             if (clazz.equals(key.getTargetType())) {\r
99                 final InstanceIdentifier<T> ident = key.firstIdentifierOf(clazz);\r
100                 final DataObject removeValue = originalData.get(key);\r
101                 this.remove(ident, (T)removeValue);\r
102             }\r
103         }\r
104     }\r
105 \r
106     protected abstract void remove(InstanceIdentifier<T> identifier, T del);\r
107 \r
108     protected abstract void update(InstanceIdentifier<T> identifier, T original, T update);\r
109 \r
110     protected abstract void add(InstanceIdentifier<T> identifier, T add);\r
111 \r
112 }\r
113 \r
114 \r