From e68f1da78bc96da5410d19e0486446917d263fc6 Mon Sep 17 00:00:00 2001
From: Alejandro Acuña <alejandro.acuna@aluvisagrupo.com>
Date: Mon, 07 Oct 2024 06:39:12 +0000
Subject: [PATCH] bacl

---
 .gitignore                                                                  |    1 
 svgDevicesTest/src/Rtz/mockers/RtzMockerMap.java                            |    2 
 servers/rtzserver/data/art.servers.rtzserver/symbols/22/Controller.svg      |  476 +++++++++++++++++++
 svgDevicesTest/src/Rtz/mockers/RtzMockerMapComplex.java                     |   68 --
 svgDevicesTest/src/AAAMain/SvgDeviceStatusTest.java                         |    2 
 svgDevicesTest/src/Rtz/RtzMapComplex.java                                   |  307 ++++++------
 servers/gost-access-server/art.servers.gost-access-server.accesses-VPV.json |  553 +++++++++++++++-------
 7 files changed, 996 insertions(+), 413 deletions(-)

diff --git a/.gitignore b/.gitignore
index b80539f..622c487 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,4 @@
 *.png
 servers/gost-access-server/data/art.servers.gost-access-server/atex5/
 servers/gost-access-server/manifest.mf
+servers/gost-access-server - copia/
diff --git a/servers/gost-access-server/art.servers.gost-access-server.accesses-VPV.json b/servers/gost-access-server/art.servers.gost-access-server.accesses-VPV.json
index 9ea4b65..5da0491 100644
--- a/servers/gost-access-server/art.servers.gost-access-server.accesses-VPV.json
+++ b/servers/gost-access-server/art.servers.gost-access-server.accesses-VPV.json
@@ -21,18 +21,28 @@
           "Polling": 60,
           "Type" : "VPV",
           "Installation" : "VPV",
-
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS1/",
-              "VPVs":[
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-                  "VPV8",
-                  "VPV9"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV8",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 51,
+                    "Place information": "ENTRE PORTICO DE SAN ANDRES Y CALLE SOL"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV9",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 51,
+                    "Place information": "ENTRE PORTICO SAN ANDRES Y CALLE ALTA"
+                }
               ]
           },
       
@@ -68,21 +78,30 @@
           "Polling": 60,
           "Type" : "VPV",
           "Installation" : "VPV",
-
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS2/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV10",
-                  "VPV11"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV10",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 72,
+                    "Place information": "ENTRE CALLE ALTA Y PORTICO DE SAN ANDRES"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV11",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 72,
+                    "Place information": "ENTRE CALLE ALTA Y CALLE SANTA CATALINA"
+                }
               ]
           },
-      
           "Storage" :
           {
               "Storage password" : "XkTk/lXBBmtDivSxv5OvPQ==",
@@ -119,14 +138,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS3/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV12",
-                  "VPV13"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV12",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 147,
+                    "Place information": "ENTRE CALLE HUERTAS Y CALLE SANTA CATALINA"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV13",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 147,
+                    "Place information": "ENTRE CALLE HUERTAS Y CALLE JUANA DE VEGA"
+                }
               ]
           },
       
@@ -166,14 +196,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS4/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV14",
-                  "VPV15"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV14",
+                    "Street code": 515,
+                    "Street acronyms": "PLAZA",
+                    "Street name": "PONTEVEDRA",
+                    "Street number": 8,
+                    "Place information": "ENTRE CALLE PAYO GOMEZ Y CALLE JUANA DE VEGA"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV15",
+                    "Street code": 515,
+                    "Street acronyms": "PLAZA",
+                    "Street name": "PONTEVEDRA",
+                    "Street number": 8,
+                    "Place information": "ENTRE CALLE PAYO GOMEZ Y CALLE FRANCISCO MARIÑO"
+                }
               ]
           },
       
@@ -213,14 +254,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS5/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV17",
-                  "VPV18"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV17",
+                    "Street code": 380,
+                    "Street acronyms": "CALLE",
+                    "Street name": "MEDICO RODRIGUEZ",
+                    "Street number": 7,
+                    "Place information": "ENTRE CALLE DOANATES DE SANGRE Y CALLE JUAN FLOREZ"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV18",
+                    "Street code": 380,
+                    "Street acronyms": "CALLE",
+                    "Street name": "MEDICO RODRIGUEZ",
+                    "Street number": 7,
+                    "Place information": "ENTRE CALLE DOANATES DE SANGRE Y AVENIDA FISTERRA"
+                }
               ]
           },
       
@@ -260,14 +312,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS6/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV19",
-                  "VPV20"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV19",
+                    "Street code": 238,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FERNANDO MACIAS",
+                    "Street number": 10,
+                    "Place information": "ENTRE PLAZA DE MAESTRO MATEO Y AVENIDA DE FINISTERRE"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV20",
+                    "Street code": 238,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FERNANDO MACIAS",
+                    "Street number": 10,
+                    "Place information": "ENTRE PLAZA DE MAESTRO MATEO Y CALLE CALVO SOTELO"
+                }
               ]
           },
       
@@ -307,17 +370,27 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS7/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV23",
-                  "VPV24"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV23",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 44,
+                    "Place information": "ENTRE CALLE SINFONICA DE GALICIA Y MEDICO RODRIGUEZ"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV24",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 44,
+                    "Place information": "ENTRE CALLE SINFONICA DE GALICIA Y AVENIDA DE ARTEIXO"
+                }
               ]
           },
-      
           "Storage" :
           {
               "Storage password" : "XkTk/lXBBmtDivSxv5OvPQ==",
@@ -350,18 +423,28 @@
           "Polling": 60,
           "Type" : "VPV",
           "Installation" : "VPV",
-
           "VPV":
           {
-              "Path": "/var/shares/fotosVPV/BUS8/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV25",
-                  "VPV26"
+            "Path": "/var/shares/fotosVPV/BUS8/",
+             "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV25",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 62,
+                    "Place information": "ENTRE AVEDIDA DE ARTEIXO Y CALLE SINFONICA DE GALICIA"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV26",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 62,
+                    "Place information": "ENTRE AVEDIDA DE ARTEIXO Y CALLE MENENDEZ Y PELAYO"
+                }
               ]
           },
       
@@ -401,14 +484,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS9/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV27",
-                  "VPV28"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV27",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 86,
+                    "Place information": "ENTRE CALLE NICARAGUA Y CALLE MENENDEZ Y PELAYO"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV28",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 86,
+                    "Place information": "ENTRE CALLE NICARAGUA Y PASADIZO PERNAS"
+                }
               ]
           },
       
@@ -448,14 +542,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS10/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV29",
-                  "VPV30"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV29",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 110,
+                    "Place information": "ENTRE CALLE VILLAR PONTE Y CALLE NICARAGUA"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV30",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 110,
+                    "Place information": "ENTRE CALLE VILLAR PONTE Y CALLE POZO"
+                }
               ]
           },
       
@@ -495,13 +600,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS11/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV16"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV16",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 2,
+                    "Place information": "ENTRE PLAZA PONTEVEDRA Y CALLE MEDICO RODRIGUEZ"
+                }
               ]
           },
       
@@ -541,13 +649,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS12/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV21"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV21",
+                    "Street code": 238,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FERNANDO MACIAS",
+                    "Street number": 30,
+                    "Place information": "ENTRE CALLE CALVO SOTELO Y PLAZA  DE MAESTRO MATEO"
+                }
               ]
           },
       
@@ -586,14 +697,17 @@
 
           "VPV":
           {
-              "Path": "/var/shares/fotosVPV/BUS13/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV22"
+            "Path": "/var/shares/fotosVPV/BUS13/",
+            "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV22",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 148,
+                    "Place information": "ENTRE TRAVESIA MONTE Y ESCALINATA MAESTRO CLAVE"
+                }
               ]
           },
       
@@ -633,13 +747,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS14/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV31"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV31",
+                    "Street code": 322,
+                    "Street acronyms": "CALLE",
+                    "Street name": "JUAN FLOREZ",
+                    "Street number": 16,
+                    "Place information": "ENTRE CALLE MEDICO RODRIGUEZ Y CALLE CALLE FERROL"
+                }
               ]
           },
       
@@ -679,13 +796,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS15/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV32"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV32",
+                    "Street code": 450,
+                    "Street acronyms": "RONDA",
+                    "Street name": "OUTEIRO",
+                    "Street number": 164,
+                    "Place information": "ENTRE AVENIDA DE ARTEIXO Y CALLE NUESTRA SEÑORA DE FATIMA"
+                }
               ]
           },
       
@@ -725,14 +845,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS16/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV33",
-                  "VPV34"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV33",
+                    "Street code": 450,
+                    "Street acronyms": "RONDA",
+                    "Street name": "OUTEIRO",
+                    "Street number": 178,
+                    "Place information": "ENTRE CALLE NUESTRA SEÑORA DE FATIMA Y AVENIDA DE ARTEIXO"
+                },
+                {
+                    "Type": 1,
+                    "Identifier": "VPV34",
+                    "Street code": 450,
+                    "Street acronyms": "RONDA",
+                    "Street name": "OUTEIRO",
+                    "Street number": 178,
+                    "Place information": "ENTRE CALLE NUESTRA SEÑORA DE FATIMA Y CALLE SAN ISIDORO"
+                }
               ]
           },
       
@@ -772,14 +903,25 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS17/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV35",
-                  "VPV36"
+              "Cameras":[
+                    {
+                        "Type": 1,
+                        "Identifier": "VPV35",
+                        "Street code": 450,
+                        "Street acronyms": "RONDA",
+                        "Street name": "OUTEIRO",
+                        "Street number": 178,
+                        "Place information": "ENTRE CALLE NUESTRA SEÑORA DE FATIMA Y AVENIDA DE ARTEIXO"
+                    },
+                    {
+                        "Type": 1,
+                        "Identifier": "VPV36",
+                        "Street code": 450,
+                        "Street acronyms": "RONDA",
+                        "Street name": "OUTEIRO",
+                        "Street number": 178,
+                        "Place information": "ENTRE CALLE NUESTRA SEÑORA DE FATIMA Y CALLE SAN ISIDORO"
+                    }
               ]
           },
       
@@ -819,13 +961,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS18/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV37"
+              "Cameras":[
+                    {
+                        "Type": 1,
+                        "Identifier": "VPV37",
+                        "Street code": 450,
+                        "Street acronyms": "RONDA",
+                        "Street name": "OUTEIRO",
+                        "Street number": 230,
+                        "Place information": "ENTRE AVENIDA FISTERRA Y CALLE SAN ISIDORO"
+                    }
               ]
           },
       
@@ -865,14 +1010,17 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS19/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV1"
-              ]
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV1",
+                    "Street code": 232,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FEDERICO TAPIA",
+                    "Street number": 61,
+                    "Place information": "ENTRE CALLE RAMON DE LA SAGRA Y CALLE MARCIAL DEL ADALID"
+                }
+          ]
           },
       
           "Storage" :
@@ -911,13 +1059,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS20/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV2"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV2",
+                    "Street code": 232,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FEDERICO TAPIA",
+                    "Street number": 45,
+                    "Place information": "ENTRE CALLE MARCIAL DEL ADALID Y CALLE MENENDEZ Y PELAYO"
+                }
               ]
           },
       
@@ -957,13 +1108,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS21/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV3"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV3",
+                    "Street code": 232,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FEDERICO TAPIA",
+                    "Street number": 31,
+                    "Place information": "ENTRE CALLE MENENDEZ Y PELAYO Y CALLE FONTAN"
+                }
               ]
           },
       
@@ -1002,14 +1156,17 @@
 
           "VPV":
           {
-              "Path": "/var/shares/fotosVPV/BUS22/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV4"
+            "Path": "/var/shares/fotosVPV/BUS22/",
+             "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV4",
+                    "Street code": 232,
+                    "Street acronyms": "CALLE",
+                    "Street name": "FEDERICO TAPIA",
+                    "Street number": 1,
+                    "Place information": "ENTRE CALLE FONTAN Y CALLE FERROL"
+                }
               ]
           },
       
@@ -1054,8 +1211,16 @@
               "Street name": "",
               "Street number": "",
               "Place information": "",
-              "VPVs":[
-                  "VPV5"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV5",
+                    "Street code": 270,
+                    "Street acronyms": "PLAZA",
+                    "Street name": "GALICIA",
+                    "Street number": 2,
+                    "Place information": "ENTRE CALLE FERROL Y CALLE BETANZOS"
+                }
               ]
           },
       
@@ -1095,13 +1260,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS24/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV6"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV6",
+                    "Street code": 575,
+                    "Street acronyms": "CALLE",
+                    "Street name": "ROSALIA DE CASTRO",
+                    "Street number": 14,
+                    "Place information": "ENTRE CALLE BETANZOS Y PLAZA DE PONTEVEDRA"
+                }
               ]
           },
       
@@ -1141,13 +1309,16 @@
           "VPV":
           {
               "Path": "/var/shares/fotosVPV/BUS25/",
-              "Street code": "",
-              "Street acronyms": "",
-              "Street name": "",
-              "Street number": "",
-              "Place information": "",
-              "VPVs":[
-                  "VPV7"
+              "Cameras":[
+                {
+                    "Type": 1,
+                    "Identifier": "VPV7",
+                    "Street code": 593,
+                    "Street acronyms": "CALLE",
+                    "Street name": "SAN ANDRES",
+                    "Street number": 121,
+                    "Place information": "ENTRE CALLE SANTA CATALINA Y CALLE MANTELERIA"
+                }
               ]
           },
       
diff --git a/servers/rtzserver/data/art.servers.rtzserver/symbols/22/Controller.svg b/servers/rtzserver/data/art.servers.rtzserver/symbols/22/Controller.svg
index bb909a0..c9139b8 100644
--- a/servers/rtzserver/data/art.servers.rtzserver/symbols/22/Controller.svg
+++ b/servers/rtzserver/data/art.servers.rtzserver/symbols/22/Controller.svg
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    width="27.331806mm"
    height="36.046158mm"
    viewBox="0 0 27.331806 36.046158"
    version="1.1"
    id="svg1894"
-   inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
-   sodipodi:docname="Controller.svg"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:dc="http://purl.org/dc/elements/1.1/">
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   sodipodi:docname="Controller.svg">
   <defs
      id="defs1888" />
   <sodipodi:namedview
@@ -23,9 +23,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="3.959798"
-     inkscape:cx="-47.855976"
-     inkscape:cy="66.29126"
+     inkscape:zoom="2.8"
+     inkscape:cx="-18.366845"
+     inkscape:cy="133.59352"
      inkscape:document-units="mm"
      inkscape:current-layer="g4133"
      showgrid="false"
@@ -34,7 +34,7 @@
      fit-margin-right="0"
      fit-margin-bottom="0"
      inkscape:window-width="1920"
-     inkscape:window-height="1017"
+     inkscape:window-height="1027"
      inkscape:window-x="-8"
      inkscape:window-y="-8"
      inkscape:window-maximized="1"
@@ -43,7 +43,455 @@
      inkscape:deskcolor="#d1d1d1" />
   <metadata
      id="Metadata"
-     art.script="    public void status()&#10;    {&#10;        try&#10;        {&#10;            statusSubcontroller();&#10;        } catch (Exception e)&#10;        {&#10;        }&#10;    }&#10;&#10;    public void statusSubcontroller()&#10;    {     &#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller controller = (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller) getDevice();&#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus controllerStatus = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus) controller.getDeviceStatus();&#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation controllerInformation = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation) controller.getDeviceInformation();&#10;        art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status subcontrollerStatus = controllerStatus.rtz32;&#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerRealtime subcontrollerRealtime = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerRealtime) device.getDeviceRealtime();&#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration subcontrollerConfiguration = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration) device.getDeviceConfiguration();&#10;&#10;        SVGElement emergency = getElement(&quot;Emergency&quot;);&#10;        SVGElement lock = getElement(&quot;Lock&quot;);&#10;        SVGElement run = getElement(&quot;Run&quot;);&#10;        SVGElement remote = getElement(&quot;Remote&quot;);&#10;        SVGElement background = getElement(&quot;Background&quot;);&#10;        SVGElement border = getElement(&quot;Border&quot;);&#10;        SVGElement ribbon = getElement(&quot;Ribbon&quot;);&#10;        SVGElement elapsed1 = getElement(&quot;Elapsed1&quot;);&#10;        SVGElement elapsed2 = getElement(&quot;Elapsed2&quot;);&#10;        setAttribute(emergency, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(lock, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(run, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(remote, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(emergency, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(lock, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(run, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(remote, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setText(&quot;Text number&quot;, String.format(&quot;%05d&quot;, controllerInformation.number));&#10;        setText(&quot;Text information&quot;, &quot;&quot;);&#10;        setText(&quot;Text offset&quot;, &quot;&quot;);&#10;        setText(&quot;Text cycle&quot;, &quot;&quot;);&#10;        setText(&quot;Text elapsed&quot;, &quot;&quot;);&#10;&#10;		if (art.client.models.Shared.configuration.general.darkMap == true)&#10;		{&#10;			setAttribute(&quot;Text number&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);&#10;			setAttribute(&quot;Text information&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);&#10;			setAttribute(&quot;Text offset&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);&#10;			setAttribute(&quot;Text cycle&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);&#10;		}&#10;		else&#10;		{&#10;			setAttribute(&quot;Text number&quot;, &quot;fill&quot;, &quot;#000000&quot;);&#10;			setAttribute(&quot;Text information&quot;, &quot;fill&quot;, &quot;#000000&quot;);&#10;			setAttribute(&quot;Text offset&quot;, &quot;fill&quot;, &quot;#000000&quot;);&#10;			setAttribute(&quot;Text cycle&quot;, &quot;fill&quot;, &quot;#000000&quot;);&#10;		}&#10;&#10;        setAttribute(elapsed1, &quot;display&quot;, &quot;none&quot;);&#10;        setAttribute(elapsed2, &quot;display&quot;, &quot;none&quot;);&#10;        setAttribute(border, &quot;stroke&quot;, &quot;#800080&quot;);&#10;        setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;        setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;        setAttribute(border, &quot;stroke-opacity&quot;, 0.75);&#10;        setAttribute(ribbon, &quot;stroke-opacity&quot;, 0.50);&#10;        setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF80FF&quot;);&#10;        setAttribute(background, &quot;fill&quot;, &quot;#FF80FF&quot;);&#10;        &#10;        switch (controllerStatus.status)&#10;        {&#10;            case art.library.model.devices.DeviceStatus.STATUS_ONLINE:&#10;                break;&#10;            case art.library.model.devices.DeviceStatus.STATUS_WARNING:&#10;                break;&#10;            case art.library.model.devices.DeviceStatus.STATUS_ALARM:&#10;&#10;&#10;&#10;&#10;                break;&#10;            case art.library.model.devices.DeviceStatus.STATUS_DISABLE:&#10;                setAttribute(background, &quot;fill&quot;, &quot;#404040&quot;);&#10;                setAttribute(ribbon, &quot;stroke&quot;, &quot;#404040&quot;);&#10;                setAttribute(border, &quot;stroke&quot;, &quot;#808080&quot;);&#10;                setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;                setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;                setAttribute(border, &quot;stroke-opacity&quot;, 1.0);&#10;                setAttribute(emergency, &quot;fill-opacity&quot;, &quot;0.0&quot;, 999);&#10;                setAttribute(lock, &quot;fill-opacity&quot;, &quot;0.0&quot;, 999);&#10;                setAttribute(run, &quot;fill-opacity&quot;, &quot;0.0&quot;, 999);&#10;                setAttribute(remote, &quot;fill-opacity&quot;, &quot;0.0&quot;, 999);&#10;                return;&#10;            case art.library.model.devices.DeviceStatus.STATUS_SIMULATION:&#10;                setAttribute(background, &quot;fill&quot;, &quot;#0000FF&quot;);&#10;                setAttribute(ribbon, &quot;stroke&quot;, &quot;#0000FF&quot;);&#10;                setAttribute(border, &quot;stroke&quot;, &quot;#000080&quot;);&#10;                setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;                setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;                setAttribute(border, &quot;stroke-opacity&quot;, 1.0);&#10;                break;&#10;            case art.library.model.devices.DeviceStatus.STATUS_INVALID:&#10;            case art.library.model.devices.DeviceStatus.STATUS_OFFLINE:&#10;            case art.library.model.devices.DeviceStatus.STATUS_UNKNOWN:&#10;                setAttribute(background, &quot;fill&quot;, &quot;#FF00FF&quot;);&#10;                setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF00FF&quot;);&#10;                setAttribute(border, &quot;stroke&quot;, &quot;#FF00FF&quot;);&#10;                setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;                setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;                setAttribute(border, &quot;stroke-opacity&quot;, 1.0);&#10;                return;&#10;        }&#10;       &#10;        if (subcontrollerStatus.forcings != null&#10;                &amp;&amp; (subcontrollerStatus.forcings.centralized != null&#10;                || subcontrollerStatus.forcings.colorsMode != null&#10;                || subcontrollerStatus.forcings.computerMode != null&#10;                || subcontrollerStatus.forcings.control != null&#10;                || subcontrollerStatus.forcings.plan != null))&#10;        {&#10;            setAttribute(lock, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;            setAttribute(lock, &quot;fill&quot;, &quot;#FF0000&quot;, 999);&#10;        } else&#10;        {&#10;            setAttribute(lock, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);&#10;            setAttribute(lock, &quot;fill&quot;, &quot;#000000&quot;, 999);&#10;        }&#10;         if (subcontrollerStatus.general.emergency == true)&#10;        {&#10;            setAttribute(emergency, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        } else if (subcontrollerStatus.general.emergency == false)&#10;        {&#10;            setAttribute(emergency, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);&#10;            setAttribute(emergency, &quot;fill&quot;, &quot;#000000&quot;, 999);&#10;        }&#10;        &#10;         switch (subcontrollerStatus.general.planMode)&#10;        {&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_ONLINE_ORDERS:&#10;            {&#10;                break;&#10;            }&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_TIMETABLE:&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DELAYED_ORDERS:&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DYNAMIC_SELECTION:&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_FORCED:&#10;            {&#10;                break;&#10;            }&#10;        }&#10;&#10;        setAttribute(&quot;Text information&quot;, &quot;display&quot;, &quot;iniline&quot;, 999);&#10;        setAttribute(&quot;Text offset&quot;, &quot;display&quot;, &quot;iniline&quot;, 999);&#10;        setAttribute(&quot;Text cycle&quot;, &quot;display&quot;, &quot;iniline&quot;, 999);&#10;&#10;        if ((subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_COMPUTER))&#10;        {&#10;            setAttribute(remote, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;            setAttribute(remote, &quot;fill&quot;, &quot;#0000FF&quot;, 999);&#10;        } else &#10;        {&#10;            setAttribute(remote, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);&#10;            setAttribute(remote, &quot;fill&quot;, &quot;#000000&quot;, 999);&#10;        }&#10;        if (subcontrollerRealtime != null &amp;&amp; subcontrollerRealtime.rtz32 != null &amp;&amp; subcontrollerRealtime.rtz32.junctionRealtime == true)&#10;        {&#10;            setAttribute(run, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;            setAttribute(run, &quot;fill&quot;, &quot;#0000FF&quot;, 999);&#10;        } else&#10;        {&#10;            setAttribute(run, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);&#10;            setAttribute(run, &quot;fill&quot;, &quot;#000000&quot;, 999);&#10;        }&#10;        double strokeopacity = Math.pow(2, controller.getDeviceAlarms().getServerityAlarm()) / 32;&#10;        if (controller.getDeviceAlarms().getServerityAlarm() &gt; 0)&#10;        {&#10;            setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;            setAttribute(border, &quot;stroke&quot;, &quot;#FF0000&quot;);&#10;            setAttribute(border, &quot;stroke-opacity&quot;, strokeopacity);&#10;            setAttribute(border, &quot;stroke-width&quot;, 6.5 + (6.5 * strokeopacity));&#10;        } else&#10;        {&#10;            setAttribute(border, &quot;stroke&quot;, &quot;#808080&quot;);&#10;            setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;            setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;            setAttribute(border, &quot;stroke-opacity&quot;, 1.0);&#10;        }&#10;        &#10;        java.util.Calendar calendardate = java.util.Calendar.getInstance();&#10;        calendardate.set(java.util.Calendar.MILLISECOND, 0);&#10;        long seconds = calendardate.getTimeInMillis() / 1000;&#10;        boolean even = seconds % 2 == 0;&#10;&#10;        switch (subcontrollerStatus.general.state)&#10;        {&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_UNKNOWN:&#10;                setAttribute(background, &quot;fill&quot;, &quot;#808080&quot;);&#10;                setAttribute(ribbon, &quot;stroke&quot;, &quot;#808080&quot;);&#10;                setAttribute(elapsed2, &quot;fill&quot;, &quot;#808080&quot;);&#10;                setText(&quot;Text information&quot;, &quot;OFF&quot;);&#10;                return;&#10;          &#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_FLASHING:&#10;                setAttribute(&quot;Text information&quot;, &quot;display&quot;,&quot;none&quot;,999);&#10;                setAttribute(&quot;Text offset&quot;, &quot;display&quot;,&quot;none&quot;,999);&#10;                setAttribute(&quot;Text cycle&quot;, &quot;display&quot;,&quot;none&quot;,999);&#10;&#10;                if (even)&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, &quot;#FFFF00&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#FFFF00&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#FFFF00&quot;);&#10;                } else&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, &quot;#808000&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#808000&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#808000&quot;);&#10;                }&#10;                setText(&quot;Text information&quot;, &quot;Y^&quot;);&#10;                break;&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_STARTUP:&#10;                if (subcontrollerStatus.general.emergency == true)&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, even ? &quot;#FF8000&quot; : &quot;#804000&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, even ? &quot;#FF8000&quot; : &quot;#804000&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, even ? &quot;#FF8000&quot; : &quot;#804000&quot;);&#10;                } else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, even ? &quot;#008000&quot; : &quot;#004000&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, even ?&quot;#008000&quot; : &quot;#004000&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;,even ? &quot;#008000&quot; : &quot;#004000&quot;);&#10;                } else&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, even ? &quot;#00FF00&quot; : &quot;#008000&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, even ? &quot;#00FF00&quot; : &quot;#008000&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, even ? &quot;#00FF00&quot; : &quot;#008000&quot;);&#10;                }&#10;                break;&#10;            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_COLORS:&#10;                if (subcontrollerStatus.general.emergency == true)&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, &quot;#FF8000&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF8000&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#FF8000&quot;);&#10;                } &#10;                else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, &quot;#008000&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#008000&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#008000&quot;);&#10;                } else&#10;                {&#10;                    setAttribute(background, &quot;fill&quot;, &quot;#00FF00&quot;);&#10;                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#00FF00&quot;);&#10;                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#00FF00&quot;);&#10;                }&#10;                break;&#10;        }&#10;        art.library.model.devices.colors.controller.RTZ32.configuration.RTZ32_Configuration_Program plan = null;&#10;        if (subcontrollerStatus.plan != null &amp;&amp; subcontrollerStatus.plan.number &gt; 0)&#10;        {&#10;            try&#10;            {&#10;                plan = subcontrollerConfiguration.rtz32.getProgram(subcontrollerStatus.plan.number);&#10;            } catch (Exception e)&#10;            {&#10;            }&#10;        }&#10;        &#10;        if (plan != null)&#10;        {&#10;        &#10;            String information = &quot;&quot;;&#10;&#10;             if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED)&#10;                information = &quot;C&quot;;&#10;             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER)&#10;                information = &quot;M&quot;;&#10;             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER_SLAVE)&#10;                information = &quot;M-E&quot;;&#10;             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE)&#10;                information = &quot;E&quot;;&#10;             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE_MASTER)&#10;                information = &quot;E-M&quot;;&#10;             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_TROLLEY)&#10;                information = &quot;CTw&quot;;&#10;             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)&#10;                information = &quot;NC&quot;;&#10;             else&#10;                information = &quot;?&quot;;&#10;&#10;            information = information + plan.number;&#10;&#10;            switch (subcontrollerStatus.general.planMode)&#10;            {&#10;                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DELAYED_ORDERS:&#10;                    information = information + &quot;d&quot;;&#10;                    break;&#10;                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DYNAMIC_SELECTION:&#10;                    information = information + &quot;ds&quot;;&#10;                    break;&#10;                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_FORCED:&#10;                    information = information + &quot;f&quot;;&#10;                    break;&#10;                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_ONLINE_ORDERS:&#10;                    information = information + &quot;o&quot;;&#10;                    break;&#10;                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_TIMETABLE:&#10;                    information = information + &quot;t&quot;;&#10;                    break;&#10;            }&#10;            &#10;            setText(&quot;Text information&quot;, information);&#10;            if (plan.offset &gt; 0)&#10;            {&#10;                setText(&quot;Text offset&quot;, &quot;&quot; + plan.offset);&#10;            } else&#10;            {&#10;                setText(&quot;Text offset&quot;, &quot;&quot;);&#10;            }&#10;            setText(&quot;Text cycle&quot;, &quot;&quot; + plan.cycle);&#10;            &#10;            if (subcontrollerRealtime != null)&#10;            {&#10;                try&#10;                {&#10;                    String text = subcontrollerRealtime.rtz32.phase.phaseNumber + &quot;:&quot; + subcontrollerRealtime.rtz32.counters.cycle;&#10;&#10;                    setText(&quot;Text elapsed&quot;, text);&#10;                    setAttribute(elapsed1, &quot;display&quot;, &quot;inline&quot;);&#10;                    setAttribute(elapsed2, &quot;display&quot;, &quot;inline&quot;);&#10;                    int elapsedWidth = getAttributeInteger(elapsed1, &quot;width&quot;) - 2;&#10;                    float ratio = 1;&#10;                    setAttribute(elapsed2, &quot;width&quot;, (elapsedWidth * Math.min(1.0f, ratio)));&#10;                    update(elapsed2);&#10;                } catch (Exception ex)&#10;                {&#10;                }&#10;            }&#10;       &#10;            java.awt.Color bckColor = java.awt.Color.decode(background.getStyleAbsolute(&quot;fill&quot;).getStringValue());&#10;            java.awt.Color darkerColor = bckColor.darker();&#10;            String darkHex = String.format(&quot;#%02x%02x%02x&quot;, darkerColor.darker().getRed(), darkerColor.darker().getGreen(), darkerColor.darker().getBlue());&#10;&#10;            setAttribute(&quot;Text information&quot;, &quot;fill&quot;, darkHex, 999);&#10;            setAttribute(&quot;Text offset&quot;, &quot;fill&quot;, darkHex, 999);&#10;            setAttribute(&quot;Text cycle&quot;, &quot;fill&quot;, darkHex, 999);&#10;&#10;            setAttribute(emergency, &quot;fill&quot;, darkHex, 999);&#10;            setAttribute(lock, &quot;fill&quot;, darkHex, 999);&#10;            setAttribute(run, &quot;fill&quot;, darkHex, 999);&#10;            setAttribute(remote, &quot;fill&quot;, darkHex, 999);&#10;        }&#10;    }&#10;&#10;    public void paintNoStatusAvailable()&#10;    {&#10;        art.library.model.devices.colors.controller.M.M_Controller controller = (art.library.model.devices.colors.controller.M.M_Controller) getDevice();&#10;        SVGElement thunderbolt = getElement(&quot;Thunderbolt&quot;);&#10;        SVGElement emergency = getElement(&quot;Emergency&quot;);&#10;        SVGElement lock = getElement(&quot;Lock&quot;);&#10;        SVGElement calendar = getElement(&quot;Calendar&quot;);&#10;        SVGElement run = getElement(&quot;Run&quot;);&#10;        SVGElement remote = getElement(&quot;Remote&quot;);&#10;        SVGElement background = getElement(&quot;Background&quot;);&#10;        SVGElement border = getElement(&quot;Border&quot;);&#10;        SVGElement ribbon = getElement(&quot;Ribbon&quot;);&#10;        SVGElement elapsed1 = getElement(&quot;Elapsed1&quot;);&#10;        SVGElement elapsed2 = getElement(&quot;Elapsed2&quot;);&#10;        setAttribute(thunderbolt, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(emergency, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(lock, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(calendar, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(run, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(remote, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);&#10;        setAttribute(thunderbolt, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(emergency, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(lock, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(calendar, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(run, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setAttribute(remote, &quot;fill&quot;, &quot;#804080&quot;, 999);&#10;        setText(&quot;Text number&quot;, String.format(&quot;%05d&quot;, controller.getDeviceInformation().number));&#10;        setText(&quot;Text information&quot;, &quot;&quot;);&#10;        setText(&quot;Text offset&quot;, &quot;&quot;);&#10;        setText(&quot;Text cycle&quot;, &quot;&quot;);&#10;        setText(&quot;Text elapsed&quot;, &quot;&quot;);&#10;        setAttribute(elapsed1, &quot;display&quot;, &quot;none&quot;);&#10;        setAttribute(elapsed2, &quot;display&quot;, &quot;none&quot;);&#10;        setAttribute(ribbon, &quot;stroke-opacity&quot;, 0.50);&#10;        setAttribute(background, &quot;fill&quot;, &quot;#FF00FF&quot;);&#10;        setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF00FF&quot;);&#10;        setAttribute(border, &quot;stroke&quot;, &quot;#FF00FF&quot;);&#10;        setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;        setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;        setAttribute(border, &quot;stroke-opacity&quot;, 1.0);&#10;    }&#10;&#10;    public void commands()&#10;    {&#10;        final String colorNoCommandsBorder = &quot;#00007C&quot;;&#10;        final String colorNoCommandsBackground = &quot;#7C7CFA&quot;;&#10;        &#10;        final String colorCommandsBorder = &quot;#007C00&quot;;&#10;        final String colorCommandsBackground = &quot;#7CFA7C&quot;;&#10;        &#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller controller = (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller) getDevice();&#10;        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation controllerInformation = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation) controller.getDeviceInformation();&#10;&#10;        SVGElement background = getElement(&quot;Background&quot;);&#10;        SVGElement border = getElement(&quot;Border&quot;);&#10;        SVGElement ribbon = getElement(&quot;Ribbon&quot;);&#10;&#10;        SVGElement emergency = getElement(&quot;Emergency&quot;);&#10;        SVGElement lock = getElement(&quot;Lock&quot;);&#10;        SVGElement run = getElement(&quot;Run&quot;);&#10;        SVGElement remote = getElement(&quot;Remote&quot;);&#10;&#10;        setAttribute(border, &quot;stroke&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBorder : colorNoCommandsBorder);&#10;        setAttribute(border, &quot;display&quot;, &quot;inline&quot;);&#10;        setAttribute(border, &quot;stroke-width&quot;, 6.5);&#10;        setAttribute(border, &quot;stroke-opacity&quot;, 0.75);&#10;        setAttribute(ribbon, &quot;stroke-opacity&quot;, 0.50);&#10;        setAttribute(ribbon, &quot;stroke&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground);&#10;        setAttribute(background, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground);&#10;&#10;        setAttribute(emergency, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);&#10;        setAttribute(lock, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);&#10;        setAttribute(run, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);&#10;        setAttribute(remote, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);&#10;&#10;        setText(&quot;Text number&quot;, String.format(&quot;%05d&quot;, controllerInformation.number));&#10;        setAttribute(&quot;Text information&quot;, &quot;display&quot;, &quot;none&quot;, 999);&#10;        setAttribute(&quot;Text offset&quot;, &quot;display&quot;, &quot;none&quot;, 999);&#10;        setAttribute(&quot;Text cycle&quot;, &quot;display&quot;, &quot;none&quot;, 999);&#10;        setAttribute(&quot;Text elapsed&quot;, &quot;display&quot;, &quot;none&quot;, 999);&#10;&#10;    }    &#10;">
+     art.script="    public void status()
+    {
+        try
+        {
+            statusSubcontroller();
+        } catch (Exception e)
+        {
+        }
+    }
+
+    public void statusSubcontroller()
+    {     
+        java.util.Calendar calendardate = java.util.Calendar.getInstance();
+        calendardate.set(java.util.Calendar.MILLISECOND, 0);
+        long seconds = calendardate.getTimeInMillis() / 1000;
+        boolean even = seconds % 2 == 0;
+        
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller controller = (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller) getDevice();
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus controllerStatus = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus) controller.getDeviceStatus();
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation controllerInformation = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation) controller.getDeviceInformation();
+        art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status subcontrollerStatus = controllerStatus.rtz32;
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerRealtime subcontrollerRealtime = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerRealtime) device.getDeviceRealtime();
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration subcontrollerConfiguration = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration) device.getDeviceConfiguration();
+
+        SVGElement emergency = getElement(&quot;Emergency&quot;);
+        SVGElement lock = getElement(&quot;Lock&quot;);
+        SVGElement run = getElement(&quot;Run&quot;);
+        SVGElement remote = getElement(&quot;Remote&quot;);
+        SVGElement background = getElement(&quot;Background&quot;);
+        SVGElement border = getElement(&quot;Border&quot;);
+        SVGElement ribbon = getElement(&quot;Ribbon&quot;);
+        SVGElement elapsed1 = getElement(&quot;Elapsed1&quot;);
+        SVGElement elapsed2 = getElement(&quot;Elapsed2&quot;);
+        setAttribute(emergency, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(lock, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(run, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(remote, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(emergency, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(lock, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(run, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(remote, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setText(&quot;Text number&quot;, String.format(&quot;%04d&quot;, controllerInformation.number));
+        setText(&quot;Text information&quot;, &quot;&quot;);
+        setText(&quot;Text offset&quot;, &quot;&quot;);
+        setText(&quot;Text cycle&quot;, &quot;&quot;);
+        setText(&quot;Text elapsed&quot;, &quot;&quot;);
+
+        try
+        {
+            if (art.client.models.Shared.configuration.general.darkMap == true)
+            {
+                setAttribute(&quot;Text number&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);
+                setAttribute(&quot;Text information&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);
+                setAttribute(&quot;Text offset&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);
+                setAttribute(&quot;Text cycle&quot;, &quot;fill&quot;, &quot;#FFFFFF&quot;);
+            } else
+            {
+                setAttribute(&quot;Text number&quot;, &quot;fill&quot;, &quot;#000000&quot;);
+                setAttribute(&quot;Text information&quot;, &quot;fill&quot;, &quot;#000000&quot;);
+                setAttribute(&quot;Text offset&quot;, &quot;fill&quot;, &quot;#000000&quot;);
+                setAttribute(&quot;Text cycle&quot;, &quot;fill&quot;, &quot;#000000&quot;);
+            }
+        } catch (Exception ex)
+        {
+        }
+
+
+        setAttribute(elapsed1, &quot;display&quot;, &quot;none&quot;);
+        setAttribute(elapsed2, &quot;display&quot;, &quot;none&quot;);
+        /* setAttribute(border, &quot;stroke&quot;, &quot;#800080&quot;);*/
+        setAttribute(border, &quot;display&quot;, &quot;inline&quot;);
+        setAttribute(border, &quot;stroke-width&quot;, 6.5);
+        setAttribute(border, &quot;stroke-opacity&quot;, 0.75);
+        setAttribute(ribbon, &quot;stroke-opacity&quot;, 0.50);
+        setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF80FF&quot;);
+        setAttribute(background, &quot;fill&quot;, &quot;#FF80FF&quot;);
+        
+        if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)
+        {
+            setAttribute(border, &quot;stroke&quot;, &quot;#FFFFFF&quot;,999);
+            setAttribute(background, &quot;fill&quot;, &quot;#FFFFFF&quot;,999);
+            setAttribute(ribbon, &quot;stroke&quot;, &quot;#FFFFFF&quot;,999);
+        }
+        else
+        {
+              setAttribute(border, &quot;display&quot;, &quot;none&quot;, 999);
+            
+            if (controllerStatus.rtz32.centralized.centralized == false)
+            {
+                setAttribute(border, &quot;fill&quot;, &quot;#808080&quot;, 999);
+                setAttribute(background, &quot;fill&quot;, &quot;#808080&quot;, 999);
+                setAttribute(ribbon, &quot;stroke&quot;, &quot;#808080&quot;, 999);
+            } 
+            else
+            {
+                boolean semiactuated = controllerStatus.rtz32.general.semiactuated ;
+                boolean offline = false;
+                
+                if (device.getAlarm(&quot;alarm_controller_offline&quot;) &gt; 0 || device.getAlarm(&quot;alarm_offline&quot;) &gt; 0)
+                {
+                    offline = true;
+                    setAttribute(background, &quot;display&quot;, even ? &quot;inline&quot; : &quot;none&quot;, 999);
+                }
+                
+                if (controllerStatus.rtz32.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_COMPUTER)
+                {
+                    setAttribute(background, &quot;fill&quot;, &quot;#00FF00&quot;, 999);
+                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#00FF00&quot;, 999);
+                    
+                    if(offline == true)
+                    {
+                        setAttribute(background, &quot;display&quot;, even || semiactuated ? &quot;none&quot; : &quot;inline&quot;, 999);
+                    }
+                }
+                else if (controllerStatus.rtz32.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
+                {
+                    setAttribute(background, &quot;fill&quot;, &quot;#FF0000&quot;, 999);
+                         setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF0000&quot;, 999);
+                   
+                    if (offline == true)
+                    {
+                        setAttribute(background, &quot;display&quot;, even ? &quot;none&quot; : &quot;inline&quot;, 999);
+                    }
+                }
+
+                if (device.getAlarm(&quot;alarm_controller_offline&quot;) &lt;= 0 &amp;&amp; device.getAlarm(&quot;alarm_offline&quot;) &lt;= 0)
+                {
+                    if (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller.class.cast(device).getDeviceAlarms().rtz32.flashing.getServerityAlarm() &gt; 0)
+                    {
+                        setAttribute(background, &quot;fill&quot;, &quot;#FFFF00&quot;, 999);
+                         setAttribute(ribbon, &quot;stroke&quot;, &quot;#FFFF00&quot;, 999);
+                        setAttribute(background, &quot;display&quot;, even ? &quot;inline&quot; : &quot;none&quot;, 999);
+                        
+                    }
+                }
+            }
+        }
+       
+        if (subcontrollerStatus.forcings != null
+                &amp;&amp; (subcontrollerStatus.forcings.centralized != null
+                || subcontrollerStatus.forcings.colorsMode != null
+                || subcontrollerStatus.forcings.computerMode != null
+                || subcontrollerStatus.forcings.control != null
+                || subcontrollerStatus.forcings.plan != null))
+        {
+            setAttribute(lock, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+            setAttribute(lock, &quot;fill&quot;, &quot;#FF0000&quot;, 999);
+        } else
+        {
+            setAttribute(lock, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);
+            setAttribute(lock, &quot;fill&quot;, &quot;#000000&quot;, 999);
+        }
+         if (subcontrollerStatus.general.emergency == true)
+        {
+            setAttribute(emergency, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        } else if (subcontrollerStatus.general.emergency == false)
+        {
+            setAttribute(emergency, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);
+            setAttribute(emergency, &quot;fill&quot;, &quot;#000000&quot;, 999);
+        }
+        
+        
+
+        setAttribute(&quot;Text information&quot;, &quot;display&quot;, &quot;iniline&quot;, 999);
+        setAttribute(&quot;Text offset&quot;, &quot;display&quot;, &quot;iniline&quot;, 999);
+        setAttribute(&quot;Text cycle&quot;, &quot;display&quot;, &quot;iniline&quot;, 999);
+
+        if ((subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_COMPUTER))
+        {
+            setAttribute(remote, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+            setAttribute(remote, &quot;fill&quot;, &quot;#0000FF&quot;, 999);
+        } else 
+        {
+            setAttribute(remote, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);
+            setAttribute(remote, &quot;fill&quot;, &quot;#000000&quot;, 999);
+        }
+        if (subcontrollerRealtime != null &amp;&amp; subcontrollerRealtime.rtz32 != null &amp;&amp; subcontrollerRealtime.rtz32.junctionRealtime == true)
+        {
+            setAttribute(run, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+            setAttribute(run, &quot;fill&quot;, &quot;#0000FF&quot;, 999);
+        } else
+        {
+            setAttribute(run, &quot;fill-opacity&quot;, &quot;0.15&quot;, 999);
+            setAttribute(run, &quot;fill&quot;, &quot;#000000&quot;, 999);
+        }
+       
+        double strokeopacity = Math.pow(2, controller.getDeviceAlarms().getServerityAlarm()) / 32;
+      
+       /* if (controller.getDeviceAlarms().getServerityAlarm() &gt; 0)
+        {
+            setAttribute(border, &quot;display&quot;, &quot;inline&quot;);
+            setAttribute(border, &quot;stroke&quot;, &quot;#FF0000&quot;);
+            setAttribute(border, &quot;stroke-opacity&quot;, strokeopacity);
+            setAttribute(border, &quot;stroke-width&quot;, 6.5 + (6.5 * strokeopacity));
+        } else
+        {
+            setAttribute(border, &quot;stroke&quot;, &quot;#808080&quot;);
+            setAttribute(border, &quot;display&quot;, &quot;inline&quot;);
+            setAttribute(border, &quot;stroke-width&quot;, 6.5);
+            setAttribute(border, &quot;stroke-opacity&quot;, 1.0);
+        }*/
+        
+        
+
+        switch (subcontrollerStatus.general.state)
+        {
+            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_UNKNOWN:
+                /*setAttribute(background, &quot;fill&quot;, &quot;#808080&quot;);
+                setAttribute(ribbon, &quot;stroke&quot;, &quot;#808080&quot;);*/
+                setAttribute(elapsed2, &quot;fill&quot;, &quot;#808080&quot;);
+                setText(&quot;Text information&quot;, &quot;OFF&quot;);
+                return;
+          
+            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_FLASHING:
+                setAttribute(&quot;Text information&quot;, &quot;display&quot;,&quot;none&quot;,999);
+                setAttribute(&quot;Text offset&quot;, &quot;display&quot;,&quot;none&quot;,999);
+                setAttribute(&quot;Text cycle&quot;, &quot;display&quot;,&quot;none&quot;,999);
+
+                if (even)
+                {
+                 /*   setAttribute(background, &quot;fill&quot;, &quot;#FFFF00&quot;);
+                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#FFFF00&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#FFFF00&quot;);
+                } else
+                {
+            /*        setAttribute(background, &quot;fill&quot;, &quot;#808000&quot;);
+                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#808000&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#808000&quot;);
+                }
+                setText(&quot;Text information&quot;, &quot;Y^&quot;);
+                break;
+            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_STARTUP:
+                if (subcontrollerStatus.general.emergency == true)
+                {
+              /*      setAttribute(background, &quot;fill&quot;, even ? &quot;#FF8000&quot; : &quot;#804000&quot;);
+                    setAttribute(ribbon, &quot;stroke&quot;, even ? &quot;#FF8000&quot; : &quot;#804000&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;, even ? &quot;#FF8000&quot; : &quot;#804000&quot;);
+                } else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
+                {
+               /*     setAttribute(background, &quot;fill&quot;, even ? &quot;#008000&quot; : &quot;#004000&quot;);
+                    setAttribute(ribbon, &quot;stroke&quot;, even ?&quot;#008000&quot; : &quot;#004000&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;,even ? &quot;#008000&quot; : &quot;#004000&quot;);
+                } else
+                {
+                /*    setAttribute(background, &quot;fill&quot;, even ? &quot;#00FF00&quot; : &quot;#008000&quot;);
+                    setAttribute(ribbon, &quot;stroke&quot;, even ? &quot;#00FF00&quot; : &quot;#008000&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;, even ? &quot;#00FF00&quot; : &quot;#008000&quot;);
+                }
+                break;
+            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_COLORS:
+                if (subcontrollerStatus.general.emergency == true)
+                {
+               /*     setAttribute(background, &quot;fill&quot;, &quot;#FF8000&quot;); */
+                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF8000&quot;);
+                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#FF8000&quot;);
+                } 
+                else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
+                {
+                 /*   setAttribute(background, &quot;fill&quot;, &quot;#008000&quot;);
+                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#008000&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#008000&quot;);
+                } else
+                {
+              /*      setAttribute(background, &quot;fill&quot;, &quot;#00FF00&quot;); 
+                    setAttribute(ribbon, &quot;stroke&quot;, &quot;#00FF00&quot;);*/
+                    setAttribute(elapsed2, &quot;fill&quot;, &quot;#00FF00&quot;);
+                }
+                break;
+        }
+        art.library.model.devices.colors.controller.RTZ32.configuration.RTZ32_Configuration_Program plan = null;
+        if (subcontrollerStatus.plan != null &amp;&amp; subcontrollerStatus.plan.number &gt; 0)
+        {
+            try
+            {
+                plan = subcontrollerConfiguration.rtz32.getProgram(subcontrollerStatus.plan.number);
+            } catch (Exception e)
+            {
+            }
+        }
+        
+        if (plan != null)
+        {
+        
+            String information = &quot;&quot;;
+
+             if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED)
+                information = &quot;C&quot;;
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER)
+                information = &quot;M&quot;;
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER_SLAVE)
+                information = &quot;M-E&quot;;
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE)
+                information = &quot;E&quot;;
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE_MASTER)
+                information = &quot;E-M&quot;;
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_TROLLEY)
+                information = &quot;CTw&quot;;
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)
+                information = &quot;NC&quot;;
+             else
+                information = &quot;?&quot;;
+
+            information = information + plan.number;
+
+            switch (subcontrollerStatus.general.planMode)
+            {
+                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DELAYED_ORDERS:
+                    information = information + &quot;d&quot;;
+                    break;
+                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DYNAMIC_SELECTION:
+                    information = information + &quot;ds&quot;;
+                    break;
+                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_FORCED:
+                    information = information + &quot;f&quot;;
+                    break;
+                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_ONLINE_ORDERS:
+                    information = information + &quot;o&quot;;
+                    break;
+                case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_TIMETABLE:
+                    information = information + &quot;t&quot;;
+                    break;
+            }
+            
+            setText(&quot;Text information&quot;, information);
+            if (plan.offset &gt; 0)
+            {
+                setText(&quot;Text offset&quot;, &quot;&quot; + plan.offset);
+            } else
+            {
+                setText(&quot;Text offset&quot;, &quot;&quot;);
+            }
+            setText(&quot;Text cycle&quot;, &quot;&quot; + plan.cycle);
+            
+            if (subcontrollerRealtime != null)
+            {
+                try
+                {
+                    String text = subcontrollerRealtime.rtz32.phase.phaseNumber + &quot;:&quot; + subcontrollerRealtime.rtz32.counters.cycle;
+
+                    setText(&quot;Text elapsed&quot;, text);
+                    setAttribute(elapsed1, &quot;display&quot;, &quot;inline&quot;);
+                    setAttribute(elapsed2, &quot;display&quot;, &quot;inline&quot;);
+                    int elapsedWidth = getAttributeInteger(elapsed1, &quot;width&quot;) - 2;
+                    float ratio = 1;
+                    setAttribute(elapsed2, &quot;width&quot;, (elapsedWidth * Math.min(1.0f, ratio)));
+                    update(elapsed2);
+                } catch (Exception ex)
+                {
+                }
+            }
+       
+            java.awt.Color bckColor = java.awt.Color.decode(background.getStyleAbsolute(&quot;fill&quot;).getStringValue());
+            java.awt.Color darkerColor = bckColor.darker();
+            String darkHex = String.format(&quot;#%02x%02x%02x&quot;, darkerColor.darker().getRed(), darkerColor.darker().getGreen(), darkerColor.darker().getBlue());
+
+            setAttribute(&quot;Text information&quot;, &quot;fill&quot;, darkHex, 999);
+            setAttribute(&quot;Text offset&quot;, &quot;fill&quot;, darkHex, 999);
+            setAttribute(&quot;Text cycle&quot;, &quot;fill&quot;, darkHex, 999);
+
+            setAttribute(emergency, &quot;fill&quot;, darkHex, 999);
+            setAttribute(lock, &quot;fill&quot;, darkHex, 999);
+            setAttribute(run, &quot;fill&quot;, darkHex, 999);
+            setAttribute(remote, &quot;fill&quot;, darkHex, 999);
+        }
+    }
+
+    public void paintNoStatusAvailable()
+    {
+        art.library.model.devices.colors.controller.M.M_Controller controller = (art.library.model.devices.colors.controller.M.M_Controller) getDevice();
+        SVGElement thunderbolt = getElement(&quot;Thunderbolt&quot;);
+        SVGElement emergency = getElement(&quot;Emergency&quot;);
+        SVGElement lock = getElement(&quot;Lock&quot;);
+        SVGElement calendar = getElement(&quot;Calendar&quot;);
+        SVGElement run = getElement(&quot;Run&quot;);
+        SVGElement remote = getElement(&quot;Remote&quot;);
+        SVGElement background = getElement(&quot;Background&quot;);
+        SVGElement border = getElement(&quot;Border&quot;);
+        SVGElement ribbon = getElement(&quot;Ribbon&quot;);
+        SVGElement elapsed1 = getElement(&quot;Elapsed1&quot;);
+        SVGElement elapsed2 = getElement(&quot;Elapsed2&quot;);
+        setAttribute(thunderbolt, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(emergency, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(lock, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(calendar, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(run, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(remote, &quot;fill-opacity&quot;, &quot;1.0&quot;, 999);
+        setAttribute(thunderbolt, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(emergency, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(lock, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(calendar, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(run, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setAttribute(remote, &quot;fill&quot;, &quot;#804080&quot;, 999);
+        setText(&quot;Text number&quot;, String.format(&quot;%04d&quot;, controller.getDeviceInformation().number));
+        setText(&quot;Text information&quot;, &quot;&quot;);
+        setText(&quot;Text offset&quot;, &quot;&quot;);
+        setText(&quot;Text cycle&quot;, &quot;&quot;);
+        setText(&quot;Text elapsed&quot;, &quot;&quot;);
+        setAttribute(elapsed1, &quot;display&quot;, &quot;none&quot;);
+        setAttribute(elapsed2, &quot;display&quot;, &quot;none&quot;);
+        setAttribute(ribbon, &quot;stroke-opacity&quot;, 0.50);
+        setAttribute(background, &quot;fill&quot;, &quot;#FF00FF&quot;);
+        setAttribute(ribbon, &quot;stroke&quot;, &quot;#FF00FF&quot;);
+        setAttribute(border, &quot;stroke&quot;, &quot;#FF00FF&quot;);
+        setAttribute(border, &quot;display&quot;, &quot;inline&quot;);
+        setAttribute(border, &quot;stroke-width&quot;, 6.5);
+        setAttribute(border, &quot;stroke-opacity&quot;, 1.0);
+    }
+
+    public void commands()
+    {
+        final String colorNoCommandsBorder = &quot;#00007C&quot;;
+        final String colorNoCommandsBackground = &quot;#7C7CFA&quot;;
+        
+        final String colorCommandsBorder = &quot;#007C00&quot;;
+        final String colorCommandsBackground = &quot;#7CFA7C&quot;;
+        
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller controller = (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller) getDevice();
+        art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation controllerInformation = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation) controller.getDeviceInformation();
+
+        SVGElement background = getElement(&quot;Background&quot;);
+        SVGElement border = getElement(&quot;Border&quot;);
+        SVGElement ribbon = getElement(&quot;Ribbon&quot;);
+
+        SVGElement emergency = getElement(&quot;Emergency&quot;);
+        SVGElement lock = getElement(&quot;Lock&quot;);
+        SVGElement run = getElement(&quot;Run&quot;);
+        SVGElement remote = getElement(&quot;Remote&quot;);
+
+        setAttribute(border, &quot;stroke&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBorder : colorNoCommandsBorder);
+        setAttribute(border, &quot;display&quot;, &quot;inline&quot;);
+        setAttribute(border, &quot;stroke-width&quot;, 6.5);
+        setAttribute(border, &quot;stroke-opacity&quot;, 0.75);
+        setAttribute(ribbon, &quot;stroke-opacity&quot;, 0.50);
+        setAttribute(ribbon, &quot;stroke&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground);
+        setAttribute(background, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground);
+
+        setAttribute(emergency, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);
+        setAttribute(lock, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);
+        setAttribute(run, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);
+        setAttribute(remote, &quot;fill&quot;, !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);
+
+        setText(&quot;Text number&quot;, String.format(&quot;%04d&quot;, controllerInformation.number));
+        setAttribute(&quot;Text information&quot;, &quot;display&quot;, &quot;none&quot;, 999);
+        setAttribute(&quot;Text offset&quot;, &quot;display&quot;, &quot;none&quot;, 999);
+        setAttribute(&quot;Text cycle&quot;, &quot;display&quot;, &quot;none&quot;, 999);
+        setAttribute(&quot;Text elapsed&quot;, &quot;display&quot;, &quot;none&quot;, 999);
+
+    }    
+">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
diff --git a/svgDevicesTest/src/AAAMain/SvgDeviceStatusTest.java b/svgDevicesTest/src/AAAMain/SvgDeviceStatusTest.java
index 368c9d9..0ecbce8 100644
--- a/svgDevicesTest/src/AAAMain/SvgDeviceStatusTest.java
+++ b/svgDevicesTest/src/AAAMain/SvgDeviceStatusTest.java
@@ -53,7 +53,7 @@
 public class SvgDeviceStatusTest
 {
     
-    private static final SvgMocker SELECTED_MOCKER = SvgMocker.ParkingEquinsa;
+    private static final SvgMocker SELECTED_MOCKER = SvgMocker.RTZMapComplex;
     
     public static String mapPath;
     
diff --git a/svgDevicesTest/src/Rtz/RtzMapComplex.java b/svgDevicesTest/src/Rtz/RtzMapComplex.java
index 0f36ffb..cad8a33 100644
--- a/svgDevicesTest/src/Rtz/RtzMapComplex.java
+++ b/svgDevicesTest/src/Rtz/RtzMapComplex.java
@@ -17,7 +17,7 @@
         super(device, commands, diagram);
     }
 
-    public void status()
+        public void status()
     {
         try
         {
@@ -28,7 +28,12 @@
     }
 
     public void statusSubcontroller()
-    {
+    {     
+        java.util.Calendar calendardate = java.util.Calendar.getInstance();
+        calendardate.set(java.util.Calendar.MILLISECOND, 0);
+        long seconds = calendardate.getTimeInMillis() / 1000;
+        boolean even = seconds % 2 == 0;
+        
         art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller controller = (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller) getDevice();
         art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus controllerStatus = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus) controller.getDeviceStatus();
         art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation controllerInformation = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation) controller.getDeviceInformation();
@@ -36,11 +41,6 @@
         art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerRealtime subcontrollerRealtime = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerRealtime) device.getDeviceRealtime();
         art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration subcontrollerConfiguration = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration) device.getDeviceConfiguration();
 
-        java.util.Calendar calendardate = java.util.Calendar.getInstance();
-        calendardate.set(java.util.Calendar.MILLISECOND, 0);
-        long seconds = calendardate.getTimeInMillis() / 1000;
-        boolean even = seconds % 2 == 0;
-
         SVGElement emergency = getElement("Emergency");
         SVGElement lock = getElement("Lock");
         SVGElement run = getElement("Run");
@@ -58,87 +58,103 @@
         setAttribute(lock, "fill", "#804080", 999);
         setAttribute(run, "fill", "#804080", 999);
         setAttribute(remote, "fill", "#804080", 999);
-        setText("Text number", String.format("%05d", controllerInformation.number));
+        setText("Text number", String.format("%04d", controllerInformation.number));
         setText("Text information", "");
         setText("Text offset", "");
         setText("Text cycle", "");
         setText("Text elapsed", "");
 
-        setAttribute("Text information", "fill", "#FFFFFF");
-        setAttribute("Text offset", "fill", "#FFFFFF");
-        setAttribute("Text cycle", "fill", "#FFFFFF");
+        try
+        {
+            if (art.client.models.Shared.configuration.general.darkMap == true)
+            {
+                setAttribute("Text number", "fill", "#FFFFFF");
+                setAttribute("Text information", "fill", "#FFFFFF");
+                setAttribute("Text offset", "fill", "#FFFFFF");
+                setAttribute("Text cycle", "fill", "#FFFFFF");
+            } else
+            {
+                setAttribute("Text number", "fill", "#000000");
+                setAttribute("Text information", "fill", "#000000");
+                setAttribute("Text offset", "fill", "#000000");
+                setAttribute("Text cycle", "fill", "#000000");
+            }
+        } catch (Exception ex)
+        {
+        }
+
 
         setAttribute(elapsed1, "display", "none");
         setAttribute(elapsed2, "display", "none");
-        setAttribute(border, "stroke", "#800080");
+        /* setAttribute(border, "stroke", "#800080");*/
         setAttribute(border, "display", "inline");
         setAttribute(border, "stroke-width", 6.5);
         setAttribute(border, "stroke-opacity", 0.75);
         setAttribute(ribbon, "stroke-opacity", 0.50);
         setAttribute(ribbon, "stroke", "#FF80FF");
         setAttribute(background, "fill", "#FF80FF");
-
-        switch (controllerStatus.status)
-        {
-            case art.library.model.devices.DeviceStatus.STATUS_ONLINE:
-                break;
-            case art.library.model.devices.DeviceStatus.STATUS_WARNING:
-                break;
-            case art.library.model.devices.DeviceStatus.STATUS_ALARM:
-                break;
-            case art.library.model.devices.DeviceStatus.STATUS_DISABLE:
-                setAttribute(background, "fill", "#404040");
-                setAttribute(ribbon, "stroke", "#404040");
-                setAttribute(border, "stroke", "#808080");
-                setAttribute(border, "display", "inline");
-                setAttribute(border, "stroke-width", 6.5);
-                setAttribute(border, "stroke-opacity", 1.0);
-                setAttribute(emergency, "fill-opacity", "0.0", 999);
-                setAttribute(lock, "fill-opacity", "0.0", 999);
-                setAttribute(run, "fill-opacity", "0.0", 999);
-                setAttribute(remote, "fill-opacity", "0.0", 999);
-                return;
-            case art.library.model.devices.DeviceStatus.STATUS_SIMULATION:
-                setAttribute(background, "fill", "#0000FF");
-                setAttribute(ribbon, "stroke", "#0000FF");
-                setAttribute(border, "stroke", "#000080");
-                setAttribute(border, "display", "inline");
-                setAttribute(border, "stroke-width", 6.5);
-                setAttribute(border, "stroke-opacity", 1.0);
-                break;
-            case art.library.model.devices.DeviceStatus.STATUS_INVALID:
-            case art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerStatus.STATUS_OFFLINE_CONTROLLER:
-            case art.library.model.devices.DeviceStatus.STATUS_OFFLINE:
-            case art.library.model.devices.DeviceStatus.STATUS_UNKNOWN:
-
-                java.awt.Color offline = java.awt.Color.decode("#FF00FF");
-                String offlineHex = String.format("#%02x%02x%02x", offline.getRed(), offline.getGreen(), offline.getBlue());
-                String offlineDarkerHex = String.format("#%02x%02x%02x", offline.darker().darker().getRed(), offline.darker().darker().getGreen(), offline.darker().darker().getBlue());
-
-                setAttribute(background, "fill", even ? offlineHex : offlineDarkerHex);
-                setAttribute(ribbon, "stroke", even ? offlineHex : offlineDarkerHex);
-                setAttribute(border, "stroke", even ? offlineHex : offlineDarkerHex);
-                setAttribute(border, "display", "inline");
-                setAttribute(border, "stroke-width", 6.5);
-                setAttribute(border, "stroke-opacity", 1.0);
-
-                if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)
-                {
-                    setAttribute(background, "fill", "#80531c");
-                    setAttribute(ribbon, "stroke", "#80531c");
-                    setAttribute(border, "stroke", "#80531c");
-                }
-
-                return;
-        }
-
+        
         if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)
         {
-            setAttribute(background, "fill", "#80531c");
-            setAttribute(ribbon, "stroke", "#80531c");
-            setAttribute(border, "stroke", "#80531c");
+            setAttribute(border, "stroke", "#FFFFFF",999);
+            setAttribute(background, "fill", "#FFFFFF",999);
+            setAttribute(ribbon, "stroke", "#FFFFFF",999);
         }
+        else
+        {
+              setAttribute(border, "display", "none", 999);
+            
+            if (controllerStatus.rtz32.centralized.centralized == false)
+            {
+                setAttribute(border, "fill", "#808080", 999);
+                setAttribute(background, "fill", "#808080", 999);
+                setAttribute(ribbon, "stroke", "#808080", 999);
+            } 
+            else
+            {
+                boolean semiactuated = controllerStatus.rtz32.general.semiactuated ;
+                boolean offline = false;
+                
+                if (device.getAlarm("alarm_controller_offline") > 0 || device.getAlarm("alarm_offline") > 0)
+                {
+                    offline = true;
+                    setAttribute(background, "display", even ? "inline" : "none", 999);
+                }
+                
+                if (controllerStatus.rtz32.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_COMPUTER)
+                {
+                    setAttribute(background, "fill", "#00FF00", 999);
+                    setAttribute(ribbon, "stroke", "#00FF00", 999);
+                    
+                    if(offline == true)
+                    {
+                        setAttribute(background, "display", even || semiactuated ? "none" : "inline", 999);
+                    }
+                }
+                else if (controllerStatus.rtz32.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
+                {
+                    setAttribute(background, "fill", "#FF0000", 999);
+                         setAttribute(ribbon, "stroke", "#FF0000", 999);
+                   
+                    if (offline == true)
+                    {
+                        setAttribute(background, "display", even ? "none" : "inline", 999);
+                    }
+                }
 
+                if (device.getAlarm("alarm_controller_offline") <= 0 && device.getAlarm("alarm_offline") <= 0)
+                {
+                    if (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller.class.cast(device).getDeviceAlarms().rtz32.flashing.getServerityAlarm() > 0)
+                    {
+                        setAttribute(background, "fill", "#FFFF00", 999);
+                         setAttribute(ribbon, "stroke", "#FFFF00", 999);
+                        setAttribute(background, "display", even ? "inline" : "none", 999);
+                        
+                    }
+                }
+            }
+        }
+       
         if (subcontrollerStatus.forcings != null
                 && (subcontrollerStatus.forcings.centralized != null
                 || subcontrollerStatus.forcings.colorsMode != null
@@ -148,13 +164,12 @@
         {
             setAttribute(lock, "fill-opacity", "1.0", 999);
             setAttribute(lock, "fill", "#FF0000", 999);
-        }
-        else
+        } else
         {
             setAttribute(lock, "fill-opacity", "0.15", 999);
             setAttribute(lock, "fill", "#000000", 999);
         }
-        if (subcontrollerStatus.general.emergency == true)
+         if (subcontrollerStatus.general.emergency == true)
         {
             setAttribute(emergency, "fill-opacity", "1.0", 999);
         } else if (subcontrollerStatus.general.emergency == false)
@@ -162,21 +177,8 @@
             setAttribute(emergency, "fill-opacity", "0.15", 999);
             setAttribute(emergency, "fill", "#000000", 999);
         }
-
-        switch (subcontrollerStatus.general.planMode)
-        {
-            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_ONLINE_ORDERS:
-            {
-                break;
-            }
-            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_TIMETABLE:
-            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DELAYED_ORDERS:
-            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DYNAMIC_SELECTION:
-            case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_FORCED:
-            {
-                break;
-            }
-        }
+        
+        
 
         setAttribute("Text information", "display", "iniline", 999);
         setAttribute("Text offset", "display", "iniline", 999);
@@ -186,7 +188,7 @@
         {
             setAttribute(remote, "fill-opacity", "1.0", 999);
             setAttribute(remote, "fill", "#0000FF", 999);
-        } else
+        } else 
         {
             setAttribute(remote, "fill-opacity", "0.15", 999);
             setAttribute(remote, "fill", "#000000", 999);
@@ -200,8 +202,10 @@
             setAttribute(run, "fill-opacity", "0.15", 999);
             setAttribute(run, "fill", "#000000", 999);
         }
+       
         double strokeopacity = Math.pow(2, controller.getDeviceAlarms().getServerityAlarm()) / 32;
-        if (controller.getDeviceAlarms().getServerityAlarm() > 0)
+      
+       /* if (controller.getDeviceAlarms().getServerityAlarm() > 0)
         {
             setAttribute(border, "display", "inline");
             setAttribute(border, "stroke", "#FF0000");
@@ -213,31 +217,33 @@
             setAttribute(border, "display", "inline");
             setAttribute(border, "stroke-width", 6.5);
             setAttribute(border, "stroke-opacity", 1.0);
-        }
+        }*/
+        
+        
 
         switch (subcontrollerStatus.general.state)
         {
             case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_UNKNOWN:
-                setAttribute(background, "fill", "#808080");
-                setAttribute(ribbon, "stroke", "#808080");
+                /*setAttribute(background, "fill", "#808080");
+                setAttribute(ribbon, "stroke", "#808080");*/
                 setAttribute(elapsed2, "fill", "#808080");
                 setText("Text information", "OFF");
                 return;
-
+          
             case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_FLASHING:
-                setAttribute("Text information", "display", "none", 999);
-                setAttribute("Text offset", "display", "none", 999);
-                setAttribute("Text cycle", "display", "none", 999);
+                setAttribute("Text information", "display","none",999);
+                setAttribute("Text offset", "display","none",999);
+                setAttribute("Text cycle", "display","none",999);
 
                 if (even)
                 {
-                    setAttribute(background, "fill", "#FFFF00");
-                    setAttribute(ribbon, "stroke", "#FFFF00");
+                 /*   setAttribute(background, "fill", "#FFFF00");
+                    setAttribute(ribbon, "stroke", "#FFFF00");*/
                     setAttribute(elapsed2, "fill", "#FFFF00");
                 } else
                 {
-                    setAttribute(background, "fill", "#808000");
-                    setAttribute(ribbon, "stroke", "#808000");
+            /*        setAttribute(background, "fill", "#808000");
+                    setAttribute(ribbon, "stroke", "#808000");*/
                     setAttribute(elapsed2, "fill", "#808000");
                 }
                 setText("Text information", "Y^");
@@ -245,36 +251,37 @@
             case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_STARTUP:
                 if (subcontrollerStatus.general.emergency == true)
                 {
-                    setAttribute(background, "fill", even ? "#FF8000" : "#804000");
-                    setAttribute(ribbon, "stroke", even ? "#FF8000" : "#804000");
+              /*      setAttribute(background, "fill", even ? "#FF8000" : "#804000");
+                    setAttribute(ribbon, "stroke", even ? "#FF8000" : "#804000");*/
                     setAttribute(elapsed2, "fill", even ? "#FF8000" : "#804000");
                 } else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
                 {
-                    setAttribute(background, "fill", even ? "#008000" : "#004000");
-                    setAttribute(ribbon, "stroke", even ? "#008000" : "#004000");
-                    setAttribute(elapsed2, "fill", even ? "#008000" : "#004000");
+               /*     setAttribute(background, "fill", even ? "#008000" : "#004000");
+                    setAttribute(ribbon, "stroke", even ?"#008000" : "#004000");*/
+                    setAttribute(elapsed2, "fill",even ? "#008000" : "#004000");
                 } else
                 {
-                    setAttribute(background, "fill", even ? "#00FF00" : "#008000");
-                    setAttribute(ribbon, "stroke", even ? "#00FF00" : "#008000");
+                /*    setAttribute(background, "fill", even ? "#00FF00" : "#008000");
+                    setAttribute(ribbon, "stroke", even ? "#00FF00" : "#008000");*/
                     setAttribute(elapsed2, "fill", even ? "#00FF00" : "#008000");
                 }
                 break;
             case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.STATE_COLORS:
                 if (subcontrollerStatus.general.emergency == true)
                 {
-                    setAttribute(background, "fill", "#FF8000");
+               /*     setAttribute(background, "fill", "#FF8000"); */
                     setAttribute(ribbon, "stroke", "#FF8000");
                     setAttribute(elapsed2, "fill", "#FF8000");
-                } else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
+                } 
+                else if (subcontrollerStatus.general.control == art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.CONTROL_LOCAL)
                 {
-                    setAttribute(background, "fill", "#008000");
-                    setAttribute(ribbon, "stroke", "#008000");
+                 /*   setAttribute(background, "fill", "#008000");
+                    setAttribute(ribbon, "stroke", "#008000");*/
                     setAttribute(elapsed2, "fill", "#008000");
                 } else
                 {
-                    setAttribute(background, "fill", "#00FF00");
-                    setAttribute(ribbon, "stroke", "#00FF00");
+              /*      setAttribute(background, "fill", "#00FF00"); 
+                    setAttribute(ribbon, "stroke", "#00FF00");*/
                     setAttribute(elapsed2, "fill", "#00FF00");
                 }
                 break;
@@ -285,46 +292,36 @@
             try
             {
                 plan = subcontrollerConfiguration.rtz32.getProgram(subcontrollerStatus.plan.number);
-            }
-            catch (Exception e)
+            } catch (Exception e)
             {
             }
         }
-
+        
         if (plan != null)
         {
-
+        
             String information = "";
 
-            if(controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED)
-            {
-                information = art.client.models.Shared.getMessage("C");
-            }
-            else if(controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_TROLLEY)
-            {
-                information = art.client.models.Shared.getMessage("CTw");
-            }
-            else if(controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER_SLAVE)
-            {
-                information = art.client.models.Shared.getMessage("M-E");
-            }
-            else if(controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER)
-            {
-                information = art.client.models.Shared.getMessage("M");
-            }
-            else if(controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE)
-            {
-                information = art.client.models.Shared.getMessage("E");
-            } 
-            else if(controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)
-            {
-                information = art.client.models.Shared.getMessage("N");
-            } 
-            
+             if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED)
+                information = "C";
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER)
+                information = "M";
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER_SLAVE)
+                information = "M-E";
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE)
+                information = "E";
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_SLAVE_MASTER)
+                information = "E-M";
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_CENTRALIZED_TROLLEY)
+                information = "CTw";
+             else if (controllerInformation.mode == art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation.MODE_NON_CENTRALIZED)
+                information = "NC";
+             else
+                information = "?";
 
             information = information + plan.number;
 
-        /*   switch (subcontrollerStatus.general.planMode)
+            switch (subcontrollerStatus.general.planMode)
             {
                 case art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General.PLAN_MODE_DELAYED_ORDERS:
                     information = information + "d";
@@ -342,7 +339,7 @@
                     information = information + "t";
                     break;
             }
-        */
+            
             setText("Text information", information);
             if (plan.offset > 0)
             {
@@ -351,9 +348,8 @@
             {
                 setText("Text offset", "");
             }
-
             setText("Text cycle", "" + plan.cycle);
-
+            
             if (subcontrollerRealtime != null)
             {
                 try
@@ -367,12 +363,11 @@
                     float ratio = 1;
                     setAttribute(elapsed2, "width", (elapsedWidth * Math.min(1.0f, ratio)));
                     update(elapsed2);
-                } 
-                catch (Exception ex)
+                } catch (Exception ex)
                 {
                 }
             }
-
+       
             java.awt.Color bckColor = java.awt.Color.decode(background.getStyleAbsolute("fill").getStringValue());
             java.awt.Color darkerColor = bckColor.darker();
             String darkHex = String.format("#%02x%02x%02x", darkerColor.darker().getRed(), darkerColor.darker().getGreen(), darkerColor.darker().getBlue());
@@ -414,7 +409,7 @@
         setAttribute(calendar, "fill", "#804080", 999);
         setAttribute(run, "fill", "#804080", 999);
         setAttribute(remote, "fill", "#804080", 999);
-        setText("Text number", String.format("%05d", controller.getDeviceInformation().number));
+        setText("Text number", String.format("%04d", controller.getDeviceInformation().number));
         setText("Text information", "");
         setText("Text offset", "");
         setText("Text cycle", "");
@@ -434,10 +429,10 @@
     {
         final String colorNoCommandsBorder = "#00007C";
         final String colorNoCommandsBackground = "#7C7CFA";
-
+        
         final String colorCommandsBorder = "#007C00";
         final String colorCommandsBackground = "#7CFA7C";
-
+        
         art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller controller = (art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller) getDevice();
         art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation controllerInformation = (art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation) controller.getDeviceInformation();
 
@@ -446,7 +441,6 @@
         SVGElement ribbon = getElement("Ribbon");
 
         SVGElement emergency = getElement("Emergency");
-        
         SVGElement lock = getElement("Lock");
         SVGElement run = getElement("Run");
         SVGElement remote = getElement("Remote");
@@ -464,13 +458,14 @@
         setAttribute(run, "fill", !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);
         setAttribute(remote, "fill", !getDeviceCommands().isEmpty() ? colorCommandsBackground : colorNoCommandsBackground, 999);
 
-        setText("Text number", String.format("%05d", controllerInformation.number));
+        setText("Text number", String.format("%04d", controllerInformation.number));
         setAttribute("Text information", "display", "none", 999);
         setAttribute("Text offset", "display", "none", 999);
         setAttribute("Text cycle", "display", "none", 999);
         setAttribute("Text elapsed", "display", "none", 999);
 
-    }
+    }    
+
 
 //    java.io.StringWriter sw = new java.io.StringWriter();
 //    art.library.gui.flat.FlatDialog.showDialog(null, "Error", e.getMessage() + "\n\n" + sw.toString(), true, art.library.gui.flat.FlatDialog.DIALOG_ERROR);                        
diff --git a/svgDevicesTest/src/Rtz/mockers/RtzMockerMap.java b/svgDevicesTest/src/Rtz/mockers/RtzMockerMap.java
index 8cabfb3..67891ea 100644
--- a/svgDevicesTest/src/Rtz/mockers/RtzMockerMap.java
+++ b/svgDevicesTest/src/Rtz/mockers/RtzMockerMap.java
@@ -27,7 +27,7 @@
     public void updateDevice(boolean active) 
     {
 //      RTZ32_Controller.class.cast(device).getDeviceInformation().mode  = RTZ32_ControllerInformation.MODE_NON_CENTRALIZED;
-        RTZ32_Controller.class.cast(device).getDeviceInformation().mode  = RTZ32_ControllerInformation.MODE_CENTRALIZED_MASTER;
+        RTZ32_Controller.class.cast(device).getDeviceInformation().mode  = RTZ32_ControllerInformation.MODE_NON_CENTRALIZED;
         
         RTZ32_ControllerStatus status = (RTZ32_ControllerStatus)device.getDeviceStatus();
         status.rtz32.general.control = RTZ32_Status_General.CONTROL_LOCAL;
diff --git a/svgDevicesTest/src/Rtz/mockers/RtzMockerMapComplex.java b/svgDevicesTest/src/Rtz/mockers/RtzMockerMapComplex.java
index d63b45d..15af223 100644
--- a/svgDevicesTest/src/Rtz/mockers/RtzMockerMapComplex.java
+++ b/svgDevicesTest/src/Rtz/mockers/RtzMockerMapComplex.java
@@ -4,6 +4,8 @@
 import art.library.interop.serialization.Serialization;
 import art.library.model.devices.Device;
 import art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller;
+import art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerInformation;
+import art.library.model.devices.colors.controller.RTZ32.status.RTZ32_Status_General;
 import devices.mockers.LocalFileDeviceMocker;
 import java.io.File;
 import java.util.Random;
@@ -43,60 +45,26 @@
             
             RTZ32_Controller controller = (RTZ32_Controller) d;
             
+            d.setAlarm("alarm_offline", false);
+            
+            controller.getDeviceAlarms().rtz32.flashing.alarm_flashing_bus_I2C = 1000;
+            
+            controller.getDeviceInformation().mode = RTZ32_ControllerInformation.MODE_CENTRALIZED;
+            
+//            controller.getDeviceStatus().rtz32.centralized = new RTZ32_Status_Centralized();
+//            {
+//            controller.getDeviceStatus().rtz32.centralized.centralized = false;
+//            }
+            
+            controller.getDeviceStatus().rtz32.general.control = RTZ32_Status_General.CONTROL_LOCAL;
+
             device.status =  controller.status;
             device.information = controller.information;
             device.configuration = controller.configuration;
             device.alarms = controller.alarms;
             
-//        RTZ32_ControllerCommands commands = RTZ32_ControllerCommands.class.cast(this.commands);
-//        {
-//            if ((System.currentTimeMillis() / 1000) % 2 == 0)
-//            {
-//                commands.online = new RTZ32_Commands_Online();
-//                commands.online.colorsMode = RTZ32_ControllerCommands.COLORS_MODE_COLORS;
-//                commands.online.plan = new RTZ32_Commands_Plan();
-//                commands.online.plan.number = rnd.nextInt(7) + 1;
-//                commands.online.plan.offset = rnd.nextInt(255);
-//                commands.online.realtime = rnd.nextBoolean();
-//                
-
-//                commands.online.computerMode = new RTZ32_Commands_Computer();
-//                {
-//                    commands.online.computerMode.actuated = rnd.nextBoolean();
-//                    commands.online.computerMode.semiactuated = !commands.online.computerMode.actuated;
-//                    commands.online.control = RTZ32_ControllerCommands.CONTROL_COMPUTER;
-//                }
-//            }
-//            else
-//            {
-//                 commands.online = new RTZ32_Commands_Online();
-//                 commands.online.colorsMode = RTZ32_ControllerCommands.COLORS_MODE_FLASHING;
-//                 commands.online.plan = new RTZ32_Commands_Plan();
-//                 commands.online.plan.number = rnd.nextInt(7) + 1;
-//                 commands.online.plan.offset = rnd.nextInt(255);
-//                 commands.online.realtime = rnd.nextBoolean();
-//                
-//                 commands.online.clearAlarms = rnd.nextBoolean();
-//
-//                commands.online.computerMode = new RTZ32_Commands_Computer();
-//                {
-//                    commands.online.computerMode.actuated = rnd.nextBoolean();
-//                    commands.online.computerMode.semiactuated = !commands.online.computerMode.actuated;
-//                    commands.online.control = RTZ32_ControllerCommands.CONTROL_LOCAL;
-//                }
-//            }
-//            
-//            commands.online.centralized = new RTZ32_Commands_Centralized();
-//            {
-//                commands.online.centralized.centralized = rnd.nextBoolean();
-//            }
-//            
-//            commands.online.centralized = new RTZ32_Commands_Centralized();
-//            {
-////              commands.online.centralized.centralized = true;
-//                commands.online.centralized.centralized = rnd.nextBoolean();
-//            }
-//        }
+            
+//     
         } catch (Exception ex)
         {
         }
@@ -105,7 +73,7 @@
     @Override
     public String getFilePath()
     {
-        return "C:\\Users\\Konstantin\\Documents\\LocalBackup\\Obras\\Zaragoza\\rtzserver\\data\\art.servers.rtzserver\\symbols\\18\\Controller.svg";
+        return "D:\\LocalBackup\\servers\\rtzserver\\data\\art.servers.rtzserver\\symbols\\22\\Controller.svg";
     }
 
     @Override

--
Gitblit v1.10.0