Skip to content
Snippets Groups Projects
sbiService.go 1.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
    	"code.fbi.h-da.de/danet/gosdn/controller/store"
    	"github.com/google/uuid"
    )
    
    // SbiService provides a sbi service implementation.
    type SbiService struct {
    	sbiStore southbound.Store
    }
    
    // NewSbiService creates a sbi service.
    func NewSbiService(sbiStore southbound.Store) southbound.Service {
    	return &SbiService{
    		sbiStore: sbiStore,
    	}
    }
    
    // Get takes a SBI's UUID or name and returns the SBI.
    func (s *SbiService) Get(query store.Query) (southbound.SouthboundInterface, error) {
    	loadedSbi, err := s.sbiStore.Get(query)
    	if err != nil {
    		return nil, err
    	}
    
    	device, err := s.createSbiFromStore(loadedSbi)
    	if err != nil {
    		return nil, err
    	}
    
    	return device, nil
    }
    
    // GetAll returns all stored SBIs.
    func (s *SbiService) GetAll() ([]southbound.SouthboundInterface, error) {
    	var sbis []southbound.SouthboundInterface
    
    	loadedSbis, err := s.sbiStore.GetAll()
    	if err != nil {
    		return nil, err
    	}
    
    	for _, loadedSbi := range loadedSbis {
    		sbi, err := s.createSbiFromStore(loadedSbi)
    		if err != nil {
    			return nil, err
    		}
    
    		sbis = append(sbis, sbi)
    	}
    
    	return sbis, nil
    }
    
    // Add adds a sbi to the sbi store.
    func (s *SbiService) Add(sbiToAdd southbound.SouthboundInterface) error {
    	err := s.sbiStore.Add(sbiToAdd)
    	if err != nil {
    		return err
    	}
    
    	return nil
    }
    
    // Delete deletes a sbi from the sbi store.
    func (s *SbiService) Delete(sbiToDelete southbound.SouthboundInterface) error {
    	err := s.sbiStore.Delete(sbiToDelete)
    	if err != nil {
    		return err
    	}
    
    
    	sbiPlugin, ok := sbiToDelete.(*SouthboundPlugin)
    	if ok {
    		if err := os.RemoveAll(sbiPlugin.Path()); err != nil {
    			return err
    		}
    	}
    
    
    	return nil
    }
    
    func (s *SbiService) createSbiFromStore(loadedSbi southbound.LoadedSbi) (southbound.SouthboundInterface, error) {
    	newSbi, err := NewSBI(loadedSbi.Type, uuid.MustParse(loadedSbi.ID))
    	if err != nil {
    		return nil, err
    	}
    
    	return newSbi, nil
    }