[VOL-2938]Failure seen when parsing adapter config

Change-Id: Ie044eb110c36fc4b7597457fa6b1f6c94cd1baff
diff --git a/pkg/model/device.go b/pkg/model/device.go
index 716cbc9..e307308 100644
--- a/pkg/model/device.go
+++ b/pkg/model/device.go
@@ -115,10 +115,23 @@
 			d.ProxyAddress.ChannelTermination = v.(string)
 		}
 	}
-	d.AdminState = GetEnumValue(val, "admin_state")
-	d.OperStatus = GetEnumValue(val, "oper_status")
+
+	var err error
+	d.AdminState, err = GetEnumValue(val, "admin_state")
+	if err != nil {
+		d.AdminState = "UNKNOWN"
+	}
+
+	d.OperStatus, err = GetEnumValue(val, "oper_status")
+	if err != nil {
+		d.OperStatus = "UNKNOWN"
+	}
+
 	d.Reason = val.GetFieldByName("reason").(string)
-	d.ConnectStatus = GetEnumValue(val, "connect_status")
+	d.ConnectStatus, err = GetEnumValue(val, "connect_status")
+	if err != nil {
+		d.ConnectStatus = "UNKNOWN"
+	}
 
 	ports := val.GetFieldByName("ports").([]interface{})
 	d.Ports = make([]DevicePort, len(ports))
@@ -138,11 +151,22 @@
 }
 
 func (port *DevicePort) PopulateFrom(val *dynamic.Message) {
+	var err error
 	port.PortNo = val.GetFieldByName("port_no").(uint32)
-	port.Type = GetEnumValue(val, "type")
+	port.Type, err = GetEnumValue(val, "type")
+	if err != nil {
+		port.Type = "UNKNOWN"
+	}
 	port.Label = val.GetFieldByName("label").(string)
-	port.AdminState = GetEnumValue(val, "admin_state")
-	port.OperStatus = GetEnumValue(val, "oper_status")
+	port.AdminState, err = GetEnumValue(val, "admin_state")
+	if err != nil {
+		port.AdminState = "UNKNOWN"
+	}
+
+	port.OperStatus, err = GetEnumValue(val, "oper_status")
+	if err != nil {
+		port.OperStatus = "UNKNOWN"
+	}
 	port.DeviceId = val.GetFieldByName("device_id").(string)
 	peers := val.GetFieldByName("peers").([]interface{})
 	port.Peers = make([]PeerPort, len(peers))
diff --git a/pkg/model/utils.go b/pkg/model/utils.go
index 15ef51f..682b8d1 100644
--- a/pkg/model/utils.go
+++ b/pkg/model/utils.go
@@ -16,23 +16,68 @@
 package model
 
 import (
+	"errors"
 	"github.com/jhump/protoreflect/dynamic"
 )
 
-func GetEnumValue(val *dynamic.Message, name string) string {
-	return val.FindFieldDescriptorByName(name).GetEnumType().
-		FindValueByNumber(val.GetFieldByName(name).(int32)).GetName()
-}
-
-func SetEnumValue(msg *dynamic.Message, name string, value string) {
-	eValue := msg.FindFieldDescriptorByName(name).GetEnumType().FindValueByName(value)
-	msg.SetFieldByName(name, eValue.GetNumber())
-}
-
-func GetEnumString(msg *dynamic.Message, name string, value int32) string {
-	eValue := msg.FindFieldDescriptorByName(name).GetEnumType().FindValueByNumber(value)
-	if eValue == nil {
-		panic("eValue is nil")
+func GetEnumValue(val *dynamic.Message, name string) (string, error) {
+	fd := val.FindFieldDescriptorByName(name)
+	if fd == nil {
+		return "", errors.New("fieldDescriptor is nil for " + name)
 	}
-	return eValue.GetName()
+
+	enumType := fd.GetEnumType()
+	if enumType == nil {
+		return "", errors.New("enumType is nil for " + name)
+	}
+
+	field, ok := val.GetFieldByName(name).(int32)
+	if !ok {
+		return "", errors.New("Enum integer value not found for " + name)
+	}
+
+	eValue := enumType.FindValueByNumber(field)
+	if eValue == nil {
+		return "", errors.New("Value not found for " + name)
+	}
+
+	return eValue.GetName(), nil
+}
+
+func SetEnumValue(msg *dynamic.Message, name string, value string) error {
+	fd := msg.FindFieldDescriptorByName(name)
+	if fd == nil {
+		return errors.New("fieldDescriptor is nil for " + name)
+	}
+
+	enumType := fd.GetEnumType()
+	if enumType == nil {
+		return errors.New("enumType is nil for " + name)
+	}
+
+	eValue := enumType.FindValueByName(value)
+	if eValue == nil {
+		return errors.New("Value not found for " + name)
+	}
+
+	msg.SetFieldByName(name, eValue.GetNumber())
+	return nil
+}
+
+func GetEnumString(msg *dynamic.Message, name string, value int32) (string, error) {
+	fd := msg.FindFieldDescriptorByName(name)
+	if fd == nil {
+		return "", errors.New("fieldDescriptor is nil for " + name)
+	}
+
+	enumType := fd.GetEnumType()
+	if enumType == nil {
+		return "", errors.New("enumType is nil for " + name)
+	}
+
+	eValue := enumType.FindValueByNumber(value)
+	if eValue == nil {
+		return "", errors.New("Value not found for " + name)
+	}
+	return eValue.GetName(), nil
 }