/*
|
* 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 extends Device> T getMockedDevice(MOCK mock)
|
{
|
return (T)getMockedDeviceOpt(mock.getPath(), mock.getMockedClass()).orElse(getNewDeviceInstance(mock.getMockedClass()));
|
}
|
|
private static <T extends Device> T getNewDeviceInstance(Class clazz)
|
{
|
try
|
{
|
Constructor ctor = clazz.getConstructor(String.class);
|
|
return (T)ctor.newInstance("Mock");
|
|
} catch (Exception ex)
|
{
|
return null;
|
}
|
}
|
|
private static <T extends Device> Optional<T> getMockedDeviceOpt(String path, Class clazz)
|
{
|
Optional<T> output = Optional.empty();
|
|
try{ output = Optional.of(Serialization.deserialize(clazz, Files.readAllBytes(new File(path).toPath()))); } catch (Exception ex){}
|
|
return output;
|
}
|
}
|