From 8591015dfb010c27c41637eea3e052a0ab879803 Mon Sep 17 00:00:00 2001 From: David Friedman Date: Mon, 3 Feb 2014 19:03:50 +0000 Subject: [PATCH] ASM #240 Change-Id: Ie1e0b115e991c0bdc01e929a21d36a9f1413d940 Former-commit-id: 611503cd96b82984b82aa2329bd275cdb5565edc [formerly e34ceb8c86f0814c1be7af3bbd2eadec8daf48aa] Former-commit-id: 969c50b80fb0eba9e7b58ca9b3fab408f25dabd4 --- .../cfgbits/data/config/drop-ins/prodList.txt | 77 +++++++++++---- .../config/drop-ins/rps-RPGOP-tcp.clear-air | 82 +++++++++------- .../data/config/drop-ins/rps-RPGOP-tcp.storm | 94 ++++++++++--------- .../data/config/drop-ins/tdwrProdList.txt | 4 +- .../data/config/drop-ins/wmoSiteInfo.txt | 16 ++-- .../rcm/config/MutableConfiguration.java | 29 +++++- .../com/raytheon/rcm/event/ConfigEvent.java | 36 ++++++- .../src/com/raytheon/rcm/mqsrvr/ReqObj.java | 26 ++++- .../src/com/raytheon/rcm/mqsrvr/MsgServ.java | 17 ++++ .../src/com/raytheon/rcm/mqsrvr/Serv.java | 33 +++++-- .../dataarchive/DataArchiveEndpoint.java | 16 +++- .../rcm/config/std/StandardConfig.java | 78 +++++++++++++-- .../config/std/StandardConfigProvider.java | 79 ++++++++++++++-- .../raytheon/rcm/rpsmgr/RPSListManager.java | 52 ++++++---- .../raytheon/rcm/server/Awips2Endpoint.java | 18 +++- .../com/raytheon/rcm/server/RadarServer.java | 14 +++ .../META-INF/MANIFEST.MF | 3 +- .../ndm/RadarServerNdmSubscriber.java | 59 ++++++++++++ .../res/spring/manualIngest-spring.xml | 26 +++++ 19 files changed, 598 insertions(+), 161 deletions(-) mode change 100755 => 100644 RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java create mode 100644 edexOsgi/com.raytheon.edex.rpgenvdata/src/com/raytheon/edex/rpgenvdata/ndm/RadarServerNdmSubscriber.java diff --git a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/prodList.txt b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/prodList.txt index eb8bb94ab9..5d47259a4c 100644 --- a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/prodList.txt +++ b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/prodList.txt @@ -1,23 +1,8 @@ # productId elevAngle prodCategory Partial WMO Id 2 0 GSM NXUS6 19 5 N0R SDUS5 - 19 13 N1R SDUS2 - 19 15 N1R SDUS2 - 19 24 N2R SDUS2 - 19 25 N2R SDUS2 - 19 31 N3R SDUS3 - 19 34 N3R SDUS3 - 19 35 N3R SDUS3 20 5 N0Z SDUS7 - 25 5 N0W SDUS6 27 5 N0V SDUS5 - 27 13 N1V SDUS7 - 27 15 N1V SDUS7 - 27 24 N2V SDUS6 - 27 25 N2V SDUS6 - 27 31 N3V SDUS6 - 27 34 N3V SDUS6 - 27 35 N3V SDUS6 28 5 NSP SDUS6 30 5 NSW SDUS6 32 0 DHR SDUS5 @@ -40,7 +25,7 @@ 56 34 N3S SDUS3 56 35 N3S SDUS3 57 0 NVL SDUS5 - 58 0 NST SDUS6 + 58 0 NST SDUS3 59 0 NHI SDUS6 61 0 NTV SDUS6 62 0 NSS SDUS6 @@ -50,7 +35,7 @@ 75 0 FTM NOUS6 78 0 N1P SDUS3 80 0 NTP SDUS5 - 81 0 DPA SDUS8 + 81 0 DPA SDUS5 82 0 SPD SDUS6 90 0 NHL SDUS6 136 0 RWO SDUS9 @@ -79,3 +64,61 @@ 99 35 N3U SDUS2 134 0 DVL SDUS5 135 0 EET SDUS7 + 159 5 N0X SDUS8 + 159 9 NAX SDUS8 + 159 13 N1X SDUS8 + 159 15 N1X SDUS8 + 159 18 NBX SDUS8 + 159 24 N2X SDUS8 + 159 25 N2X SDUS8 + 159 31 N3X SDUS8 + 159 34 N3X SDUS8 + 159 35 N3X SDUS8 + 161 5 N0C SDUS8 + 161 9 NAC SDUS8 + 161 13 N1C SDUS8 + 161 15 N1C SDUS8 + 161 18 NBC SDUS8 + 161 24 N2C SDUS8 + 161 25 N2C SDUS8 + 161 31 N3C SDUS8 + 161 34 N3C SDUS8 + 161 35 N3C SDUS8 + 163 5 N0K SDUS8 + 163 9 NAK SDUS8 + 163 13 N1K SDUS8 + 163 15 N1K SDUS8 + 163 18 NBK SDUS8 + 163 24 N2K SDUS8 + 163 25 N2K SDUS8 + 163 31 N3K SDUS8 + 163 34 N3K SDUS8 + 163 35 N3K SDUS8 + 165 5 N0H SDUS8 + 165 9 NAH SDUS8 + 165 13 N1H SDUS8 + 165 15 N1H SDUS8 + 165 18 NBH SDUS8 + 165 24 N2H SDUS8 + 165 25 N2H SDUS8 + 165 31 N3H SDUS8 + 165 34 N3H SDUS8 + 165 35 N3H SDUS8 + 166 5 N0M SDUS8 + 166 9 NAM SDUS8 + 166 13 N1M SDUS8 + 166 15 N1M SDUS8 + 166 18 NBM SDUS8 + 166 24 N2M SDUS8 + 166 25 N2M SDUS8 + 166 31 N3M SDUS8 + 166 34 N3M SDUS8 + 166 35 N3M SDUS8 + 169 0 OHA SDUS8 + 170 0 DAA SDUS8 + 171 0 PTA SDUS3 + 172 0 DTA SDUS8 + 174 0 DOD SDUS8 + 175 0 DSD SDUS8 + 176 0 DPR SDUS8 + 177 0 HHC SDUS8 diff --git a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.clear-air b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.clear-air index 0e7f7fb3ae..51c6e02cf4 100644 --- a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.clear-air +++ b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.clear-air @@ -1,36 +1,46 @@ -RPS List rps-RPGOP-tcp.clear-air modified 2007:01:03:00:00:00 ... 31 products - An RPS list contains the following fields: Product Name, Product - Mnemonic, Product Code, Number of Data Levels, Resolution, Layer Code, - Elevation, Contour Interval, Priority, Req Interval, and Map - The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c' -Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N -Reflectivity (Z) Z 19 16 100 - 15 -1 0 1N -Reflectivity (Z) Z 19 16 100 - 25 -1 0 1N -Reflectivity (Z) Z 19 16 100 - 35 -1 0 1N -Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N -Velocity (V) V 27 16 100 - 5 -1 0 1N -Velocity (V) V 27 16 100 - 15 -1 0 1N -Velocity (V) V 27 16 100 - 25 -1 0 1N -Velocity (V) V 27 16 100 - 35 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N -Composite Ref (CZ) CZ 36 8 400 - -1 -1 0 1N -Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N -Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N -Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N -Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N -Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N -Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N -Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N -Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N -One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N -Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N -VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N -Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N -Velocity (V) V 25 16 100 - 5 -1 0 1N -Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N -Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N -Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1 -Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N +RPS List rps-RPGOP-tcp.VCP32.rps created 2010:11:18:17:32:56 ... 41 products + An RPS list contains the fields: Prod-Name, Mnemonic, Prod-Code + Number of Data Levels, Resolution, Layer Code, Elevation, Contour Interval, + Priority, Req Interval, Map, Lower Layer, Upper Layer, multCut, endHour, timeSpan + The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c%3d%3d %c%7d%7d' +Reflectivity (Z) Z 94 256 100 - 8227 -1 0 1N -1 -1 N -1 0 +Velocity (V) V 99 256 25 - 8227 -1 0 1N -1 -1 N -1 0 +Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N -1 -1 N -1 0 +Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N -1 -1 N -1 0 +Velocity (V) V 27 16 100 - 5 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N -1 -1 N -1 0 +Composite Ref (CZ) CZ 36 8 400 - -1 -1 0 1N 2 -1 N -1 0 +Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N 2 -1 N -1 0 +Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N 2 -1 N -1 0 +Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N -1 -1 N -1 0 +Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N -1 -1 N -1 0 +Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N -1 -1 N -1 0 +Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N -1 -1 N -1 0 +Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N 2 -1 N -1 0 +Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N 2 -1 N -1 0 +Enhanced Echo Tops (EET) EET 135 256 100 - -1 -1 0 1N -1 -1 N -1 0 +Digital Vert Integ Liq (DVL) DVL 134 256 100 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N -1 -1 N -1 0 +VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N -1 -1 N -1 0 +Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N -1 -1 N -1 0 +Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N -1 -1 N -1 0 +Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N -1 -1 N -1 0 +Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N -1 0 +Differential Refl (ZDR) ZDR 159 256 25 - 8227 -1 0 1N -1 -1 N -1 0 +Correlation Coeff (CC) CC 161 256 25 - 8227 -1 0 1N -1 -1 N -1 0 +Specific Diff Phase (KDP) KDP 163 256 25 - 8227 -1 0 1N -1 -1 N -1 0 +Hydrometeor Class (HC) HC 165 256 25 - 8227 -1 0 1N -1 -1 N -1 0 +Melting Layer (ML) ML 166 0 0 - 8227 -1 0 1N -1 -1 N -1 0 +Digital Inst Precip Rate (DPR) DPR 176 0 25 - -1 -1 0 1N -1 -1 N -1 0 +Hybrid Hydrometeor Class (HHC) HHC 177 256 25 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Accum (OHA) OHA 169 16 200 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Unbiased Accum (DAA) DAA 170 256 25 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Accum (STA) STA 171 16 200 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Accum (STA) STA 172 256 25 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Diff (DOD) DOD 174 256 25 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Diff (DSD) DSD 175 256 25 - -1 -1 0 1N -1 -1 N -1 0 diff --git a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.storm b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.storm index f8ffaca474..130b0dc1d3 100644 --- a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.storm +++ b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/rps-RPGOP-tcp.storm @@ -1,43 +1,51 @@ -RPS List rps-RPGOP-tcp.storm created 2007:01:03:00:00:00 ... 38 products - An RPS list contains the following fields: Product Name, Product - Mnemonic, Product Code, Number of Data Levels, Resolution, Layer Code, - Elevation, Contour Interval, Priority, Req Interval, and Map - The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c' -Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N -Reflectivity (Z) Z 19 16 100 - 15 -1 0 1N -Reflectivity (Z) Z 19 16 100 - 25 -1 0 1N -Reflectivity (Z) Z 19 16 100 - 35 -1 0 1N -Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N -Velocity (V) V 27 16 100 - 5 -1 0 1N -Velocity (V) V 27 16 100 - 15 -1 0 1N -Velocity (V) V 27 16 100 - 25 -1 0 1N -Velocity (V) V 27 16 100 - 35 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N -Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N -Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N -Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N -Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N -Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N -Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N -Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N -Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N -Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N -One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N -Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N -VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N -Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N -Velocity (V) V 25 16 100 - 5 -1 0 1N -Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N -Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N -Severe Weather Probablilty (SWP) SWP 47 0 100 - -1 -1 0 1N -Storm Tracking Information (STI) STI 58 0 100 - -1 -1 0 1N -Hail Index (HI) HI 59 0 100 - -1 -1 0 1N -Mesocyclone (M) M 60 0 100 - -1 -1 0 1N -Mesocyclone (MD) MD 141 0 0 - -1 -1 0 1N -Tornadic Vortex Signature (TVS) TVS 61 0 100 - -1 -1 0 1N -Storm Structure (SS) SS 62 0 100 - -1 -1 0 1N -Supplemental Precipitation Data (SPD) SPD 82 0 100 - -1 -1 0 1N -Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1 -Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N +RPS List rps-RPGOP-tcp.VCP11.rps created 2010:11:18:17:28:33 ... 46 products + An RPS list contains the fields: Prod-Name, Mnemonic, Prod-Code + Number of Data Levels, Resolution, Layer Code, Elevation, Contour Interval, + Priority, Req Interval, Map, Lower Layer, Upper Layer, multCut, endHour, timeSpan + The record format is: '%-39s %-3s%4d%4d%6d %c%6d%7d%2d%2d%c%3d%3d %c%7d%7d' +Reflectivity (Z) Z 94 256 100 - 8226 -1 0 1N -1 -1 N -1 0 +Velocity (V) V 99 256 25 - 8226 -1 0 1N -1 -1 N -1 0 +Reflectivity (Z) Z 19 16 100 - 5 -1 0 1N -1 -1 N -1 0 +Reflectivity (Z) Z 20 16 200 - 5 -1 0 1N -1 -1 N -1 0 +Velocity (V) V 27 16 100 - 5 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 5 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 15 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 25 -1 0 1N -1 -1 N -1 0 +Storm Rel Velocity (SRM) SRM 56 16 100 - 35 -1 0 1N -1 -1 N -1 0 +Composite Ref (CZ) CZ 37 16 100 - -1 -1 0 1N 2 -1 N -1 0 +Composite Ref (CZ) CZ 38 16 400 - -1 -1 0 1N 2 -1 N -1 0 +Lyr Comp Ref Max (LRM) Level 1 LRM 65 8 0 L -1 -1 0 1N -1 -1 N -1 0 +Lyr Comp Ref Max (LRM) Level 2 LRM 66 8 0 M -1 -1 0 1N -1 -1 N -1 0 +Lyr Comp Ref Max (LRM) Level 3 LRM 90 8 0 H -1 -1 0 1N -1 -1 N -1 0 +Lyr Comp Ref MAX (APR) APR 67 16 0 L -1 -1 0 1N -1 -1 N -1 0 +Echo Tops (ET) ET 41 16 0 - -1 -1 0 1N 2 -1 N -1 0 +Vert Integ Liq (VIL) VIL 57 16 0 - -1 -1 0 1N 2 -1 N -1 0 +Enhanced Echo Tops (EET) EET 135 256 100 - -1 -1 0 1N -1 -1 N -1 0 +Digital Vert Integ Liq (DVL) DVL 134 256 100 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Precip (OHP) OHP 78 16 0 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Precip (STP) STP 80 16 0 - -1 -1 0 1N -1 -1 N -1 0 +VAD Wind Profile (VWP) VWP 48 0 0 - -1 -1 0 1N -1 -1 N -1 0 +Digital Precip Array (DPA) DPA 81 256 400 - -1 -1 0 1N -1 -1 N -1 0 +Base Spectrum Width (SW) SW 28 8 100 - 5 -1 0 1N -1 -1 N -1 0 +Base Spectrum Width (SW) SW 30 8 100 - 5 -1 0 1N -1 -1 N -1 0 +Storm Tracking Information (STI) STI 58 0 100 - -1 -1 0 1N 2 -1 N -1 0 +Hail Index (HI) HI 59 0 100 - -1 -1 0 1N 2 -1 N -1 0 +Mesocyclone (MD) MD 141 0 0 - 1 -1 0 1N 2 -1 N -1 0 +Tornadic Vortex Signature (TVS) TVS 61 0 100 - -1 -1 0 1N 2 -1 N -1 0 +Storm Structure (SS) SS 62 0 100 - -1 -1 0 1N -1 -1 N -1 0 +Supplemental Precipitation Data (SPD) SPD 82 0 100 - -1 -1 0 1N -1 -1 N -1 0 +Digital Hybrid Scan Refl (DHR) DHR 32 256 100 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Precip (STP) STP 138 256 200 - -1 -1 0 1N -1 -1 N -1 0 +Differential Refl (ZDR) ZDR 159 256 25 - 8226 -1 0 1N -1 -1 N -1 0 +Correlation Coeff (CC) CC 161 256 25 - 8226 -1 0 1N -1 -1 N -1 0 +Specific Diff Phase (KDP) KDP 163 256 25 - 8226 -1 0 1N -1 -1 N -1 0 +Hydrometeor Class (HC) HC 165 256 25 - 8226 -1 0 1N -1 -1 N -1 0 +Melting Layer (ML) ML 166 0 0 - 8226 -1 0 1N -1 -1 N -1 0 +Digital Inst Precip Rate (DPR) DPR 176 0 25 - -1 -1 0 1N -1 -1 N -1 0 +Hybrid Hydrometeor Class (HHC) HHC 177 256 25 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Accum (OHA) OHA 169 16 200 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Unbiased Accum (DAA) DAA 170 256 25 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Accum (STA) STA 171 16 200 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Accum (STA) STA 172 256 25 - -1 -1 0 1N -1 -1 N -1 0 +One Hour Diff (DOD) DOD 174 256 25 - -1 -1 0 1N -1 -1 N -1 0 +Storm Total Diff (DSD) DSD 175 256 25 - -1 -1 0 1N -1 -1 N -1 0 diff --git a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/tdwrProdList.txt b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/tdwrProdList.txt index 88b5255bf8..06fbe65ef7 100644 --- a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/tdwrProdList.txt +++ b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/tdwrProdList.txt @@ -24,12 +24,12 @@ 41 0 NET SDUS7 48 0 NVW SDUS3 57 0 NVL SDUS5 - 58 0 NST SDUS6 + 58 0 NST SDUS3 59 0 NHI SDUS6 61 0 NTV SDUS6 78 0 N1P SDUS3 80 0 NTP SDUS5 - 81 0 DPA SDUS8 + 81 0 DPA SDUS5 82 0 SPD SDUS6 138 0 DSP SDUS5 141 0 NMD SDUS3 diff --git a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/wmoSiteInfo.txt b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/wmoSiteInfo.txt index 2e1ee80955..bc687e5739 100644 --- a/RadarServer/build.rcm/cfgbits/data/config/drop-ins/wmoSiteInfo.txt +++ b/RadarServer/build.rcm/cfgbits/data/config/drop-ins/wmoSiteInfo.txt @@ -1,6 +1,6 @@ #Radar Connection Characteristic D'n' Key #D1 - LAN 10 mbps -#D2 - FR DoD 256 kbps +#D2 - FR DoD 1.54 mbps #D3 - FAA FR 256 kbps #D4 - NWS & DoD Supplemental FR 128 kbps #D5 - NWS & DoD Supplemental FR 256 kbps @@ -8,7 +8,7 @@ #D7 - Dedicated Backup Across WAN 128 kbps Aggregate #D8 - ASR-4/ARSR-11 radars # -#Site ID Region numRpgs RPGs 020209 +#Site ID Region numRpgs RPGs 071911 KABQ 5 5 ABXYD1 FDXYD2 EPZND7 HDXND7 AMAND7 KABR 3 4 ABRYD1 FSDND7 BISND7 MBXND7 KAKQ 1 4 AKQYD1 DOXYD2 MHXND7 RAXND7 @@ -87,7 +87,7 @@ KLZK 4 4 LZKYD1 SRXND4 NQAND7 INXND7 KMAF 4 5 MAFYD1 SJTND7 DYXND7 EPZND7 HDXND7 KMEG 4 7 NQAYD1 GWXND4 MEMYD6 LZKND7 OHXND7 PAHND7 SRXND7 KMFL 2 7 AMXYD1 BYXND4 FLLYD6 MIAYD6 PBIYD6 JUAND7 TBWND7 -KMFR 6 4 MAXYD1 BHXND7 ATXND7 RTXND7 +KMFR 6 5 MAXYD1 BHXND7 ATXND7 LGXND7 RTXND7 KMHX 2 4 MHXYD1 AKQND7 DOXND7 LTXND7 KMKX 3 4 MKXYD1 MKEYD6 GRBND7 LOTND7 KMLB 2 5 MLBYD1 MCOYD6 TBWND7 JUAND7 AMXND7 @@ -96,7 +96,7 @@ KMPX 3 4 MPXYD1 MSPYD6 DLHND7 FSDND7 KMQT 3 3 MQTYD1 APXND7 GRBND7 KMRX 4 5 MRXYD1 HTXND4 OHXND7 FFCND7 JGXND7 KMSO 5 3 MSXYD1 TFXND7 OTXND7 -KMSR 3 1 MPXND1 +KMSR 3 2 MPXND1 MSPND6 KMTR 6 6 MUXYD1 BHXND7 VTXND7 VBXND7 NKXND7 SOXND7 KOAX 3 3 OAXYD1 UEXND7 DMXND7 KOHX 4 6 OHXYD1 HTXND4 BNAYD6 MRXND7 NQAND7 GWXND7 @@ -110,7 +110,7 @@ KPBZ 1 4 PBZYD1 PITYD6 RLXND7 BUFND7 KPDT 6 3 PDTYD1 OTXND7 CBXND7 KPHI 1 5 DIXYD1 DOXND4 PHLYD6 LWXND7 OKXND7 KPIH 5 4 SFXYD1 MTXND4 CBXND7 ICXND7 -KPQR 6 3 RTXYD1 ATXND7 MAXND7 +KPQR 6 4 RTXYD1 LGXND5 ATXND7 MAXND7 KPSR 5 5 IWAYD1 YUXYD1 PHXYD6 EMXND7 FSXND7 KPTR 6 1 RTXND1 KPUB 5 3 PUXYD1 FTGND7 GLDND7 @@ -121,7 +121,7 @@ KRIW 5 3 RIWYD1 BLXND7 CYSND7 KRLX 1 3 RLXYD1 PBZND7 JKLND7 KRNK 1 3 FCXYD1 RAXND7 GSPND7 KRSA 6 1 DAXND1 -KSEW 6 4 ATXYD1 RTXND7 PDTND7 QKWND8 +KSEW 6 5 ATXYD1 LGXYD1 RTXND7 PDTND7 QKWND8 KSGF 3 5 SGFYD1 EAXND7 PAHND7 VWXND7 HPXND7 KSGX 6 6 NKXYD1 SOXYD1 EYXND5 VTXND7 VBXND7 HNXND7 KSHV 4 7 SHVYD1 LZKND4 FWSND7 GRKND7 DGXND7 GWXND7 SRXND7 @@ -144,8 +144,8 @@ KVEF 5 6 ESXYD1 EYXYD2 LASYD6 FSXND7 IWAND7 YUXND7 KVHW 5 2 MTXND5 ICXND5 KVUY 1 1 OKXND5 KWNO 1 1 LWXND5 -PACR 8 7 ABCYD3 AKCYD3 AHGND7 AIHND7 APDND7 AECND7 ACGND7 -PAFC 8 7 AHGYD3 AIHYD3 ABCND7 AKCND7 APDND7 AECND7 ACGND7 +PACR 8 7 ABCND7 AKCND7 AHGND7 AIHND7 APDND7 AECND7 ACGND7 +PAFC 8 7 AHGYD3 AIHYD3 ABCYD3 AKCYD3 APDND7 AECND7 ACGND7 PAFG 9 7 AECYD3 APDYD3 AHGND7 AIHND7 ABCND7 AKCND7 ACGND7 PAJK 7 7 ACGYD3 AHGND7 AIHND7 ABCND7 AKCND7 APDND7 AECND7 PGUM 0 1 GUAYD1 diff --git a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/config/MutableConfiguration.java b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/config/MutableConfiguration.java index c145353a55..7de193dffd 100755 --- a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/config/MutableConfiguration.java +++ b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/config/MutableConfiguration.java @@ -19,10 +19,29 @@ **/ package com.raytheon.rcm.config; +import com.raytheon.rcm.event.RadarEventListener; + +/** + * Interface to configurations that can be changed at runtime. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Support arbitrary config files.
+ * 
+ * + */ public interface MutableConfiguration { - // TODO: need to return usable error messages... - public boolean setGlobalConfig(Globals globals); - public boolean setRadarConfig(RadarConfig rc); - public boolean addRadarConfig(RadarConfig rc); - public boolean removeRadarConfig(String radarID); + public RadarEventListener getConfigurationEventTarget(); + public void setConfigurationEventTarget(RadarEventListener configurationEventTarget); + + // TODO: need to return usable error messages... + public boolean setGlobalConfig(Globals globals); + public boolean setRadarConfig(RadarConfig rc); + public boolean addRadarConfig(RadarConfig rc); + public boolean removeRadarConfig(String radarID); + public boolean storeConfigFile(String name, byte[] data); } diff --git a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java index e2b769c1d5..7475d52aa8 100755 --- a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java +++ b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/event/ConfigEvent.java @@ -26,22 +26,46 @@ import javax.xml.bind.annotation.XmlRootElement; import com.raytheon.rcm.config.RadarConfig; +/** + * Represents events that can happen within the RadarServer. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * 2009-04-22   #1693      D. Friedman Initial checkin
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Add Category enum
+ * 
+ * + */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class ConfigEvent { + public static enum Category { GLOBAL_CONFIG, RADAR_CONFIG, PROD_DISTRIBUTION, NATIONAL_RPS_LISTS } + private String radarID; // null indicates global configuration change. private RadarConfig oldConfig; private RadarConfig newConfig; + private Category category; + + /** Public constructor for deserialization. Not intended for users. */ public ConfigEvent() { - + } - + + public ConfigEvent(Category category) { + this.category = category; + } + public ConfigEvent(String radarID, RadarConfig oldConfig, RadarConfig newConfig) { this.radarID = radarID; this.oldConfig = oldConfig; this.newConfig = newConfig; + this.category = radarID == null ? Category.GLOBAL_CONFIG : Category.RADAR_CONFIG; } public String getRadarID() { @@ -74,4 +98,12 @@ public class ConfigEvent { else return "{Global config change}"; } + + public Category getCategory() { + return category; + } + + public void setCategory(Category category) { + this.category = category; + } } diff --git a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java old mode 100755 new mode 100644 index dc465cb3a1..21f4a7d7c5 --- a/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java +++ b/RadarServer/com.raytheon.rcm.lib/src/com/raytheon/rcm/mqsrvr/ReqObj.java @@ -35,6 +35,19 @@ import com.raytheon.rcm.request.Request; import com.raytheon.rcm.rmr.MultipleRequest; +/** + * Request messages that can be sent to the RadarServer. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Add SendConfigFile
+ * 
+ * + */ @XmlSeeAlso({ReqObj.GetRadarList.class, ReqObj.GetRadarConfig.class, ReqObj.SetRadarConfig.class, ReqObj.GetRadarStatus.class, ReqObj.GetRadarStatusMessages.class, @@ -45,7 +58,8 @@ import com.raytheon.rcm.rmr.MultipleRequest; ReqObj.GetGlobalConfig.class, ReqObj.SetGlobalConfig.class, ReqObj.ActivateRMR.class, ReqObj.CancelRMR.class, ReqObj.GetActiveRMRs.class, ReqObj.GetAlertRequest.class, - ReqObj.SendAlertRequest.class, ReqObj.SendMessageToRPG.class}) + ReqObj.SendAlertRequest.class, ReqObj.SendMessageToRPG.class, + ReqObj.SendConfigFile.class}) public class ReqObj { @XmlRootElement public static class GetRadarList extends ReqObj { @@ -121,6 +135,16 @@ public class ReqObj { // nothing else } + @XmlRootElement + public static class SendConfigFile extends ReqObj { + public String fileName; + public byte[] fileData; + public String toString() { + return String.format("%s(%s, ...)", + getClass().getSimpleName(), fileName); + } + } + @XmlRootElement public static class ActivateRMR extends ReqObj { public MultipleRequest multipleRequest; diff --git a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java index 1b7d20481d..1233ca024a 100644 --- a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java +++ b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/MsgServ.java @@ -66,6 +66,7 @@ import com.raytheon.rcm.mqsrvr.ReqObj.GetRadarList; import com.raytheon.rcm.mqsrvr.ReqObj.GetRadarStatusMessages; import com.raytheon.rcm.mqsrvr.ReqObj.GetRpsList; import com.raytheon.rcm.mqsrvr.ReqObj.SendAlertRequest; +import com.raytheon.rcm.mqsrvr.ReqObj.SendConfigFile; import com.raytheon.rcm.mqsrvr.ReqObj.SendMessageToRPG; import com.raytheon.rcm.mqsrvr.ReqObj.SendOneTimeRequests; import com.raytheon.rcm.mqsrvr.ReqObj.SendRpsList; @@ -79,6 +80,19 @@ import com.raytheon.rcm.server.Log; import com.raytheon.rcm.server.RadarServer; import com.raytheon.rcm.server.StatusManager.RadarStatus; +/** + * JMS-based RadarServer request message handler. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Handle NDM config files.
+ * 
+ * + */ public class MsgServ implements RadarEventListener, MessageListener { QueueConnection queueConn; @@ -313,6 +327,9 @@ public class MsgServ implements RadarEventListener, MessageListener { } else if (ro instanceof SendMessageToRPG) { SendMessageToRPG ro2 = (SendMessageToRPG) ro; error = serv.sendMessageToRPG(ro2.radarID, ro2.message); + } else if (ro instanceof SendConfigFile) { + SendConfigFile ro2 = (SendConfigFile) ro; + error = serv.sendConfigFile(ro2.fileName, ro2.fileData); } else if (ro instanceof DebugCommand) { DebugCommand.Command c = ((DebugCommand) ro).command; if (c == DebugCommand.Command.LOG_OTR_STATUS) diff --git a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/Serv.java b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/Serv.java index 940830d544..156cd11d2e 100755 --- a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/Serv.java +++ b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/mqsrvr/Serv.java @@ -28,7 +28,6 @@ import java.util.Map; import javax.xml.bind.JAXBException; -import com.raytheon.rcm.event.ConfigEvent; import com.raytheon.rcm.event.RadarEvent; import com.raytheon.rcm.event.RadarEventListener; import com.raytheon.rcm.alertreq.AlertRequestDefinition; @@ -53,6 +52,19 @@ import com.raytheon.rcm.server.StatusManager; import com.raytheon.rcm.server.StatusManager.RadarStatus; +/** + * Common RadarServer request message handler. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Handle NDM config files.
+ * 
+ * + */ public class Serv { protected RadarServer server; @@ -236,9 +248,6 @@ public class Serv { return "The RadarServer's current configuration system does not support live changes."; MutableConfiguration mc = (MutableConfiguration) config; boolean result = mc.setGlobalConfig(global); - - ConfigEvent ev = new ConfigEvent(); - server.handleConfigEvent(ev); if (result) return null; @@ -251,12 +260,8 @@ public class Serv { if (! (config instanceof MutableConfiguration)) return "The RadarServer's current configuration system does not support live changes."; MutableConfiguration mc = (MutableConfiguration) config; - RadarConfig oldConfig = config.getConfigForRadar(rc.getRadarID()); boolean result = mc.setRadarConfig(rc); - ConfigEvent ev = new ConfigEvent(rc.getRadarID(), oldConfig, rc); - server.handleConfigEvent(ev); - if (result) return null; else @@ -288,4 +293,16 @@ public class Serv { server.getConnectionManager().sendMessageToRadar(radarID, message); return null; } + + public String sendConfigFile(String fileName, byte[] fileData) { + Configuration config = server.getConfiguration(); + if (! (config instanceof MutableConfiguration)) + return "The RadarServer's current configuration system does not support live changes."; + MutableConfiguration mc = (MutableConfiguration) config; + boolean result = mc.storeConfigFile(fileName, fileData); + if (result) + return null; + else + return "Error updating configuration."; + } } diff --git a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/server/dataarchive/DataArchiveEndpoint.java b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/server/dataarchive/DataArchiveEndpoint.java index 7e68f37f36..5607cd19ee 100644 --- a/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/server/dataarchive/DataArchiveEndpoint.java +++ b/RadarServer/com.raytheon.rcm.server.mq/src/com/raytheon/rcm/server/dataarchive/DataArchiveEndpoint.java @@ -48,6 +48,7 @@ import org.itadaki.bzip2.BZip2InputStream; import com.raytheon.rcm.config.EndpointConfig; import com.raytheon.rcm.config.awips1.Awips1ProdDistInfoBuilder; import com.raytheon.rcm.event.ConfigEvent; +import com.raytheon.rcm.event.ConfigEvent.Category; import com.raytheon.rcm.event.RadarEvent; import com.raytheon.rcm.event.RadarEventAdapter; import com.raytheon.rcm.message.GraphicProduct; @@ -60,6 +61,19 @@ import com.raytheon.rcm.products.RadarProduct.Param; import com.raytheon.rcm.server.Log; import com.raytheon.rcm.server.RadarServer; +/** + * Stores radar messages in a directory structure and notifies EDEX via JMS. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Refactor config events.
+ * 
+ * + */ public class DataArchiveEndpoint extends RadarEventAdapter { private RadarServer radarServer; @@ -638,7 +652,7 @@ public class DataArchiveEndpoint extends RadarEventAdapter { @Override public void handleConfigEvent(ConfigEvent event) { - if (event.getRadarID() == null) + if (event.getCategory() == Category.GLOBAL_CONFIG) updateConfig(); } diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfig.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfig.java index c3b223e42f..56552d8919 100755 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfig.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfig.java @@ -42,6 +42,9 @@ import com.raytheon.rcm.config.RadarType; import com.raytheon.rcm.config.StandardProductDistInfoDB; import com.raytheon.rcm.config.Util; import com.raytheon.rcm.config.awips1.Awips1RpsListUtil; +import com.raytheon.rcm.event.ConfigEvent; +import com.raytheon.rcm.event.ConfigEvent.Category; +import com.raytheon.rcm.event.RadarEventListener; import com.raytheon.rcm.message.GSM; import com.raytheon.rcm.message.GraphicProduct.PDB; import com.raytheon.rcm.request.RpsList; @@ -49,6 +52,20 @@ import com.raytheon.rcm.request.RpsXml; import com.raytheon.rcm.server.Log; +/** + * Represents the standard configuration model of the AWIPS 2 RadarServer. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Handle updated NDM config files.
+ *                                     Send configuration events.
+ * 
+ * + */ public class StandardConfig implements Configuration, MutableConfiguration { final String generalPropBase = "com.raytheon.rcm"; @@ -58,6 +75,7 @@ public class StandardConfig implements Configuration, MutableConfiguration { private StandardConfigProvider provider; private HashMap radars = new HashMap(); private StandardProductDistInfoDB prodDistInfoDB = new StandardProductDistInfoDB(); + private RadarEventListener configurationEventTarget; private int regionCodeFromWmoSiteInfo; @@ -88,11 +106,20 @@ public class StandardConfig implements Configuration, MutableConfiguration { return prodDistInfoDB; } + public void setProdDistInfoDB(StandardProductDistInfoDB prodDistInfoDB) { + this.prodDistInfoDB = prodDistInfoDB; + if (configurationEventTarget != null) { + ConfigEvent ev = new ConfigEvent(Category.PROD_DISTRIBUTION); + configurationEventTarget.handleConfigEvent(ev); + } + } + @Override public ProductDistributionInfo getProductDistInfo(String radarID, PDB pdb) { RadarConfig rc = getConfigForRadar(radarID); - if (prodDistInfoDB != null && rc != null) - return prodDistInfoDB.getProductDistInfo(rc, pdb.productCode, pdb); + StandardProductDistInfoDB db = prodDistInfoDB; + if (db != null && rc != null) + return db.getProductDistInfo(rc, pdb.productCode, pdb); else return null; } @@ -101,8 +128,9 @@ public class StandardConfig implements Configuration, MutableConfiguration { public ProductDistributionInfo getProductDistInfo(String radarID, int messageCode) { RadarConfig rc = getConfigForRadar(radarID); - if (prodDistInfoDB != null && rc != null) - return prodDistInfoDB.getProductDistInfo(rc, messageCode, null); + StandardProductDistInfoDB db = prodDistInfoDB; + if (db != null && rc != null) + return db.getProductDistInfo(rc, messageCode, null); else return null; } @@ -299,6 +327,10 @@ public class StandardConfig implements Configuration, MutableConfiguration { void setRegionCodeFromWmoSiteInfo(int regionCodeFromWmoSiteInfo) { this.regionCodeFromWmoSiteInfo = regionCodeFromWmoSiteInfo; + /* There is currently no need to send a configuration event for this + * because the value is always queried from the configuration when + * it is used. + */ } // TODO: Should not have to care about the opMode... @@ -348,8 +380,13 @@ public class StandardConfig implements Configuration, MutableConfiguration { // doc.regionCode = globals.regionCode; // Setting this directly is not supported... doc.regionCode = null; provider.updateRegionCode(); - - return saveConfig(); + + boolean result = saveConfig(); + if (configurationEventTarget != null) { + ConfigEvent ev = new ConfigEvent(Category.GLOBAL_CONFIG); + configurationEventTarget.handleConfigEvent(ev); + } + return result; } private boolean saveConfig() { @@ -386,7 +423,13 @@ public class StandardConfig implements Configuration, MutableConfiguration { RadarConfig oldConfig = radars.get(rc.getRadarID()); if (oldConfig != null) { radars.put(rc.getRadarID(), rc); - return saveConfig(); + + boolean result = saveConfig(); + if (configurationEventTarget != null) { + ConfigEvent ev = new ConfigEvent(rc.getRadarID(), oldConfig, rc); + configurationEventTarget.handleConfigEvent(ev); + } + return result; } else { Log.errorf("Attempt to change configuration of unknown radar '%s'", rc.getRadarID()); return false; @@ -431,4 +474,25 @@ public class StandardConfig implements Configuration, MutableConfiguration { return new FileInputStream(res.getDropInPath(name)); } + /*package*/ void notifyNationalRpsLists() { + if (configurationEventTarget != null) { + ConfigEvent ev = new ConfigEvent(Category.NATIONAL_RPS_LISTS); + configurationEventTarget.handleConfigEvent(ev); + } + } + + public boolean storeConfigFile(String name, byte[] data) { + // Delegate to provider + return provider.storeNdmConfigFile(name, data); + } + + public RadarEventListener getConfigurationEventTarget() { + return configurationEventTarget; + } + + public void setConfigurationEventTarget( + RadarEventListener configurationEventTarget) { + this.configurationEventTarget = configurationEventTarget; + } + } diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java index fa97a24dff..07a6ce68f1 100755 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/config/std/StandardConfigProvider.java @@ -21,9 +21,12 @@ package com.raytheon.rcm.config.std; import java.io.File; import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.HashMap; import java.util.NoSuchElementException; import java.util.Scanner; +import java.util.regex.Pattern; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -40,8 +43,26 @@ import com.raytheon.rcm.config.awips1.Awips1ConfigProvider; import com.raytheon.rcm.server.Log; +/** + * Constructs (and potentially updates) a StandardConfig based on + * various configuration files. + * + *
+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Handle updated NDM config files.
+ * 
+ * + */ public class StandardConfigProvider implements ConfigurationProvider { + private static String WSR_88D_PROD_LIST_NAME = "prodList.txt"; + private static String TDWR__PROD_LIST_NAME = "tdwrProdList.txt"; + private static String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt"; + private static JAXBContext jaxbContext; private static Unmarshaller u; private static Marshaller m; @@ -113,15 +134,20 @@ public class StandardConfigProvider implements ConfigurationProvider { config.setRadars(radars); } - - StandardProductDistInfoDB db = config.getProdDistInfoDB(); - tryAddProdList(db, false, "prodList.txt"); - tryAddProdList(db, true, "tdwrProdList.txt"); + + loadProdListDB(); updateRegionCode(); } - // Ugh. Bleh. Duplicating code from Awips1ConfigProvider + private void loadProdListDB() { + StandardProductDistInfoDB db = new StandardProductDistInfoDB(); + tryAddProdList(db, false, WSR_88D_PROD_LIST_NAME); + tryAddProdList(db, true, TDWR__PROD_LIST_NAME); + config.setProdDistInfoDB(db); + } + + // TODO: Duplicating code from Awips1ConfigProvider protected static boolean skipComments(Scanner s) { try { s.skip("^\\s*(#|//).*$"); @@ -133,9 +159,9 @@ public class StandardConfigProvider implements ConfigurationProvider { public void updateRegionCode() { try { - readWmoSiteInfo(res.getNdmFile("wmoSiteInfo.txt")); + readWmoSiteInfo(res.getNdmFile(WMO_SITE_INFO_NAME)); } catch (Exception e) { - Log.errorf("Could not process wmoSiteInfo.txt: %s", e); + Log.errorf("Could not process %s.txt: %s", WMO_SITE_INFO_NAME, e); } } @@ -209,4 +235,43 @@ public class StandardConfigProvider implements ConfigurationProvider { return new File(res.getPrivateDir(), "config.xml"); } + public boolean storeNdmConfigFile(String name, byte[] data) { + File f = new File(name); + if (f.getParent() != null) { + Log.error("Attempt to store NDM config file with a specific directory: " + name); + return false; + } + + File path = res.getDropInPath(name); + try { + FileOutputStream fos = new FileOutputStream(path); + try { + fos.write(data); + } finally { + try { + fos.close(); + } catch (IOException e) { + // ignore + } + } + } catch (IOException e) { + Log.errorf("Failed to store NDM config file %s: %s", path, e); + return false; + } + + Log.eventf("Stored new version of NDM config %s.", name); + + if (WSR_88D_PROD_LIST_NAME.equals(name) || + TDWR__PROD_LIST_NAME.equals(name)) { + loadProdListDB(); + } else if (WMO_SITE_INFO_NAME.equals(name)) { + updateRegionCode(); + } else if (Pattern.matches("^rps-.*OP.*$", name)) { + config.notifyNationalRpsLists(); + } else { + Log.warnf("No action taken for new %s. You may need to restart for changes to take affect.", name); + } + + return true; + } } diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/rpsmgr/RPSListManager.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/rpsmgr/RPSListManager.java index d02a3cbcb7..53abbf9477 100755 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/rpsmgr/RPSListManager.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/rpsmgr/RPSListManager.java @@ -25,8 +25,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.ListIterator; +import java.util.concurrent.ConcurrentHashMap; import com.raytheon.rcm.config.Configuration; import com.raytheon.rcm.config.EndpointConfig; @@ -35,6 +35,7 @@ import com.raytheon.rcm.config.RadarConfig; import com.raytheon.rcm.config.RadarType; import com.raytheon.rcm.config.Util; import com.raytheon.rcm.event.ConfigEvent; +import com.raytheon.rcm.event.ConfigEvent.Category; import com.raytheon.rcm.event.RadarEvent; import com.raytheon.rcm.event.RadarEventAdapter; import com.raytheon.rcm.message.GSM; @@ -69,6 +70,7 @@ import com.raytheon.rcm.server.StatusManager.RadarStatus; * 2009-04-22 #1693 D. Friedman Initial checkin * ... * 2013-01-31 DR 15458 D. Friedman Explicitly handle UNSPECIFIED_VCP. + * 2014-02-03 DR 14762 D. Friedman Handle updated national RPS lists. * * */ @@ -79,13 +81,11 @@ public class RPSListManager extends RadarEventAdapter { RadarServer radarServer; - HashMap immediateLists = new HashMap(); // TODO: - // on sendRpsList (not store), set. on (true) vcp change, remove. should // persist... - HashMap currentRpsLists = new HashMap(); + ConcurrentHashMap currentRpsLists = new ConcurrentHashMap(); - HashMap currentVcps = new HashMap(); + ConcurrentHashMap currentVcps = new ConcurrentHashMap(); /** * Indicates RadarServer should generate AWIPS 1 style RPS lists. There does @@ -580,23 +580,35 @@ public class RPSListManager extends RadarEventAdapter { && newCfg.isDedicated() && (oldCfg.isCollectionEnabled() != newCfg .isCollectionEnabled())) { - String radarID = newCfg.getRadarID(); - RadarStatus status = radarServer.getStatusManager() - .getRadarStatus(radarID); - byte[] gsmData = null; - if (status != null) - gsmData = status.getCurrentGSM(); - currentVcps.remove(radarID); - currentRpsLists.remove(radarID); - if (gsmData != null) { - handleGSM(newCfg, gsmData); - } else { - Log.debugf( - "RPS-relevant configuration changed for %s, but " - + "it is not connected. Cannot send a list now.", - radarID); + resetRpsListForRadar(newCfg); + } + } else if (event.getCategory() == Category.NATIONAL_RPS_LISTS) { + Configuration config = radarServer.getConfiguration(); + for (String radarID : config.getConfiguredRadarList()) { + RadarConfig rc = config.getConfigForRadar(radarID); + if (rc.isCollectionEnabled()) { + resetRpsListForRadar(rc); } } } } + + private void resetRpsListForRadar(RadarConfig rc) { + String radarID = rc.getRadarID(); + RadarStatus status = radarServer.getStatusManager() + .getRadarStatus(radarID); + byte[] gsmData = null; + if (status != null) + gsmData = status.getCurrentGSM(); + currentVcps.remove(radarID); + currentRpsLists.remove(radarID); + if (gsmData != null) { + handleGSM(rc, gsmData); + } else { + Log.debugf( + "RPS-relevant configuration changed for %s, but " + + "it is not connected. Cannot send a list now.", + radarID); + } + } } diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/Awips2Endpoint.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/Awips2Endpoint.java index 3094ff6d80..40146e6b30 100644 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/Awips2Endpoint.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/Awips2Endpoint.java @@ -30,6 +30,7 @@ import java.nio.ByteBuffer; import org.itadaki.bzip2.BZip2InputStream; import com.raytheon.rcm.event.ConfigEvent; +import com.raytheon.rcm.event.ConfigEvent.Category; import com.raytheon.rcm.event.RadarEvent; import com.raytheon.rcm.event.RadarEventAdapter; import com.raytheon.rcm.message.GraphicProduct; @@ -38,9 +39,20 @@ import com.raytheon.rcm.message.Message; import com.raytheon.rcm.message.MessageFormatException; /** - * A radar server component that delivers radar products to an EDEX file + *

A radar server component that delivers radar products to an EDEX file * endpoint. - */ + * + *

This class is obsoleted by DataArchiveEndpoint. + * + *

+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Refactor config events.
+ * 
+*/ public class Awips2Endpoint extends RadarEventAdapter { RadarServer radarServer; @@ -152,7 +164,7 @@ public class Awips2Endpoint extends RadarEventAdapter { @Override public void handleConfigEvent(ConfigEvent event) { - if (event.getRadarID() == null) + if (event.getCategory() == Category.GLOBAL_CONFIG) updateConfig(); } diff --git a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/RadarServer.java b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/RadarServer.java index c9ee69b249..c0f6f180fa 100755 --- a/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/RadarServer.java +++ b/RadarServer/com.raytheon.rcm.server/src/com/raytheon/rcm/server/RadarServer.java @@ -26,6 +26,7 @@ import com.raytheon.rcm.coll.Collector; import com.raytheon.rcm.coll.RequestScheduler; import com.raytheon.rcm.config.Configuration; import com.raytheon.rcm.config.ConfigurationProvider; +import com.raytheon.rcm.config.MutableConfiguration; import com.raytheon.rcm.event.ConfigEvent; import com.raytheon.rcm.event.NotificationEvent; import com.raytheon.rcm.event.RadarEvent; @@ -38,6 +39,16 @@ import com.raytheon.rcm.rpsmgr.RPSListManager; * Main class for the Radar Server. *

* This is a container class for the various components of the Radar Server. + * + *

+ *
+ * SOFTWARE HISTORY
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ...
+ * 2014-02-03   DR 14762   D. Friedman Connect configuration's event target to
+ *                                     the RadarServer instance.
+ * 
*/ public class RadarServer implements RadarEventListener { // protected ConfigurationProvider configurationProvider; @@ -97,6 +108,9 @@ public class RadarServer implements RadarEventListener { connectionManager = new ConnectionManagerImpl(this, linkManager); addListener(connectionManager); // connectionManager = + if (configuration instanceof MutableConfiguration) { + ((MutableConfiguration) configuration).setConfigurationEventTarget(this); + } } public void addDefaultListeners() { diff --git a/edexOsgi/com.raytheon.edex.rpgenvdata/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.edex.rpgenvdata/META-INF/MANIFEST.MF index f56ab53bad..ab3cb8ca93 100644 --- a/edexOsgi/com.raytheon.edex.rpgenvdata/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.edex.rpgenvdata/META-INF/MANIFEST.MF @@ -17,7 +17,8 @@ Require-Bundle: com.raytheon.uf.common.localization;bundle-version="1.11.24", com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174", com.raytheon.uf.common.gridcoverage;bundle-version="1.0.0", com.raytheon.uf.common.dataplugin.level;bundle-version="1.12.1174", - org.itadaki.bzip2;bundle-version="0.9.1" + org.itadaki.bzip2;bundle-version="0.9.1", + com.raytheon.uf.common.site;bundle-version="1.12.1174" Import-Package: com.raytheon.uf.common.dataplugin.radar, com.raytheon.uf.common.dataplugin.radar.request, com.raytheon.uf.common.ohd diff --git a/edexOsgi/com.raytheon.edex.rpgenvdata/src/com/raytheon/edex/rpgenvdata/ndm/RadarServerNdmSubscriber.java b/edexOsgi/com.raytheon.edex.rpgenvdata/src/com/raytheon/edex/rpgenvdata/ndm/RadarServerNdmSubscriber.java new file mode 100644 index 0000000000..830488aefa --- /dev/null +++ b/edexOsgi/com.raytheon.edex.rpgenvdata/src/com/raytheon/edex/rpgenvdata/ndm/RadarServerNdmSubscriber.java @@ -0,0 +1,59 @@ +package com.raytheon.edex.rpgenvdata.ndm; + +import java.io.File; + +import com.raytheon.edex.rpgenvdata.RcmClient; +import com.raytheon.rcm.mqsrvr.ReqObj.SendConfigFile; +import com.raytheon.uf.common.site.ingest.INationalDatasetSubscriber; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.util.FileUtil; + +/** + * Sends NDM configuration files to the RadarServer. + * + *
+ * SOFTWARE HISTORY
+ * Date         Ticket#     Engineer    Description
+ * ------------ ----------  ----------- --------------------------
+ * 2014-02-03   DR 14762    D. Friedman Created.
+ * 
+ * + */ +public class RadarServerNdmSubscriber implements INationalDatasetSubscriber { + private static final transient IUFStatusHandler statusHandler = UFStatus + .getHandler(RadarServerNdmSubscriber.class); + + // TODO: duplicate.. + private class MyRcmClient extends RcmClient { + + @Override + public void onFailure(String detail, Exception e) { + statusHandler.handle(Priority.SIGNIFICANT, detail, e); + } + } + + @Override + public void notify(String fileName, File file) { + MyRcmClient rcmClient = null; + try { + try { + rcmClient = new MyRcmClient(); + rcmClient.initialize(); + SendConfigFile req = new SendConfigFile(); + req.fileName = file.getName(); + req.fileData = FileUtil.file2bytes(file); + rcmClient.sendCheckedAndHandled(req); + } catch (Exception e) { + // TODO: maybe rely on caller exception handling? + rcmClient = null; + statusHandler.handle(Priority.SIGNIFICANT, + "Error initializing RadarServer connection", e); + } + } finally { + if (rcmClient != null) + rcmClient.close(); + } + } +} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/res/spring/manualIngest-spring.xml b/edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/res/spring/manualIngest-spring.xml index 5b7d9ec7a2..adeaf1df9d 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/res/spring/manualIngest-spring.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.manualIngest/res/spring/manualIngest-spring.xml @@ -44,6 +44,8 @@ + + @@ -181,4 +183,28 @@ + + + + + + + + + + + + + + + + + + + + + + + +