package art.client.maps;
|
|
import art.client.models.Shared;
|
import art.library.model.devices.Device;
|
import art.library.model.devices.DeviceGraphicsRuntime;
|
import art.library.model.devices.DeviceStatus;
|
import art.library.model.devices.vms.asf.Asf;
|
import art.library.model.devices.vms.pvv.Pvv;
|
import art.library.model.devices.vms.pvv.PvvAlarms;
|
import art.library.model.devices.vms.pvv.PvvStatus;
|
import com.kitfox.svg.*;
|
import java.lang.reflect.Method;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
|
public class VigicatCUC extends DeviceGraphicsRuntime
|
{
|
private Set<Class> deviceClasses = null;
|
private final HashMap<SVGElement,Runnable> mapRunnableElements = new HashMap();
|
|
public VigicatCUC (SVGDiagram diagram)
|
{
|
super(diagram);
|
}
|
|
public void status()
|
{
|
|
if (deviceClasses == null)
|
{
|
deviceClasses = Shared.model.modelDevices.getDevicesListRead().stream().map(Device::getClass).collect(Collectors.toSet());
|
}
|
|
getElementsContainingField("art.device").parallelStream().forEach(this::refreshElement);
|
}
|
|
private void refreshElement(SVGElement element)
|
{
|
try
|
{
|
if (mapRunnableElements.containsKey(element))
|
{
|
mapRunnableElements.get(element).run();
|
}
|
else
|
{
|
for (Class deviceClass : deviceClasses)
|
{
|
if (Shared.model.modelDevices.getDevice(getAttribute(element, "art.device")).getClassName().equals(deviceClass.getName()))
|
{
|
Method method = this.getClass().getMethod("status", deviceClass, SVGElement.class);
|
Device device = Shared.model.modelDevices.getDevice(getAttribute(element, "art.device"));
|
|
mapRunnableElements.put(element, () ->
|
{
|
try{ method.invoke(this, device, element);}
|
catch (Exception ex){}
|
});
|
mapRunnableElements.get(element).run();
|
break;
|
}
|
}
|
}
|
} catch (Exception e)
|
{
|
}
|
}
|
|
//<editor-fold defaultstate="collapsed" desc="ASF">
|
public void status(Asf svgDevice, SVGElement element)
|
{
|
System.out.println("Painting ASF -> " + svgDevice.getIdentifier());
|
DeviceStatus status = svgDevice.getDeviceStatus();
|
|
SVGElement background = getChildContainingField(element, "art.id", "Background");
|
SVGElement border = getChildContainingField(element, "art.id", "Border");
|
|
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
|
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
|
|
System.out.println("Finished painting ASF -> " + svgDevice.getIdentifier());
|
}
|
//</editor-fold>
|
|
//<editor-fold defaultstate="collapsed" desc="PVV">
|
public void status(Pvv svgDevice, SVGElement element)
|
{
|
if (getChildContainingField(element, "art.id", "Alarm") != null)
|
paintBigPvvElement(svgDevice, element);
|
else
|
paintSmallPvvElement(svgDevice, element);
|
}
|
|
private void paintSmallPvvElement(Pvv svgDevice, SVGElement element)
|
{
|
DeviceStatus status = svgDevice.getDeviceStatus();
|
|
SVGElement background = getChildContainingField(element,"art.id","Background");
|
SVGElement border = getChildContainingField(element,"art.id","Border");
|
|
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
|
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
|
}
|
|
private void paintBigPvvElement(Pvv svgDevice, SVGElement element)
|
{
|
PvvStatus status = svgDevice.getDeviceStatus();
|
PvvAlarms alarms = svgDevice.getDeviceAlarms();
|
|
SVGElement background = getChildContainingField(element, "art.id", "Background");
|
SVGElement border = getChildContainingField(element, "art.id", "Border");
|
SVGElement alarm = getChildContainingField(element, "art.id", "Alarm");
|
SVGElement textUnder100 = getChildContainingField(element, "art.id", "Text1");
|
SVGElement textOver100 = getChildContainingField(element, "art.id", "Text2");
|
|
setAttribute(textUnder100, "display", "none", 999);
|
setAttribute(textOver100, "display", "none", 999);
|
setAttribute(alarm, "display", "inline", 999);
|
setAttribute(alarm, "stroke", "#FF0000", 999);
|
|
setAttribute(background, "fill", "#FF00FF");
|
setAttribute(border, "stroke", "#800080");
|
|
setAttribute(alarm, "stroke-width", alarms.getServerityAlarm());
|
setAttribute(background, "fill", getGenericDualStatusColor(status.status)[0]);
|
setAttribute(border, "stroke", getGenericDualStatusColor(status.status)[1]);
|
|
if(status.state != PvvStatus.STATE_OFF)
|
{
|
SVGElement textObject = status.speed >= 100 ? textOver100 : textUnder100;
|
setText(textObject, String.valueOf(status.speed) );
|
setAttribute(textObject, "display", "inline", 999);
|
}
|
|
switch (status.status)
|
{
|
case PvvStatus.STATUS_OFFLINE:
|
case PvvStatus.STATUS_UNKNOWN:
|
setAttribute(alarm, "display", "none",999);
|
setAttribute(textOver100, "display", "none",999);
|
setAttribute(textUnder100, "display", "none",999);
|
break;
|
}
|
}
|
//</editor-fold>
|
|
private static String[] getGenericDualStatusColor(int status)
|
{
|
String color1 = "#FF00FF";
|
String color2 = "#7C007C";
|
|
switch (status)
|
{
|
case DeviceStatus.STATUS_ONLINE:
|
color1 = "#00FF00";
|
color2 = "#007C00";
|
break;
|
case DeviceStatus.STATUS_WARNING:
|
color1 = "#FFFF00";
|
color2 = "#7C7C00";
|
break;
|
case DeviceStatus.STATUS_ALARM:
|
color1 = "#FF0000";
|
color2 = "#7C0000";
|
break;
|
case DeviceStatus.STATUS_INVALID:
|
color1 = "#B97A57";
|
color2 = "#5A3B2A";
|
break;
|
case DeviceStatus.STATUS_DISABLE:
|
color1 = "#7C7C7C";
|
color2 = "#3E3E3E";
|
break;
|
case DeviceStatus.STATUS_SIMULATION:
|
color1 = "#0000FF";
|
color2 = "#00007C";
|
break;
|
case DeviceStatus.STATUS_OFFLINE:
|
color1 = "#FF00FF";
|
color2 = "#7C007C";
|
break;
|
case DeviceStatus.STATUS_UNKNOWN:
|
color1 = "#FF00FF";
|
color2 = "#7C007C";
|
break;
|
}
|
|
return new String[] {color1, color2};
|
}
|
|
|
}
|