fix juniper driver

- fix wrong NBR for get devices info
- fix port number: the format of the port generated by
  PortNumber.fromString is not supported by the cli and netcfg
- the errors are reported in the log without throwing an exception

Change-Id: Idd456055e2e1b50185d6987866b066441ce5a15a
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
index e277d7e..fc53137 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/DeviceDiscoveryJuniperImpl.java
@@ -18,6 +18,7 @@
 
 
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
 import org.onosproject.drivers.utilities.XmlConfigParser;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceDescription;
@@ -25,7 +26,6 @@
 import org.onosproject.net.device.PortDescription;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
 
 import java.io.ByteArrayInputStream;
@@ -33,7 +33,6 @@
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.drivers.juniper.JuniperUtils.FAILED_CFG;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_IF_INFO;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_MAC_ADD_INFO;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_SYS_INFO;
@@ -52,19 +51,20 @@
 
     @Override
     public DeviceDescription discoverDeviceDetails() {
-        DeviceId deviceId = handler().data().deviceId();
+        DeviceId devId = handler().data().deviceId();
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(deviceId).getSession();
+        NetconfSession session = controller.getDevicesMap().get(devId).getSession();
         String sysInfo;
         String chassis;
         try {
             sysInfo = session.get(requestBuilder(REQ_SYS_INFO));
             chassis = session.get(requestBuilder(REQ_MAC_ADD_INFO));
         } catch (IOException e) {
-            throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+            log.warn("Failed to retrieve device details for {}", devId);
+            return null;
         }
         DeviceDescription description =
-                JuniperUtils.parseJuniperDescription(deviceId, XmlConfigParser.
+                JuniperUtils.parseJuniperDescription(devId, XmlConfigParser.
                         loadXml(new ByteArrayInputStream(sysInfo.getBytes())), chassis);
         log.debug("Device  description {}", description);
         return description;
@@ -72,13 +72,15 @@
 
     @Override
     public List<PortDescription> discoverPortDetails() {
+        DeviceId devId = handler().data().deviceId();
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
+        NetconfSession session = controller.getDevicesMap().get(devId).getSession();
         String reply;
         try {
             reply = session.get(requestBuilder(REQ_IF_INFO));
         } catch (IOException e) {
-            throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+            log.warn("Failed to retrieve ports for device {}", devId);
+            return ImmutableList.of();
         }
         List<PortDescription> descriptions =
                 JuniperUtils.parseJuniperPorts(XmlConfigParser.
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
index 7d771cb..d6a1918 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
@@ -64,7 +64,8 @@
     public static final String REQ_IF_INFO = "<get-interface-information/>";
 
     //helper strings for parsing
-    private static final String LLDP_NBR_INFO = "lldp-neighbors-information";
+    private static final String LLDP_LIST_NBR_INFO = "lldp-neighbors-information";
+    private static final String LLDP_NBR_INFO = "lldp-neighbor-information";
     private static final String SYS_INFO = "system-information";
     private static final String HW_MODEL = "hardware-model";
     private static final String OS_NAME = "os-name";
@@ -230,7 +231,7 @@
                 .set("index", index);
         setIpIfPresent(cfg, annotationsBuilder);
 
-        PortNumber portNumber = portNumberFromName(cfg.getString(IF_LO_INDEX), name);
+        PortNumber portNumber = PortNumber.portNumber(index);
 
         boolean enabled = false;
         if (cfg.getString(IF_LO_STATUS) != null) {
@@ -245,18 +246,6 @@
                 annotationsBuilder.build());
     }
 
-    private static PortNumber portNumberFromName(String ifIndex, String name) {
-        PortNumber portNumber = portNumber(ifIndex);
-        if (name.contains("-")) {
-            String[] splitted = name.split("-");
-            String typeInt = "[" + splitted[0] + "]";
-            String number = splitted[1].replace("/", "");
-            number = "(" + number + ")";
-            portNumber = PortNumber.fromString(typeInt + number);
-        }
-        return portNumber;
-    }
-
     private static void setIpIfPresent(HierarchicalConfiguration cfg,
                                        Builder annotationsBuilder) {
         String ip = cfg.getString(IF_LO_ADD);
@@ -302,7 +291,7 @@
     public static Set<LinkAbstraction> parseJuniperLldp(HierarchicalConfiguration info) {
         Set<LinkAbstraction> neighbour = new HashSet<>();
         List<HierarchicalConfiguration> subtrees =
-                info.configurationsAt(LLDP_NBR_INFO);
+                info.configurationsAt(LLDP_LIST_NBR_INFO);
         for (HierarchicalConfiguration neighborsInfo : subtrees) {
             List<HierarchicalConfiguration> neighbors =
                     neighborsInfo.configurationsAt(LLDP_NBR_INFO);
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
index ba346d5..2b99faa 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/LinkDiscoveryJuniperImpl.java
@@ -16,9 +16,8 @@
 
 package org.onosproject.drivers.juniper;
 
-//import com.google.common.base.Optional;
-
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import org.onosproject.drivers.utilities.XmlConfigParser;
 import org.onosproject.net.Device;
@@ -29,7 +28,6 @@
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.net.link.LinkDescription;
 import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
 import org.slf4j.Logger;
 
@@ -45,7 +43,6 @@
 import static org.onosproject.drivers.juniper.JuniperUtils.requestBuilder;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
 import static org.onosproject.drivers.juniper.JuniperUtils.REQ_LLDP_NBR_INFO;
-import static org.onosproject.drivers.juniper.JuniperUtils.FAILED_CFG;
 import static org.slf4j.LoggerFactory.getLogger;
 
 
@@ -71,7 +68,8 @@
         try {
             reply = session.get(requestBuilder(REQ_LLDP_NBR_INFO));
         } catch (IOException e) {
-            throw new RuntimeException(new NetconfException(FAILED_CFG, e));
+            log.warn("Failed to retrieve ports for device {}", localDeviceId);
+            return ImmutableSet.of();
         }
         log.debug("Reply from device {} : {}", localDeviceId, reply);
         Set<LinkAbstraction> linkAbstractions = parseJuniperLldp(