NONRTRIC - Enrichment Coordinator Service, making type availability subscriptions...
[nonrtric.git] / dmaap-mediator-producer / internal / jobtypes / jobtypes.go
1 // -
2 //   ========================LICENSE_START=================================
3 //   O-RAN-SC
4 //   %%
5 //   Copyright (C) 2021: Nordix Foundation
6 //   %%
7 //   Licensed under the Apache License, Version 2.0 (the "License");
8 //   you may not use this file except in compliance with the License.
9 //   You may obtain a copy of the License at
10 //
11 //        http://www.apache.org/licenses/LICENSE-2.0
12 //
13 //   Unless required by applicable law or agreed to in writing, software
14 //   distributed under the License is distributed on an "AS IS" BASIS,
15 //   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 //   See the License for the specific language governing permissions and
17 //   limitations under the License.
18 //   ========================LICENSE_END===================================
19 //
20
21 package jobtypes
22
23 import (
24         "os"
25         "path/filepath"
26         "strings"
27 )
28
29 type Type struct {
30         TypeId string
31         Schema string
32 }
33
34 var typeDir = "configs"
35 var supportedTypes = make([]string, 0)
36
37 func GetTypes() ([]*Type, error) {
38         types := make([]*Type, 0, 1)
39         err := filepath.Walk(typeDir,
40                 func(path string, info os.FileInfo, err error) error {
41                         if err != nil {
42                                 return err
43                         }
44                         if strings.Contains(path, ".json") {
45                                 if jobType, err := getType(path); err == nil {
46                                         types = append(types, jobType)
47                                 }
48                         }
49                         return nil
50                 })
51         if err != nil {
52                 return nil, err
53         }
54         return types, nil
55 }
56
57 func GetSupportedTypes() []string {
58         return supportedTypes
59 }
60
61 func getType(path string) (*Type, error) {
62         fileName := filepath.Base(path)
63         typeName := strings.TrimSuffix(fileName, filepath.Ext(fileName))
64
65         if typeSchema, err := os.ReadFile(path); err == nil {
66                 typeInfo := Type{
67                         TypeId: typeName,
68                         Schema: string(typeSchema),
69                 }
70                 supportedTypes = append(supportedTypes, typeName)
71                 return &typeInfo, nil
72         } else {
73                 return nil, err
74         }
75 }