package art.client.maps;
import art.client.models.Shared;
import art.library.model.devices.Device;
import art.library.model.devices.DeviceGraphicsRuntime;
import art.library.model.devices.DeviceStatus;
import art.library.model.devices.vms.asf.Asf;
import art.library.model.devices.vms.asf.AsfStatus;
import art.library.model.devices.vms.pvv.Pvv;
import art.library.model.devices.vms.pvv.PvvAlarms;
import art.library.model.devices.vms.pvv.PvvStatus;
import com.kitfox.svg.*;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
public class VigicatCUC extends DeviceGraphicsRuntime
{
private boolean even = false;
private final DecimalFormat decimalFormat = new DecimalFormat("0.00");
public VigicatCUC (SVGDiagram diagram)
{
super(diagram);
}
public void status()
{
Calendar calendardate = java.util.Calendar.getInstance();
calendardate.set(java.util.Calendar.MILLISECOND, 0);
long seconds = calendardate.getTimeInMillis() / 1000;
even = (seconds % 2) == 0;
for (SVGElement element : getElementsContainingField("art.device"))
{
try
{
for (Class deviceClass : Shared.model.modelDevices.getDevicesListRead().stream().map(Device::getClass).collect(Collectors.toSet()))
{
if (Shared.model.modelDevices.getDevice(getAttribute(element, "art.device")).getClassName().equals(deviceClass.getName()))
{
this.getClass()
.getMethod("status", deviceClass, SVGElement.class)
.invoke(this, Shared.model.modelDevices.getDevice(getAttribute(element, "art.device")), element);
break;
}
}
} catch (Exception e){}
}
}
//
public void status(Asf svgDevice, SVGElement element)
{
DeviceStatus status = svgDevice.getDeviceStatus();
SVGElement background = getChildContainingField(element,"art.id","Background");
SVGElement border = getChildContainingField(element,"art.id","Border");
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
}
//
//
public void status(Pvv svgDevice, SVGElement element)
{
if (getChildContainingField(element, "art.id", "Alarm") != null)
paintBigPvvElement(svgDevice, element);
else
paintSmallPvvElement(svgDevice, element);
}
private void paintSmallPvvElement(Pvv svgDevice, SVGElement element)
{
DeviceStatus status = svgDevice.getDeviceStatus();
SVGElement background = getChildContainingField(element,"art.id","Background");
SVGElement border = getChildContainingField(element,"art.id","Border");
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
}
private void paintBigPvvElement(Pvv svgDevice, SVGElement element)
{
PvvStatus status = svgDevice.getDeviceStatus();
PvvAlarms alarms = svgDevice.getDeviceAlarms();
SVGElement background = getChildContainingField(element, "art.id", "Background");
SVGElement border = getChildContainingField(element, "art.id", "Border");
SVGElement alarm = getChildContainingField(element, "art.id", "Alarm");
SVGElement textUnder100 = getChildContainingField(element, "art.id", "Text1");
SVGElement textOver100 = getChildContainingField(element, "art.id", "Text2");
setAttribute(textUnder100, "display", "none", 999);
setAttribute(textOver100, "display", "none", 999);
setAttribute(alarm, "display", "inline", 999);
setAttribute(alarm, "stroke", "#FF0000", 999);
setAttribute(background, "fill", "#FF00FF");
setAttribute(border, "stroke", "#800080");
setAttribute(alarm, "stroke-width", alarms.getServerityAlarm());
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
if(status.state != PvvStatus.STATE_OFF)
{
SVGElement textObject = status.speed >= 100 ? textOver100 : textUnder100;
setText(textObject, String.valueOf(status.speed) );
setAttribute(textObject, "display", "inline", 999);
}
}
//
private static String[] getGenericDualStatusColor(int status)
{
String color1 = "#FF00FF";
String color2 = "#7C007C";
switch (status)
{
case DeviceStatus.STATUS_ONLINE:
color1 = "#00FF00";
color2 = "#007C00";
break;
case DeviceStatus.STATUS_WARNING:
color1 = "#FFFF00";
color2 = "#7C7C00";
break;
case DeviceStatus.STATUS_ALARM:
color1 = "#FF0000";
color2 = "#7C0000";
break;
case DeviceStatus.STATUS_INVALID:
color1 = "#B97A57";
color2 = "#5A3B2A";
break;
case DeviceStatus.STATUS_DISABLE:
color1 = "#7C7C7C";
color2 = "#3E3E3E";
break;
case DeviceStatus.STATUS_SIMULATION:
color1 = "#0000FF";
color2 = "#00007C";
break;
case DeviceStatus.STATUS_OFFLINE:
color1 = "#FF00FF";
color2 = "#7C007C";
break;
case DeviceStatus.STATUS_UNKNOWN:
color1 = "#FF00FF";
color2 = "#7C007C";
break;
}
return new String[] {color1, color2};
}
}