/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package Mocker; import art.library.interop.serialization.Serialization; import art.library.model.devices.Device; import art.library.model.devices.colors.controller.M.M_Controller; import java.io.File; import java.lang.reflect.Constructor; import java.nio.file.Files; import java.util.Optional; /** * * @author Konstantin */ public class DeviceFactory { public enum MOCK { M_CONTROLLER(M_Controller.class,"C:\\Users\\Konstantin\\Documents\\LocalBackup\\Obras\\Accra\\colorsserver\\data\\art.servers.colorsserver\\symbols\\18\\Controller.svg"); private final Class clazz; private final String path; private MOCK(Class clazz, String path) { this.clazz = clazz; this.path = path; } public String getPath(){return path;} public Class getMockedClass(){return clazz;} } public static T getMockedDevice(MOCK mock) { return (T)getMockedDeviceOpt(mock.getPath(), mock.getMockedClass()).orElse(getNewDeviceInstance(mock.getMockedClass())); } private static T getNewDeviceInstance(Class clazz) { try { Constructor ctor = clazz.getConstructor(String.class); return (T)ctor.newInstance("Mock"); } catch (Exception ex) { return null; } } private static Optional getMockedDeviceOpt(String path, Class clazz) { Optional output = Optional.empty(); try{ output = Optional.of(Serialization.deserialize(clazz, Files.readAllBytes(new File(path).toPath()))); } catch (Exception ex){} return output; } }