2019-11-23 11:55:20 -05:00
|
|
|
package com.chameleonvision.config;
|
2019-11-19 12:43:38 -05:00
|
|
|
|
2019-11-23 11:55:20 -05:00
|
|
|
import com.chameleonvision.util.ProgramDirectoryUtilities;
|
2019-11-26 17:57:51 -05:00
|
|
|
import com.chameleonvision.util.JacksonHelper;
|
2019-11-23 19:39:24 +02:00
|
|
|
import com.chameleonvision.vision.pipeline.CVPipelineSettings;
|
2019-11-19 12:06:37 -08:00
|
|
|
|
2019-11-25 05:34:04 -05:00
|
|
|
import java.io.File;
|
2019-11-19 12:43:38 -05:00
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.nio.file.Files;
|
|
|
|
|
import java.nio.file.Path;
|
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
|
import java.util.ArrayList;
|
2019-11-26 17:57:51 -05:00
|
|
|
import java.util.LinkedHashMap;
|
2019-11-19 12:43:38 -05:00
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
public class ConfigManager {
|
|
|
|
|
private ConfigManager() {}
|
|
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings");
|
2019-11-23 12:23:21 -05:00
|
|
|
private static final Path settingsFilePath = Paths.get(SettingsPath.toString(), "settings.json");
|
2019-11-19 12:43:38 -05:00
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
private static final LinkedHashMap<String, CameraConfig> cameraConfigs = new LinkedHashMap<>();
|
|
|
|
|
|
2019-11-19 12:43:38 -05:00
|
|
|
public static GeneralSettings settings = new GeneralSettings();
|
|
|
|
|
|
2019-11-23 12:23:21 -05:00
|
|
|
private static boolean settingsFolderExists() { return Files.exists(SettingsPath); }
|
|
|
|
|
private static boolean settingsFileExists() { return settingsFolderExists() && Files.exists(settingsFilePath); }
|
|
|
|
|
|
|
|
|
|
private static void checkSettingsFolder() {
|
|
|
|
|
if (!settingsFolderExists()) {
|
2019-11-19 12:43:38 -05:00
|
|
|
try {
|
2019-11-26 22:26:53 -08:00
|
|
|
new File(SettingsPath.toUri()).mkdirs();
|
2019-11-19 12:43:38 -05:00
|
|
|
Files.createDirectory(SettingsPath);
|
|
|
|
|
} catch (IOException e) {
|
2019-11-27 08:58:20 -08:00
|
|
|
if(!(e instanceof java.nio.file.FileAlreadyExistsException || e instanceof java.nio.file.FileAlreadyExistsException))
|
|
|
|
|
e.printStackTrace();
|
2019-11-19 12:43:38 -05:00
|
|
|
}
|
|
|
|
|
}
|
2019-11-23 12:23:21 -05:00
|
|
|
}
|
2019-11-19 12:43:38 -05:00
|
|
|
|
2019-11-23 12:23:21 -05:00
|
|
|
private static void checkSettingsFile() {
|
2019-11-25 05:34:04 -05:00
|
|
|
boolean settingsFileEmpty = settingsFileExists() && new File(settingsFilePath.toString()).length() == 0;
|
|
|
|
|
if (settingsFileEmpty || !settingsFileExists()) {
|
2019-11-19 12:43:38 -05:00
|
|
|
try {
|
2019-11-26 17:57:51 -05:00
|
|
|
JacksonHelper.serializer(settingsFilePath, settings);
|
2019-11-19 12:43:38 -05:00
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
try {
|
2019-11-26 17:57:51 -05:00
|
|
|
settings = JacksonHelper.deserializer(settingsFilePath, GeneralSettings.class);
|
2019-11-19 12:43:38 -05:00
|
|
|
} catch (IOException e) {
|
|
|
|
|
System.err.println("Failed to load settings.json, using defaults.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-23 12:23:21 -05:00
|
|
|
public static void initializeSettings() {
|
2019-11-26 17:57:51 -05:00
|
|
|
System.out.println("Settings folder: " + SettingsPath.toString());
|
2019-11-23 12:23:21 -05:00
|
|
|
checkSettingsFolder();
|
|
|
|
|
checkSettingsFile();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void saveSettingsFile() {
|
|
|
|
|
try {
|
2019-11-26 17:57:51 -05:00
|
|
|
JacksonHelper.serializer(settingsFilePath, settings);
|
2019-11-23 12:23:21 -05:00
|
|
|
} catch (IOException e) {
|
|
|
|
|
System.err.println("Failed to save settings.json!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-26 23:03:07 -05:00
|
|
|
public static void saveGeneralSettings() {
|
2019-11-23 12:23:21 -05:00
|
|
|
checkSettingsFolder();
|
|
|
|
|
saveSettingsFile();
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
// TODO: (HIGH) cleanup!
|
|
|
|
|
public static List<FullCameraConfiguration> initializeCameras(List<CameraJsonConfig> preliminaryConfigs) {
|
|
|
|
|
List<FullCameraConfiguration> configList = new ArrayList<>();
|
2019-11-23 12:23:21 -05:00
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
checkSettingsFolder();
|
2019-11-23 12:23:21 -05:00
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
// loop over all the camera names and try to create settings folders for it
|
|
|
|
|
for (CameraJsonConfig preliminaryConfig : preliminaryConfigs) {
|
|
|
|
|
CameraConfig cameraConfiguration = new CameraConfig(preliminaryConfig);
|
|
|
|
|
cameraConfigs.put(preliminaryConfig.name, cameraConfiguration);
|
2019-11-23 12:23:21 -05:00
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
CameraJsonConfig camJsonConfig = cameraConfiguration.load();
|
|
|
|
|
List<CVPipelineSettings> pipelines = cameraConfiguration.loadPipelines();
|
|
|
|
|
CVPipelineSettings driverMode = cameraConfiguration.loadDriverMode();
|
2019-11-23 12:23:21 -05:00
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
configList.add(new FullCameraConfiguration(camJsonConfig, pipelines, driverMode));
|
|
|
|
|
}
|
2019-11-23 12:23:21 -05:00
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
return configList;
|
2019-11-23 12:23:21 -05:00
|
|
|
}
|
|
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
public static void saveCameraConfig(String cameraName, CameraJsonConfig config) {
|
|
|
|
|
cameraConfigs.get(cameraName).saveConfig(config);
|
2019-11-23 12:23:21 -05:00
|
|
|
}
|
|
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
public static void saveCameraPipelines(String cameraName, List<CVPipelineSettings> pipelines) {
|
|
|
|
|
cameraConfigs.get(cameraName).savePipelines(pipelines);
|
2019-11-23 12:23:21 -05:00
|
|
|
}
|
|
|
|
|
|
2019-11-26 17:57:51 -05:00
|
|
|
public static void saveCameraDriverMode(String cameraName, CVPipelineSettings driverMode) {
|
|
|
|
|
cameraConfigs.get(cameraName).saveDriverMode(driverMode);
|
2019-11-23 19:39:24 +02:00
|
|
|
}
|
2019-11-19 12:43:38 -05:00
|
|
|
}
|