@@ -2,36 +2,70 @@ package adj
22
33import (
44 "encoding/json"
5- "github.com/go-git/go-git/v5"
65 "os"
6+ "path"
7+
8+ "github.com/HyperloopUPV-H8/h9-backend/internal/utils"
9+ "github.com/go-git/go-git/v5"
710)
811
912const (
1013 RepoUrl = "https://github.com/HyperloopUPV-H8/JSON_ADE.git" // URL of the ADJ repository
1114 RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned
1215)
1316
14- func NewADJ () (* ADJ , error ) {
17+ func NewADJ () (ADJ , error ) {
1518 infoRaw , boardsRaw , err := downloadADJ ()
1619 if err != nil {
17- return nil , err
20+ return ADJ {}, err
21+ }
22+
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+ }
1839 }
1940
20- var info Info
21- if err := json .Unmarshal (infoRaw , & info ); err != nil {
22- return nil , err
41+ type BoardList struct {
42+ Boards map [string ]string `json:"boards"`
2343 }
2444
25- var boardsList map [ string ] string
45+ var boardsList BoardList
2646 if err := json .Unmarshal (boardsRaw , & boardsList ); err != nil {
27- return nil , err
47+ return ADJ {}, err
48+ }
49+
50+ boards , err := getBoards (boardsList .Boards )
51+ if err != nil {
52+ return ADJ {}, err
2853 }
2954
30- boards , err := getBoards (info , boardsList )
55+ info .BoardIds , err = getBoardIds (boardsList .Boards )
56+ if err != nil {
57+ return ADJ {}, err
58+ }
3159
32- info .BoardIds , err = getBoardIds (boardsList )
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+ }
3367
34- adj := & ADJ {
68+ adj := ADJ {
3569 Info : info ,
3670 Boards : boards ,
3771 }
@@ -71,14 +105,11 @@ func checkRepo() bool {
71105 return true
72106}
73107
74- func getBoards (info Info , boardsList map [string ]string ) (map [string ]Board , error ) {
75- var boards map [string ]Board
108+ func getBoards (boardsList map [string ]string ) (map [string ]Board , error ) {
109+ boards := make ( map [string ]Board , len ( boardsList ))
76110 for boardName , boardPath := range boardsList {
77- if _ , err := os .Stat (boardPath ); os .IsNotExist (err ) {
78- return nil , err
79- }
80-
81- boardRaw , err := os .ReadFile (boardPath )
111+ fullPath := path .Join (RepoPath , boardPath )
112+ boardRaw , err := os .ReadFile (fullPath )
82113 if err != nil {
83114 return nil , err
84115 }
@@ -88,10 +119,22 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
88119 return nil , err
89120 }
90121
91- var board Board
92- board .Name = boardName
93- board .IP = boardJSON .IP
122+ measPathsFr := make ([]string , 0 )
123+ for _ , measPath := range boardJSON .MeasurementsPaths {
124+ measPathsFr = append (measPathsFr , path .Join (RepoPath , "boards" , boardName , measPath ))
125+ }
126+ boardJSON .MeasurementsPaths = measPathsFr
127+
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
94133
134+ board := Board {
135+ Name : boardName ,
136+ IP : boardJSON .IP ,
137+ }
95138 board .Packets , err = getBoardPackets (boardJSON .PacketsPaths )
96139 if err != nil {
97140 return nil , err
@@ -101,6 +144,12 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
101144 if err != nil {
102145 return nil , err
103146 }
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 )
104153
105154 boards [boardName ] = board
106155 }
@@ -109,7 +158,7 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
109158}
110159
111160func getBoardPackets (packetsPaths []string ) ([]Packet , error ) {
112- var packets []Packet
161+ packets := make ( []Packet , 0 )
113162 for _ , packetPath := range packetsPaths {
114163 if _ , err := os .Stat (packetPath ); os .IsNotExist (err ) {
115164 continue
@@ -120,19 +169,26 @@ func getBoardPackets(packetsPaths []string) ([]Packet, error) {
120169 return nil , err
121170 }
122171
123- var packet Packet
124- if err = json . Unmarshal ( packetRaw , & packet ); err != nil {
125- return nil , err
172+ // Magic happens here
173+ type PacketJSON struct {
174+ Packet [] Packet `json:"packets"`
126175 }
127176
128- 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+ }
129184 }
130185
131186 return packets , nil
132187}
133188
134189func getBoardMeasurements (measurementsPaths []string ) ([]Measurement , error ) {
135- var measurements []Measurement
190+ measurements := make ([]Measurement , 0 )
191+
136192 for _ , measurementPath := range measurementsPaths {
137193 if _ , err := os .Stat (measurementPath ); os .IsNotExist (err ) {
138194 continue
@@ -143,25 +199,28 @@ func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) {
143199 return nil , err
144200 }
145201
146- var measurement Measurement
147- if err = json . Unmarshal ( measurementRaw , & measurement ); err != nil {
148- return nil , err
202+ // Absolutely doing tricks on it AGAIN - @msanlli
203+ type MeasurementJSON struct {
204+ Measurements [] Measurement `json:"measurements"`
149205 }
150206
151- 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+ }
152214 }
153215
154216 return measurements , nil
155217}
156218
157219func getBoardIds (boards map [string ]string ) (map [string ]uint16 , error ) {
158- var boardIds map [string ]uint16
220+ boardIds := make ( map [string ]uint16 , len ( boards ))
159221 for boardName , boardPath := range boards {
160- if _ , err := os .Stat (boardPath ); os .IsNotExist (err ) {
161- return nil , err
162- }
163-
164- boardRaw , err := os .ReadFile (boardPath )
222+ fullPath := path .Join (RepoPath , boardPath )
223+ boardRaw , err := os .ReadFile (fullPath )
165224 if err != nil {
166225 return nil , err
167226 }
@@ -176,3 +235,24 @@ func getBoardIds(boards map[string]string) (map[string]uint16, error) {
176235
177236 return boardIds , nil
178237}
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