package art.runtime.diagrams.devices.signalboard.riello; import art.client.models.Shared; import art.library.model.devices.Device; import art.library.model.devices.DeviceAlarms.MyAlarm; import art.library.model.devices.DeviceCommands; import art.library.model.devices.DeviceGraphicsRuntime; import art.library.model.devices.DeviceStatus; import art.library.model.devices.signalsboard.SignalsBoard; import art.library.model.devices.signalsboard.SignalsBoardAlarms; import art.library.model.devices.signalsboard.SignalsBoardStatus; import art.library.model.devices.signalsboard.status.SignalStatus; import art.library.utils.common.DateUtils; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGElement; import java.text.DecimalFormat; import java.util.HashMap; public class MyDeviceGraphicsRuntime_RIELLO_POWER extends DeviceGraphicsRuntime { private boolean initialisedStatus = false; private DecimalFormat formatter1 = new DecimalFormat("###,###.##"); public MyDeviceGraphicsRuntime_RIELLO_POWER(SVGDiagram diagram) { super(diagram); } public MyDeviceGraphicsRuntime_RIELLO_POWER(Device device, SVGDiagram diagram) { super(device, diagram); } public MyDeviceGraphicsRuntime_RIELLO_POWER(Device device, DeviceCommands commands, SVGDiagram diagram) { super(device, commands, diagram); } private int position = 0; public void timer() { position = (position + 1) % 2; } public void status() { try { if (initialisedStatus == false) { for (SVGElement element : getElementsContainingField("art.translate")) { setText(element, Shared.getMessage(getText(element))); } initialisedStatus = true; } SignalsBoard device = (art.library.model.devices.signalsboard.SignalsBoard) getDevice(); SignalsBoardStatus status = device.getDeviceStatus(); SignalsBoardAlarms alarms = device.getDeviceAlarms(); switch (status.status) { case DeviceStatus.STATUS_ONLINE: case DeviceStatus.STATUS_WARNING: case DeviceStatus.STATUS_ALARM: case DeviceStatus.STATUS_SIMULATION: { for (SVGElement element : getElementsContainingField("art.device.signal")) { String deviceIdentifier = getAttribute(element, "art.device"); String signalName = getAttribute(element, "art.device.signal"); SignalStatus signal = status.getSignal(signalName); if ((signal == null) && (deviceIdentifier.equalsIgnoreCase(device.getIdentifier()))) { specialSignals(signalName, element, status, alarms); } if ((signal != null) && (deviceIdentifier.equalsIgnoreCase(device.getIdentifier()))) { switch (signal.format) { case SignalStatus.FORMAT_DURATION: setText(element, DateUtils.getTimeddHHMMSS(Long.parseLong(signal.value))); break; case SignalStatus.FORMAT_LONG: setText(element, formatter1.format(Long.parseLong(signal.value))); break; case SignalStatus.FORMAT_DOUBLE: setText(element, formatter1.format(Double.parseDouble(signal.value))); break; case SignalStatus.FORMAT_BOOLEAN: if (signal.value.equalsIgnoreCase("true")) { setText(element, Shared.getMessage("Yes")); } setText(element, Shared.getMessage("No")); break; default: setText(element, Shared.getMessage(signal.value)); break; } } } HashMap existingAlarms = new HashMap(); for (MyAlarm alarm : alarms.getAlarms()) { SVGElement element = getElement(alarm.name); if (element != null) { if(existingAlarms.containsKey(alarm.name)) { if(alarm.timestamp > 0) existingAlarms.put(alarm.name, true); } else { existingAlarms.put(alarm.name, alarm.timestamp > 0); } SVGElement unknown = element.getChild(0); setAttribute(unknown, "display", "none"); SVGElement ko = element.getChild(1); SVGElement ok = element.getChild(2); if (!existingAlarms.get(alarm.name)) { getElementsContainingField(alarm.name.replace(" ", "") + "ok").forEach(el -> setAttribute(el, "display", "inline", 999)); getElementsContainingField(alarm.name.replace(" ", "") + "ko").forEach(el -> setAttribute(el, "display", "none", 999)); } else { getElementsContainingField(alarm.name.replace(" ", "") + "ko").forEach(el -> setAttribute(el, "display", "inline", 999)); getElementsContainingField(alarm.name.replace(" ", "") + "ok").forEach(el -> setAttribute(el, "display", "none", 999)); } } } } break; default: { for (SVGElement element : getElementsContainingField("art.device.signal")) { String deviceIdentifier = getAttribute(element, "art.device"); String signalName = getAttribute(element, "art.device.signal"); SignalStatus signal = status.getSignal(signalName); if ((signal == null) && (deviceIdentifier.equalsIgnoreCase(device.getIdentifier()))) { specialSignals(signalName, element, status, alarms); } if ((signal != null) && (deviceIdentifier.equalsIgnoreCase(device.getIdentifier()))) { setText(element, ""); } } for (MyAlarm alarm : alarms.getAlarms()) { SVGElement element = getElement(alarm.name); if (element != null) { SVGElement unknown = element.getChild(0); SVGElement ko = element.getChild(1); SVGElement ok = element.getChild(2); setAttribute(unknown, "display", "inline"); setAttribute(ko, "display", "none"); setAttribute(ok, "display", "none"); } } } break; } } catch (Exception e) { } } private void specialSignals(String signalName, SVGElement element, SignalsBoardStatus status, SignalsBoardAlarms alarms) { switch (status.status) { case DeviceStatus.STATUS_ONLINE: case DeviceStatus.STATUS_WARNING: case DeviceStatus.STATUS_ALARM: case DeviceStatus.STATUS_SIMULATION: { if (signalName.equalsIgnoreCase("Company to UPS") == true) { if (Long.parseLong(status.getSignal("Input voltage L1").value) > 0) { setAttribute(element, "fill", "#00E000"); } else { setAttribute(element, "fill", "#E0E0E0"); } } else if (signalName.equalsIgnoreCase("Company bypass UPS") == true) { if (alarms.getAlarm("Alarm on bypass") > 0) { if (Long.parseLong(status.getSignal("Input voltage L1").value) > 0) { setAttribute(element, "fill", "#00E000"); } else { setAttribute(element, "fill", "#800000"); } } else { setAttribute(element, "fill", "#E0E0E0"); } } else if (signalName.equalsIgnoreCase("Battery to UPS") == true) { if (alarms.getAlarm("Alarm on battery") > 0) { if ((alarms.getAlarm("Alarm battery bad") > 0) || (alarms.getAlarm("Alarm on battery") > 0)) { setAttribute(element, "fill", "#E00000"); } else if ((alarms.getAlarm("Alarm low battery") > 0) || (alarms.getAlarm("Alarm shutdown inminent") > 0)) { setAttribute(element, "fill", "#E0E000"); } else { setAttribute(element, "fill", "#00E000"); } } else { setAttribute(element, "fill", "#E0E0E0"); } } else if (signalName.equalsIgnoreCase("UPS to output") == true) { if (Long.parseLong(status.getSignal("Output load L1").value) > 0) { setAttribute(element, "fill", "#00E000"); } else { setAttribute(element, "fill", "#E0E0E0"); } } } break; default: { setAttribute(element, "fill", "#E000E0"); } break; } } }