From f1cb4443aede6d4657bdc3396c8914d3a9f4fa93 Mon Sep 17 00:00:00 2001
From: Alejandro Acuña <alejandro.acuna@aluvisagrupo.com>
Date: Mon, 11 Nov 2024 13:09:35 +0000
Subject: [PATCH] bck
---
svgDevicesTest/maps/VigicatCUC.java | 245 +++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 218 insertions(+), 27 deletions(-)
diff --git a/svgDevicesTest/maps/VigicatCUC.java b/svgDevicesTest/maps/VigicatCUC.java
index c3be5d8..52ea6f9 100644
--- a/svgDevicesTest/maps/VigicatCUC.java
+++ b/svgDevicesTest/maps/VigicatCUC.java
@@ -7,19 +7,20 @@
import art.library.model.devices.signalsboard.SignalsBoard;
import art.library.model.devices.signalsboard.status.SignalStatus;
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.lang.reflect.Method;
-import java.util.*;
import java.math.BigDecimal;
+import java.util.*;
import java.util.stream.Stream;
public class VigicatCUC extends DeviceGraphicsRuntime
{
- private static final double rowWidth = 6;
-
+
+ private double rowHeightBetweenLines = 20;
private final HashMap<SVGElement,Runnable> mapRunnableElements = new HashMap();
private final HashMap<SVGElement, double[]> mapTopCoordinates = new HashMap();
@@ -30,8 +31,9 @@
super(diagram);
}
- public void status()
- {
+ public void status(){
+
+ getElementsContainingField("art.loadglobalinfo").stream().forEach(this::loadGlobalInfo);
getElementsContainingField("art.device").stream().forEach(this::refreshElement);
getElementsContainingField("art.signal").stream().forEach(this::refreshElement);
getElementsContainingField("art.signal.etd").stream().forEach(this::updateEtdNode);
@@ -63,18 +65,121 @@
} catch (Exception e){}
}
- //<editor-fold defaultstate="collapsed" desc="ASF">
- public void status(Asf svgDevice, SVGElement element)
- {
- DeviceStatus status = svgDevice.getDeviceStatus();
+ public void status(Asf svgDevice, SVGElement element) {
+ AsfStatus status = svgDevice.getDeviceStatus();
SVGElement background = getChildContainingField(element, "art.id", "Background");
SVGElement border = getChildContainingField(element, "art.id", "Border");
+ SVGElement alarm = getChildContainingField(element, "art.id", "Alarm");
+ SVGElement arrow = getChildContainingField(element, "art.id", "Arrow");
+ SVGElement cross = getChildContainingField(element, "art.id", "Cross");
+ SVGElement right = getChildContainingField(element, "art.id", "Right");
+ SVGElement left = getChildContainingField(element, "art.id", "Left");
+ SVGElement textBUS = getChildContainingField(element, "art.id", "textBUS");
+ SVGElement left_lane_closed = getChildContainingField(element, "art.id", "left-lane-closed");
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
+
+ setAttribute(alarm, "display", "none", 999);
+ setAttribute(arrow, "display", "none", 999);
+ setAttribute(cross, "display", "none", 999);
+ setAttribute(right, "display", "none", 999);
+ setAttribute(left, "display", "none", 999);
+ setAttribute(textBUS, "display", "none", 999);
+
+ if (left_lane_closed != null)
+ setAttribute(left_lane_closed, "display", "none", 999);
+
+ boolean knownStatus = status.status != DeviceStatus.STATUS_OFFLINE && status.status != DeviceStatus.STATUS_UNKNOWN;
+
+ if (knownStatus) {
+ setAttribute(arrow, "display", status.state == AsfStatus.STATE_ARROW ? "inline" : "none", 999);
+ setAttribute(cross, "display", status.state == AsfStatus.STATE_CROSS ? "inline" : "none", 999);
+ setAttribute(right, "display", status.state == AsfStatus.STATE_RIGHT ? "inline" : "none", 999);
+ setAttribute(left, "display", status.state == AsfStatus.STATE_LEFT ? "inline" : "none", 999);
+ setAttribute(textBUS, "display", status.state == AsfStatus.STATE_BUS ? "inline" : "none", 999);
+
+ if(status.state == AsfStatus.STATE_S52_LEFT && left_lane_closed != null)
+ setAttribute(left_lane_closed, "display", "inline", 999);
+ }
+
+ String colorBackground = "#000000";
+ String colorAlarm = "#000000";
+
+ switch (status.status){
+ case DeviceStatus.STATUS_ALARM:
+ colorAlarm = "#FF0000";
+ break;
+ case DeviceStatus.STATUS_OFFLINE:
+ case DeviceStatus.STATUS_UNKNOWN:
+ colorBackground = "#FF00FF";
+ colorAlarm = "#800080";
+ break;
+ }
+
+ setAttribute(border, "stroke", colorAlarm, 999);
+ setAttribute(background, "fill", colorBackground, 999);
+
}
//</editor-fold>
+
+ //<editor-fold defaultstate="collapsed" desc="ASF">
+ /* public void status(Asf svgDevice, SVGElement element) throws Exception{
+ AsfStatus status = svgDevice.getDeviceStatus();
+
+ SVGElement alarm = getChildContainingField(element, "art.id", "Alarm");
+ SVGElement border = getChildContainingField(element, "art.id", "Border");
+ SVGElement background = getChildContainingField(element, "art.id", "Background");
+ SVGElement arrow = getChildContainingField(element, "art.id", "Arrow");
+ SVGElement cross = getChildContainingField(element, "art.id", "Cross");
+ SVGElement right = getChildContainingField(element, "art.id", "Right");
+ SVGElement left = getChildContainingField(element, "art.id", "Left");
+ SVGElement textBUS = getChildContainingField(element, "art.id", "textBUS");
+ SVGElement left_lane_closed = getChildContainingField(element, "art.id", "left-lane-closed");
+
+ setAttribute(alarm, "display", "none", 999);
+ setAttribute(arrow, "display", "none", 999);
+ setAttribute(cross, "display", "none", 999);
+ setAttribute(right, "display", "none", 999);
+ setAttribute(left, "display", "none", 999);
+ setAttribute(textBUS, "display", "none", 999);
+
+ if(left_lane_closed != null)
+ setAttribute(left_lane_closed, "display", "none", 999);
+
+ boolean knownStatus = status.status != DeviceStatus.STATUS_OFFLINE && status.status != DeviceStatus.STATUS_UNKNOWN;
+
+ if (knownStatus) {
+ setAttribute(arrow, "display", status.state == AsfStatus.STATE_ARROW ? "inline" : "none", 999);
+ setAttribute(cross, "display", status.state == AsfStatus.STATE_CROSS ? "inline" : "none", 999);
+ setAttribute(right, "display", status.state == AsfStatus.STATE_RIGHT ? "inline" : "none", 999);
+ setAttribute(left, "display", status.state == AsfStatus.STATE_LEFT ? "inline" : "none", 999);
+ setAttribute(textBUS, "display", status.state == AsfStatus.STATE_BUS ? "inline" : "none", 999);
+
+ if(status.state == AsfStatus.STATE_S52_LEFT && left_lane_closed != null)
+ setAttribute(left_lane_closed, "display", "inline", 999);
+ }
+
+ String colorBackground = "#000000";
+ String colorAlarm = "#000000";
+
+ switch (status.status){
+ case DeviceStatus.STATUS_ALARM:
+ colorAlarm = "#FF0000";
+ break;
+ case DeviceStatus.STATUS_OFFLINE:
+ case DeviceStatus.STATUS_UNKNOWN:
+ colorBackground = "#FFFFFF";
+ colorAlarm = "#800080";
+ break;
+ }
+
+ setAttribute(border, "stroke", colorAlarm, 999);
+ setAttribute(background, "fill", colorBackground, 999);
+
+ }*/
+//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="SignalBoard">
public void status(SignalsBoard svgDevice, SVGElement element)
@@ -86,7 +191,7 @@
boolean hasAlarm = svgDevice.getAlarm(signal.name) > 0;
setText(element, signalValueNumber.intValue() + "");
- setAttribute(element, "fill", hasAlarm ? "#db3939" : "#78e678", 999);
+ setAttribute(element, "fill", hasAlarm ? "#db3939" : "#000000", 999);
setAttribute(element, "fill-opacity", 1, 999);
}
//</editor-fold>
@@ -155,22 +260,106 @@
private void updateSpeedColumn(SVGElement element)
{
try
- {
+ {
+
Pvv svgDevice = (Pvv) Shared.model.modelDevices.getDevice(getAttribute(element, "art.device"));
-
- if (!mapTopCoordinates.containsKey(element))
+ SignalsBoard signalsBoard = (SignalsBoard) Shared.model.modelDevices.getDevice(getAttribute(element, "art.algorithm"));
+
+ if (signalsBoard != null)
+ {
+ SignalStatus signal = signalsBoard.getDeviceStatus().getSignal(getAttribute(element, "art.signal"));
+ SignalStatus signalAlgorithmState = signalsBoard.getDeviceStatus().getSignalInput("state-algorithm-dynamic");
+ if (signalAlgorithmState.value == null) signalAlgorithmState.value = "false";
+ boolean algorithmState = Boolean.parseBoolean(signalAlgorithmState.value);
+ if (signal != null)
+ {
+ boolean automatico = Boolean.parseBoolean(signal.value);
+ setAttribute(element, "fill", (automatico && algorithmState) ? "#e6d69040" : "#e0893351"); //si se fija la velocidad
+ }
+ }
+
+ if (!mapTopCoordinates.containsKey(element))
+ {
+ mapTopCoordinates.put(element, new double[]{element.getPresAbsolute("y").getDoubleValue() + rowHeightBetweenLines, element.getPresAbsolute("height").getDoubleValue()});
+ }
+
+ double baseY = mapTopCoordinates.get(element)[0];
+
+ final int speed = svgDevice.getDeviceStatus().speed;
+ final double verticalOffset = getVerticalOffset(element, speed);
+
+
+ Optional<SVGElement> lineElement1 = getElementsContainingField("art.speed.line").stream()
+ .filter(val -> getAttribute(val, "art.signal").replace("-maximum-speed", "").equalsIgnoreCase(svgDevice.getIdentifier()))
+ .findAny();
+
+ String nominalSpeed = "";
+
+ if(lineElement1.isPresent())
+ {
+ SignalStatus signal = signalsBoard.getDeviceStatus().getSignal(getAttribute(lineElement1.get(), "art.signal"));
+ nominalSpeed = signal.value;
+ if (signal != null)
+ {
+ try
+ {
+ setAttribute(lineElement1.get(), "y1", getVerticalOffset(element, Integer.parseInt(signal.value)));
+ setAttribute(lineElement1.get(), "y2", getVerticalOffset(element, Integer.parseInt(signal.value)));
+ setAttribute(lineElement1.get(), "stroke", "#646a73");
+
+ update(lineElement1.get());
+ }
+ catch (Exception ex){}
+ }
+ }
+
+ Optional<SVGElement> lineElement2 = getElementsContainingField("art.speed.line").stream()
+ .filter(val -> getAttribute(val, "art.signal").replace("-nominal-speed", "").equalsIgnoreCase(svgDevice.getIdentifier()))
+ .findAny();
+
+ if(lineElement2.isPresent())
+ {
+ SignalStatus signal = signalsBoard.getDeviceStatus().getSignal(getAttribute(lineElement2.get(), "art.signal"));
+
+ if (signal != null)
+ {
+ try
+ {
+ setAttribute(lineElement2.get(), "y1", getVerticalOffset(element, Integer.parseInt(signal.value)));
+ setAttribute(lineElement2.get(), "y2", getVerticalOffset(element, Integer.parseInt(signal.value)));
+ setAttribute(lineElement2.get(), "stroke", "#646a73");
+
+ if(signal.value != null && signal.value.equals(nominalSpeed) == false)
+ {
+ setAttribute(lineElement1.get(), "stroke", "#fa0000");
+ }
+
+ update(lineElement2.get());
+ }
+ catch (Exception ex){}
+ }
+ }
+
+ setAttribute(element, "height", Math.abs(baseY - verticalOffset));
+ setAttribute(element, "y", verticalOffset);
+ update(element);
+ }
+ catch (Exception ex)
{
- mapTopCoordinates.put(element, new double[]{element.getPresAbsolute("y").getDoubleValue() + rowWidth, element.getPresAbsolute("height").getDoubleValue()});
}
-
- double baseY = mapTopCoordinates.get(element)[0];
-
- final int speed = svgDevice.getDeviceStatus().speed;
- final double verticalOffset = getVerticalOffset(element, speed);
-
- setAttribute(element, "height", Math.abs(baseY - verticalOffset));
- setAttribute(element, "y", verticalOffset);
- update(element);
+
+ }
+
+ private void loadGlobalInfo(SVGElement element)
+ {
+ try
+ {
+
+ if("LineSpeedInfo".equals(getAttribute(element, "art.loadglobalinfo")))
+ {
+ rowHeightBetweenLines = Double.parseDouble(getAttribute(element, "art.heightbetweenlines"));
+ }
+
} catch (Exception ex)
{
}
@@ -178,6 +367,8 @@
}
//</editor-fold>
+
+
//<editor-fold defaultstate="collapsed" desc="Etd's">
private void updateEtdNode(SVGElement element)
{
@@ -234,15 +425,15 @@
{
final double baseValue = mapTopCoordinates.get(element)[0];
- return baseValue - (rowWidth * (value / 10));
+ return baseValue - (rowHeightBetweenLines * (value / 10));
}
private void updateNodeLinePosition(SVGElement element)
{
try
{
- String startNodeID = getAttribute(element, "art.node.start");
- String endNodeID = getAttribute(element, "art.node.end");
+ String startNodeID = getAttribute(element, "art.node.start");
+ String endNodeID = getAttribute(element, "art.node.end");
if (startNodeID != null && endNodeID != null)
{
@@ -322,4 +513,4 @@
-}
+}
\ No newline at end of file
--
Gitblit v1.10.0