@@ -2,44 +2,70 @@ package adj
22
33import (
44 "encoding/json"
5- "errors"
5+ "os"
6+ "path"
7+
68 "github.com/HyperloopUPV-H8/h9-backend/internal/utils"
79 "github.com/go-git/go-git/v5"
8- "os"
910)
1011
1112const (
1213 RepoUrl = "https://github.com/HyperloopUPV-H8/JSON_ADE.git" // URL of the ADJ repository
1314 RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned
1415)
1516
16- func NewADJ () (* ADJ , error ) {
17+ func NewADJ () (ADJ , error ) {
1718 infoRaw , boardsRaw , err := downloadADJ ()
1819 if err != nil {
19- return nil , err
20+ return ADJ {} , err
2021 }
2122
22- var JsonInfo JsonInfo
23- var info Info
24- if err := json .Unmarshal (infoRaw , & JsonInfo ); err != nil {
25- return nil , err
23+ var infoJSON InfoJSON
24+ if err := json .Unmarshal (infoRaw , & infoJSON ); err != nil {
25+ println ("Info JSON unmarshal error" )
26+ return ADJ {}, err
27+ }
28+
29+ var info Info = Info {
30+ Ports : infoJSON .Ports ,
31+ MessageIds : infoJSON .MessageIds ,
32+ Units : make (map [string ]utils.Operations ),
33+ }
34+ for key , value := range infoJSON .Units {
35+ info .Units [key ], err = utils .NewOperations (value )
36+ if err != nil {
37+ return ADJ {}, err
38+ }
2639 }
2740
28- info .Ports = utils .ConvertToMap_Str_Uint16 (JsonInfo .Ports )
29- info .Addresses = utils .ConvertToMap_Str_Str (JsonInfo .Addresses )
30- info .Units = utils .ConvertToMap_Str_Op (JsonInfo .Units )
31- info .MessageIds = utils .ConvertToMap_Str_Uint16 (JsonInfo .MessageIds )
41+ type BoardList struct {
42+ Boards map [string ]string `json:"boards"`
43+ }
3244
33- var boardsList map [ string ] string
45+ var boardsList BoardList
3446 if err := json .Unmarshal (boardsRaw , & boardsList ); err != nil {
35- return nil , err
47+ return ADJ {} , err
3648 }
3749
38- boards , err := getBoards (info , boardsList )
50+ boards , err := getBoards (boardsList .Boards )
51+ if err != nil {
52+ return ADJ {}, err
53+ }
3954
40- info .BoardIds , err = getBoardIds (boardsList )
55+ info .BoardIds , err = getBoardIds (boardsList .Boards )
56+ if err != nil {
57+ return ADJ {}, err
58+ }
59+
60+ info .Addresses , err = getAddresses (boards )
61+ if err != nil {
62+ return ADJ {}, err
63+ }
64+ for target , address := range infoJSON .Addresses {
65+ info .Addresses [target ] = address
66+ }
4167
42- adj := & ADJ {
68+ adj := ADJ {
4369 Info : info ,
4470 Boards : boards ,
4571 }
@@ -79,14 +105,11 @@ func checkRepo() bool {
79105 return true
80106}
81107
82- func getBoards (info Info , boardsList map [string ]string ) (map [string ]Board , error ) {
83- var boards map [string ]Board
108+ func getBoards (boardsList map [string ]string ) (map [string ]Board , error ) {
109+ boards := make ( map [string ]Board , len ( boardsList ))
84110 for boardName , boardPath := range boardsList {
85- if _ , err := os .Stat (boardPath ); os .IsNotExist (err ) {
86- return nil , err
87- }
88-
89- boardRaw , err := os .ReadFile (boardPath )
111+ fullPath := path .Join (RepoPath , boardPath )
112+ boardRaw , err := os .ReadFile (fullPath )
90113 if err != nil {
91114 return nil , err
92115 }
@@ -96,15 +119,22 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
96119 return nil , err
97120 }
98121
99- if info .Addresses [boardName ] != boardJSON .IP {
100- return nil , errors .New ("the IP of the board does not match the one in the general info" )
122+ measPathsFr := make ([]string , 0 )
123+ for _ , measPath := range boardJSON .MeasurementsPaths {
124+ measPathsFr = append (measPathsFr , path .Join (RepoPath , "boards" , boardName , measPath ))
101125 }
126+ boardJSON .MeasurementsPaths = measPathsFr
102127
103- var board Board
104-
105- board .Name = boardName
106- board .IP = boardJSON .IP
128+ packetPathsFr := make ([]string , 0 )
129+ for _ , packetPath := range boardJSON .PacketsPaths {
130+ packetPathsFr = append (packetPathsFr , path .Join (RepoPath , "boards" , boardName , packetPath ))
131+ }
132+ boardJSON .PacketsPaths = packetPathsFr
107133
134+ board := Board {
135+ Name : boardName ,
136+ IP : boardJSON .IP ,
137+ }
108138 board .Packets , err = getBoardPackets (boardJSON .PacketsPaths )
109139 if err != nil {
110140 return nil , err
@@ -114,6 +144,12 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
114144 if err != nil {
115145 return nil , err
116146 }
147+ board .LookUpMeasurements = make (map [string ]Measurement , len (board .Measurements ))
148+
149+ for _ , measurement := range board .Measurements {
150+ board .LookUpMeasurements [measurement .Id ] = measurement
151+ }
152+ board .Structures = getBoardStructures (board )
117153
118154 boards [boardName ] = board
119155 }
@@ -122,7 +158,7 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
122158}
123159
124160func getBoardPackets (packetsPaths []string ) ([]Packet , error ) {
125- var packets []Packet
161+ packets := make ( []Packet , 0 )
126162 for _ , packetPath := range packetsPaths {
127163 if _ , err := os .Stat (packetPath ); os .IsNotExist (err ) {
128164 continue
@@ -133,19 +169,26 @@ func getBoardPackets(packetsPaths []string) ([]Packet, error) {
133169 return nil , err
134170 }
135171
136- var packet Packet
137- if err = json . Unmarshal ( packetRaw , & packet ); err != nil {
138- return nil , err
172+ // Magic happens here
173+ type PacketJSON struct {
174+ Packet [] Packet `json:"packets"`
139175 }
140176
141- packets = append (packets , packet )
177+ packetsJSON := PacketJSON {}
178+ if err = json .Unmarshal (packetRaw , & packetsJSON ); err != nil {
179+ return nil , err
180+ }
181+ for _ , packetTMP := range packetsJSON .Packet {
182+ packets = append (packets , packetTMP )
183+ }
142184 }
143185
144186 return packets , nil
145187}
146188
147189func getBoardMeasurements (measurementsPaths []string ) ([]Measurement , error ) {
148- var measurements []Measurement
190+ measurements := make ([]Measurement , 0 )
191+
149192 for _ , measurementPath := range measurementsPaths {
150193 if _ , err := os .Stat (measurementPath ); os .IsNotExist (err ) {
151194 continue
@@ -156,25 +199,28 @@ func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) {
156199 return nil , err
157200 }
158201
159- var measurement Measurement
160- if err = json . Unmarshal ( measurementRaw , & measurement ); err != nil {
161- return nil , err
202+ // Absolutely doing tricks on it AGAIN - @msanlli
203+ type MeasurementJSON struct {
204+ Measurements [] Measurement `json:"measurements"`
162205 }
163206
164- measurements = append (measurements , measurement )
207+ measurementsJSON := MeasurementJSON {}
208+ if err = json .Unmarshal (measurementRaw , & measurementsJSON ); err != nil {
209+ return nil , err
210+ }
211+ for _ , measurementTMP := range measurementsJSON .Measurements {
212+ measurements = append (measurements , measurementTMP )
213+ }
165214 }
166215
167216 return measurements , nil
168217}
169218
170219func getBoardIds (boards map [string ]string ) (map [string ]uint16 , error ) {
171- var boardIds map [string ]uint16
220+ boardIds := make ( map [string ]uint16 , len ( boards ))
172221 for boardName , boardPath := range boards {
173- if _ , err := os .Stat (boardPath ); os .IsNotExist (err ) {
174- return nil , err
175- }
176-
177- boardRaw , err := os .ReadFile (boardPath )
222+ fullPath := path .Join (RepoPath , boardPath )
223+ boardRaw , err := os .ReadFile (fullPath )
178224 if err != nil {
179225 return nil , err
180226 }
@@ -189,3 +235,24 @@ func getBoardIds(boards map[string]string) (map[string]uint16, error) {
189235
190236 return boardIds , nil
191237}
238+
239+ func getBoardStructures (board Board ) []Structure {
240+ structures := make ([]Structure , len (board .Packets ))
241+ for i , packet := range board .Packets {
242+ structures [i ] = Structure {
243+ Packet : packet ,
244+ Measurements : board .Measurements ,
245+ }
246+ }
247+
248+ return structures
249+ }
250+
251+ func getAddresses (boards map [string ]Board ) (map [string ]string , error ) {
252+ addresses := make (map [string ]string , len (boards ))
253+ for boardName , board := range boards {
254+ addresses [boardName ] = board .IP
255+ }
256+
257+ return addresses , nil
258+ }
0 commit comments