Fix fileEncoding violations for checkstyle
[groupbasedpolicy.git] / neutron-vpp-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / vpp / mapper / processors / NeutronListener.java
index f1958b36b2426f1420afa95153e0c9d90cfdaa7c..9a70ae81cb82fb3131fd0119b9d4b845d61ab2b2 100644 (file)
-/*\r
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors;\r
-\r
-import java.io.Closeable;\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.LinkedHashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-import java.util.concurrent.ExecutionException;\r
-\r
-import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;\r
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;\r
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;\r
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;\r
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;\r
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;\r
-import org.opendaylight.yangtools.concepts.ListenerRegistration;\r
-import org.opendaylight.yangtools.yang.binding.DataObject;\r
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import com.google.common.annotations.VisibleForTesting;\r
-import com.google.common.collect.Iterators;\r
-import com.google.common.collect.PeekingIterator;\r
-\r
-public class NeutronListener implements ClusteredDataTreeChangeListener<Neutron>, Closeable {\r
-\r
-    private static final Logger LOG = LoggerFactory.getLogger(NeutronListener.class);\r
-\r
-    private final Set<MappingProvider<? extends DataObject>> dataChangeProviders = new LinkedHashSet<>();\r
-    protected ListenerRegistration<NeutronListener> registeredListener;\r
-\r
-    public NeutronListener(DataBroker dataBroker, NodeId routingNode) {\r
-        LOG.info("Routing node chosen in ODL is {}", routingNode);\r
-        registerHandlersAndListeners(dataBroker, routingNode);\r
-        registeredListener = dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>(\r
-                LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(Neutron.class).build()), this);\r
-    }\r
-\r
-    private void registerHandlersAndListeners(DataBroker dataBroker, NodeId routingNode) {\r
-        PortHandler portHandler = new PortHandler(dataBroker, routingNode);\r
-        dataChangeProviders.add(new PortAware(portHandler, dataBroker));\r
-        dataChangeProviders.add(new NetworkAware(dataBroker));\r
-        dataChangeProviders.add(new SubnetAware(dataBroker));\r
-    }\r
-\r
-    @Override\r
-    public void onDataTreeChanged(Collection<DataTreeModification<Neutron>> changes) {\r
-        for (DataTreeModification<Neutron> change : changes) {\r
-            DataObjectModification<Neutron> rootNode = change.getRootNode();\r
-            for (MappingProvider<? extends DataObject> provider : dataChangeProviders) {\r
-                for (DataObjectModification<? extends DataObject> modDto : findModifiedData(provider, rootNode)) {\r
-                    try {\r
-                        processChangedData(modDto, modDto.getModificationType(), provider);\r
-                    } catch (InterruptedException | ExecutionException e) {\r
-                        LOG.error("Failed to process {} modification of node: {}. {}", modDto.getModificationType(),\r
-                                modDto.getIdentifier(), e.getStackTrace());\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-    List<DataObjectModification<? extends DataObject>> findModifiedData(MappingProvider<? extends DataObject> provider,\r
-            DataObjectModification<Neutron> rootNode) {\r
-        List<DataObjectModification<? extends DataObject>> modDtos = new ArrayList<>();\r
-        PeekingIterator<PathArgument> pathArgs = Iterators.peekingIterator(provider.getNeutronDtoIid()\r
-            .getPathArguments()\r
-            .iterator());\r
-        DataObjectModification<? extends DataObject> modifDto = rootNode;\r
-        while (pathArgs.hasNext()) {\r
-            pathArgs.next();\r
-            for (DataObjectModification<? extends DataObject> childDto : modifDto.getModifiedChildren()) {\r
-                if (pathArgs.hasNext() && childDto.getDataType().equals(pathArgs.peek().getType())) {\r
-                    if (childDto.getDataType().equals(provider.getNeutronDtoIid().getTargetType())) {\r
-                        modDtos.add(childDto);\r
-                    } else {\r
-                        modifDto = childDto;\r
-                        break;\r
-                    }\r
-                }\r
-            }\r
-        }\r
-        return modDtos;\r
-    }\r
-\r
-    @SuppressWarnings("unchecked")\r
-    <T extends DataObject> void processChangedData(DataObjectModification<?> dto, ModificationType m,\r
-            MappingProvider<T> processor) throws InterruptedException, ExecutionException {\r
-        switch (m) {\r
-            case WRITE: {\r
-                if (dto.getDataBefore() != null) {\r
-                    processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter());\r
-                } else {\r
-                    processor.processCreatedNeutronDto((T) dto.getDataAfter());\r
-                }\r
-                break;\r
-            }\r
-            case SUBTREE_MODIFIED: {\r
-                processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter());\r
-                break;\r
-            }\r
-            case DELETE: {\r
-                processor.processDeletedNeutronDto((T) dto.getDataBefore());\r
-                break;\r
-            }\r
-        }\r
-    }\r
-\r
-    @VisibleForTesting\r
-    void clearDataChangeProviders() {\r
-        dataChangeProviders.clear();\r
-    }\r
-\r
-    @VisibleForTesting\r
-    <T extends DataObject> void addDataChangeProvider(MappingProvider<T> t) {\r
-        dataChangeProviders.add(t);\r
-    }\r
-\r
-    @Override\r
-    public void close() {\r
-        registeredListener.close();\r
-    }\r
-}\r
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors;
+
+import java.io.Closeable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.PeekingIterator;
+
+public class NeutronListener implements ClusteredDataTreeChangeListener<Neutron>, Closeable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NeutronListener.class);
+
+    private final Set<MappingProvider<? extends DataObject>> dataChangeProviders = new LinkedHashSet<>();
+    protected ListenerRegistration<NeutronListener> registeredListener;
+
+    public NeutronListener(DataBroker dataBroker, NodeId routingNode) {
+        LOG.info("Routing node chosen in ODL is {}", routingNode);
+        registerHandlersAndListeners(dataBroker, routingNode);
+        registeredListener = dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>(
+                LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(Neutron.class).build()), this);
+    }
+
+    private void registerHandlersAndListeners(DataBroker dataBroker, NodeId routingNode) {
+        PortHandler portHandler = new PortHandler(dataBroker, routingNode);
+        dataChangeProviders.add(new PortAware(portHandler, dataBroker));
+        dataChangeProviders.add(new NetworkAware(dataBroker));
+        dataChangeProviders.add(new SubnetAware(dataBroker));
+    }
+
+    @Override
+    public void onDataTreeChanged(Collection<DataTreeModification<Neutron>> changes) {
+        for (DataTreeModification<Neutron> change : changes) {
+            DataObjectModification<Neutron> rootNode = change.getRootNode();
+            for (MappingProvider<? extends DataObject> provider : dataChangeProviders) {
+                for (DataObjectModification<? extends DataObject> modDto : findModifiedData(provider, rootNode)) {
+                    try {
+                        processChangedData(modDto, modDto.getModificationType(), provider);
+                    } catch (InterruptedException | ExecutionException e) {
+                        LOG.error("Failed to process {} modification of node: {}. {}", modDto.getModificationType(),
+                                modDto.getIdentifier(), e.getStackTrace());
+                    }
+                }
+            }
+        }
+    }
+
+    List<DataObjectModification<? extends DataObject>> findModifiedData(MappingProvider<? extends DataObject> provider,
+            DataObjectModification<Neutron> rootNode) {
+        List<DataObjectModification<? extends DataObject>> modDtos = new ArrayList<>();
+        PeekingIterator<PathArgument> pathArgs = Iterators.peekingIterator(provider.getNeutronDtoIid()
+            .getPathArguments()
+            .iterator());
+        DataObjectModification<? extends DataObject> modifDto = rootNode;
+        while (pathArgs.hasNext()) {
+            pathArgs.next();
+            for (DataObjectModification<? extends DataObject> childDto : modifDto.getModifiedChildren()) {
+                if (pathArgs.hasNext() && childDto.getDataType().equals(pathArgs.peek().getType())) {
+                    if (childDto.getDataType().equals(provider.getNeutronDtoIid().getTargetType())) {
+                        modDtos.add(childDto);
+                    } else {
+                        modifDto = childDto;
+                        break;
+                    }
+                }
+            }
+        }
+        return modDtos;
+    }
+
+    @SuppressWarnings("unchecked")
+    <T extends DataObject> void processChangedData(DataObjectModification<?> dto, ModificationType m,
+            MappingProvider<T> processor) throws InterruptedException, ExecutionException {
+        switch (m) {
+            case WRITE: {
+                if (dto.getDataBefore() != null) {
+                    processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter());
+                } else {
+                    processor.processCreatedNeutronDto((T) dto.getDataAfter());
+                }
+                break;
+            }
+            case SUBTREE_MODIFIED: {
+                processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter());
+                break;
+            }
+            case DELETE: {
+                processor.processDeletedNeutronDto((T) dto.getDataBefore());
+                break;
+            }
+        }
+    }
+
+    @VisibleForTesting
+    void clearDataChangeProviders() {
+        dataChangeProviders.clear();
+    }
+
+    @VisibleForTesting
+    <T extends DataObject> void addDataChangeProvider(MappingProvider<T> t) {
+        dataChangeProviders.add(t);
+    }
+
+    @Override
+    public void close() {
+        registeredListener.close();
+    }
+}