-
+
diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java
index db8f7eeda1..3cbdd74549 100644
--- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java
+++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/library/DerivedParameterGenerator.java
@@ -76,16 +76,18 @@ import com.raytheon.uf.viz.derivparam.library.DerivParamMethod.MethodType;
*
*
* SOFTWARE HISTORY
- * Date Ticket# Engineer Description
- * ------------ ---------- ----------- --------------------------
- * Jul 03, 2008 brockwoo Initial creation
- * Nov 16, 2009 3120 rjpeter Removed use of LevelNameMappingFile.
- * Nov 20, 2009 3387 jelkins Use derived script's variableId instead
- * of filename
- * Nov 21, 2009 3576 rjpeter Refactored DerivParamDesc.
- * Jun 04, 2013 2041 bsteffen Switch derived parameters to use
- * concurrent python for threading.
- * Nov 19, 2013 2361 njensen Only shutdown if initialized
+ * Date Ticket# Engineer Description
+ * ------------- -------- ----------- --------------------------
+ * Jul 03, 2008 brockwoo Initial creation
+ * Nov 16, 2009 3120 rjpeter Removed use of LevelNameMappingFile.
+ * Nov 20, 2009 3387 jelkins Use derived script's variableId instead
+ * of filename
+ * Nov 21, 2009 3576 rjpeter Refactored DerivParamDesc.
+ * Jun 04, 2013 2041 bsteffen Switch derived parameters to use
+ * concurrent python for threading.
+ * Nov 19, 2013 2361 njensen Only shutdown if initialized
+ * Mar 27, 2014 2945 bsteffen Recursively find definitions in
+ * subdirectories.
*
*
* @author brockwoo
@@ -237,7 +239,7 @@ public class DerivedParameterGenerator implements ILocalizationFileObserver {
LocalizationContext[] contexts = pm
.getLocalSearchHierarchy(LocalizationType.CAVE_STATIC);
LocalizationFile[] xmlFiles = pm.listFiles(contexts, XML_DIR,
- new String[] { ".xml" }, false, true);
+ new String[] { ".xml" }, true, true);
JAXBManager jaxbMan;
try {
jaxbMan = new JAXBManager(DerivParamDesc.class);
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/CacheGuidanceRequest.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/CacheGuidanceRequest.java
index 0f605f729d..066c711967 100644
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/CacheGuidanceRequest.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/CacheGuidanceRequest.java
@@ -34,6 +34,7 @@ import com.raytheon.viz.aviation.guidance.GuidanceRequest;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 20, 2011 8065 rferrel Initial creation
+ * 09Apr2014 #3005 lvenable Added hashcode method.
*
*
*
@@ -76,4 +77,13 @@ public class CacheGuidanceRequest extends GuidanceRequest {
}
return false;
}
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ final int prime = 31;
+ result = (prime * result) + ((siteID == null) ? 0 : siteID.hashCode());
+ return result;
+ }
+
}
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/PythonCacheGuidanceJob.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/PythonCacheGuidanceJob.java
index 7e906888b8..bf632a6214 100644
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/PythonCacheGuidanceJob.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/cachedata/PythonCacheGuidanceJob.java
@@ -22,8 +22,11 @@ package com.raytheon.viz.aviation.cachedata;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import jep.JepException;
@@ -56,6 +59,10 @@ import com.raytheon.viz.aviation.monitor.AvnPyUtil;
* adding dispose listener when not on the
* UI thread.
* Aug 26, 2013 #2283 lvenable Cleaned up some synchronized code.
+ * 09Apr2014 #3005 lvenable Remove waitMonitor, replaced waitList array with a Set,
+ * updated queueList to be a LinkedHashSet, added a catch
+ * to capture a throwable to prevent the thread from dying
+ * prematurely.
*
*
*
@@ -90,17 +97,12 @@ public class PythonCacheGuidanceJob extends
/**
* Current executing thread or null if none pending.
*/
- private CacheGuidanceRequest request = null;
+ private volatile CacheGuidanceRequest request = null;
/**
- * List of requests whose results are waiting to be cached.
+ * Set of requests whose results are waiting to be cached.
*/
- private List waitList;
-
- /**
- * Object to synchronize threads waiting on requests.
- */
- private Object waitMonitor;
+ private Set waitSet;
/**
* Object to synchronize suspending/restarting the instance of this class.
@@ -146,10 +148,9 @@ public class PythonCacheGuidanceJob extends
private PythonCacheGuidanceJob(String name) {
super(name);
siteObjMaps = new HashMap>();
- waitMonitor = new Object();
suspendMonitor = new Object();
suspendJob = false;
- waitList = new ArrayList();
+ waitSet = new HashSet();
}
/**
@@ -202,9 +203,9 @@ public class PythonCacheGuidanceJob extends
* @param req
*/
private void waitAdd(CacheGuidanceRequest req) {
- synchronized (waitMonitor) {
- if (waitList.contains(req) == false) {
- waitList.add(req);
+ synchronized (waitSet) {
+ if (waitSet.contains(req) == false) {
+ waitSet.add(req);
}
}
}
@@ -215,9 +216,9 @@ public class PythonCacheGuidanceJob extends
* @param req
*/
private void waitRemove(CacheGuidanceRequest req) {
- synchronized (waitMonitor) {
- waitList.remove(req);
- waitMonitor.notify();
+ synchronized (waitSet) {
+ waitSet.remove(req);
+ waitSet.notifyAll();
}
}
@@ -229,31 +230,21 @@ public class PythonCacheGuidanceJob extends
*/
private synchronized void addToQueue(
List cacheRequests) {
- ArrayList queueList = new ArrayList();
+
+ Set queueSet = new LinkedHashSet(
+ cacheRequests);
+
for (CacheGuidanceRequest req : cacheRequests) {
waitAdd(req);
}
- // Get pending request to add after the cacheRequests.
- while (queue.peek() != null) {
- CacheGuidanceRequest qReq = queue.poll();
- if (cacheRequests.contains(qReq) == false) {
- queueList.add(qReq);
- }
+ queue.drainTo(queueSet);
+
+ if (request != null) {
+ queueSet.remove(request);
}
- // Add cache request to head of the queue unless it is the current
- // request.
- for (CacheGuidanceRequest req : cacheRequests) {
- if (req.equals(request) == false) {
- queue.add(req);
- }
- }
-
- // Queue other pending requests.
- for (CacheGuidanceRequest qReq : queueList) {
- queue.add(qReq);
- }
+ queue.addAll(queueSet);
}
/**
@@ -266,15 +257,15 @@ public class PythonCacheGuidanceJob extends
addToQueue(cacheRequests);
try {
for (CacheGuidanceRequest req : cacheRequests) {
- synchronized (waitMonitor) {
- while (waitList.contains(req)) {
- waitMonitor.wait();
- // Notify another waiting thread.
- waitMonitor.notify();
+ synchronized (waitSet) {
+ while (waitSet.contains(req)) {
+ waitSet.wait();
}
}
}
} catch (InterruptedException e) {
+ statusHandler.handle(Priority.PROBLEM,
+ "Error occurred when requested were being cached...", e);
}
}
@@ -368,60 +359,60 @@ public class PythonCacheGuidanceJob extends
}
try {
while (shutdown == false) {
- if (suspendJob == true) {
- synchronized (suspendMonitor) {
- queue.clear();
- siteObjMaps.clear();
- suspendMonitor.wait();
- }
- continue;
- }
- if (queue.peek() != null) {
- request = queue.poll();
- Map args = request.getPythonArguments();
- String methodName = request.getGuidanceType()
- .getPythonMethod() + "Retrieve";
- try {
- // long t0 = System.currentTimeMillis();
- String result = (String) python.execute(methodName,
- args);
- // long t1 = System.currentTimeMillis();
- String siteID = request.getSiteID();
- String tag = request.getTag();
- setSiteObj(siteID, tag, result);
- // System.out.println("Python cache guidance time: "
- // + (t1 - t0) + ", " + siteID + " - " + tag);
- waitRemove(request);
- } catch (JepException e) {
- if (e.getMessage().contains("NoDataException")) {
- String msg = e.getMessage().split("'")[3];
- statusHandler.handle(Priority.PROBLEM, msg, e);
- } else {
- statusHandler.handle(Priority.PROBLEM,
- "Error generating guidance", e);
+
+ try {
+ if (suspendJob == true) {
+ synchronized (suspendMonitor) {
+ queue.clear();
+ siteObjMaps.clear();
+ suspendMonitor.wait();
}
- } finally {
- request = null;
+ continue;
}
- } else {
- try {
- Thread.sleep(20);
- } catch (InterruptedException e) {
- break;
+ if (queue.peek() != null) {
+ request = queue.poll();
+ Map args = request.getPythonArguments();
+ String methodName = request.getGuidanceType()
+ .getPythonMethod() + "Retrieve";
+ try {
+ String result = (String) python.execute(methodName,
+ args);
+ String siteID = request.getSiteID();
+ String tag = request.getTag();
+ setSiteObj(siteID, tag, result);
+ waitRemove(request);
+ } catch (JepException e) {
+ if (e.getMessage().contains("NoDataException")) {
+ String msg = e.getMessage().split("'")[3];
+ statusHandler.handle(Priority.PROBLEM, msg, e);
+ } else {
+ statusHandler.handle(Priority.PROBLEM,
+ "Error generating guidance", e);
+ }
+ } finally {
+ request = null;
+ }
+ } else {
+ try {
+ Thread.sleep(20);
+ } catch (InterruptedException e) {
+ break;
+ }
}
+ } catch (Throwable t) {
+ statusHandler.handle(Priority.PROBLEM,
+ "Error generating guidance", t);
}
}
- } catch (InterruptedException e) {
- // Just go away
} finally {
siteObjMaps.clear();
if (python != null) {
python.dispose();
python = null;
}
- synchronized (waitMonitor) {
- waitList.clear();
- waitMonitor.notify();
+ synchronized (waitSet) {
+ waitSet.clear();
+ waitSet.notifyAll();
}
}
return Status.OK_STATUS;
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/HeaderTextComp.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/HeaderTextComp.java
index 51ca71d2e4..167220fe6a 100755
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/HeaderTextComp.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/HeaderTextComp.java
@@ -58,8 +58,10 @@ import com.raytheon.viz.aviation.resource.ResourceConfigMgr.ResourceTag;
* 12/01/2010 3263 rferrel Added mouse track listener in order to
* display tool tip in dataStTxt.
* 12/09/2010 7380 rferrel Remove no longer needed constructor and now
- * adjust both hight and width of text filed.
+ * adjust both height and width of text filed.
* 12 Aug 2013 #2256 lvenable Added code to dispose of the cursor.
+ * 09Apr2014 #3005 lvenable Added methods to clear the header and data text controls or
+ * mark then as updating. Removed unused methods.
*
*
*
@@ -331,13 +333,19 @@ public class HeaderTextComp extends Composite {
}
/**
- * Method that sets the header styled text edit area.
- *
- * @param headerStTxt
- * the headerStTxt to set
+ * Clear the header text and data text controls.
*/
- public void setHeaderStTxt(StyledText headerStTxt) {
- this.headerStTxt = headerStTxt;
+ public void clearTextControls() {
+ headerStTxt.setText("");
+ dataStTxt.setText("");
+ }
+
+ /**
+ * Set the header text and data text controls to display "updating...".
+ */
+ public void markTextAsUpdating() {
+ headerStTxt.setText("updating...");
+ dataStTxt.setText("updating...");
}
/**
@@ -348,14 +356,4 @@ public class HeaderTextComp extends Composite {
public StyledText getDataStTxt() {
return dataStTxt;
}
-
- /**
- * Method that sets the data styled text edit area.
- *
- * @param dataStTxt
- * the dataStTxt to set
- */
- public void setDataStTxt(StyledText dataStTxt) {
- this.dataStTxt = dataStTxt;
- }
}
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/TafViewerEditorDlg.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/TafViewerEditorDlg.java
index 1ee4722f49..0595704eb8 100644
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/TafViewerEditorDlg.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/TafViewerEditorDlg.java
@@ -231,6 +231,8 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
* 10/24/2013 16478 zhao add syntax check for extra '=' sign
* 02/12/2014 17076 lvenable Mark guidance tabs as not current so they get refreshed
* 02/19/2014 16980 zhao add code to ensure the Alt flag is false after the Alt kay is released
+ * 09Apr2014 #3005 lvenable Added calls to mark the tabs as not current when the tabs are changed.
+ * This will show the tab as updating in the header and data text controls.
*
*
*
@@ -777,19 +779,19 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
}
}
+ /**
+ * Mark the tabs as not current so they get refreshed.
+ */
+ private void markTabsAsNotCurrent() {
+ for (TabItem tbi : guidanceViewerFolder.getItems()) {
+ if (tbi.getControl() instanceof ViewerTab) {
+ ((ViewerTab) tbi.getControl()).setDisplayCurrent(false);
+ ((ViewerTab) tbi.getControl()).markTextAsUpdating();
+ }
+ }
+ }
- /**
- * Mark the tabs as not current so they get refreshed.
- */
- private void markTabsAsNotCurrent() {
- for (TabItem tbi : guidanceViewerFolder.getItems()) {
- if (tbi.getControl() instanceof ViewerTab) {
- ((ViewerTab) tbi.getControl()).setDisplayCurrent(false);
- }
- }
- }
-
- @Override
+ @Override
public void clearAll() {
if (shell == null) {
return;
@@ -1095,7 +1097,7 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
fileMenuItem.setMenu(fileMenu);
fileMenu.addListener(SWT.Show, new Listener() {
public void handleEvent(Event event) {
- setAltFlagForEditorTafTabComp();
+ setAltFlagForEditorTafTabComp();
}
});
@@ -1206,7 +1208,7 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
optionsMenuItem.setMenu(optionsMenu);
optionsMenu.addListener(SWT.Show, new Listener() {
public void handleEvent(Event event) {
- setAltFlagForEditorTafTabComp();
+ setAltFlagForEditorTafTabComp();
}
});
@@ -1285,10 +1287,10 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
editMenuItem.setMenu(editMenu);
editMenu.addListener(SWT.Show, new Listener() {
public void handleEvent(Event event) {
- setAltFlagForEditorTafTabComp();
+ setAltFlagForEditorTafTabComp();
}
});
-
+
// -------------------------------------------------
// Create all the items in the Edit dropdown menu
// -------------------------------------------------
@@ -1362,19 +1364,18 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
}
});
}
-
+
/**
- * When respectively using alt+'f', alt+'e', alt+'o' and alt+'h'
- * to open/display menus 'File', 'Edit', 'Options' and 'Help',
- * the alt flag of the editorTafTabComp object is set to true;
- * it needs to be re-set to false
- * (DR16980)
+ * When respectively using alt+'f', alt+'e', alt+'o' and alt+'h' to
+ * open/display menus 'File', 'Edit', 'Options' and 'Help', the alt flag of
+ * the editorTafTabComp object is set to true; it needs to be re-set to
+ * false (DR16980)
*/
- private void setAltFlagForEditorTafTabComp() {
- if ( editorTafTabComp.getAlt() ) {
- editorTafTabComp.setAlt(false);
- }
- }
+ private void setAltFlagForEditorTafTabComp() {
+ if (editorTafTabComp.getAlt()) {
+ editorTafTabComp.setAlt(false);
+ }
+ }
/**
* Create the Help menu.
@@ -1394,7 +1395,7 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
helpMenuItem.setMenu(helpMenu);
helpMenu.addListener(SWT.Show, new Listener() {
public void handleEvent(Event event) {
- setAltFlagForEditorTafTabComp();
+ setAltFlagForEditorTafTabComp();
}
});
@@ -2018,7 +2019,7 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
configMgr.setDefaultFontAndColors(applyBtn);
applyBtn.addSelectionListener(new SelectionAdapter() {
@Override
- public void widgetSelected(SelectionEvent event) {
+ public void widgetSelected(SelectionEvent event) {
if (editorTafTabComp.getTextEditorControl().getText() != null
&& !editorTafTabComp.getTextEditorControl().getText()
.isEmpty()) {
@@ -2031,12 +2032,12 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
String toolName = toolsCbo.getItem(toolsCbo
.getSelectionIndex());
String bbb = editorTafTabComp.getBBB();
-
+
// DR166478
- if ( toolName.equals("UseMetarForPrevailing") ) {
- if ( checkBasicSyntaxError(true) ) {
- return;
- }
+ if (toolName.equals("UseMetarForPrevailing")) {
+ if (checkBasicSyntaxError(true)) {
+ return;
+ }
}
// Setup for python request
@@ -2106,18 +2107,18 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
/**
*
* @param doLogMessage
- * @return true if error found, otherwise false
+ * @return true if error found, otherwise false
*/
private boolean checkBasicSyntaxError(boolean doLogMessage) {
- String in = editorTafTabComp.getTextEditorControl().getText();
+ String in = editorTafTabComp.getTextEditorControl().getText();
clearSyntaxErrorLevel();
st = editorTafTabComp.getTextEditorControl();
final Map syntaxMap = new HashMap();
-
+
st.addMouseTrackListener(new MouseTrackAdapter() {
@Override
public void mouseHover(MouseEvent e) {
@@ -2147,62 +2148,69 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
}
});
- int tafIndex = in.indexOf("TAF");
+ int tafIndex = in.indexOf("TAF");
int equalSignIndex = in.indexOf("=");
int lastEqualSignIndex = equalSignIndex;
-
- if ( tafIndex < 0 && equalSignIndex < 0 ) { // empty TAF
- return false;
+
+ if (tafIndex < 0 && equalSignIndex < 0) { // empty TAF
+ return false;
}
-
+
while (tafIndex > -1 || equalSignIndex > -1) {
- if ( tafIndex == -1 || tafIndex > equalSignIndex ) {
-
- int lineIndexOfFirstEqualSign = st.getLineAtOffset(lastEqualSignIndex);
- int lineIndexOfSecondEqualSign = st.getLineAtOffset(equalSignIndex);
- if ( lineIndexOfFirstEqualSign == lineIndexOfSecondEqualSign ) {
- StyleRange sr = new StyleRange(lastEqualSignIndex,1,null,qcColors[3]);
- String msg = "Syntax error: there is an extra '=' sign in this line";
- syntaxMap.put(sr, msg);
- st.setStyleRange(null);
- st.setStyleRange(sr);
+ if (tafIndex == -1 || tafIndex > equalSignIndex) {
+
+ int lineIndexOfFirstEqualSign = st
+ .getLineAtOffset(lastEqualSignIndex);
+ int lineIndexOfSecondEqualSign = st
+ .getLineAtOffset(equalSignIndex);
+ if (lineIndexOfFirstEqualSign == lineIndexOfSecondEqualSign) {
+ StyleRange sr = new StyleRange(lastEqualSignIndex, 1, null,
+ qcColors[3]);
+ String msg = "Syntax error: there is an extra '=' sign in this line";
+ syntaxMap.put(sr, msg);
+ st.setStyleRange(null);
+ st.setStyleRange(sr);
if (doLogMessage) {
msgStatComp.setMessageText(msg, qcColors[3].getRGB());
}
return true;
- }
-
- int startIndex = lastEqualSignIndex;
-
- while ( !in.substring(startIndex,startIndex+1).matches("[A-Z]") && !in.substring(startIndex,startIndex+1).matches("[0-9]") ) {
- startIndex++;
- }
- int length = 6;
- if ( (equalSignIndex-startIndex) < 6 ) {
- length = equalSignIndex-startIndex;
- }
- StyleRange sr = new StyleRange(startIndex,length,null,qcColors[3]);
- String msg = "Syntax error: There is an extra '=' sign before this point, or 'TAF' is missing at beginning of TAF";
- syntaxMap.put(sr, msg);
- st.setStyleRange(null);
- st.setStyleRange(sr);
+ }
+
+ int startIndex = lastEqualSignIndex;
+
+ while (!in.substring(startIndex, startIndex + 1).matches(
+ "[A-Z]")
+ && !in.substring(startIndex, startIndex + 1).matches(
+ "[0-9]")) {
+ startIndex++;
+ }
+ int length = 6;
+ if ((equalSignIndex - startIndex) < 6) {
+ length = equalSignIndex - startIndex;
+ }
+ StyleRange sr = new StyleRange(startIndex, length, null,
+ qcColors[3]);
+ String msg = "Syntax error: There is an extra '=' sign before this point, or 'TAF' is missing at beginning of TAF";
+ syntaxMap.put(sr, msg);
+ st.setStyleRange(null);
+ st.setStyleRange(sr);
if (doLogMessage) {
msgStatComp.setMessageText(msg, qcColors[3].getRGB());
}
-
- return true;
- }
-
- tafIndex = in.indexOf("TAF", tafIndex+1);
- lastEqualSignIndex = equalSignIndex;
- equalSignIndex = in.indexOf("=", equalSignIndex+1);
- }
-
- return false;
- }
- private void syntaxCheck() {
+ return true;
+ }
+
+ tafIndex = in.indexOf("TAF", tafIndex + 1);
+ lastEqualSignIndex = equalSignIndex;
+ equalSignIndex = in.indexOf("=", equalSignIndex + 1);
+ }
+
+ return false;
+ }
+
+ private void syntaxCheck() {
// Assume editorTafTabComp is for the active tab.
st = editorTafTabComp.getTextEditorControl();
st.setText(st.getText().toUpperCase());
@@ -2383,6 +2391,7 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
.getSelectionIndex());
String site = currentTab.getSite(siteID);
currentTab.generateGuidance(site);
+ currentTab.markTextAsUpdating();
}
}
@@ -4302,11 +4311,7 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
populateTafViewer();
// Mark tab displays no longer current.
- for (TabItem tbi : guidanceViewerFolder.getItems()) {
- if (tbi.getControl() instanceof ViewerTab) {
- ((ViewerTab) tbi.getControl()).setDisplayCurrent(false);
- }
- }
+ markTabsAsNotCurrent();
// Update the metar and mos guidance in the viewer tab.
updateViewerTab(stationName);
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceRequest.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceRequest.java
index 4a7e35618c..efcfe49b1c 100644
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceRequest.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceRequest.java
@@ -36,6 +36,7 @@ import com.raytheon.uf.viz.core.jobs.QueueJobRequest;
* Jul 28, 2009 njensen Initial creation
* Nov 12, 2010 6195 rferrel Added types for clearing cache.
* Apr 14, 2011 8065 rferrel Implement equals
+ * 10Apr2014 #3005 lvenable Added Eclipse generated hashcode method.
*
*
*
@@ -212,6 +213,19 @@ public class GuidanceRequest extends QueueJobRequest {
this.tag = tag;
}
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((format == null) ? 0 : format.hashCode());
+ result = prime * result
+ + ((guidanceType == null) ? 0 : guidanceType.hashCode());
+ result = prime * result + ((model == null) ? 0 : model.hashCode());
+ result = prime * result + ((siteIDs == null) ? 0 : siteIDs.hashCode());
+ result = prime * result + ((tag == null) ? 0 : tag.hashCode());
+ return result;
+ }
+
/*
* (non-Javadoc)
*
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/MetarViewer.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/MetarViewer.java
index bbd0b85599..cb8c5b3f71 100644
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/MetarViewer.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/MetarViewer.java
@@ -63,7 +63,10 @@ import com.raytheon.viz.aviation.resource.ResourceConfigMgr.ResourceTag;
* and set default value for check hours.
* 04/28/2011 8065 rferrel Add flag to indicate display is current
* and implement data caching
- * 31JUL2012 14570 zhao Highlight Metar alert for case of 'cat'
+ * 31JUL2012 14570 zhao Highlight Metar alert for case of 'cat'
+ * 09Apr2014 #3005 lvenable Added method call to mark the data and header text
+ * controls to updating when the number
+ * of hours has changed (via combo control).
*
*
*
@@ -127,8 +130,10 @@ public class MetarViewer extends ViewerTab implements
*/
private static final HashMap alertMap = new HashMap();
static {
- //alertMap.put("cat", new String[] { "", "", "", "" }); // 14570
- alertMap.put("tempo", new String[] { "", "", "", "", "", "", "", "" }); // 14570
+ // alertMap.put("cat", new String[] { "", "", "",
+ // "" }); // 14570
+ alertMap.put("tempo", new String[] { "", "", "",
+ "", "", "", "", "" }); // 14570
alertMap.put("vsby", new String[] { "", "" });
alertMap.put("wind", new String[] { "", "" });
alertMap.put("wx", new String[] { "", "" });
@@ -256,6 +261,7 @@ public class MetarViewer extends ViewerTab implements
@Override
public void widgetSelected(SelectionEvent event) {
// Update the metar in the viewer tab.
+ markTextAsUpdating();
if (MetarViewer.this.allChk.getSelection()) {
allChkHrs = numHrsCbo.getItem(numHrsCbo.getSelectionIndex());
} else {
@@ -411,12 +417,13 @@ public class MetarViewer extends ViewerTab implements
if (alertMap != null && alertMap.size() > 0) {
for (String key : alertMap.keySet()) {
- if ( key.equals("cat") ) { // "cat" involves "visibility" and "sky condition"
- colorViewerAlert("vsby", configMgr);
- colorViewerAlert("sky", configMgr);
- } else {
- colorViewerAlert(key, configMgr);
- }
+ if (key.equals("cat")) { // "cat" involves "visibility" and
+ // "sky condition"
+ colorViewerAlert("vsby", configMgr);
+ colorViewerAlert("sky", configMgr);
+ } else {
+ colorViewerAlert(key, configMgr);
+ }
}
}
}
diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/ViewerTab.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/ViewerTab.java
index 4b14345a15..f0c3f59911 100644
--- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/ViewerTab.java
+++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/ViewerTab.java
@@ -63,6 +63,8 @@ import com.raytheon.viz.avnconfig.TafSiteData;
* Apr 28,2011 8065 rferrel Add flag to indicate display is current
* and implement data caching
* Jun 1, 2011 9673 rferrel Added fltCatFontColor.
+ * 09Apr2014 #3005 lvenable Marked currentTab as volatile, added call through
+ * methods to the HeaderTextComp class.
*
*
*
@@ -141,7 +143,7 @@ public abstract class ViewerTab extends Composite {
/**
* True when tab is selected for display.
*/
- private boolean currentTab = false;
+ private volatile boolean currentTab = false;
/**
* Flight Category's font color.
@@ -303,7 +305,7 @@ public abstract class ViewerTab extends Composite {
* to determine the last request queued so it will be the one to populate
* the tab.
*/
- private AtomicInteger generatGuidanceCount = new AtomicInteger(
+ private AtomicInteger generateGuidanceCount = new AtomicInteger(
Integer.MIN_VALUE);
/**
@@ -317,7 +319,7 @@ public abstract class ViewerTab extends Composite {
* @return cnt unique count that increases each time the method is called.
*/
public int generateGuidance(String siteID) {
- int cnt = generatGuidanceCount.incrementAndGet();
+ int cnt = generateGuidanceCount.incrementAndGet();
this.siteID = siteID;
setDisplayCurrent(false);
return cnt;
@@ -331,7 +333,7 @@ public abstract class ViewerTab extends Composite {
}
/**
- * This method must to be called by the implementing class' requestComoplete
+ * This method must be called by the implementing class' requestComplete
* method after it has populated the textComp header and data section. This
* updates the highlighting of the TAF text in the viewer and adjusts the
* width of the this tab's header and data text component so they will stay
@@ -533,6 +535,20 @@ public abstract class ViewerTab extends Composite {
}
}
+ /**
+ * Clear the header and data text controls.
+ */
+ public void clearTextControls() {
+ textComp.clearTextControls();
+ }
+
+ /**
+ * Set the header and data text controls to show as updating.
+ */
+ public void markTextAsUpdating() {
+ textComp.markTextAsUpdating();
+ }
+
/**
*
* @return stationList list of sites tab needs to cache data for.
@@ -586,6 +602,7 @@ public abstract class ViewerTab extends Composite {
*/
public void queueCacheRequests(final int cnt,
final List cacheRequests) {
+
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
@@ -593,7 +610,7 @@ public abstract class ViewerTab extends Composite {
cacheRequests);
// Update tab if still current and waiting for this request
if (ViewerTab.this.isDisposed() == false && isCurrentTab()
- && generatGuidanceCount.get() == cnt) {
+ && generateGuidanceCount.get() == cnt) {
VizApp.runAsync(new Runnable() {
@Override
public void run() {
diff --git a/cave/com.raytheon.viz.ghg/localization/ghg/config/DefaultGHGMonitorConfig.xml b/cave/com.raytheon.viz.ghg/localization/ghg/config/DefaultGHGMonitorConfig.xml
index ed5785b176..985a35b045 100644
--- a/cave/com.raytheon.viz.ghg/localization/ghg/config/DefaultGHGMonitorConfig.xml
+++ b/cave/com.raytheon.viz.ghg/localization/ghg/config/DefaultGHGMonitorConfig.xml
@@ -68,11 +68,6 @@
EXT
EXA
EXB
- SV.W
- TO.W
- SVR
- SVS
- TOR
SMALL_FONT
@@ -92,38 +87,6 @@
EXB
EXT
-
- -
- filter-1
-
- false
- filter-1
- true
- true
- false
- false
- true
- true
- false
- false
-
-
- -
- filter-2
-
- true
- filter-2
- false
- false
- true
- true
- true
- true
- false
- false
-
-
-
ACTION
ETN
PHEN_SIG
@@ -136,4 +99,5 @@
PURGE
false
+ true
\ No newline at end of file
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgDisplayManager.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgDisplayManager.java
index b9fbe28bcc..79f1f41028 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgDisplayManager.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgDisplayManager.java
@@ -32,6 +32,7 @@ import com.raytheon.viz.ghg.Activator;
import com.raytheon.viz.ghg.constants.StatusConstants;
import com.raytheon.viz.ghg.monitor.constants.GhgMenuConstants;
import com.raytheon.viz.ghg.monitor.data.GhgConfigData.DataEnum;
+import com.raytheon.viz.ghg.monitor.data.GhgConfigData;
import com.raytheon.viz.ghg.monitor.data.GhgData;
import com.raytheon.viz.ghg.monitor.event.GhgMonitorFilterChangeEvent;
import com.raytheon.viz.ghg.monitor.event.GhgMonitorTableSelectionEvent;
@@ -49,6 +50,7 @@ import com.raytheon.viz.ghg.monitor.listener.GhgMonitorZoneSelectionListener;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 10, 2010 mpduff Initial creation
+ * Apr 9, 2014 15769 ryu Moved attribute identifyTestData to configuration, as in A1.
*
*
*
@@ -78,11 +80,6 @@ public class GhgDisplayManager {
*/
private boolean showLabels = false;
- /**
- * Identify test data flag.
- */
- private boolean identifyTestData = false;
-
/**
* List of GhgData records
*/
@@ -335,19 +332,4 @@ public class GhgDisplayManager {
listener.notifyUpdate(evt);
}
}
-
- /**
- * @return the identifyTestData
- */
- public boolean isIdentifyTestData() {
- return identifyTestData;
- }
-
- /**
- * @param identifyTestData
- * the identifyTestData to set
- */
- public void setIdentifyTestData(boolean identifyTestData) {
- this.identifyTestData = identifyTestData;
- }
}
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgFilterDlg.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgFilterDlg.java
index d040c8463a..d2810e83b0 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgFilterDlg.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgFilterDlg.java
@@ -66,6 +66,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* 25 MAR 2008 N/A lvenable Initial creation
* 17Jun2008 1157 MW Fegan Hooked in configuration.
* 28 Nov 2012 1353 rferrel Changes for non-blocking dialog.
+ * 28 Mar 2014 15769 ryu Removed "include OrgPil" check button.
*
*
*
@@ -156,7 +157,7 @@ public class GhgFilterDlg extends CaveSWTDialog {
*/
private Button incPastEventsChk;
- private Button incOrgPilEvents;
+ //private Button incOrgPilEvents;
private GhgDataFilter filter = null;
@@ -238,7 +239,7 @@ public class GhgFilterDlg extends CaveSWTDialog {
filter.includeAlerts = incAlertsChk.getSelection();
filter.includeMapSelections = incMapSelectionsChk.getSelection();
filter.includePastEvents = incPastEventsChk.getSelection();
- filter.includeOrgPilEvents = incOrgPilEvents.getSelection();
+ //filter.includeOrgPilEvents = incOrgPilEvents.getSelection();
filter.name = "";
@@ -269,7 +270,7 @@ public class GhgFilterDlg extends CaveSWTDialog {
incAlertsChk.setSelection(filter.includeAlerts);
incMapSelectionsChk.setSelection(filter.includeMapSelections);
incPastEventsChk.setSelection(filter.includePastEvents);
- incOrgPilEvents.setSelection(filter.includeOrgPilEvents);
+ //incOrgPilEvents.setSelection(filter.includeOrgPilEvents);
}
/**
@@ -571,10 +572,10 @@ public class GhgFilterDlg extends CaveSWTDialog {
}
});
- incOrgPilEvents = new Button(filterOverrideGroup, SWT.CHECK);
- incOrgPilEvents.setText("Include OrgPil Events");
- incOrgPilEvents.setSelection(filter.includeOrgPilEvents);
- incOrgPilEvents.addSelectionListener(new SelectionAdapter() {
+ //incOrgPilEvents = new Button(filterOverrideGroup, SWT.CHECK);
+ //incOrgPilEvents.setText("Include OrgPil Events");
+ //incOrgPilEvents.setSelection(filter.includeOrgPilEvents);
+ //incOrgPilEvents.addSelectionListener(new SelectionAdapter() {
/*
* (non-Javadoc)
@@ -583,12 +584,14 @@ public class GhgFilterDlg extends CaveSWTDialog {
* org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
* .swt.events.SelectionEvent)
*/
+ /*
@Override
public void widgetSelected(SelectionEvent e) {
filter.includeOrgPilEvents = incOrgPilEvents.getSelection();
updateDisplay();
}
});
+ */
}
/**
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgMonitorDlg.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgMonitorDlg.java
index f52f802bb6..e9166fb512 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgMonitorDlg.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/GhgMonitorDlg.java
@@ -22,8 +22,10 @@ package com.raytheon.viz.ghg.monitor;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -115,7 +117,9 @@ import com.raytheon.viz.ui.statusline.StatusStore;
* Changes for non-blocking GhgSaveDeleteFilterDlg.
* 16 Jan 2013 1492 rferrel Changes for non-blocking GhgFontDlg.
* 29 Mar 2013 1790 rferrel Bug fix for non-blocking dialogs.
- *
+ * 10 Apr 2014 15769 ryu Modify default configuration and menus to match A1.
+ * Bring monitor to front before sending alert.
+ * Adjusted delay for timer so it fires at the top of a minute.
*
*
* @author lvenable
@@ -206,6 +210,8 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
private FilterDisplay filterDisplay;
private Menu columnsMenu;
+
+ private MenuItem identifyTestMI;
/**
* The status importance map.
@@ -264,22 +270,6 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
// If this fails, fall back to the hardcoded defaults.
GhgConfigData configuration = GhgConfigData.getInstance();
- try {
- configuration.loadDefault();
- } catch (Exception e) {
- statusHandler.handle(Priority.PROBLEM,
- "Error loading default configuration", e);
- }
-
- configuration.makeCurrentFilterDefault();
- configuration.makeCurrentAlertsDefault();
- configuration.makeVisibleColumnsDefault();
-
- configuration.setDefaultAsCurrent(FeatureEnum.FILTERS);
- configuration.setDefaultAsCurrent(FeatureEnum.ALERTS);
- configuration.setDefaultAsCurrent(FeatureEnum.COLUMNS);
- // configuration.setDefaultAsCurrent(FeatureEnum.COLORS);
-
try {
// Try and read a saved config file
configuration.load(false);
@@ -645,7 +635,7 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
// Show Fire Wx menu item
MenuItem showFireWxMI = new MenuItem(mapMenu, SWT.RADIO);
- showFireWxMI.setText("Show Fire Wx");
+ showFireWxMI.setText("Show FireWx");
showFireWxMI.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
@@ -802,12 +792,13 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
});
// Identify TEST Events menu item
- final MenuItem identifyTestMI = new MenuItem(appearanceMenu, SWT.CHECK);
+ identifyTestMI = new MenuItem(appearanceMenu, SWT.CHECK);
identifyTestMI.setText("Identify TEST Events");
+ identifyTestMI.setSelection(GhgConfigData.getInstance().isIdentifyTestEvents());
identifyTestMI.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
- GhgDisplayManager.getInstance().setIdentifyTestData(
+ GhgConfigData.getInstance().setIdentifyTestEvents(
identifyTestMI.getSelection());
}
});
@@ -1751,6 +1742,9 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
synchColumnsWithConfig();
refresh(false);
ghgTableComp.packColumns();
+
+ identifyTestMI.setSelection(
+ configuration.isIdentifyTestEvents());
}
/**
@@ -1955,7 +1949,7 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
buffer.append("Event is ongoing, but no current product exists describing event. ");
}
- buffer.append(" " + headline);
+ buffer.append(" Event=" + rec.getPhenSig() + " " + headline);
StatusMessage.Importance importance = Importance.ALERT1;
if (alertData.getAlertType() == AlertsEnum.AlertLvl2) {
@@ -1964,6 +1958,7 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
importance = Importance.EXPIRED;
}
+ bringToTop();
StatusStore.updateStatus(STATUS_KEY, buffer.toString(), importance);
}
@@ -2068,7 +2063,13 @@ public class GhgMonitorDlg extends CaveSWTDialog implements
* Initialize the auto-update timer
*/
private void initTimer() {
- int delay = 1000 * 60; // delay for 1 min.
+ Date date = SimulatedTime.getSystemTime().getTime();
+ long now = date.getTime();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.add(Calendar.MINUTE, 1);
+ cal.set(Calendar.SECOND, 0);
+ int delay = (int) (cal.getTime().getTime() - now);
int period = 1000 * 60; // repeat every min.
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/config/GhgConfigXml.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/config/GhgConfigXml.java
index 3938e603db..26c582dcd5 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/config/GhgConfigXml.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/config/GhgConfigXml.java
@@ -117,6 +117,9 @@ public final class GhgConfigXml {
@XmlElement
private boolean descending;
+
+ @XmlElement
+ private boolean identifyTestEvents;
/**
* Default constructor.
@@ -363,4 +366,19 @@ public final class GhgConfigXml {
public void setDescending(boolean descending) {
this.descending = descending;
}
+
+ /**
+ * @return the identifyTestEvents
+ */
+ public boolean isIdentifyTestEvents() {
+ return identifyTestEvents;
+ }
+
+ /**
+ * @param identifyTestEvents
+ * the identifyTestEvents to set
+ */
+ public void setIdentifyTestEvents(boolean identifyTestEvents) {
+ this.identifyTestEvents = identifyTestEvents;
+ }
}
\ No newline at end of file
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgConfigData.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgConfigData.java
index b37ef2b233..97102abcf5 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgConfigData.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgConfigData.java
@@ -82,7 +82,9 @@ import com.raytheon.viz.ui.statusline.StatusStore;
* 18Jun2008 1157 MW Fegan Use clone of default filter.
* 20Jun2008 1157 MW Fegan Add resetting to default alerts.
* 28Nov2012 1353 rferrel Sort the list of filter names for dialog display.
- *
+ * 10Apr2014 15769 ryu Modified default config and GUI items to match A1.
+ * Default config changed to hard coding instead of reading
+ * from config file.
*
*
* @author lvenable
@@ -104,8 +106,8 @@ public final class GhgConfigData {
/**
* The VTEC Action Names
*/
- public static final String[] vtecActionNames = { "CAN", "CON", "COR",
- "EXA", "EXB", "EXP", "EXT", "UPG", "NEW", "ROU" };
+ public static final String[] vtecActionNames = { "CAN", "CON",
+ "EXA", "EXB", "EXP", "EXT", "NEW", "UPG"};
/**
* The VTEC Afos Product (PIL) Names
@@ -199,6 +201,8 @@ public final class GhgConfigData {
private boolean descending;
+ private boolean identifyTestEvents;
+
/**
* Alerts enumeration. Contains the available alerts. {@code display}
* attribute contains the text to display in the Alert Dialog.
@@ -382,77 +386,12 @@ public final class GhgConfigData {
* Initialize the configuration data.
*/
private void init() {
- alertLvl1Colors = new GhgColorData(new RGB(0, 0, 255), new RGB(255,
- 255, 0));
- alertLvl2Colors = new GhgColorData(new RGB(255, 255, 255), new RGB(255,
- 0, 0));
- expiredAlertColors = new GhgColorData(new RGB(255, 255, 255), new RGB(
- 171, 0, 201));
- mapSelectionsColors = new GhgColorData(new RGB(255, 255, 255), new RGB(
- 0, 218, 240));
- regularEntriesColors = new GhgColorData(new RGB(0, 0, 0), new RGB(180,
- 180, 180));
- monitorSelectionsColors = new GhgColorData(new RGB(255, 255, 255),
- new RGB(0, 0, 255));
- testProductsColors = new GhgColorData(new RGB(255, 255, 255), new RGB(
- 128, 128, 128));
-
- /* create the default alerts data */
- defaultAlerts = new GhgAlertsConfigData();
- defaultAlerts.setLocal(false);
- defaultAlerts.setTest(false);
- defaultAlerts.addAlert(new GhgAlertData(true, true, 10,
- AlertsEnum.AlertLvl1));
- defaultAlerts.addAlert(new GhgAlertData(true, true, 5,
- AlertsEnum.AlertLvl2));
- defaultAlerts.addAlert(new GhgAlertData(true, true, 0,
- AlertsEnum.ExpiredAlert));
- defaultAlerts.setActions(new String[] { "NEW", "CON", "COR", "EXT",
- "EXA", "EXB" });
- defaultAlerts.setPhenSigs(new String[] { "SV.W", "TO.W" });
- defaultAlerts.setPils(new String[] { "SVR", "SVS", "TOR" });
-
- final String siteId = SiteMap.getInstance().getSite4LetterId(
- DataManager.getCurrentInstance().getSiteID());
-
- /* generate some hardcoded default filter data */
- GhgDataFilter filter = new GhgDataFilter() {
- {
- currentHazards = false;
- name = DEFAULT_FILTER_NAME;
- actions = new String[] { "CON", "EXA", "EXB", "EXT", "NEW" };
- phenSigs = new String[] {};
- pils = new String[] {};
- wfos = new String[] { siteId };
- geoids = new String[] {};
- etns = new String[] {};
- segs = new String[] {};
-
- combineGeoId = true;
- combineSegments = true;
- combinePurgeTimes = true;
- combineActions = true;
-
- includeAlerts = true;
- includeMapSelections = true;
- includePastEvents = false;
- includeOrgPilEvents = false;
- }
- };
- defaultFilter = filter;
-
- /* add a couple of named filters */
- filters = new HashMap();
-
- visibleColumns = new ArrayList(DataEnum.values().length);
- // The initial columns visible. These need to match the ones set up by
- // GhgMonitorDlg.
- visibleColumns.addAll(Arrays.asList(DataEnum.ACTION, DataEnum.ETN,
- DataEnum.PHEN_SIG, DataEnum.START, DataEnum.END,
- DataEnum.PURGE, DataEnum.ISSUE_TIME, DataEnum.PIL,
- DataEnum.WFO, DataEnum.GEO_ID));
- sortColumn = DataEnum.PURGE;
-
+ loadDefault();
+
+ defaultFilter = currentFilter.clone();
+ defaultAlerts = currentAlerts.clone();
+ defaultColumns = new ArrayList(visibleColumns);
+
// Get the VTECTable
initializePython();
}
@@ -839,12 +778,86 @@ public final class GhgConfigData {
}
}
- public void load(boolean reportMissing) {
- loadFrom(CONFIG_PATH, reportMissing);
+ public void loadDefault() {
+ alertLvl1Colors = new GhgColorData(new RGB(0, 0, 255), new RGB(255,
+ 255, 0));
+ alertLvl2Colors = new GhgColorData(new RGB(255, 255, 255), new RGB(255,
+ 0, 0));
+ expiredAlertColors = new GhgColorData(new RGB(255, 255, 255), new RGB(
+ 171, 0, 201));
+ mapSelectionsColors = new GhgColorData(new RGB(255, 255, 255), new RGB(
+ 0, 218, 240));
+ regularEntriesColors = new GhgColorData(new RGB(0, 0, 0), new RGB(180,
+ 180, 180));
+ monitorSelectionsColors = new GhgColorData(new RGB(255, 255, 255),
+ new RGB(0, 0, 255));
+ testProductsColors = new GhgColorData(new RGB(255, 255, 255), new RGB(
+ 128, 128, 128));
+
+ /* create the default alerts data */
+ GhgAlertsConfigData alerts = new GhgAlertsConfigData();
+ alerts.setLocal(true);
+ alerts.setTest(true);
+ alerts.addAlert(new GhgAlertData(true, true, 30,
+ AlertsEnum.AlertLvl1));
+ alerts.addAlert(new GhgAlertData(true, true, 10,
+ AlertsEnum.AlertLvl2));
+ alerts.addAlert(new GhgAlertData(true, true, 0,
+ AlertsEnum.ExpiredAlert));
+ alerts.setActions(new String[] { "NEW", "CON", "COR", "EXT",
+ "EXA", "EXB" });
+ alerts.setPhenSigs(new String[] {});
+ alerts.setPils(new String[] {});
+ currentAlerts = alerts;
+
+ final String siteId = SiteMap.getInstance().getSite4LetterId(
+ DataManager.getCurrentInstance().getSiteID());
+
+ /* generate some hardcoded default filter data */
+ currentFilter = new GhgDataFilter() {
+ {
+ currentHazards = false;
+ name = DEFAULT_FILTER_NAME;
+ actions = new String[] { "CON", "EXA", "EXB", "EXT", "NEW" };
+ phenSigs = new String[] {};
+ pils = new String[] {};
+ wfos = new String[] { siteId };
+ geoids = new String[] {};
+ etns = new String[] {};
+ segs = new String[] {};
+
+ combineGeoId = true;
+ combineSegments = true;
+ combinePurgeTimes = true;
+ combineActions = true;
+
+ includeAlerts = true;
+ includeMapSelections = true;
+ includePastEvents = false;
+ includeOrgPilEvents = false;
+ }
+ };
+
+ /* add a couple of named filters */
+ filters = new HashMap();
+
+ visibleColumns = new ArrayList(DataEnum.values().length);
+ // The initial columns visible. These need to match the ones set up by
+ // GhgMonitorDlg.
+ visibleColumns.addAll(Arrays.asList(DataEnum.ACTION, DataEnum.ETN,
+ DataEnum.PHEN_SIG, DataEnum.START, DataEnum.END,
+ DataEnum.PURGE, DataEnum.ISSUE_TIME, DataEnum.PIL,
+ DataEnum.WFO));
+ sortColumn = DataEnum.PURGE;
+
+ descending = false;
+ identifyTestEvents = true;
+
+ //loadFrom(DEFAULT_PATH, true);
}
- public void loadDefault() {
- loadFrom(DEFAULT_PATH, true);
+ public void load(boolean reportMissing) {
+ loadFrom(CONFIG_PATH, reportMissing);
}
/**
@@ -890,6 +903,9 @@ public final class GhgConfigData {
currentFilter = config.getCurrentFilter();
currentFont = config.getCurrentFont();
filters = config.getFilters();
+ if (filters == null) {
+ filters = new HashMap();
+ }
alertLvl1Colors = config.getAlertLvl1Colors();
alertLvl2Colors = config.getAlertLvl2Colors();
@@ -902,6 +918,7 @@ public final class GhgConfigData {
visibleColumns = config.getVisibleColumns();
sortColumn = config.getSortColumn();
descending = config.isDescending();
+ identifyTestEvents = config.isIdentifyTestEvents();
}
/**
@@ -949,6 +966,21 @@ public final class GhgConfigData {
this.descending = descending;
}
+ /**
+ * @return the identifyTestEvents
+ */
+ public boolean isIdentifyTestEvents() {
+ return identifyTestEvents;
+ }
+
+ /**
+ * @param identifyTestEvents
+ * the identifyTestEvents to set
+ */
+ public void setIdentifyTestEvents(boolean identifyTestEvents) {
+ this.identifyTestEvents = identifyTestEvents;
+ }
+
/**
*
*/
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgTableRowData.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgTableRowData.java
index b35e91a4b1..ef1dd978ce 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgTableRowData.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/data/GhgTableRowData.java
@@ -34,7 +34,6 @@ import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import com.raytheon.uf.common.time.SimulatedTime;
-import com.raytheon.viz.ghg.monitor.GhgDisplayManager;
import com.raytheon.viz.ghg.monitor.IGhgSelectedTableColumn;
import com.raytheon.viz.ghg.monitor.data.GhgConfigData.AlertsEnum;
import com.raytheon.viz.ghg.monitor.data.GhgConfigData.DataEnum;
@@ -49,6 +48,8 @@ import com.raytheon.viz.ghg.monitor.data.GhgConfigData.SelectionEnum;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 25 MAR 2008 N/A lvenable Initial creation
+ * 10 Apr 2014 15769 ryu Changed isTestData() due to move of identifyTestEvents
+ * to config data.
*
*
*
@@ -439,6 +440,6 @@ public class GhgTableRowData implements Comparable {
* @return the testData
*/
public boolean isTestData() {
- return GhgDisplayManager.getInstance().isIdentifyTestData();
+ return GhgConfigData.getInstance().isIdentifyTestEvents();
}
}
\ No newline at end of file
diff --git a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/filter/GhgFilterEngine.java b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/filter/GhgFilterEngine.java
index cdc4608f13..8f7ec20311 100644
--- a/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/filter/GhgFilterEngine.java
+++ b/cave/com.raytheon.viz.ghg/src/com/raytheon/viz/ghg/monitor/filter/GhgFilterEngine.java
@@ -20,6 +20,7 @@
package com.raytheon.viz.ghg.monitor.filter;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.List;
import com.raytheon.uf.common.site.SiteMap;
@@ -43,6 +44,7 @@ import com.raytheon.viz.ghg.monitor.data.GhgDataFilter;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 26May2010 mpduff Initial creation.
+ * 11Apr2014 15769 ryu Promote delta minutes if within a few seconds.
*
*
*
@@ -213,10 +215,11 @@ public class GhgFilterEngine {
long now = SimulatedTime.getSystemTime().getTime().getTime();
// minutes until purge time
- int deltaP = (int) ((gd.getPurgeDate().getTime() - now) / MILLIS_PER_MINUTE);
+ int margin = 4999; // promote the deltas if within 5 seconds
+ int deltaP = (int) ((gd.getPurgeDate().getTime() - now + margin) / MILLIS_PER_MINUTE);
// minutes until end time
- int deltaE = (int) ((gd.getEndDate().getTime() - now) / MILLIS_PER_MINUTE);
+ int deltaE = (int) ((gd.getEndDate().getTime() - now + margin) / MILLIS_PER_MINUTE);
long earlierT = Math.min(gd.getPurgeDate().getTime(), gd.getEndDate()
.getTime());
diff --git a/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml b/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml
index 6243e3da42..1554b75924 100644
--- a/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml
+++ b/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml
@@ -46,63 +46,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -138,4 +81,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/general/D2DGridResource.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/general/D2DGridResource.java
index 6121f0ecbb..10e23c7955 100644
--- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/general/D2DGridResource.java
+++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/general/D2DGridResource.java
@@ -94,6 +94,9 @@ import com.vividsolutions.jts.geom.Geometry;
* Sep 24, 2013 15972 D. Friedman Make reprojection of grids configurable.
* Nov 19, 2013 2532 bsteffen Special handling of grids larger than the
* world.
+ * Mar 27, 2014 2945 bsteffen Enable omitting the plane from the legend
+ * based off style rules.
+ *
*
*
*
@@ -359,6 +362,10 @@ public class D2DGridResource extends GridResource implements
if (stylePreferences != null) {
legendParams.unit = stylePreferences.getDisplayUnitLabel();
+ if (stylePreferences.getDisplayFlags() != null) {
+ legendParams.isPlaneLabelDisplayed = !stylePreferences
+ .getDisplayFlags().hasFlag("NoPlane");
+ }
}
if ((legendParams.unit == null) || legendParams.unit.isEmpty()) {
diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/StatusStore.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/StatusStore.java
index 4edc7ac867..72dd23b351 100644
--- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/StatusStore.java
+++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/StatusStore.java
@@ -40,6 +40,8 @@ import com.raytheon.viz.ui.statusline.StatusMessage.Importance;
* Jul 14, 2008 randerso Initial creation
* Sep 12, 2008 wdougherty Added updateStatusTextI() method
* Oct 22, 2012 1229 rferrel Changes for non-blocking ViewMessagesDialog.
+ * Apr 10, 2014 15769 ryu Resetting parent shell for banners
+ * so they stay on top.
*
*
*
@@ -208,24 +210,22 @@ public class StatusStore {
String bannerName = importanceDict.get(importance)
.getBannerName();
if (bannerName != null) {
+ Shell shell = null;
+ Display display = Display.getCurrent();
+ if (display != null) {
+ shell = display.getActiveShell();
+ if (shell == null) {
+ Shell[] shells = display.getShells();
+ if (shells != null && shells.length > 0) {
+ shell = shells[0];
+ }
+ }
+ }
+
UrgentMessagesDialog umd = dialogDict.get(bannerName);
if (umd == null) {
// Instantiate an UrgentMessageDialog for this banner
// name
- Shell shell = null;
- Display display = Display.getCurrent();
- if (display == null) {
- throw new RuntimeException(
- "No current display for status message.");
- } else {
- shell = display.getActiveShell();
- if (shell == null) {
- Shell[] shells = display.getShells();
- if (shells != null && shells.length > 0) {
- shell = shells[0];
- }
- }
- }
if (shell == null) {
throw new RuntimeException(
"Unable to obtain a shell for status message.");
@@ -236,6 +236,10 @@ public class StatusStore {
.get(importance).getBannerBgColor());
dialogDict.put(bannerName, umd);
}
+ else {
+ umd.reparent(shell);
+ }
+
umd.setBlockOnOpen(false);
umd.open();
umd.addMessage(message);
diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/UrgentMessagesDialog.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/UrgentMessagesDialog.java
index 6f9f1ef10a..8aa8b027e5 100644
--- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/UrgentMessagesDialog.java
+++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/statusline/UrgentMessagesDialog.java
@@ -25,6 +25,8 @@ import java.util.TimeZone;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
@@ -48,6 +50,7 @@ import com.raytheon.viz.ui.statusline.StatusMessage.Importance;
* ------------ ---------- ----------- --------------------------
* May 19, 2008 Eric Babin Initial Creation
* 2008-12-09
+ * Apr 10, 2014 15769 ryu Disposing and reparenting dialog shell.
*
*
*
@@ -101,6 +104,29 @@ public class UrgentMessagesDialog extends Dialog {
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
}
+ @Override
+ public void create() {
+ super.create();
+
+ getShell().addDisposeListener(new DisposeListener() {
+
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ urgentBuffer.clear();
+ close();
+ }
+
+ });
+ }
+
+ public void reparent(Shell parent) {
+ if (getParentShell() != null && !getParentShell().isDisposed())
+ return;
+ if (parent != null) {
+ setParentShell(parent);
+ }
+ }
+
@Override
public boolean close() {
if (urgentBuffer.size() > 0) {
diff --git a/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/fieldsMenus.xml b/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/fieldsMenus.xml
index 596084ebf7..ad6a1c0d0c 100644
--- a/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/fieldsMenus.xml
+++ b/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/fieldsMenus.xml
@@ -628,173 +628,173 @@
+ key="Surge10pctCumul_wTide" indentText="false" />
+ key="Surge20pctCumul_wTide" indentText="false" />
+ key="Surge30pctCumul_wTide" indentText="false" />
+ key="Surge40pctCumul_wTide" indentText="false" />
+ key="Surge50pctCumul_wTide" indentText="false" />
+ key="PSurge2ftCumul_wTide" indentText="false" />
+ key="PSurge3ftCumul_wTide" indentText="false" />
+ key="PSurge4ftCumul_wTide" indentText="false" />
+ key="PSurge5ftCumul_wTide" indentText="false" />
+ key="PSurge6ftCumul_wTide" indentText="false" />
+ key="PSurge7ftCumul_wTide" indentText="false" />
+ key="PSurge8ftCumul_wTide" indentText="false" />
+ key="PSurge9ftCumul_wTide" indentText="false" />
+ key="PSurge10ftCumul_wTide" indentText="false" />
+ key="PSurge11ftCumul_wTide" indentText="false" />
+ key="PSurge12ftCumul_wTide" indentText="false" />
+ key="PSurge13ftCumul_wTide" indentText="false" />
+ key="PSurge14ftCumul_wTide" indentText="false" />
+ key="PSurge15ftCumul_wTide" indentText="false" />
+ key="PSurge16ftCumul_wTide" indentText="false" />
+ key="PSurge17ftCumul_wTide" indentText="false" />
+ key="PSurge18ftCumul_wTide" indentText="false" />
+ key="PSurge19ftCumul_wTide" indentText="false" />
+ key="PSurge20ftCumul_wTide" indentText="false" />
+ key="PSurge21ftCumul_wTide" indentText="false" />
+ key="PSurge22ftCumul_wTide" indentText="false" />
+ key="PSurge23ftCumul_wTide" indentText="false" />
+ key="PSurge24ftCumul_wTide" indentText="false" />
+ key="PSurge25ftCumul_wTide" indentText="false" />
+ key="Surge10pctIncr_PHISH" indentText="false" />
+ key="Surge20pctIncr_PHISH" indentText="false" />
+ key="Surge30pctIncr_PHISH" indentText="false" />
+ key="Surge40pctIncr_PHISH" indentText="false" />
+ key="Surge50pctIncr_PHISH" indentText="false" />
+ key="PSurge0ftIncr_PHISH" indentText="false" />
+ key="PSurge1ftIncr_PHISH" indentText="false" />
+ key="PSurge2ftIncr_PHISH" indentText="false" />
+ key="PSurge3ftIncr_PHISH" indentText="false" />
+ key="PSurge4ftIncr_PHISH" indentText="false" />
+ key="PSurge5ftIncr_PHISH" indentText="false" />
+ key="PSurge6ftIncr_PHISH" indentText="false" />
+ key="PSurge7ftIncr_PHISH" indentText="false" />
+ key="PSurge8ftIncr_PHISH" indentText="false" />
+ key="PSurge9ftIncr_PHISH" indentText="false" />
+ key="PSurge10ftIncr_PHISH" indentText="false" />
+ key="PSurge11ftIncr_PHISH" indentText="false" />
+ key="PSurge12ftIncr_PHISH" indentText="false" />
+ key="PSurge13ftIncr_PHISH" indentText="false" />
+ key="PSurge14ftIncr_PHISH" indentText="false" />
+ key="PSurge15ftIncr_PHISH" indentText="false" />
+ key="PSurge16ftIncr_PHISH" indentText="false" />
+ key="PSurge17ftIncr_PHISH" indentText="false" />
+ key="PSurge18ftIncr_PHISH" indentText="false" />
+ key="PSurge19ftIncr_PHISH" indentText="false" />
+ key="PSurge20ftIncr_PHISH" indentText="false" />
+ key="Surge10pctCumul_PHISH" indentText="false" />
+ key="Surge20pctCumul_PHISH" indentText="false" />
+ key="Surge30pctCumul_PHISH" indentText="false" />
+ key="Surge40pctCumul_PHISH" indentText="false" />
+ key="Surge50pctCumul_PHISH" indentText="false" />
+ key="PSurge0ftCumul_PHISH" indentText="false" />
+ key="PSurge1ftCumul_PHISH" indentText="false" />
+ key="PSurge2ftCumul_PHISH" indentText="false" />
+ key="PSurge3ftCumul_PHISH" indentText="false" />
+ key="PSurge4ftCumul_PHISH" indentText="false" />
+ key="PSurge5ftCumul_PHISH" indentText="false" />
+ key="PSurge6ftCumul_PHISH" indentText="false" />
+ key="PSurge7ftCumul_PHISH" indentText="false" />
+ key="PSurge8ftCumul_PHISH" indentText="false" />
+ key="PSurge9ftCumul_PHISH" indentText="false" />
+ key="PSurge10ftCumul_PHISH" indentText="false" />
+ key="PSurge11ftCumul_PHISH" indentText="false" />
+ key="PSurge12ftCumul_PHISH" indentText="false" />
+ key="PSurge13ftCumul_PHISH" indentText="false" />
+ key="PSurge14ftCumul_PHISH" indentText="false" />
+ key="PSurge15ftCumul_PHISH" indentText="false" />
+ key="PSurge16ftCumul_PHISH" indentText="false" />
+ key="PSurge17ftCumul_PHISH" indentText="false" />
+ key="PSurge18ftCumul_PHISH" indentText="false" />
+ key="PSurge19ftCumul_PHISH" indentText="false" />
+ key="PSurge20ftCumul_PHISH" indentText="false" />
diff --git a/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/planesMenusPlanView.xml b/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/planesMenusPlanView.xml
index ec736b0584..bb507fefa1 100644
--- a/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/planesMenusPlanView.xml
+++ b/cave/com.raytheon.viz.volumebrowser/localization/menus/xml/planesMenusPlanView.xml
@@ -332,6 +332,7 @@
+
@@ -28,7 +29,7 @@
SURGE10pct
-100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -44,7 +45,7 @@
SURGE20pct
-100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -60,7 +61,7 @@
SURGE30pct
-100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -76,7 +77,7 @@
SURGE40pct
-100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -92,7 +93,7 @@
SURGE50pct
-100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -107,9 +108,9 @@
%
percent
ProbSurge25c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC
@@ -122,9 +123,9 @@
%
percent
ProbSurge24c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC
@@ -137,9 +138,9 @@
%
percent
ProbSurge23c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC
@@ -152,9 +153,9 @@
%
percent
ProbSurge22c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC
@@ -167,9 +168,9 @@
%
percent
ProbSurge21c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC
@@ -182,9 +183,9 @@
%
percent
ProbSurge20c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -198,9 +199,9 @@
%
percent
ProbSurge19c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -214,9 +215,9 @@
%
percent
ProbSurge18c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -230,9 +231,9 @@
%
percent
ProbSurge17c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -246,9 +247,9 @@
%
percent
ProbSurge16c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -262,9 +263,9 @@
%
percent
ProbSurge15c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -278,9 +279,9 @@
%
percent
ProbSurge14c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -294,9 +295,9 @@
%
percent
ProbSurge13c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -310,9 +311,9 @@
%
percent
ProbSurge12c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -326,9 +327,9 @@
%
percent
ProbSurge11c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -342,9 +343,9 @@
%
percent
ProbSurge10c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -358,9 +359,9 @@
%
percent
ProbSurge09c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -374,9 +375,9 @@
%
percent
ProbSurge08c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -390,9 +391,9 @@
%
percent
ProbSurge07c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -406,9 +407,9 @@
%
percent
ProbSurge06c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -422,9 +423,9 @@
%
percent
ProbSurge05c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -438,9 +439,9 @@
%
percent
ProbSurge04c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -454,9 +455,9 @@
%
percent
ProbSurge03c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -470,9 +471,9 @@
%
percent
ProbSurge02c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
SFC 0 FHAG
@@ -486,9 +487,9 @@
%
percent
ProbSurge01c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -501,9 +502,9 @@
%
percent
ProbSurge00c
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -519,7 +520,7 @@
SURGE10pct_incr
-100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -534,7 +535,7 @@
SURGE20pct_incr
-100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -549,7 +550,7 @@
SURGE30pct_incr
-100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -564,7 +565,7 @@
SURGE40pct_incr
-100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -579,7 +580,7 @@
SURGE50pct_incr
-100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -592,9 +593,9 @@
%
percent
ProbSurge20c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -607,9 +608,9 @@
%
percent
ProbSurge19c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -622,9 +623,9 @@
%
percent
ProbSurge18c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -637,9 +638,9 @@
%
percent
ProbSurge17c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -652,9 +653,9 @@
%
percent
ProbSurge16c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -667,9 +668,9 @@
%
percent
ProbSurge15c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -682,9 +683,9 @@
%
percent
ProbSurge14c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -697,9 +698,9 @@
%
percent
ProbSurge13c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -712,9 +713,9 @@
%
percent
ProbSurge12c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -727,9 +728,9 @@
%
percent
ProbSurge11c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -742,9 +743,9 @@
%
percent
ProbSurge10c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -757,9 +758,9 @@
%
percent
ProbSurge09c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -772,9 +773,9 @@
%
percent
ProbSurge08c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -787,9 +788,9 @@
%
percent
ProbSurge07c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -802,9 +803,9 @@
%
percent
ProbSurge06c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -817,9 +818,9 @@
%
percent
ProbSurge05c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -832,9 +833,9 @@
%
percent
ProbSurge04c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -847,9 +848,9 @@
%
percent
ProbSurge03c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -862,9 +863,9 @@
%
percent
ProbSurge02c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -877,9 +878,9 @@
%
percent
ProbSurge01c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
@@ -892,9 +893,9 @@
%
percent
ProbSurge00c_incr
- 0.0
+ -100.0
100.0
- -9999.0
+ -999999.0
0
0 FHAG
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py b/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py
index 799fd4fdc5..3e6d74b4d2 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py
@@ -477,6 +477,7 @@ class GribDecoder():
levelTwoValue=float(Level.getInvalidLevelValue())
durationSecs = None
+ typeOfTimeInterval = None
# Special case handling for specific PDS Templates
if pdsTemplateNumber == 1 or pdsTemplateNumber == 11:
@@ -530,7 +531,7 @@ class GribDecoder():
#numTimeRanges = pdsTemplate[28]
#numMissingValues = pdsTemplate[29]
#statisticalProcess = pdsTemplate[30]
-
+ typeOfTimeInterval = pdsTemplate[31]
durationSecs = self._convertToSeconds(pdsTemplate[33], pdsTemplate[32])
scaledValue = None
@@ -560,8 +561,10 @@ class GribDecoder():
#numMissingValues = pdsTemplate[23]
#statisticalProcess = pdsTemplate[24]
+ typeOfTimeInterval = pdsTemplate[25]
durationSecs = self._convertToSeconds(pdsTemplate[27], pdsTemplate[26])
+
if durationSecs is not None:
# This only applies for templates 9 and 10 which are not
# commonly used templates. For all other data the duration is
@@ -577,6 +580,14 @@ class GribDecoder():
refToEndSecs = (gribDict['endTime'].getTimeInMillis() - gribDict['refTime'].getTimeInMillis())/ 1000
gribDict['forecastTime'] = refToEndSecs - durationSecs
+
+ if typeOfTimeInterval == 192 and centerID == 7 and subcenterID == 14:
+ # For TPC Surge data the type of time interval is significant and they have indicated that
+ # 192 means the data is cumulative. Since we don't ordinarily do table lookups on the
+ # type of time interval we must encode this information in the parameter abbreviation here.
+ parameterAbbreviation = parameterAbbreviation + "Cumul"
+ gribDict['parameterName'] = gribDict['parameterName'] + " - cumulative"
+
if(pdsTemplate[2] == 6 or pdsTemplate[2] == 7):
parameterAbbreviation = parameterAbbreviation+"erranl"
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/TPCSurgeProbPostProcessor.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/TPCSurgeProbPostProcessor.java
deleted file mode 100644
index 8801567bed..0000000000
--- a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/decoderpostprocessors/TPCSurgeProbPostProcessor.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/**
- * This software was developed and / or modified by Raytheon Company,
- * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
- * U.S. EXPORT CONTROLLED TECHNICAL DATA
- * This software product contains export-restricted data whose
- * export/transfer/disclosure is restricted by U.S. law. Dissemination
- * to non-U.S. persons whether in the United States or abroad requires
- * an export license or other authorization.
- *
- * Contractor Name: Raytheon Company
- * Contractor Address: 6825 Pine Street, Suite 340
- * Mail Stop B8
- * Omaha, NE 68106
- * 402.291.0100
- *
- * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
- * further licensing information.
- **/
-package com.raytheon.edex.plugin.grib.decoderpostprocessors;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.measure.converter.UnitConverter;
-import javax.measure.unit.NonSI;
-import javax.measure.unit.SI;
-
-import com.raytheon.edex.plugin.grib.exception.GribException;
-import com.raytheon.uf.common.comm.CommunicationException;
-import com.raytheon.uf.common.dataplugin.grid.GridRecord;
-import com.raytheon.uf.common.dataplugin.level.Level;
-import com.raytheon.uf.common.dataplugin.level.LevelFactory;
-import com.raytheon.uf.common.parameter.Parameter;
-
-/**
- *
- * Converts PSurge 2 data from the grib decoder to the parameter definitions
- * expected by GFE/D2D. There are several odd behaviors in the grib data/decoder
- * that must be corrected.
- *
- *
- * - The 10% exceedance and all height products arrive with the same grib
- * parameter number(192 from 4.2.10.3.table) so the grib decoder can't tell the
- * difference and gives them all the same name, units, and base abbreviation.
- * This will parse the parameter abbreviation to define the parameter more
- * accurately.
- *
- The grib decoder blindly appends the duration to the parameter
- * abbreviation which means each time in the cumulative sequence is a new
- * parameter abbreviation. This will find cumulative parameters and give them
- * all the same parameter definition.
- *
- The grib decoder assigns both TPCSurgeProb data and PHISH data the same
- * datasetID because they have the exact same grib model identifiers. The only
- * way to tell the difference is to look at the level: PHISH data is always at a
- * FHAG level and TPCSurgeProb is always at a SFC level. This remaps all FHAG
- * data to the PHISH model and a Surface level.
- *
- The grib decoder uses the grib standard units which define the
- * probability surge heights as fractional meter values but the data was
- * originally calculated as probability in feet. This renames the parameters to
- * use the whole number feet instead of fractional meters.
- *
- The grib file specifies the probabilities of surge below a certain height
- * but they are supposed to be displayed as the probability of exceeding the
- * height. This will switch around the probabilities in the parameter
- * abbreviations.
- *
- *
- *
- *
- * SOFTWARE HISTORY
- *
- * Date Ticket# Engineer Description
- * ------------- -------- ----------- --------------------------
- * Sep 30, 2013 2390 bsteffen Rewrite for PSurge 2
- *
- *
- *
- * @author bsteffen
- * @version 2.0
- */
-public class TPCSurgeProbPostProcessor implements IDecoderPostProcessor {
-
- private static final Pattern SURGE_PCT_PATTERN = Pattern
- .compile("Surge([0-9]{2})pct([0-9]{1,3})hr");
-
- private static final Pattern SURGE_HGT_PATTERN = Pattern
- .compile("Surge([0-9]{1,2}\\.[0-9]{1,2})m([0-9]{1,3})hr");
-
- private static final UnitConverter METERS2FEET = SI.METER
- .getConverterTo(NonSI.FOOT);
-
- private static final UnitConverter HOURS2SECONDS = NonSI.HOUR
- .getConverterTo(SI.SECOND);
-
- @Override
- public GridRecord[] process(GridRecord record) throws GribException {
-
- Parameter param = record.getParameter();
- String paramAbbrev = param.getAbbreviation();
- String paramName = param.getName();
- String paramUnitStr = param.getUnitString();
- int hours;
- Matcher pctMatch = SURGE_PCT_PATTERN.matcher(paramAbbrev);
- Matcher hgtMatch = SURGE_HGT_PATTERN.matcher(paramAbbrev);
- if (pctMatch.matches()) {
- int pct = Integer.parseInt(pctMatch.group(1));
- hours = Integer.parseInt(pctMatch.group(2));
-
- /* Switch from percent below value to percent above */
- pct = 100 - pct;
-
- paramAbbrev = "Surge" + pct + "pct";
- paramName = "Surge " + pct + "% Exceedance Ht";
- paramUnitStr = "m";
- } else if (hgtMatch.matches()) {
- double m = Double.parseDouble(hgtMatch.group(1));
-
- hours = Integer.parseInt(hgtMatch.group(2));
- int ft = (int) Math.round(METERS2FEET.convert(m));
-
- paramAbbrev = "PSurge" + ft + "ft";
- paramName = "Prob of Surge > " + ft + " ft";
- paramUnitStr = "%";
- } else {
- return new GridRecord[] { record };
-
- }
-
- record.getInfo().setId(null);
- record.setDataURI(null);
-
- /* Map everything to surface. */
- Level level = record.getLevel();
- if (level.getMasterLevel().getName().equals("FHAG")) {
- record.getInfo().setDatasetId("PHISH");
- try {
- level = LevelFactory.getInstance().getLevel("SFC",
- level.getLevelonevalue(), level.getLeveltwovalue());
- } catch (CommunicationException e) {
- throw new GribException("Error retrieving level information", e);
- }
- record.setLevel(level);
- }
-
- List result = new ArrayList();
- int seconds = (int) HOURS2SECONDS.convert(hours);
- /* Grab cumulative records */
- if (record.getDataTime().getFcstTime() == seconds) {
- GridRecord cumRecord = new GridRecord(record);
- cumRecord.setParameter(new Parameter(paramAbbrev + "Run",
- "Cumulative " + paramName, paramUnitStr));
- cumRecord.setMessageData(record.getMessageData());
- cumRecord.setOverwriteAllowed(true);
- result.add(cumRecord);
- }
-
- /*
- * The 0-6hr cumulative record is also the first incremental record so
- * store it in both places. It looks like we will actually be receiving
- * two records for this data but in my test data they are 100% binary
- * identical so there is no way to differentiate and we just have to
- * double store twice(redundantly).
- */
- if (result.isEmpty() || hours == 6) {
- record.setParameter(new Parameter(paramAbbrev + hours + "hr", hours
- + " Hour " + paramName,
- paramUnitStr));
- record.setOverwriteAllowed(true);
- result.add(record);
- }
- return result.toArray(new GridRecord[0]);
- }
-}
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt
index 2b101299df..c8cbdec2c1 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt
@@ -242,3 +242,86 @@ WINDPROB0.254% WINDPROB
SIGWINDPROB0.254% SIGWINDPROB
PRSVR0.254% PRSVR
PRSIGSV0.254% PRSIGSV
+
+#TPCSurgeProb
+# For the pct parameters the parameters coming out of the grib files are coded
+# as the height where there is XX probability that the surge is less than a
+# height but the desired interpretation is XX probability that the surge is
+# greater than a height
+Surge10pct_21600-0 Surge90pct6hr
+Surge20pct_21600-0 Surge80pct6hr
+Surge30pct_21600-0 Surge70pct6hr
+Surge40pct_21600-0 Surge60pct6hr
+Surge50pct_21600-0 Surge50pct6hr
+Surge60pct_21600-0 Surge40pct6hr
+Surge70pct_21600-0 Surge30pct6hr
+Surge80pct_21600-0 Surge20pct6hr
+Surge90pct_21600-0 Surge10pct6hr
+# For the m parameters convert the abbreviation from the grib decoder contains
+# a height in meters but it was intended and can be dispalyed nicely as a
+# height in feet.
+Surge0.0m_21600-0 PSurge0ft6hr
+Surge0.3m_21600-0 PSurge1ft6hr
+Surge0.61m_21600-0 PSurge2ft6hr
+Surge0.91m_21600-0 PSurge3ft6hr
+Surge1.22m_21600-0 PSurge4ft6hr
+Surge1.52m_21600-0 PSurge5ft6hr
+Surge1.83m_21600-0 PSurge6ft6hr
+Surge2.13m_21600-0 PSurge7ft6hr
+Surge2.44m_21600-0 PSurge8ft6hr
+Surge2.74m_21600-0 PSurge9ft6hr
+Surge3.05m_21600-0 PSurge10ft6hr
+Surge3.35m_21600-0 PSurge11ft6hr
+Surge3.66m_21600-0 PSurge12ft6hr
+Surge3.96m_21600-0 PSurge13ft6hr
+Surge4.27m_21600-0 PSurge14ft6hr
+Surge4.57m_21600-0 PSurge15ft6hr
+Surge4.88m_21600-0 PSurge16ft6hr
+Surge5.18m_21600-0 PSurge17ft6hr
+Surge5.49m_21600-0 PSurge18ft6hr
+Surge5.79m_21600-0 PSurge19ft6hr
+Surge6.1m_21600-0 PSurge20ft6hr
+Surge6.4m_21600-0 PSurge21ft6hr
+Surge6.71m_21600-0 PSurge22ft6hr
+Surge7.01m_21600-0 PSurge23ft6hr
+Surge7.32m_21600-0 PSurge24ft6hr
+Surge7.62m_21600-0 PSurge25ft6hr
+# For the Cumulative this mapping not only inverses the percentages and
+# converts the heights, it also prevents the decoder from appending a duration
+# which is necessary because the duration increases for each forecast time.
+Surge10pctCumul Surge90pctCumul
+Surge20pctCumul Surge80pctCumul
+Surge30pctCumul Surge70pctCumul
+Surge40pctCumul Surge60pctCumul
+Surge50pctCumul Surge50pctCumul
+Surge60pctCumul Surge40pctCumul
+Surge70pctCumul Surge30pctCumul
+Surge80pctCumul Surge20pctCumul
+Surge90pctCumul Surge10pctCumul
+Surge0.0mCumul PSurge0ftCumul
+Surge0.3mCumul PSurge1ftCumul
+Surge0.61mCumul PSurge2ftCumul
+Surge0.91mCumul PSurge3ftCumul
+Surge1.22mCumul PSurge4ftCumul
+Surge1.52mCumul PSurge5ftCumul
+Surge1.83mCumul PSurge6ftCumul
+Surge2.13mCumul PSurge7ftCumul
+Surge2.44mCumul PSurge8ftCumul
+Surge2.74mCumul PSurge9ftCumul
+Surge3.05mCumul PSurge10ftCumul
+Surge3.35mCumul PSurge11ftCumul
+Surge3.66mCumul PSurge12ftCumul
+Surge3.96mCumul PSurge13ftCumul
+Surge4.27mCumul PSurge14ftCumul
+Surge4.57mCumul PSurge15ftCumul
+Surge4.88mCumul PSurge16ftCumul
+Surge5.18mCumul PSurge17ftCumul
+Surge5.49mCumul PSurge18ftCumul
+Surge5.79mCumul PSurge19ftCumul
+Surge6.1mCumul PSurge20ftCumul
+Surge6.4mCumul PSurge21ftCumul
+Surge6.71mCumul PSurge22ftCumul
+Surge7.01mCumul PSurge23ftCumul
+Surge7.32mCumul PSurge24ftCumul
+Surge7.62mCumul PSurge25ftCumul
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/parameterNameAlias.txt b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/parameterNameAlias.txt
index 6b7da539bf..fc2768528d 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/parameterNameAlias.txt
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/parameterNameAlias.txt
@@ -131,10 +131,82 @@ SREF243::SNOL12c2::Prob 12-hr SNOW > 2 in
SREF243::SNOL12c5::Prob 12-hr SNOW > 7.5 in
SREF243::SNOL12c4::Prob 12-hr SNOW > 6 in
SREF243::SNOL12c1::Prob 12-hr SNOW > 1 in
-
TPCWindProb::Prob34::Probability of Wind Speed > 34 knots
TPCWindProb::Prob50::Probability of Wind Speed > 50 knots
TPCWindProb::Prob64::Probability of Wind Speed > 64 knots
TPCWindProb::PWS34::Incremental Prob WS 34 kts or greater
TPCWindProb::PWS50::Incremental Prob WS 50 kts or greater
-TPCWindProb::PWS64::Incremental Prob WS 64 kts or greater
\ No newline at end of file
+TPCWindProb::PWS64::Incremental Prob WS 64 kts or greater
+// For the TPCSurgeProb parameters the names need to be converted from metric
+// and the percentages need to be inverted, for more information see the
+// comments in master_grib2_lookup.txt
+TPCSurgeProb::Surge10pct6hr::6 Hour Surge 10% Exceedance Ht
+TPCSurgeProb::Surge20pct6hr::6 Hour Surge 20% Exceedance Ht
+TPCSurgeProb::Surge30pct6hr::6 Hour Surge 30% Exceedance Ht
+TPCSurgeProb::Surge40pct6hr::6 Hour Surge 40% Exceedance Ht
+TPCSurgeProb::Surge50pct6hr::6 Hour Surge 50% Exceedance Ht
+TPCSurgeProb::Surge60pct6hr::6 Hour Surge 60% Exceedance Ht
+TPCSurgeProb::Surge70pct6hr::6 Hour Surge 70% Exceedance Ht
+TPCSurgeProb::Surge80pct6hr::6 Hour Surge 80% Exceedance Ht
+TPCSurgeProb::Surge90pct6hr::6 Hour Surge 90% Exceedance Ht
+TPCSurgeProb::PSurge0ft6hr::6 hour Prob of Surge > 0 ft
+TPCSurgeProb::PSurge1ft6hr::6 hour Prob of Surge > 1 ft
+TPCSurgeProb::PSurge2ft6hr::6 hour Prob of Surge > 2 ft
+TPCSurgeProb::PSurge3ft6hr::6 hour Prob of Surge > 3 ft
+TPCSurgeProb::PSurge4ft6hr::6 hour Prob of Surge > 4 ft
+TPCSurgeProb::PSurge5ft6hr::6 hour Prob of Surge > 5 ft
+TPCSurgeProb::PSurge6ft6hr::6 hour Prob of Surge > 6 ft
+TPCSurgeProb::PSurge7ft6hr::6 hour Prob of Surge > 7 ft
+TPCSurgeProb::PSurge8ft6hr::6 hour Prob of Surge > 8 ft
+TPCSurgeProb::PSurge9ft6hr::6 hour Prob of Surge > 9 ft
+TPCSurgeProb::PSurge10ft6hr::6 hour Prob of Surge > 10 ft
+TPCSurgeProb::PSurge11ft6hr::6 hour Prob of Surge > 11 ft
+TPCSurgeProb::PSurge12ft6hr::6 hour Prob of Surge > 12 ft
+TPCSurgeProb::PSurge13ft6hr::6 hour Prob of Surge > 13 ft
+TPCSurgeProb::PSurge14ft6hr::6 hour Prob of Surge > 14 ft
+TPCSurgeProb::PSurge15ft6hr::6 hour Prob of Surge > 15 ft
+TPCSurgeProb::PSurge16ft6hr::6 hour Prob of Surge > 16 ft
+TPCSurgeProb::PSurge17ft6hr::6 hour Prob of Surge > 17 ft
+TPCSurgeProb::PSurge18ft6hr::6 hour Prob of Surge > 18 ft
+TPCSurgeProb::PSurge19ft6hr::6 hour Prob of Surge > 19 ft
+TPCSurgeProb::PSurge20ft6hr::6 hour Prob of Surge > 20 ft
+TPCSurgeProb::PSurge21ft6hr::6 hour Prob of Surge > 21 ft
+TPCSurgeProb::PSurge22ft6hr::6 hour Prob of Surge > 22 ft
+TPCSurgeProb::PSurge23ft6hr::6 hour Prob of Surge > 23 ft
+TPCSurgeProb::PSurge24ft6hr::6 hour Prob of Surge > 24 ft
+TPCSurgeProb::PSurge25ft6hr::6 hour Prob of Surge > 25 ft
+TPCSurgeProb::Surge10pctCumul::Cumulative Surge 10% Exceedance Ht
+TPCSurgeProb::Surge20pctCumul::Cumulative Surge 20% Exceedance Ht
+TPCSurgeProb::Surge30pctCumul::Cumulative Surge 30% Exceedance Ht
+TPCSurgeProb::Surge40pctCumul::Cumulative Surge 40% Exceedance Ht
+TPCSurgeProb::Surge50pctCumul::Cumulative Surge 50% Exceedance Ht
+TPCSurgeProb::Surge60pctCumul::Cumulative Surge 60% Exceedance Ht
+TPCSurgeProb::Surge70pctCumul::Cumulative Surge 70% Exceedance Ht
+TPCSurgeProb::Surge80pctCumul::Cumulative Surge 80% Exceedance Ht
+TPCSurgeProb::Surge90pctCumul::Cumulative Surge 90% Exceedance Ht
+TPCSurgeProb::PSurge0ftCumul::Cumulative Prob of Surge > 0 ft
+TPCSurgeProb::PSurge1ftCumul::Cumulative Prob of Surge > 1 ft
+TPCSurgeProb::PSurge2ftCumul::Cumulative Prob of Surge > 2 ft
+TPCSurgeProb::PSurge3ftCumul::Cumulative Prob of Surge > 3 ft
+TPCSurgeProb::PSurge4ftCumul::Cumulative Prob of Surge > 4 ft
+TPCSurgeProb::PSurge5ftCumul::Cumulative Prob of Surge > 5 ft
+TPCSurgeProb::PSurge6ftCumul::Cumulative Prob of Surge > 6 ft
+TPCSurgeProb::PSurge7ftCumul::Cumulative Prob of Surge > 7 ft
+TPCSurgeProb::PSurge8ftCumul::Cumulative Prob of Surge > 8 ft
+TPCSurgeProb::PSurge9ftCumul::Cumulative Prob of Surge > 9 ft
+TPCSurgeProb::PSurge10ftCumul::Cumulative Prob of Surge > 10 ft
+TPCSurgeProb::PSurge11ftCumul::Cumulative Prob of Surge > 11 ft
+TPCSurgeProb::PSurge12ftCumul::Cumulative Prob of Surge > 12 ft
+TPCSurgeProb::PSurge13ftCumul::Cumulative Prob of Surge > 13 ft
+TPCSurgeProb::PSurge14ftCumul::Cumulative Prob of Surge > 14 ft
+TPCSurgeProb::PSurge15ftCumul::Cumulative Prob of Surge > 15 ft
+TPCSurgeProb::PSurge16ftCumul::Cumulative Prob of Surge > 16 ft
+TPCSurgeProb::PSurge17ftCumul::Cumulative Prob of Surge > 17 ft
+TPCSurgeProb::PSurge18ftCumul::Cumulative Prob of Surge > 18 ft
+TPCSurgeProb::PSurge19ftCumul::Cumulative Prob of Surge > 19 ft
+TPCSurgeProb::PSurge20ftCumul::Cumulative Prob of Surge > 20 ft
+TPCSurgeProb::PSurge21ftCumul::Cumulative Prob of Surge > 21 ft
+TPCSurgeProb::PSurge22ftCumul::Cumulative Prob of Surge > 22 ft
+TPCSurgeProb::PSurge23ftCumul::Cumulative Prob of Surge > 23 ft
+TPCSurgeProb::PSurge24ftCumul::Cumulative Prob of Surge > 24 ft
+TPCSurgeProb::PSurge25ftCumul::Cumulative Prob of Surge > 25 ft
\ No newline at end of file
diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.grid/utility/common_static/base/styleRules/gridImageryStyleRules.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.grid/utility/common_static/base/styleRules/gridImageryStyleRules.xml
index 1408509b99..110d7c9122 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.grid/utility/common_static/base/styleRules/gridImageryStyleRules.xml
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.grid/utility/common_static/base/styleRules/gridImageryStyleRules.xml
@@ -4165,91 +4165,112 @@
-
- Surge10pct6hr
- Surge10pctRun
- Surge20pct6hr
- Surge20pctRun
- Surge30pct6hr
- Surge30pctRun
- Surge40pct6hr
- Surge40pctRun
- Surge50pct6hr
- Surge50pctRun
+ TPCSurgeProb
+ Surge10pctCumul_wTide
+ Surge20pctCumul_wTide
+ Surge30pctCumul_wTide
+ Surge40pctCumul_wTide
+ Surge50pctCumul_wTide
+ Surge10pctIncr_PHISH
+ Surge20pctIncr_PHISH
+ Surge30pctIncr_PHISH
+ Surge40pctIncr_PHISH
+ Surge50pctIncr_PHISH
+ Surge10pctCumul_PHISH
+ Surge20pctCumul_PHISH
+ Surge30pctCumul_PHISH
+ Surge40pctCumul_PHISH
+ Surge50pctCumul_PHISH
ft
+ NoPlane
- 0
+ -5
35
Grid/gridded data
- 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35
+ -5 -3 0 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35
+
-
- PSurge0ft6hr
- PSurge0ftRun
- PSurge10ft6hr
- PSurge10ftRun
- PSurge11ft6hr
- PSurge11ftRun
- PSurge12ft6hr
- PSurge12ftRun
- PSurge13ft6hr
- PSurge13ftRun
- PSurge14ft6hr
- PSurge14ftRun
- PSurge15ft6hr
- PSurge15ftRun
- PSurge16ft6hr
- PSurge16ftRun
- PSurge17ft6hr
- PSurge17ftRun
- PSurge18ft6hr
- PSurge18ftRun
- PSurge19ft6hr
- PSurge19ftRun
- PSurge1ft6hr
- PSurge1ftRun
- PSurge20ft6hr
- PSurge20ftRun
- PSurge21ftRun
- PSurge22ftRun
- PSurge23ftRun
- PSurge24ftRun
- PSurge25ftRun
- PSurge2ft6hr
- PSurge2ftRun
- PSurge3ft6hr
- PSurge3ftRun
- PSurge4ft6hr
- PSurge4ftRun
- PSurge5ft6hr
- PSurge5ftRun
- PSurge6ft6hr
- PSurge6ftRun
- PSurge7ft6hr
- PSurge7ftRun
- PSurge8ft6hr
- PSurge8ftRun
- PSurge9ft6hr
- PSurge9ftRun
+ TPCSurgeProb
+ PSurge2ftCumul_wTide
+ PSurge3ftCumul_wTide
+ PSurge4ftCumul_wTide
+ PSurge5ftCumul_wTide
+ PSurge6ftCumul_wTide
+ PSurge7ftCumul_wTide
+ PSurge8ftCumul_wTide
+ PSurge9ftCumul_wTide
+ PSurge10ftCumul_wTide
+ PSurge11ftCumul_wTide
+ PSurge12ftCumul_wTide
+ PSurge13ftCumul_wTide
+ PSurge14ftCumul_wTide
+ PSurge15ftCumul_wTide
+ PSurge16ftCumul_wTide
+ PSurge17ftCumul_wTide
+ PSurge18ftCumul_wTide
+ PSurge19ftCumul_wTide
+ PSurge20ftCumul_wTide
+ PSurge21ftCumul_wTide
+ PSurge22ftCumul_wTide
+ PSurge23ftCumul_wTide
+ PSurge24ftCumul_wTide
+ PSurge25ftCumul_wTide
+ PSurge0ftIncr_PHISH
+ PSurge1ftIncr_PHISH
+ PSurge2ftIncr_PHISH
+ PSurge3ftIncr_PHISH
+ PSurge4ftIncr_PHISH
+ PSurge5ftIncr_PHISH
+ PSurge6ftIncr_PHISH
+ PSurge7ftIncr_PHISH
+ PSurge8ftIncr_PHISH
+ PSurge9ftIncr_PHISH
+ PSurge10ftIncr_PHISH
+ PSurge11ftIncr_PHISH
+ PSurge12ftIncr_PHISH
+ PSurge13ftIncr_PHISH
+ PSurge14ftIncr_PHISH
+ PSurge15ftIncr_PHISH
+ PSurge16ftIncr_PHISH
+ PSurge17ftIncr_PHISH
+ PSurge18ftIncr_PHISH
+ PSurge19ftIncr_PHISH
+ PSurge20ftIncr_PHISH
+ PSurge0ftCumul_PHISH
+ PSurge1ftCumul_PHISH
+ PSurge2ftCumul_PHISH
+ PSurge3ftCumul_PHISH
+ PSurge4ftCumul_PHISH
+ PSurge5ftCumul_PHISH
+ PSurge6ftCumul_PHISH
+ PSurge7ftCumul_PHISH
+ PSurge8ftCumul_PHISH
+ PSurge9ftCumul_PHISH
+ PSurge10ftCumul_PHISH
+ PSurge11ftCumul_PHISH
+ PSurge12ftCumul_PHISH
+ PSurge13ftCumul_PHISH
+ PSurge14ftCumul_PHISH
+ PSurge15ftCumul_PHISH
+ PSurge16ftCumul_PHISH
+ PSurge17ftCumul_PHISH
+ PSurge18ftCumul_PHISH
+ PSurge19ftCumul_PHISH
+ PSurge20ftCumul_PHISH
%
+ NoPlane
0
100
diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.qc/src/com/raytheon/uf/common/dataplugin/qc/QCRecord.java b/edexOsgi/com.raytheon.uf.common.dataplugin.qc/src/com/raytheon/uf/common/dataplugin/qc/QCRecord.java
index 1cfe4322e1..23e755f174 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.qc/src/com/raytheon/uf/common/dataplugin/qc/QCRecord.java
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.qc/src/com/raytheon/uf/common/dataplugin/qc/QCRecord.java
@@ -680,7 +680,7 @@ public class QCRecord extends PluginDataObject implements ISpatialEnabled {
@Embeddable
@DynamicSerialize
- private static class FakePointDataView {
+ public static class FakePointDataView {
@DynamicSerializeElement
@Column(name = "idx")
int curIdx;
diff --git a/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template b/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template
index fa081abfb7..91c8cc0480 100644
--- a/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template
+++ b/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template
@@ -319,6 +319,14 @@ ANY ^(LGXT[0-2][0-9]) KNHC (..)(..)(..)
ANY ^(LGXP[0-9][0-9]) KNHC (..)(..)(..)
FILE -overwrite -log -close -edex /data_store/grib2/(\2:yyyy)(\2:mm)\2/\3/TPC/\3\4Z_SURGE-\1_KNHC_\2\3\4_(seq).grib2.%Y%m%d%H
+# TPCSurge PHISH heights
+#ANY ^(L[l-X]X[QP][1-5]0) KNHC (..)(..)(..)
+# FILE -overwrite -log -close -edex /data_store/grib2/(\2:yyyy)(\2:mm)\2/\3/TPC/\3\4Z_SURGE-\1_KNHC_\2\3\4_(seq).grib2.%Y%m%d%H
+
+# TPCSurge PHISH probabilities
+#ANY ^(L[H-G]X[A-M][0-2][0-9]) KNHC (..)(..)(..)
+# FILE -overwrite -log -close -edex /data_store/grib2/(\2:yyyy)(\2:mm)\2/\3/TPC/\3\4Z_SURGE-\1_KNHC_\2\3\4_(seq).grib2.%Y%m%d%H
+
# AWIPS1: GRID ^LDIZ11.*KWNS /Grid/SBN/rawGrib2
# LDIZ11 KWNS 180039 !grib2/ncep/0/#202/FHRS//LVL
diff --git a/rpms/build/x86_64/build.sh b/rpms/build/x86_64/build.sh
index e9fd84442e..7e28ebddc1 100644
--- a/rpms/build/x86_64/build.sh
+++ b/rpms/build/x86_64/build.sh
@@ -409,10 +409,10 @@ fi
if [ "${1}" = "-viz" ]; then
buildRPM "awips2"
- buildRPM "awips2-common-base"
+ #buildRPM "awips2-common-base"
#buildRPM "awips2-python-numpy"
#buildRPM "awips2-ant"
- buildRPM "awips2-python-dynamicserialize"
+ #buildRPM "awips2-python-dynamicserialize"
#buildRPM "awips2-python"
#buildRPM "awips2-adapt-native"
#unpackHttpdPypies
@@ -422,8 +422,8 @@ if [ "${1}" = "-viz" ]; then
#buildRPM "awips2-httpd-pypies"
#buildRPM "awips2-hydroapps-shared"
#buildRPM "awips2-rcm"
- buildRPM "awips2-gfesuite-client"
- buildRPM "awips2-gfesuite-server"
+ #buildRPM "awips2-gfesuite-client"
+ #buildRPM "awips2-gfesuite-server"
#buildRPM "awips2-tools"
#buildRPM "awips2-cli"
buildCAVE
@@ -454,10 +454,14 @@ if [ "${1}" = "-custom" ]; then
#fi
#buildRPM "awips2-adapt-native"
#buildRPM "awips2-hydroapps-shared"
+ buildRPM "awips2-common-base"
+ buildRPM "awips2-gfesuite-client"
+ buildRPM "awips2-gfesuite-server"
+ buildRPM "awips2-python-dynamicserialize"
#buildRPM "awips2-alertviz"
#buildRPM "awips2-python"
#buildRPM "awips2-alertviz"
- buildRPM "awips2-ant"
+ #buildRPM "awips2-ant"
#buildRPM "awips2-eclipse"
#buildRPM "awips2-python"