package art.servers.rtzserver;
|
|
import art.library.interop.serialization.Serialization;
|
import art.library.model.devices.Device;
|
import art.library.model.devices.DeviceInformation;
|
import art.library.model.devices.DevicePersistenceTimeless;
|
import art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller;
|
import art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation;
|
import art.servers.configuration.Configuration;
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.lang.reflect.Array;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.List;
|
|
|
|
public class Model extends art.servers.Model
|
{
|
|
public Model(Configuration configuration) throws Exception
|
{
|
super(configuration, "controllers", RTZ32_Controller.class.getName(), RTZ32_ControllerInformation.class.getName());
|
}
|
|
|
|
// TODO: Para poder debugar desde nuestros ordenadores
|
|
public void readDevices()
|
{
|
if (filename == null) return;
|
|
mutexListDevices.lockWrite();
|
|
try
|
{
|
|
ldevice.clear();
|
mdevice.clear();
|
|
// Read data from database file (--restore)
|
|
if (art.servers.Shared.restoreDevices == true)
|
{
|
Class clazzDevice = Class.forName(deviceClassName);
|
Class<?> clazzArray = (Class<?>)Array.newInstance(clazzDevice, 0).getClass();
|
List<Device> ldevice = (List<Device>)Serialization.deserialize(clazzArray, new File(art.servers.Shared.getApplicationName() + "." + filename + ".database.json"));
|
|
for (Device device : ldevice)
|
{
|
if (device instanceof Device) // && (device.information.serverPort == art.servers.Shared.configuration.listener.port) && (device.information.serverAddress.equalsIgnoreCase(art.servers.Shared.configuration.listener.address)))
|
{
|
device.information.serverAddress = art.servers.Shared.configuration.listener.address;
|
device.information.serverPort = art.servers.Shared.configuration.listener.port;
|
device.information.serverAddressExternal = art.servers.Shared.configuration.listener.addressExternal;
|
device.information.serverPortExternal = art.servers.Shared.configuration.listener.portExternal;
|
this.ldevice.add(device);
|
this.mdevice.put(device.getIdentifier(), device);
|
}
|
}
|
}
|
|
// Read data from database
|
|
else if ((art.servers.Shared.controllerDatabase != null) && (art.servers.Shared.reloadDevices == false))
|
{
|
Class clazzDevice = Class.forName(deviceClassName);
|
|
List<Device> ldevice = (List<Device>)DevicePersistenceTimeless.getDevices((List<Object>)(List<?>)art.servers.Shared.controllerDatabase.timeless_getObject(DevicePersistenceTimeless.class.getName(), "type = '" + clazzDevice.getName() + "'"));
|
|
for (Device device : ldevice)
|
{
|
try
|
{
|
if (device instanceof Device) // && (device.information.serverPort == art.servers.Shared.configuration.listener.port) && (device.information.serverAddress.equalsIgnoreCase(art.servers.Shared.configuration.listener.address)))
|
{
|
device.information.serverAddress = art.servers.Shared.configuration.listener.address;
|
device.information.serverPort = art.servers.Shared.configuration.listener.port;
|
device.information.serverAddressExternal = art.servers.Shared.configuration.listener.addressExternal;
|
device.information.serverPortExternal = art.servers.Shared.configuration.listener.portExternal;
|
this.ldevice.add(device);
|
this.mdevice.put(device.getIdentifier(), device);
|
}
|
}
|
catch (Exception exception)
|
{
|
art.servers.Shared.println(device.getIdentifier(), exception.getMessage());
|
}
|
}
|
}
|
|
}
|
catch (Exception exception)
|
{
|
art.servers.Shared.println(art.servers.Shared.getMessage("Model"), exception);
|
}
|
|
|
|
|
try
|
{
|
Class clazzDevice = Class.forName(deviceClassName);
|
Class clazzInformation = Class.forName(deviceInformationClassName);
|
|
DeviceInformation[] ldeviceInformation = null;
|
|
if (new File(art.servers.Shared.getApplicationName() + "." + filename + ".json").exists())
|
{
|
Class<?> clazzArray = (Class<?>)Array.newInstance(clazzInformation, 0).getClass();
|
ldeviceInformation = Serialization.deserialize(clazzArray, new File(art.servers.Shared.getApplicationName() + "." + filename + ".json"));
|
}
|
|
|
for (DeviceInformation deviceInformation : ldeviceInformation)
|
{
|
if (mdevice.containsKey(deviceInformation.getIdentifier()) == false)
|
{
|
addDevice(clazzDevice, deviceInformation);
|
}
|
}
|
}
|
catch (Exception exception)
|
{
|
art.servers.Shared.println(art.servers.Shared.getMessage("Model"), exception);
|
}
|
|
|
|
for (Device device : ldevice)
|
{
|
device.information.serverServiceName = art.servers.Shared.controllerStatus.getApplication().getDeviceInformation().serverServiceName;
|
}
|
|
|
// Sort
|
|
Collections.sort(ldevice, new Comparator<Device>()
|
{
|
public int compare(Device device1, Device device2)
|
{
|
return Integer.valueOf(device1.information.number).compareTo(device2.information.number);
|
}
|
});
|
|
|
// Database file
|
|
if (art.servers.Shared.restoreDevices == false)
|
{
|
try
|
{
|
|
FileOutputStream fos = new FileOutputStream(new File(art.servers.Shared.getApplicationName() + "." + filename + ".database.json"));
|
|
fos.write("[\n".getBytes());
|
|
for (Device device : ldevice)
|
{
|
fos.write(Serialization.toPrettyString(device).getBytes());
|
if (device != ldevice.get(ldevice.size() - 1)) fos.write(",".getBytes());
|
}
|
|
fos.write("]\n".getBytes());
|
fos.close();
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
|
mutexListDevices.releaseWrite();
|
|
}
|
|
|
public RTZ32_Controller getDevice(int number)
|
{
|
for (Device device : Shared.model.getDevices())
|
{
|
if (device.getDeviceInformation().number == number)
|
{
|
return (RTZ32_Controller)device;
|
}
|
}
|
|
return null;
|
}
|
|
|
|
}
|