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}; } }