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.colors.controller.M.realtime.M_ControllerRealtimeGroup; import art.library.model.devices.signalsboard.SignalsBoard; import art.library.model.devices.signalsboard.SignalsBoardStatus; import art.library.model.devices.signalsboard.status.SignalStatus; import com.kitfox.svg.*; import java.text.DecimalFormat; public class LUENGO_TRAFFIC extends DeviceGraphicsRuntime { public LUENGO_TRAFFIC (Device device ,SVGDiagram diagram) { super(device, diagram); } public void status() { SignalsBoard device = (art.library.model.devices.signalsboard.SignalsBoard) getDevice(); SignalsBoardStatus status = device.getDeviceStatus(); switch (status.status) { case DeviceStatus.STATUS_ONLINE: case DeviceStatus.STATUS_WARNING: case DeviceStatus.STATUS_ALARM: case DeviceStatus.STATUS_SIMULATION: { try { getElementsContainingField("art.translate").forEach(this::translate); getElementsContainingField("art.queue.signal").forEach(this::processQueueSignal); getElementsContainingField("art.time.signal").forEach(this::processTimeSignal); getElementsContainingField("art.detector.signal").forEach(this::processTableDetectorSignal); getElementsContainingField("art.signal").forEach(this::processColorSignal); getElementsContainingField("art.table.group").forEach(this::processTextGroup); } catch (Exception ex){} } break; default: break; } } private void translate(SVGElement element) { try { setText(element, Shared.getMessage(getText(element))); } catch(Exception ex){} } private void processTableDetectorSignal(SVGElement element) { try { SignalsBoard device = (art.library.model.devices.signalsboard.SignalsBoard) getDevice(); SignalsBoardStatus status = device.getDeviceStatus(); SignalStatus signal = status.getSignal(getAttribute(element, "art.detector.signal")); if (signal != null) { switch (signal.format) { case SignalStatus.FORMAT_DURATION: setText(element, getTimeddHHMMSS(Long.valueOf(signal.value))); break; default: setText(element, signal.value + Shared.getMessage(signal.units).replace("veh", "")); } } } catch (Exception ex) { } } private void processQueueSignal(SVGElement element) { try { SignalsBoard device = (art.library.model.devices.signalsboard.SignalsBoard) getDevice(); SignalsBoardStatus status = device.getDeviceStatus(); SignalStatus signal = status.getSignal(getAttribute(element, "art.queue.signal")); boolean showElement = false; if (signal != null) { showElement = "true".equals(signal.value); } setAttribute(element, "fill", showElement ? "#FF0000" : "#C8C8C8", 999); setAttribute(element, "fill-opacity", showElement ? 1 : 0.5, 999); } catch (Exception ex){} } private void processColorSignal(SVGElement element) { SignalsBoard device = (art.library.model.devices.signalsboard.SignalsBoard) getDevice(); SignalsBoardStatus status = device.getDeviceStatus(); SignalStatus signal = status.getSignal(getAttribute(element, "art.signal")); boolean displayElement = false; if (signal != null) { try { long signalColor = Long.valueOf(signal.value); String elementType = getAttribute(element, "art.type"); if ("go".equals(elementType) && (signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN || signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_YELLOW || signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_FLAHING_YELLOW)) { displayElement = true; if (signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN) { setAttribute(element, "fill", "#00FF00", 999); } else if (signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_YELLOW) { setAttribute(element, "fill", "#e6e600", 999); } else if (signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_FLAHING_YELLOW) { setAttribute(element, "fill", "#e6e600", 999); displayElement = (position == 0); } } else if ("stop".equals(elementType) && signalColor == M_ControllerRealtimeGroup.M_GROUP_COLOR_RED) { displayElement = true; } } catch (Exception ex) { } } setAttribute(element, "display", displayElement ? "inline" : "none", 999); } private void processTimeSignal(SVGElement element) { try { SignalsBoard device = (art.library.model.devices.signalsboard.SignalsBoard) getDevice(); SignalsBoardStatus status = device.getDeviceStatus(); SignalStatus signal = status.getSignal(getAttribute(element, "art.time.signal")); setText(element, signal.value); } catch(Exception ex){} } private void processTextGroup(SVGElement element) { try { setText(element, getAttribute(element, "art.table.group")); } catch(Exception ex){} } private DecimalFormat formato2 = new DecimalFormat("00"); private String getTimeddHHMMSS(long timestamp) { if (timestamp < 0) { return ""; } long difference = timestamp; int dias = (int) (difference / 86400000L); int horas = (int) ((difference - (dias * 86400000L)) / 3600000L); int minutos = (int) ((difference - (dias * 86400000L) - (horas * 3600000L)) / 60000L); int segundos = (int) ((difference - (dias * 86400000L) - (horas * 3600000L) - (minutos * 60000L)) / 1000L); String result = ""; if (dias > 0) { result = result + dias + " " + "d" + " "; } result = result + formato2.format(horas) + ":"; result = result + formato2.format(minutos) + ":"; result = result + formato2.format(segundos); return result.trim(); } private int position = 0; public void timer() { position = (position + 1) % 2; } }