2024-09-15 22:47:45 -06:00
|
|
|
package com.ridgebotics.ridgescout.scoutingData;
|
2024-06-28 15:44:38 -06:00
|
|
|
|
2025-04-04 14:15:30 -06:00
|
|
|
import com.ridgebotics.ridgescout.scoutingData.transfer.TransferType;
|
2024-09-15 22:47:45 -06:00
|
|
|
import com.ridgebotics.ridgescout.types.ScoutingArray;
|
2025-04-04 14:15:30 -06:00
|
|
|
import com.ridgebotics.ridgescout.types.data.DataType;
|
|
|
|
|
import com.ridgebotics.ridgescout.types.data.IntArrType;
|
|
|
|
|
import com.ridgebotics.ridgescout.types.data.StringType;
|
|
|
|
|
import com.ridgebotics.ridgescout.types.input.FieldType;
|
|
|
|
|
import com.ridgebotics.ridgescout.types.data.IntType;
|
2024-09-15 22:47:45 -06:00
|
|
|
import com.ridgebotics.ridgescout.utility.AlertManager;
|
2025-04-04 14:15:30 -06:00
|
|
|
import com.ridgebotics.ridgescout.utility.FileEditor;
|
2024-09-15 22:47:45 -06:00
|
|
|
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
|
|
|
|
|
import com.ridgebotics.ridgescout.utility.ByteBuilder;
|
2024-06-28 15:44:38 -06:00
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
2024-09-28 12:43:19 -06:00
|
|
|
import java.util.Arrays;
|
2024-06-28 15:44:38 -06:00
|
|
|
|
|
|
|
|
public class ScoutingDataWriter {
|
|
|
|
|
// private static final int int_type_id = 255;
|
|
|
|
|
// private static final int string_type_id = 254;
|
|
|
|
|
|
2025-04-04 14:15:30 -06:00
|
|
|
public static boolean save(int version, String username, String filename, DataType[] data){
|
2024-06-28 15:44:38 -06:00
|
|
|
ByteBuilder bb = new ByteBuilder();
|
|
|
|
|
try {
|
|
|
|
|
bb.addInt(version);
|
|
|
|
|
bb.addString(username);
|
|
|
|
|
for(int i = 0; i < data.length; i++){
|
|
|
|
|
switch (data[i].getValueType()){
|
|
|
|
|
case NUM:
|
2024-09-04 19:34:06 -06:00
|
|
|
bb.addInt((int) data[i].forceGetValue());
|
2025-04-07 21:41:34 -06:00
|
|
|
System.out.println("Saved INT: " + data[i].getUUID() + ", ("+ data[i].get() +")");
|
2024-06-28 15:44:38 -06:00
|
|
|
break;
|
|
|
|
|
case STRING:
|
2024-09-04 19:34:06 -06:00
|
|
|
bb.addString((String) data[i].forceGetValue());
|
2025-04-07 21:41:34 -06:00
|
|
|
System.out.println("Saved STR: " + data[i].getUUID() + ", ("+ data[i].get() +")");
|
2024-06-28 15:44:38 -06:00
|
|
|
break;
|
2024-09-28 12:43:19 -06:00
|
|
|
case NUMARR:
|
|
|
|
|
bb.addIntArray((int[]) data[i].forceGetValue());
|
2025-04-07 21:41:34 -06:00
|
|
|
System.out.println("Saved INT Array: " + data[i].getUUID() + ", ("+ Arrays.toString((int[]) data[i].get()) +")");
|
2024-06-28 15:44:38 -06:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
byte[] bytes = bb.build();
|
2025-04-04 14:15:30 -06:00
|
|
|
FileEditor.writeFile(filename, bytes);
|
2024-06-28 15:44:38 -06:00
|
|
|
return true;
|
|
|
|
|
} catch (ByteBuilder.buildingException e) {
|
2024-07-24 15:27:13 -06:00
|
|
|
AlertManager.error(e);
|
2024-06-28 15:44:38 -06:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static class ParsedScoutingDataResult {
|
|
|
|
|
public String filename;
|
|
|
|
|
public String username;
|
|
|
|
|
public int version;
|
2024-07-03 10:20:40 -06:00
|
|
|
public ScoutingArray data;
|
2024-06-28 15:44:38 -06:00
|
|
|
}
|
|
|
|
|
|
2025-04-04 14:15:30 -06:00
|
|
|
public static ParsedScoutingDataResult load(String filename, FieldType[][] values , TransferType[][] transferValues){
|
|
|
|
|
byte[] bytes = FileEditor.readFile(filename);
|
2024-06-28 15:44:38 -06:00
|
|
|
BuiltByteParser bbp = new BuiltByteParser(bytes);
|
|
|
|
|
try {
|
|
|
|
|
ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse();
|
2025-04-04 14:15:30 -06:00
|
|
|
DataType[] dataTypes = new DataType[objects.size()-2];
|
2024-06-28 15:44:38 -06:00
|
|
|
|
|
|
|
|
int version = ((int)objects.get(0).get());
|
2024-07-03 19:31:20 -06:00
|
|
|
// System.out.println(version);
|
2024-06-28 15:44:38 -06:00
|
|
|
String username = (String) objects.get(1).get();
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < values[version].length; i++){
|
|
|
|
|
switch (objects.get(i+2).getType()){
|
2024-09-07 11:36:07 -06:00
|
|
|
case 1: // Int
|
2025-04-07 21:41:34 -06:00
|
|
|
dataTypes[i] = IntType.newNull(values[version][i].UUID);
|
2024-09-04 19:34:06 -06:00
|
|
|
dataTypes[i].forceSetValue(objects.get(i+2).get());
|
2025-04-07 21:41:34 -06:00
|
|
|
System.out.println("Loaded INT: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ dataTypes[i].get() +")");
|
2024-06-28 15:44:38 -06:00
|
|
|
break;
|
2024-09-07 11:36:07 -06:00
|
|
|
case 2: // String
|
2025-04-07 21:41:34 -06:00
|
|
|
dataTypes[i] = StringType.newNull(values[version][i].UUID);
|
2024-09-04 19:34:06 -06:00
|
|
|
dataTypes[i].forceSetValue(objects.get(i+2).get());
|
2025-04-07 21:41:34 -06:00
|
|
|
System.out.println("Loaded STR: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ dataTypes[i].get() +")");
|
2024-06-28 15:44:38 -06:00
|
|
|
break;
|
2024-09-28 12:43:19 -06:00
|
|
|
case 3: // Int array
|
2025-04-07 21:41:34 -06:00
|
|
|
dataTypes[i] = IntArrType.newNull(values[version][i].UUID);
|
2024-09-28 12:43:19 -06:00
|
|
|
dataTypes[i].forceSetValue(objects.get(i+2).get());
|
2025-04-07 21:41:34 -06:00
|
|
|
System.out.println("Loaded intARR: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ Arrays.toString((int[])dataTypes[i].get()) +")");
|
2024-09-28 12:43:19 -06:00
|
|
|
break;
|
2024-06-28 15:44:38 -06:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-03 10:20:40 -06:00
|
|
|
ScoutingArray msa = new ScoutingArray(version, dataTypes, values, transferValues);
|
2024-06-28 15:44:38 -06:00
|
|
|
msa.update();
|
|
|
|
|
|
|
|
|
|
ParsedScoutingDataResult psda = new ParsedScoutingDataResult();
|
|
|
|
|
|
|
|
|
|
psda.filename = filename;
|
|
|
|
|
psda.username = username;
|
|
|
|
|
psda.version = version;
|
|
|
|
|
psda.data = msa;
|
|
|
|
|
|
|
|
|
|
return psda;
|
|
|
|
|
|
|
|
|
|
} catch (BuiltByteParser.byteParsingExeption e){
|
2024-07-24 15:27:13 -06:00
|
|
|
AlertManager.error(e);
|
2024-06-28 15:44:38 -06:00
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|