package art.servers.etdserver.controller;
|
|
|
import art.library.model.devices.DeviceStatus;
|
import art.library.model.devices.etd.Etd;
|
import art.library.interop.serialization.Serialization;
|
import art.library.model.transactions.traces.Trace;
|
import art.servers.etdserver.Shared;
|
import art.servers.etdserver.protocols.diamond.configuration.DIAMOND_SpeedBinnedData;
|
import static java.lang.Thread.sleep;
|
|
|
public class ControllerVirtualEtd extends ControllerEtd
|
{
|
private int status = DeviceStatus.STATUS_ALARM;
|
private boolean firstTime = true;
|
|
|
public ControllerVirtualEtd(Etd etd)
|
{
|
super(etd);
|
this.device = etd;
|
this.name = Shared.getMessage("Controller etd") + " " + etd.information.name;
|
}
|
|
|
|
|
public void run()
|
{
|
// <editor-fold defaultstate="collapsed" desc="Trace">
|
art.servers.Shared.println(Trace.getTraceInformation(art.servers.Shared.getApplicationName(), name, art.servers.Shared.getMessage("Starting"), art.servers.Shared.getMessage("Success")), true);
|
// </editor-fold>
|
status = DeviceStatus.STATUS_ONLINE;
|
|
while ((isInterrupted() == false) && (exit == false))
|
{
|
long startTimestamp = System.currentTimeMillis();
|
|
try
|
{
|
if (art.servers.Shared.isServerEnabled() == true)
|
{
|
update();
|
}
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
if (startTimestamp > System.currentTimeMillis())
|
{
|
startTimestamp = System.currentTimeMillis();
|
}
|
|
long stopTimestamp = startTimestamp + (device.getDeviceInformation().polling * 1000);
|
|
while ((System.currentTimeMillis() < stopTimestamp) && (exit == false))
|
{
|
try
|
{
|
sleep(50);
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
if (art.servers.Shared.model.existsDevice(device.getIdentifier()) == false)
|
{
|
art.servers.Shared.println(name, art.servers.Shared.getMessage("Device no longer exists"));
|
exit = true;
|
}
|
}
|
|
// <editor-fold defaultstate="collapsed" desc="Trace">
|
art.servers.Shared.println(Trace.getTraceInformation(art.servers.Shared.getApplicationName(), name, art.servers.Shared.getMessage("Finishing"), art.servers.Shared.getMessage("Success")), true);
|
// </editor-fold>
|
}
|
|
|
|
|
/*
|
Private controller functions
|
*/
|
|
private void update() throws Exception
|
{
|
Etd etdclone = (Etd)Serialization.clone(device);
|
|
try
|
{
|
String externalIdentifier = device.getDeviceInformation().associatedDevice;
|
|
Etd etdExternal = (Etd)Shared.model.getDeviceExternal(externalIdentifier);
|
|
etdclone = (Etd)Serialization.clone(etdExternal);
|
etdclone.information = device.information;
|
etdclone.getDeviceInformation().lSpeedClassification = etdExternal.getDeviceInformation().lSpeedClassification;
|
etdclone.configuration = device.configuration;
|
|
online(etdclone);
|
return;
|
}
|
catch (Exception exception)
|
{
|
if ((etdclone.alarms.alarm_offline <= 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Etd offline");
|
art.servers.Shared.println(name, exception);
|
}
|
|
offline(etdclone);
|
}
|
}
|
|
|
|
|
private boolean isError()
|
{
|
errorsNumber = errorsNumber + 1;
|
if (errorsNumber >= maxErrorsNumber)
|
{
|
return(true);
|
}
|
return(false);
|
}
|
|
|
|
|
private void offline(Etd etdclone)throws Exception
|
{
|
if (isError() == true)
|
{
|
if (etdclone.getAlarm("alarm_offline") <= 0)
|
{
|
etdclone.getDeviceAlarms().clear();
|
}
|
etdclone.setAlarm("alarm_offline", true);
|
Shared.model.updateDevice(device, etdclone);
|
}
|
}
|
|
|
private void online(Etd etdclone) throws Exception
|
{
|
errorsNumber = 0;
|
if ((etdclone.alarms.alarm_offline > 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Etd online");
|
art.servers.Shared.println(name, message);
|
}
|
|
etdclone.setAlarm("alarm_offline", false);
|
etdclone.setAlarm("alarm_invalid", false);
|
Shared.model.updateDevice(device, etdclone);
|
}
|
|
|
private DIAMOND_SpeedBinnedData createSpeedBinTable() throws Exception
|
{
|
if ((this.device.getIdentifier().equalsIgnoreCase("etd-wisznice-1") == false) &&
|
(this.device.getIdentifier().equalsIgnoreCase("etd-sławatycze-1") == false))
|
{
|
DIAMOND_SpeedBinnedData speedBinnedData = new DIAMOND_SpeedBinnedData();
|
speedBinnedData.numberOfBins = 17; // 16;
|
speedBinnedData.fileName = "POLONIA.SPD"; // "DEFAULTX.SPD";
|
speedBinnedData.createBins();
|
return speedBinnedData;
|
}
|
|
DIAMOND_SpeedBinnedData speedBinnedData = new DIAMOND_SpeedBinnedData();
|
speedBinnedData.numberOfBins = 16;
|
speedBinnedData.fileName = "DEFAULTX.SPD";
|
speedBinnedData.createBinsOld();
|
return speedBinnedData;
|
}
|
|
}
|