Merge "Integration of fcaps applications"
[vpnservice.git] / fcapsapplication / fcapsapplication-impl / src / main / java / org / opendaylight / vpnservice / fcapsapp / FcapsProvider.java
diff --git a/fcapsapplication/fcapsapplication-impl/src/main/java/org/opendaylight/vpnservice/fcapsapp/FcapsProvider.java b/fcapsapplication/fcapsapplication-impl/src/main/java/org/opendaylight/vpnservice/fcapsapp/FcapsProvider.java
new file mode 100644 (file)
index 0000000..b890afc
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.vpnservice.fcapsapp;
+
+import com.google.common.base.Preconditions;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.NotificationService;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.vpnservice.fcapsapp.performancecounter.FlowNodeConnectorInventoryTranslatorImpl;
+import org.opendaylight.vpnservice.fcapsapp.performancecounter.PMAgent;
+import org.opendaylight.vpnservice.fcapsapp.performancecounter.PacketInCounterHandler;
+import org.opendaylight.vpnservice.fcapsapp.portinfo.PortNameMapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.vpnservice.fcapsapp.alarm.AlarmAgent;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FcapsProvider implements AutoCloseable {
+
+    public static Logger s_logger = LoggerFactory.getLogger(FcapsProvider.class);
+    private final DataBroker dataService;
+    private final NotificationService notificationProviderService;
+    private final EntityOwnershipService entityOwnershipService;
+    private FlowNodeConnectorInventoryTranslatorImpl flowNodeConnectorInventoryTranslatorImpl;
+    private PacketInCounterHandler packetInCounterHandler;
+    private NodeEventListener<FlowCapableNode> nodeNodeEventListener;
+    private final AlarmAgent alarmAgent;
+    private final PMAgent pmAgent;
+
+    /**
+     * Contructor sets the services
+     * @param dataBroker instance of databroker
+     * @param notificationService instance of notificationservice
+     * @param eos instance of EntityOwnershipService
+     */
+    public FcapsProvider(DataBroker dataBroker,NotificationService notificationService,
+                         final EntityOwnershipService eos) {
+        this.dataService = Preconditions.checkNotNull(dataBroker, "DataBroker can not be null!");
+        s_logger.info("FcapsProvider dataBroket is set");
+
+        this.notificationProviderService = Preconditions.checkNotNull(notificationService,
+                "notificationService can not be null!");
+        s_logger.info("FcapsProvider notificationProviderService is set");
+
+        this.entityOwnershipService = Preconditions.checkNotNull(eos, "EntityOwnership service can not be null");
+        s_logger.info("FcapsProvider entityOwnershipService is set");
+
+        alarmAgent = new AlarmAgent();
+        pmAgent = new PMAgent();
+
+        alarmAgent.registerAlarmMbean();
+
+        pmAgent.registerMbeanForEFS();
+        pmAgent.registerMbeanForPorts();
+        pmAgent.registerMbeanForPacketIn();
+        PortNameMapping.registerPortMappingBean();
+
+        nodeNodeEventListener = new NodeEventListener<>(entityOwnershipService);
+        registerListener(dataService);
+        flowNodeConnectorInventoryTranslatorImpl = new
+                FlowNodeConnectorInventoryTranslatorImpl(dataService,entityOwnershipService);
+        packetInCounterHandler = new PacketInCounterHandler();
+        notificationProviderService.registerNotificationListener(packetInCounterHandler);
+    }
+
+    private void registerListener(DataBroker dataBroker) {
+        final DataTreeIdentifier<FlowCapableNode> treeId =
+                new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, getWildCardPath());
+        try {
+            dataBroker.registerDataTreeChangeListener(treeId, nodeNodeEventListener);
+        } catch (Exception e) {
+            s_logger.error("Registeration failed on DataTreeChangeListener {}",e);
+        }
+    }
+
+    private InstanceIdentifier<FlowCapableNode> getWildCardPath() {
+        return InstanceIdentifier.create(Nodes.class)
+                .child(Node.class)
+                .augmentation(FlowCapableNode.class);
+    }
+
+    @Override
+    public void close() throws Exception {
+
+    }
+}