From 88d9115db94d0e8c8ce7e7d072cfae82dfb74816 Mon Sep 17 00:00:00 2001 From: Brad Gonzales Date: Thu, 13 Sep 2012 14:20:23 -0500 Subject: [PATCH] Issue #1158 Changed the scheduled and alerted alarm containers in SCANAlarmAlertManager to be sychronized. Changed the alarm button and alarm in SCANCellTableDlg to show and alarm only when the current table has alarms. Turn off alarms if the threshold has changed. Also a fix for ScanResource to initialize the ScanDrawer only after it has initialized the GeodeticCalculator. Former-commit-id: 02ca1776b49abd431a408e6284b16dbb0fec8a01 [formerly e1f97dfdf69c0cf625555372e8855d85967c4b2a] Former-commit-id: 1ed32bdefcc9831f20eceb9bb259b7dbee3b7ce0 --- .../commondialogs/SCANAlarmThreshDlg.java | 16 +++++++++++ .../monitor/scan/resource/ScanResource.java | 4 +-- .../monitor/scan/tables/AbstractTableDlg.java | 4 +++ .../scan/tables/SCANAlarmAlertManager.java | 28 +++++++++++-------- .../monitor/scan/tables/SCANCellTableDlg.java | 21 ++++++++++++-- .../monitor/scan/tables/SCANDmdTableDlg.java | 18 ++++++++++-- .../monitor/scan/tables/SCANMesoTableDlg.java | 10 +++++++ .../monitor/scan/tables/SCANTvsTableDlg.java | 10 +++++++ 8 files changed, 93 insertions(+), 18 deletions(-) diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/commondialogs/SCANAlarmThreshDlg.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/commondialogs/SCANAlarmThreshDlg.java index 51595064c4..17fb90f90a 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/commondialogs/SCANAlarmThreshDlg.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/commondialogs/SCANAlarmThreshDlg.java @@ -19,6 +19,8 @@ **/ package com.raytheon.uf.viz.monitor.scan.commondialogs; +import java.util.Set; + import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; @@ -40,8 +42,12 @@ import org.eclipse.swt.widgets.Text; import com.raytheon.uf.common.monitor.scan.config.AbsConfigMgr; import com.raytheon.uf.common.monitor.scan.config.SCANConfig; import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables; +import com.raytheon.uf.viz.monitor.scan.ScanMonitor; +import com.raytheon.uf.viz.monitor.scan.tables.AbstractTableDlg; import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager; +import com.raytheon.uf.viz.monitor.scan.tables.SCANCellTableDlg; import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlarmType; +import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlertedAlarms; import com.raytheon.viz.ui.dialogs.CaveSWTDialog; public class SCANAlarmThreshDlg extends CaveSWTDialog implements @@ -239,6 +245,16 @@ public class SCANAlarmThreshDlg extends CaveSWTDialog implements @Override public void widgetSelected(SelectionEvent e) { alarmChoiceChanged(); + String columnName = attributeCbo.getText(); + mgr.clearAlertedAlarms(site, scanTable); + AbstractTableDlg tableDlg = ScanMonitor.getInstance() + .getDialog(scanTable, site); + tableDlg.updateThresh(columnName); + if (mgr.getAlertedAlarmCount(site, scanTable) == 0) { + tableDlg.turnOffAlarm(); + } else { + tableDlg.turnOnAlarm(); + } shell.dispose(); } }); diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/resource/ScanResource.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/resource/ScanResource.java index 0b314f53ec..5d50f74561 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/resource/ScanResource.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/resource/ScanResource.java @@ -157,7 +157,7 @@ public class ScanResource extends VizApp.runAsync(new Runnable() { @Override public void run() { - if (getScanDrawer().font != null) { + if (gc != null && getScanDrawer().font != null) { getScanDrawer().font.setMagnification(getCapability( MagnificationCapability.class).getMagnification() .floatValue()); @@ -560,7 +560,7 @@ public class ScanResource extends * @return */ public ScanDrawer getScanDrawer() { - if (drawer == null) { + if (drawer == null && gc != null) { if (getTable().equals(ScanTables.CELL)) { drawer = new ScanDrawer(SCANConfig.getInstance() .getStormCellConfig(), gc, getScan() diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/AbstractTableDlg.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/AbstractTableDlg.java index 87403d054d..2e0e577380 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/AbstractTableDlg.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/AbstractTableDlg.java @@ -765,4 +765,8 @@ public abstract class AbstractTableDlg extends Dialog implements IMonitor, protected abstract void handleRankMenuEvent(SelectionEvent event); public abstract void updateThresh(String attr); + + public abstract void turnOffAlarm(); + + public abstract void turnOnAlarm(); } diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANAlarmAlertManager.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANAlarmAlertManager.java index cbd4eaeb10..148ea934d3 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANAlarmAlertManager.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANAlarmAlertManager.java @@ -21,10 +21,13 @@ package com.raytheon.uf.viz.monitor.scan.tables; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; @@ -36,6 +39,7 @@ import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums; import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables; import com.raytheon.uf.viz.monitor.scan.ScanMonitor; import com.raytheon.uf.viz.monitor.scan.data.ScanDataGenerator; +import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlarmType; /** * Manager class to hold between scan dialog and alarming capabilities @@ -74,11 +78,11 @@ public class SCANAlarmAlertManager { private static SCANAlarmAlertManager instance = null; - private HashMap>> scheduledAlarmsMap; + private Map>> scheduledAlarmsMap; - private HashMap>> alertedAlarmsMap; + private Map>> alertedAlarmsMap; - private HashMap>> idents; + private Map>> idents; private boolean ring = false; @@ -98,7 +102,7 @@ public class SCANAlarmAlertManager { public void addSite(String site) { if (!scheduledAlarmsMap.containsKey(site)) { - HashMap> siteScheduledAlarmsMap = new HashMap>(); + Map> siteScheduledAlarmsMap = Collections.synchronizedMap(new HashMap>()); siteScheduledAlarmsMap.put(ScanTables.DMD, new CopyOnWriteArrayList()); siteScheduledAlarmsMap.put(ScanTables.CELL, @@ -107,7 +111,7 @@ public class SCANAlarmAlertManager { } if (!alertedAlarmsMap.containsKey(site)) { - HashMap> siteAlertedAlarmsSet = new HashMap>(); + Map> siteAlertedAlarmsSet = Collections.synchronizedMap(new HashMap>()); siteAlertedAlarmsSet.put(ScanTables.DMD, new HashSet()); siteAlertedAlarmsSet.put(ScanTables.CELL, @@ -116,7 +120,7 @@ public class SCANAlarmAlertManager { } if (!idents.containsKey(site)) { - HashMap> siteIdents = new HashMap>(); + Map> siteIdents = new HashMap>(); siteIdents.put(ScanTables.CELL, new ArrayList()); siteIdents.put(ScanTables.DMD, new ArrayList()); idents.put(site, siteIdents); @@ -126,15 +130,15 @@ public class SCANAlarmAlertManager { private SCANAlarmAlertManager() { if (scheduledAlarmsMap == null) { - scheduledAlarmsMap = new HashMap>>(); + scheduledAlarmsMap = Collections.synchronizedMap(new HashMap>>()); } if (alertedAlarmsMap == null) { - alertedAlarmsMap = new HashMap>>(); + alertedAlarmsMap = Collections.synchronizedMap(new HashMap>>()); } if (idents == null) { - idents = new HashMap>>(); + idents = new HashMap>>(); } } @@ -438,7 +442,7 @@ public class SCANAlarmAlertManager { return count; } - + public boolean containsAlarm(String site, ScanTables tableType, AlarmType type, String colName, String ident) { for (AlertedAlarms alarm : alertedAlarmsMap.get(site).get(tableType)) { @@ -493,9 +497,10 @@ public class SCANAlarmAlertManager { alarm.cleared = true; } } - + public void removeAlertedAlarms(String site, ScanTables tableType) { alertedAlarmsMap.get(site).get(tableType).clear(); + setRing(false); } /** @@ -603,4 +608,5 @@ public class SCANAlarmAlertManager { + this.row + "\nCol #:" + this.col + "\nCleared: " + cleared + "\n"; } } + } diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANCellTableDlg.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANCellTableDlg.java index d27cc25325..3f3a10758d 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANCellTableDlg.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANCellTableDlg.java @@ -475,8 +475,7 @@ public class SCANCellTableDlg extends AbstractTableDlg implements alarmDlg.open(); if (!alarmBtn.isDisposed() && (mgr.getAlertedAlarmCount(site, scanTable) == 0)) { - alarmBtn.setVisible(false); - mgr.setRing(false); + turnOffAlarm(); } } }); @@ -488,7 +487,23 @@ public class SCANCellTableDlg extends AbstractTableDlg implements timeLbl.setLayoutData(gd); } - // private void resetButtonForegroundColor(Button btn) + @Override + public void turnOffAlarm() { + if (alarmBtn != null && !alarmBtn.isDisposed()) { + alarmBtn.setVisible(false); + } + mgr.setRing(false); + } + + @Override + public void turnOnAlarm() { + if (alarmBtn != null && !alarmBtn.isDisposed()) { + alarmBtn.setVisible(true); + } + mgr.setRing(true); + } + + // private void resetButtonForegroundColor(Button btn) // { // btn.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); // } diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANDmdTableDlg.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANDmdTableDlg.java index 833d739c5f..64f217a003 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANDmdTableDlg.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANDmdTableDlg.java @@ -514,8 +514,7 @@ public class SCANDmdTableDlg extends AbstractTableDlg implements alarmsDlg.open(); if (!alarmBtn.isDisposed() && mgr.getAlertedAlarms(site, scanTable).isEmpty()) { - alarmBtn.setVisible(false); - mgr.setRing(false); + turnOffAlarm(); } } }); @@ -1299,4 +1298,19 @@ public class SCANDmdTableDlg extends AbstractTableDlg implements dmdTableComp.alarmSelection(ident); } + + public void turnOffAlarm() { + if (alarmBtn != null && !alarmBtn.isDisposed()) { + alarmBtn.setVisible(false); + } + mgr.setRing(false); + } + + public void turnOnAlarm() { + if (alarmBtn != null && !alarmBtn.isDisposed()) { + alarmBtn.setVisible(true); + } + mgr.setRing(true); + } + } diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANMesoTableDlg.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANMesoTableDlg.java index 118f85283a..e837e49f45 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANMesoTableDlg.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANMesoTableDlg.java @@ -647,4 +647,14 @@ public class SCANMesoTableDlg extends AbstractTableDlg implements return false; } + @Override + public void turnOffAlarm() { + mgr.setRing(false); + } + + @Override + public void turnOnAlarm() { + mgr.setRing(true); + } + } diff --git a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANTvsTableDlg.java b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANTvsTableDlg.java index bc129ffa75..aca8b68deb 100644 --- a/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANTvsTableDlg.java +++ b/cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/tables/SCANTvsTableDlg.java @@ -609,4 +609,14 @@ public class SCANTvsTableDlg extends AbstractTableDlg implements // Not currently used for TVS return false; } + + @Override + public void turnOffAlarm() { + mgr.setRing(false); + } + + @Override + public void turnOnAlarm() { + mgr.setRing(true); + } }