--- /dev/null
+// -
+// ========================LICENSE_START=================================
+// O-RAN-SC
+// %%
+// Copyright (C) 2022: Nordix Foundation
+// %%
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ========================LICENSE_END===================================
+//
+
+package main
+
+import (
+ "bufio"
+ "flag"
+ "io/ioutil"
+ "log"
+ "os"
+ "strings"
+
+ "gopkg.in/yaml.v2"
+)
+
+var apiDir *string
+var common = map[interface{}]interface{}{
+ "openapi": "3.0.0",
+ "info": map[interface{}]interface{}{
+ "title": "Common",
+ "version": "1.0.0",
+ },
+ "components": map[interface{}]interface{}{
+ "schemas": map[interface{}]interface{}{},
+ },
+}
+
+func main() {
+ apiDir = flag.String("apidir", "", "Directory containing API definitions to fix")
+ flag.Parse()
+
+ file, err := os.Open("definitions.txt")
+ if err != nil {
+ log.Fatalf("Error opening file: %v", err)
+ }
+ defer func(file *os.File) {
+ _ = file.Close()
+ }(file)
+
+ scanner := bufio.NewScanner(file)
+ components := common["components"]
+ cMap := components.(map[interface{}]interface{})
+ schemas := cMap["schemas"].(map[interface{}]interface{})
+ for scanner.Scan() {
+ name, data := getDependency(scanner.Text())
+ if name == "EthFlowDescription" {
+ changeToLocalReference("fDir", "FlowDirection", data)
+ }
+ if name == "ReportingInformation" {
+ changeToLocalReference("notifMethod", "NotificationMethod", data)
+ }
+ if name == "RelativeCartesianLocation" {
+ properties := data["properties"].(map[interface{}]interface{})
+ delete(properties, true)
+ data["required"] = remove(data["required"].([]interface{}), 1)
+ }
+ schemas[name] = data
+ }
+
+ if err := scanner.Err(); err != nil {
+ log.Fatal(err)
+ }
+
+ modCommon, err := yaml.Marshal(common)
+ if err != nil {
+ log.Fatalf("Marshal: #%v ", err)
+ }
+ err = ioutil.WriteFile(*apiDir+"/"+"CommonData.yaml", modCommon, 0644)
+ if err != nil {
+ log.Fatalf("Error writing yamlFile. #%v ", err)
+ }
+}
+
+func changeToLocalReference(attrname, refName string, data map[interface{}]interface{}) {
+ properties := data["properties"].(map[interface{}]interface{})
+ ref := properties[attrname].(map[interface{}]interface{})
+ ref["$ref"] = "#/components/schemas/" + refName
+}
+
+func getDependency(s string) (string, map[interface{}]interface{}) {
+ info := strings.Split(s, "#")
+ yamlFile, err := ioutil.ReadFile(*apiDir + "/" + info[0])
+ if err != nil {
+ log.Fatalf("Error reading yamlFile. #%v ", err)
+ }
+ m := make(map[string]interface{})
+ err = yaml.Unmarshal(yamlFile, m)
+ if err != nil {
+ log.Fatalf("Unmarshal: %v", err)
+ }
+ components := m["components"]
+ cMap := components.(map[interface{}]interface{})
+ schemas := cMap["schemas"].(map[interface{}]interface{})
+ component := strings.Split(info[1], "/")
+ dep := schemas[component[3]].(map[interface{}]interface{})
+ return component[3], dep
+}
+
+func remove(slice []interface{}, s int) []interface{} {
+ return append(slice[:s], slice[s+1:]...)
+}