/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package Colors; import art.library.model.devices.DeviceGraphicsRuntime; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGElement; /** * * @author Konstantin */ public class ColorsGoa extends DeviceGraphicsRuntime { public ColorsGoa(art.library.model.devices.Device device, SVGDiagram diagram) { super(device, diagram); } private int position = 0; public void timer() { position = (position + 1) % 2; realtimeGroups(); } public void status() { try { art.library.model.devices.colors.controller.M.M_Controller controller = (art.library.model.devices.colors.controller.M.M_Controller) getDevice(); art.library.model.devices.colors.controller.M.M_ControllerInformation controllerInformation = controller.getDeviceInformation(); art.library.model.devices.colors.controller.M.M_ControllerStatus controllerStatus = controller.getDeviceStatus(); art.library.model.devices.colors.controller.M.M_ControllerAlarms controllerAlarms = controller.getDeviceAlarms(); art.library.model.devices.colors.controller.M.M_ControllerRealtime controllerRealtime = controller.getDeviceRealtime(); /* Subcontrollers */ for (int i = 0; i < controllerStatus.lsubcontroller.size(); i++) { statusSubcontroller(controllerStatus.lsubcontroller.get(i).number); } } catch (Exception e) { } } private SVGElement getARTElement(String element) { return getElementsContainingField("art.id").stream().filter(el -> el.getPresAbsolute("art.id").getStringValue().equals(getDevice().getIdentifier() + "." + element)).findAny().orElse(null); } public void statusSubcontroller(int subcontroller) { art.library.model.devices.colors.controller.M.M_Controller controller = (art.library.model.devices.colors.controller.M.M_Controller) getDevice(); art.library.model.devices.colors.controller.M.M_ControllerStatus controllerStatus = controller.getDeviceStatus(); art.library.model.devices.colors.controller.M.M_ControllerAlarms controllerAlarms = controller.getDeviceAlarms(); art.library.model.devices.colors.controller.M.M_ControllerRealtime controllerRealtime = controller.getDeviceRealtime(); art.library.model.devices.colors.controller.M.M_ControllerConfiguration controllerConfiguration = controller.getDeviceConfiguration(); art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller subcontrollerStatus = null; art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeSubcontroller subcontrollerRealtime = null; art.library.model.devices.colors.controller.M.M_SubcontrollerConfiguration subcontrollerConfiguration = null; if (controller.status != null) { subcontrollerStatus = controller.getDeviceStatus().getStatusSubcontroller(subcontroller); } if (controller.realtime != null) { subcontrollerRealtime = controller.getDeviceRealtime().getRealtimeSubcontroller(subcontroller); } if (controller.configuration != null) { subcontrollerConfiguration = controller.getDeviceConfiguration().getSubcontroller(subcontroller); } String identifier = controller.getIdentifier() + "." + subcontroller; realtimeGroups(); SVGElement thunderbolt = getARTElement("thunderbolt"); SVGElement emergency = getARTElement("emergency"); SVGElement lock = getARTElement("lock"); SVGElement calendar = getARTElement("calendar"); SVGElement run = getARTElement("run"); SVGElement remote = getARTElement("remote"); SVGElement background = getARTElement("background"); SVGElement border = getARTElement("border"); SVGElement ribbon = getARTElement("ribbon"); SVGElement textCycle = getARTElement("textCycle"); SVGElement textElpased = getARTElement("textElapsed"); SVGElement textInformation = getARTElement("textInformation"); SVGElement elapsed1 = getARTElement("elapsed1"); SVGElement elapsed2 = getARTElement("elapsed2"); /* Initialise */ setAttribute(thunderbolt, "fill-opacity", "1.0", 999); setAttribute(emergency, "fill-opacity", "1.0", 999); setAttribute(lock, "fill-opacity", "1.0", 999); setAttribute(calendar, "fill-opacity", "1.0", 999); setAttribute(run, "fill-opacity", "1.0", 999); setAttribute(remote, "fill-opacity", "1.10", 999); setAttribute(thunderbolt, "fill", "#804080", 999); setAttribute(emergency, "fill", "#804080", 999); setAttribute(lock, "fill", "#804080", 999); setAttribute(calendar, "fill", "#804080", 999); setAttribute(run, "fill", "#804080", 999); setAttribute(remote, "fill", "#804080", 999); setText(getARTElement("textInformation"), ""); setText(getARTElement("textOffset"), ""); setText(getARTElement("textCycle"), ""); setText(getARTElement("textElapsed"), ""); setAttribute(elapsed1, "display", "none"); setAttribute(elapsed2, "display", "none"); setAttribute(background, "fill", "#FF80FF"); setAttribute(border, "stroke", "#800080"); setAttribute(border, "display", "inline"); setAttribute(border, "stroke-width", 6.5); setAttribute(border, "stroke-opacity", 0.75); setAttribute(ribbon, "stroke", "#FF80FF"); setAttribute(ribbon, "stroke-opacity", "0.125"); /* User control */ if ((subcontrollerStatus.userControlManual == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.YES)) { setAttribute(thunderbolt, "fill-opacity", "1.0", 999); setAttribute(thunderbolt, "fill", "#0000FF", 999); } else { setAttribute(thunderbolt, "fill-opacity", "0.15", 999); setAttribute(thunderbolt, "fill", "#808080", 999); } /* Manual control */ if (subcontrollerStatus.localControl == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.YES) { setAttribute(lock, "fill-opacity", "1.0", 999); setAttribute(lock, "fill", "#FF0000", 999); } else if (subcontrollerStatus.localControl == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.NO) { setAttribute(lock, "fill-opacity", "0.15", 999); setAttribute(lock, "fill", "#808080", 999); } /* Emergency */ if (subcontrollerStatus.emergency == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.YES) { setAttribute(emergency, "fill-opacity", "1.0", 999); setAttribute(thunderbolt, "fill", "#FF0000", 999); } else if (subcontrollerStatus.emergency == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.NO) { setAttribute(emergency, "fill-opacity", "0.15", 999); setAttribute(emergency, "fill", "#808080", 999); } /* Plan selection */ switch (subcontrollerStatus.planSelection) { case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER: { setAttribute(calendar, "fill-opacity", "0.15", 999); setAttribute(calendar, "fill", "#808080", 999); break; } case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_TIMETABLE: case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_EXTERNAL_PLANS: case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_ICF: { setAttribute(calendar, "fill-opacity", "1.0", 999); setAttribute(calendar, "fill", "#0000FF", 999); break; } } /* Computer */ if ((subcontrollerStatus.planSelection == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER) || (subcontrollerStatus.centralizedMode == art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.YES)) { setAttribute(remote, "fill-opacity", "1.0", 999); setAttribute(remote, "fill", "#0000FF", 999); } else if ((subcontrollerStatus.planSelection != art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER) && (subcontrollerStatus.centralizedMode != art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.YES)) { setAttribute(remote, "fill-opacity", "0.15", 999); setAttribute(remote, "fill", "#808080", 999); } /* Running */ if ((controllerStatus.groupsRealtime == art.library.model.devices.colors.controller.M.M_ControllerStatus.YES) || (controllerStatus.detectorsRealtime == art.library.model.devices.colors.controller.M.M_ControllerStatus.YES)) { setAttribute(run, "fill-opacity", "1.0", 999); setAttribute(run, "fill", "#0000FF", 999); } else if ((controllerStatus.groupsRealtime == art.library.model.devices.colors.controller.M.M_ControllerStatus.NO) && (controllerStatus.detectorsRealtime == art.library.model.devices.colors.controller.M.M_ControllerStatus.NO)) { setAttribute(run, "fill-opacity", "0.15", 999); setAttribute(run, "fill", "#808080", 999); } /* Alarm */ double strokeopacity = Math.pow(2, controller.getDeviceAlarms().getServerityAlarm()) / 32; if (controller.getDeviceAlarms().getServerityAlarm() > 0) { setAttribute(border, "display", "inline"); setAttribute(border, "stroke", "#FF0000"); setAttribute(border, "stroke-opacity", strokeopacity); setAttribute(border, "stroke-width", 6.5); } else { setAttribute(border, "stroke", "#808080"); setAttribute(border, "display", "inline"); setAttribute(border, "stroke-width", 6.5); setAttribute(border, "stroke-opacity", 0.25); } /* Status */ switch (subcontrollerStatus.colorsMode) { case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.COLORS_OFF: setAttribute(background, "fill", "#808080"); setAttribute(ribbon, "stroke", "#808080"); setAttribute(elapsed2, "fill", "#808080"); setText(getARTElement("textInformation"), "OFF"); return; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.COLORS_FLASHING: setAttribute(background, "fill", "#FFFF00"); setAttribute(ribbon, "stroke", "#FFFF00"); setAttribute(elapsed2, "fill", "#FFFF00"); setText(getARTElement("textInformation"), "Y^"); return; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.COLORS_COLORS: setAttribute(background, "fill", "#FFFFFF"); setAttribute(ribbon, "stroke", "#FFFFFF"); setAttribute(elapsed2, "fill", "#0000FF"); break; } /* State, cycle */ art.library.model.devices.colors.controller.M.configuration.M_Plan plan = null; if (subcontrollerStatus.plan > 0) { try { plan = subcontrollerConfiguration.getMPlan(subcontrollerRealtime.plan); } catch (Exception e) { } } else { plan = subcontrollerStatus.recordablePlan; } if (plan != null) { String information = ""; switch (subcontrollerStatus.operationMode) { case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.OPERATIONMODE_FIXED: information = "F"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.OPERATIONMODE_SEMIACTUATED: information = "S"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.OPERATIONMODE_ACTUATED: information = "A"; break; } information = information + plan.number; switch (subcontrollerStatus.planSelection) { case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_TIMETABLE: information = information + "t"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_EXTERNAL_PLANS: information = information + "e"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_ICF: information = information + "i"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER: information = information + "c"; break; } switch (subcontrollerStatus.planSelectionComputer) { case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER_MACRO: information = information + ""; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER_PLAN_SELECTION: information = information + "+"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER_PLAN_GENERATION: information = information + "+"; break; case art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller.PLANSELECTION_COMPUTER_ADAPTATIVE: information = information + "+"; break; } setText(getARTElement("textInformation"), information); if (plan.offset > 0) { setText(getARTElement("textOffset"), "" + plan.offset); } else { setText(getARTElement("textOffset"), ""); } setText(getARTElement("textCycle"), "" + plan.cycleTime); if (subcontrollerRealtime != null) { String text = subcontrollerRealtime.phase + ":" + subcontrollerRealtime.cycle; switch (subcontrollerRealtime.adjust) { case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeSubcontroller.ADJUST_POSITIVE: text = text + "+"; break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeSubcontroller.ADJUST_NEGATIVE: text = text + "-"; break; } setText(getARTElement("textElapsed"), text); setAttribute(elapsed1, "display", "inline"); setAttribute(elapsed2, "display", "inline"); int elapsedWidth = getAttributeInteger(elapsed1, "width") - 2; float ratio = (float) subcontrollerRealtime.cycle / (float) plan.cycleTime; setAttribute(elapsed2, "width", (elapsedWidth * Math.min(1.0f, ratio))); update(elapsed2); } } } enum GROUP_STATE { OFF(null,null), GO("#00FF00", null), STOP(null,"#FF0000"), UNKNWON("#FF00FF","#FF00FF"); private final String colorGo; private final String colorStop; private GROUP_STATE(String colorGo, String colorStop) { this.colorGo = colorGo; this.colorStop = colorStop; } public static GROUP_STATE getState(int state) { switch (state) { case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_OFF: return GROUP_STATE.OFF; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_YELLOW: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_RED: return GROUP_STATE.STOP; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FAST_FLASHING_GREEN: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLAHING_YELLOW: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_FLASHING_YELLOW_DOUBLE: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLASHING_GREEN_RED: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_RED_YELLOW: return GROUP_STATE.STOP; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_FLASHING_YELLOW_PROTECTION: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FAST_FLASHING_GREEN_FLASHING_YELLOW_PROTECTION: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_RED_FLASHING_YELLOW_PROTECTION: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_SLOW_FLASHING_GREEN: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_SLOW_FLASHING_RED: return GROUP_STATE.STOP; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLASHING_YELLOW_DOUBLE: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FAST_FLASHING_RED_FLASHING_YELLOW: return GROUP_STATE.STOP; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLASHING_YELLOW_DOUBLE_WITH_GREEN_SIGNAL: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_FLASHING_YELOW_DOUBLE_WITH_RED_SIGNAL: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_YELLOW: return GROUP_STATE.GO; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_UNKNOWN: return GROUP_STATE.UNKNWON; default: return GROUP_STATE.UNKNWON; } } public java.util.Optional getGoStateColor() { return java.util.Optional.ofNullable(colorGo); } public java.util.Optional getStopStateColor() { return java.util.Optional.ofNullable(colorStop); } } public void realtimeGroups() { art.library.model.devices.colors.controller.M.M_Controller controller = (art.library.model.devices.colors.controller.M.M_Controller) getDevice(); art.library.model.devices.colors.controller.M.M_ControllerRealtime controllerRealtime = controller.getDeviceRealtime(); /* Realtime groups */ java.util.List groups = getElements("art.device", controller.getIdentifier()); java.util.List lGoElements = getElements("art.type","go"); java.util.List lStopElements = getElements("art.type","stop"); if (controllerRealtime == null) { groups.forEach(g -> setAttribute(g, "fill", "#FF00FF")); return; } for (SVGElement group : groups.stream().filter(el -> !lGoElements.contains(el) && !lStopElements.contains(el)).toArray(SVGElement[]::new)) { int number = getAttributeInteger(group, "art.group"); setAttribute(group, "fill", "#808000"); try { art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup realTimeGroup = controllerRealtime.getStatusGroup(number); switch (realTimeGroup.getColor()) { case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_OFF: setAttribute(group, "fill", position == 0 ? "#4B4B4B" : "#4B4B4B"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN: setAttribute(group, "fill", position == 0 ? "#00E000" : "#00E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_YELLOW: setAttribute(group, "fill", position == 0 ? "#E0E000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_RED: setAttribute(group, "fill", position == 0 ? "#E00000" : "#E00000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FAST_FLASHING_GREEN: setAttribute(group, "fill", position == 0 ? "#00E000" : "#4B4B4B"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLAHING_YELLOW: setAttribute(group, "fill", position == 0 ? "#E0E000" : "#4B4B4B"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_FLASHING_YELLOW_DOUBLE: setAttribute(group, "fill", position == 0 ? "#00E000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLASHING_GREEN_RED: setAttribute(group, "fill", position == 0 ? "#00E000" : "#E00000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_RED_YELLOW: setAttribute(group, "fill", position == 0 ? "#E00000" : "#E0E0000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_FLASHING_YELLOW_PROTECTION: setAttribute(group, "fill", position == 0 ? "#00E000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FAST_FLASHING_GREEN_FLASHING_YELLOW_PROTECTION: setAttribute(group, "fill", position == 0 ? "#00E000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_RED_FLASHING_YELLOW_PROTECTION: setAttribute(group, "fill", position == 0 ? "#E00000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_SLOW_FLASHING_GREEN: setAttribute(group, "fill", position == 0 ? "#00E000" : "#4B4B4B"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_SLOW_FLASHING_RED: setAttribute(group, "fill", position == 0 ? "#E00000" : "#4B4B4B"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLASHING_YELLOW_DOUBLE: setAttribute(group, "fill", position == 0 ? "#E0E000" : "#4B4B4B"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FAST_FLASHING_RED_FLASHING_YELLOW: setAttribute(group, "fill", position == 0 ? "#E00000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_FLASHING_YELLOW_DOUBLE_WITH_GREEN_SIGNAL: setAttribute(group, "fill", position == 0 ? "#E0E000" : "#00E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_FLASHING_YELOW_DOUBLE_WITH_RED_SIGNAL: setAttribute(group, "fill", position == 0 ? "#E0E000" : "#E00000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_GREEN_YELLOW: setAttribute(group, "fill", position == 0 ? "#00E000" : "#E0E000"); break; case art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeGroup.M_GROUP_COLOR_UNKNOWN: setAttribute(group, "fill", position == 0 ? "#E000E0" : "#E000E0"); break; } GROUP_STATE currentState = GROUP_STATE.getState(realTimeGroup.getColor()); lGoElements.stream().filter(element -> getAttributeInteger(element, "art.group") == number).forEach(element -> { java.util.Optional color = currentState.getGoStateColor(); if (color.isPresent()) { setAttribute(element, "display", "inline", 999); setAttribute(element, "stroke", color.get(), 999); } else setAttribute(element, "display", "none",999); }); lStopElements.stream().filter(element -> getAttributeInteger(element, "art.group") == number).forEach(element -> { java.util.Optional color = currentState.getStopStateColor(); if(color.isPresent()) { setAttribute(element, "display", "inline",999); setAttribute(element, "stroke", color.get(),999); } else setAttribute(element, "display", "none",999); }); } catch (Exception e) { setAttribute(group, "fill", "#C000C0"); } } } }