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){}
|
}
|
}
|
|
//<editor-fold defaultstate="collapsed" desc="ASF">
|
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]);
|
}
|
//</editor-fold>
|
|
//<editor-fold defaultstate="collapsed" desc="PVV">
|
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);
|
}
|
|
}
|
//</editor-fold>
|
|
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};
|
}
|
|
|
}
|