RIC-395: E2M new REST API: E2M Set Parameters
[ric-plt/e2mgr.git] / E2Manager / rNibWriter / rNibWriter.go
index f9f75bd..3186d70 100644 (file)
@@ -44,6 +44,9 @@ type RNibWriter interface {
        SaveE2TAddresses(addresses []string) error
        RemoveE2TInstance(e2tAddress string) error
        UpdateGnbCells(nodebInfo *entities.NodebInfo, servedNrCells []*entities.ServedNRCell) error
+       RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error
+       UpdateNodebInfoOnConnectionStatusInversion(nodebInfo *entities.NodebInfo, stateChangeMessageChannel string, event string) error
+       SaveGeneralConfiguration(config *entities.GeneralConfiguration) error
 }
 
 /*
@@ -54,6 +57,29 @@ func GetRNibWriter(sdl common.ISdlInstance) RNibWriter {
        return &rNibWriterInstance{sdl: sdl}
 }
 
+
+func (w *rNibWriterInstance) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
+       cellKeysToRemove := buildCellKeysToRemove(inventoryName, servedNrCells)
+       err := w.sdl.Remove(cellKeysToRemove)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       return nil
+}
+
+func (w *rNibWriterInstance) SaveGeneralConfiguration(config *entities.GeneralConfiguration) error {
+
+       err := w.SaveWithKeyAndMarshal(common.BuildGeneralConfigurationKey(), config)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       return nil
+}
+
 /*
 SaveNodeb saves nodeB entity data in the redis DB according to the specified data model
 */
@@ -148,6 +174,28 @@ func (w *rNibWriterInstance) UpdateGnbCells(nodebInfo *entities.NodebInfo, serve
        return nil
 }
 
+func buildCellKeysToRemove(inventoryName string, servedNrCellsToRemove []*entities.ServedNRCell) []string {
+
+       cellKeysToRemove := []string{}
+
+       for _, cell := range servedNrCellsToRemove {
+
+               key, _ := common.ValidateAndBuildNrCellIdKey(cell.GetServedNrCellInformation().GetCellId())
+
+               if len(key) != 0 {
+                       cellKeysToRemove = append(cellKeysToRemove, key)
+               }
+
+               key, _ = common.ValidateAndBuildCellNamePciKey(inventoryName, cell.GetServedNrCellInformation().GetNrPci())
+
+               if len(key) != 0 {
+                       cellKeysToRemove = append(cellKeysToRemove, key)
+               }
+       }
+
+       return cellKeysToRemove
+}
+
 func buildUpdateNodebInfoPairs(nodebInfo *entities.NodebInfo) ([]interface{}, error) {
        nodebNameKey, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.GetRanName())
 
@@ -280,6 +328,46 @@ func (w *rNibWriterInstance) RemoveE2TInstance(address string) error {
        return nil
 }
 
+func (w *rNibWriterInstance) SaveWithKeyAndMarshal(key string, entity interface{}) error {
+
+       data, err := json.Marshal(entity)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       var pairs []interface{}
+       pairs = append(pairs, key, data)
+
+       err = w.sdl.Set(pairs)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       return nil
+}
+
+/*
+UpdateNodebInfoOnConnectionStatusInversion...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfoOnConnectionStatusInversion(nodebInfo *entities.NodebInfo, stateChangeMessageChannel string, event string) error {
+
+       pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
+
+       if err != nil {
+               return err
+       }
+
+       err = w.sdl.SetAndPublish([]string{stateChangeMessageChannel, event}, pairs)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       return nil
+}
+
 /*
 Close the writer
 */
@@ -331,4 +419,4 @@ func appendGnbCells(inventoryName string, cells []*entities.ServedNRCell, pairs
 
 func isNotEmpty(nbIdentity *entities.NbIdentity) bool {
        return nbIdentity.GlobalNbId != nil && nbIdentity.GlobalNbId.PlmnId != "" && nbIdentity.GlobalNbId.NbId != ""
-}
+}
\ No newline at end of file