From d3a39888e906e56266e429dd87aadccb4c005dc2 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 19 Nov 2019 12:06:37 -0800 Subject: [PATCH] Start adding config deserialization to ConfigManager --- .../classabstraction/VisionManager.java | 77 ++++++++++--------- .../camera/USBCameraProcess.java | 2 +- .../classabstraction/config/CameraConfig.java | 17 +++- .../config/ConfigManager.java | 46 ++++++++++- .../chameleonvision/settings/Platform.java | 2 +- 5 files changed, 99 insertions(+), 45 deletions(-) diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/VisionManager.java b/Main/src/main/java/com/chameleonvision/classabstraction/VisionManager.java index 9208a096d..f238c42a2 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/VisionManager.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/VisionManager.java @@ -1,5 +1,6 @@ package com.chameleonvision.classabstraction; +import com.chameleonvision.classabstraction.config.ConfigManager; import com.chameleonvision.settings.SettingsManager; import com.chameleonvision.util.FileHelper; import com.google.gson.Gson; @@ -13,6 +14,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.LinkedHashMap; public class VisionManager { @@ -45,43 +47,46 @@ public class VisionManager { FileHelper.CheckPath(CamConfigPath); - UsbCameraInfosByCameraName.forEach((cameraName, cameraInfo) -> { - Path cameraConfigFolder = Paths.get(CamConfigPath.toString(), String.format("%s\\", cameraName)); - Path cameraConfigPath = Paths.get(cameraConfigFolder.toString(), String.format("%s.json", cameraName)); - Path cameraPipelinesPath = Paths.get(cameraConfigFolder.toString(), "pipelines.json"); - Path cameraDrivermodePath = Paths.get(cameraConfigFolder.toString(), "drivermode.json"); + // load the config + var loadedConfigs = ConfigManager.initializeCameraConfig(new ArrayList<>(UsbCameraInfosByCameraName.keySet())); - try { - - boolean cameraFolderExists = Files.exists(cameraConfigFolder); - - if (!cameraFolderExists) { - Files.createDirectory(cameraConfigFolder); - } - boolean cameraConfigExists = cameraFolderExists && Files.exists(cameraConfigPath); - - if (Files.exists(cameraConfigFolder)) { - if (Files.exists(cameraConfigPath)) { - File cameraConfigFile = new File(cameraConfigPath.toString()); - if (cameraConfigFile.length() != 0) { - try { - Gson gson = new GsonBuilder().create(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } else { - Files.createFile(cameraConfigPath); - } - } else { - Files.createDirectory(cameraConfigFolder); - } - } catch (IOException ex) { - - } - - - }); +// UsbCameraInfosByCameraName.forEach((cameraName, cameraInfo) -> { +// Path cameraConfigFolder = Paths.get(CamConfigPath.toString(), String.format("%s\\", cameraName)); +// Path cameraConfigPath = Paths.get(cameraConfigFolder.toString(), String.format("%s.json", cameraName)); +// Path cameraPipelinesPath = Paths.get(cameraConfigFolder.toString(), "pipelines.json"); +// Path cameraDrivermodePath = Paths.get(cameraConfigFolder.toString(), "drivermode.json"); +// +// try { +// +// boolean cameraFolderExists = Files.exists(cameraConfigFolder); +// +// if (!cameraFolderExists) { +// Files.createDirectory(cameraConfigFolder); +// } +// boolean cameraConfigExists = cameraFolderExists && Files.exists(cameraConfigPath); +// +// if (Files.exists(cameraConfigFolder)) { +// if (Files.exists(cameraConfigPath)) { +// File cameraConfigFile = new File(cameraConfigPath.toString()); +// if (cameraConfigFile.length() != 0) { +// try { +// Gson gson = new GsonBuilder().create(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// } else { +// Files.createFile(cameraConfigPath); +// } +// } else { +// Files.createDirectory(cameraConfigFolder); +// } +// } catch (IOException ex) { +// +// } +// +// +// }); // FileHelper.CheckPath(CamConfigPath); // UsbCameraInfosByCameraName.forEach((cameraName, cameraInfo) -> { diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java b/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java index 7e318fd16..32e8c9ceb 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java @@ -18,7 +18,7 @@ public class USBCameraProcess implements CameraProcess { public USBCameraProcess(UsbCamera camera, CameraConfig config) { baseCamera = camera; cvSink = CameraServer.getInstance().getVideo(baseCamera); - properties = new CameraProperties(baseCamera, config.FOV); + properties = new CameraProperties(baseCamera, config.fov); setVideoMode(properties.videoModes.get(0)); } diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java b/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java index 56c2d25a8..a0293a391 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java @@ -1,9 +1,18 @@ package com.chameleonvision.classabstraction.config; public class CameraConfig { - public double FOV; - public String Path; - public String Name; - public String Nickname; + public double fov; + public String path; + public String name; + public String nickname; + + public CameraConfig(double FOV, + String path, String name, + String nickname) { + this.fov = FOV; + this.path = path; + this.name = name; + this.nickname = nickname; + } } diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/config/ConfigManager.java b/Main/src/main/java/com/chameleonvision/classabstraction/config/ConfigManager.java index 89da22410..57b6dc51c 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/config/ConfigManager.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/config/ConfigManager.java @@ -2,20 +2,30 @@ package com.chameleonvision.classabstraction.config; import com.chameleonvision.classabstraction.util.ProgramDirectoryUtilities; import com.chameleonvision.settings.GeneralSettings; +import com.chameleonvision.settings.SettingsManager; import com.chameleonvision.util.FileHelper; +import com.chameleonvision.vision.camera.CameraDeserializer; +import com.chameleonvision.vision.camera.USBCamera; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.IOException; +import java.lang.reflect.Array; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; public class ConfigManager { private ConfigManager() {} private static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings"); - private static final Path CamConfigPath = Paths.get(SettingsPath.toString(), "cameras"); + private static final Path cameraConfigPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "cameras"); public static GeneralSettings settings = new GeneralSettings(); @@ -30,6 +40,7 @@ public class ConfigManager { } } + // try to load the settings file and deserialize it Path settingsFilePath = Paths.get(SettingsPath.toString(), "settings.json"); boolean settingsFileExists = Files.exists(settingsFilePath); @@ -47,16 +58,23 @@ public class ConfigManager { } } + // try to load camera file and deserialize it +// var cameraConfigs = initializeCameraConfig(); + } public static List initializeCameraConfig(List cameraNames) { + var configList = new ArrayList(); + + // loop over all the camera names and try to create settings folders for it cameraNames.forEach((cameraName) -> { - final Path cameraConfigFolder = Paths.get(CamConfigPath.toString(), String.format("%s\\", cameraName)); + final Path cameraConfigFolder = Paths.get(cameraConfigPath.toString(), String.format("%s\\", cameraName)); final Path cameraConfigPath = Paths.get(cameraConfigFolder.toString(), String.format("%s.json", cameraName)); final Path cameraPipelinesPath = Paths.get(cameraConfigFolder.toString(), "pipelines.json"); final Path cameraDrivermodePath = Paths.get(cameraConfigFolder.toString(), "drivermode.json"); + // check if the config folder exists, and if not, create it boolean cameraConfigFolderExists = Files.exists(cameraConfigFolder); if (!cameraConfigFolderExists) { @@ -67,8 +85,30 @@ public class ConfigManager { } } + // try to deserialize the file + var camJsonFile = new File(cameraConfigPath.toString()); + if(camJsonFile.exists() && camJsonFile.length() > 0) { + try { + Gson gson = new GsonBuilder().registerTypeAdapter(USBCamera.class, new CameraDeserializer()).create(); + var camJsonFileReader = new FileReader(camJsonFile.toString()); + var gsonRead = gson.fromJson(camJsonFileReader, CameraConfig.class); + configList.add(gsonRead); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } else { + // create a default one + configList.add(new CameraConfig( + 70.0, + cameraConfigPath.toString(), + cameraName, + cameraName + )); + } + + }); - return new ArrayList<>(); + return configList; } } diff --git a/Main/src/main/java/com/chameleonvision/settings/Platform.java b/Main/src/main/java/com/chameleonvision/settings/Platform.java index 478ab22f0..ad1716109 100644 --- a/Main/src/main/java/com/chameleonvision/settings/Platform.java +++ b/Main/src/main/java/com/chameleonvision/settings/Platform.java @@ -71,7 +71,7 @@ public enum Platform { } } - private static Platform getCurrentPlatform() { + public static Platform getCurrentPlatform() { if (OS_NAME.contains("Windows")) { if (OS_ARCH.equals("amd64")) return Platform.WINDOWS_64; }