From 5feadbe4d9d85d20fa45b4a9ab00417cf777da7e Mon Sep 17 00:00:00 2001 From: "Brian.Dyke" Date: Wed, 26 Feb 2014 17:39:15 -0500 Subject: [PATCH] OB_14.1.1-20 baseline Former-commit-id: 324696c43681f4c0c7216c3d7a5e5559fa5a5c3f [formerly 324696c43681f4c0c7216c3d7a5e5559fa5a5c3f [formerly bdb1c79ea2557e4e830a4d1c8782a3a1dc3776de]] Former-commit-id: 2bad40cfeeaa6038da50428a029b0edec6759572 Former-commit-id: 16117255f39233daba9577fe24c37b3a91f56030 --- cave/build/cave/customTargets.xml | 33 +++++++- cave/build/cave/memorySettings.xml | 58 +++++++++++++- .../cave/etc/aviation/thresholds/KUES.hdf5 | Bin 0 -> 169287 bytes cave/build/static/linux/cave/caveUtil.sh | 9 ++- .../META-INF/MANIFEST.MF | 3 +- .../cave/refresh/DataRefreshTask.java | 19 ++++- .../refresh/ThinClientDataUpdateTree.java | 73 ++++++++++++++++++ .../viz/aviation/editor/EditorTafTabComp.java | 11 ++- .../aviation/editor/TafViewerEditorDlg.java | 38 ++++++++- .../raytheon/viz/grid/inv/RadarUpdater.java | 9 ++- .../raytheon/viz/grid/util/RadarAdapter.java | 21 +++++ .../res/spring/event-ingest.xml | 21 ----- .../raytheon/uf/edex/plugin/qc/QCScanner.java | 17 ++-- rpms/build/x86_64/build.sh | 2 +- 14 files changed, 276 insertions(+), 38 deletions(-) create mode 100644 cave/build/static/common/cave/etc/aviation/thresholds/KUES.hdf5 mode change 100755 => 100644 cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/EditorTafTabComp.java delete mode 100644 edexOsgi/com.raytheon.uf.edex.event/res/spring/event-ingest.xml diff --git a/cave/build/cave/customTargets.xml b/cave/build/cave/customTargets.xml index 8fd76c7cdc..e99c1784d2 100644 --- a/cave/build/cave/customTargets.xml +++ b/cave/build/cave/customTargets.xml @@ -270,7 +270,7 @@ + value="4.0"/> + + + + + + + + + + + + + + + + + diff --git a/cave/build/cave/memorySettings.xml b/cave/build/cave/memorySettings.xml index 65a6c0c1e1..7f82b6136d 100644 --- a/cave/build/cave/memorySettings.xml +++ b/cave/build/cave/memorySettings.xml @@ -2,7 +2,7 @@ - 3.0 + 4.0 + + + wfo + + + 3072M + + + + DEFAULT + + + + + + rfc + + + 2048M + + + + DEFAULT + + + + + + ncep + + + 2048M + + + + DEFAULT + + + + + + cwsu + + + 3072M + + + + DEFAULT + + + + diff --git a/cave/build/static/common/cave/etc/aviation/thresholds/KUES.hdf5 b/cave/build/static/common/cave/etc/aviation/thresholds/KUES.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..b15ccbef01de813747d146971f18c38c069e2174 GIT binary patch literal 169287 zcmeFa1z1#H+y6^T3@P0)lnyCUg5=OCIdlyn-JqmOBi$*8fRvPUheHZ7A|N0Q0@5NS zaPTL-=Y7s!-t(O6dd~6uy=HsO+-u!y?R)R_@t!r`z4jgrlarRg#iqnY`mteRBB3D> zAff(K`T2H!xydG?{Nwml|JCK$WoP6|N5Eyl&v;vn_@X`wXv^R!A!AMBxNWZxLvcGnlMf+Kz zzjPGh{Va%I*13s)7ECVdbre4f0he`gx}Sx%%R0jR??nI^>H0r8MSpqP1Q(yrADiIk zpN`pI3HP&l(U<9G4qp1vkud+MBcr1H%#olm*}F$kL}0N*Q9Ob0Z43@b&QJ^Oe85K2@Q=4&-IHJ#>MOBSt226N=PbQe1I;t zpIrVa{SMyl;13ZE%{wxnK*ws8v{s0eXHd@j41$G1PggL&xB@*wBCn#cTqkjGCQhjyt7k&twM3Co{{|6ksJ zU4L2syt4gY+J89&FAH8czdXOU;+O7F!0+4tck%wax&?jW&*qhG(odql({a21!Myr+ zc`VKUSssN-SMyl@13bFF{8=8Dvsd#t{{uW;eEYLJtnIJnvHlPSC|l%a83(T~8Md{UrLkdHD1{ zm{4iLHIKzVzynPDXL;1+U(I9x5Aa~7{j)qU4X@_$`9H|x*F0?f^KeM? zKNd#+ht27-&5PuJ=ycKKb=e$B`akyzxNJ@#`=9&$|Go9!op;dL{%l^!wf-deyLtHN zKbTklE{`RiKg)wH>S`W4e}G5#oj=PXH0x>}U;hA)7vMk3qmJon9y9+z9zW+{Or+4C zheIm-b;IYf{(m(wzZ_J*3ct50mu>>;-?#trKD#W?)BN)M-WFcExoLmj{>xi_SqP>7 z<@vp>yL6{8{J#B{x9ze}$oR|id;9OsJ3*>{Hm^S4{CWPrn}=urgL(Du@_<7AERPiT zt9fkv0UluUKg;7V=xQF@|3MxKoIyF30$QYOt1KT95UL^=Our!K4l*y))#na z5PISFBoST&0R#aA0R#aAfxnl)ReAyS3cY{?MCgUTHyaQmLl8g^KoCF>KoIynfvfaF z#})S@P;Vgg!tY5Uya)ma0tf;K0tfP2)*$4 zW&>hm2m%NK2m%NK2m-$+aFt#_y5jeg*lGy9@OzR7FMKoIynf&Zs^p}`8F7k*C?;YAQY5I_(>5I_+4 zdkI{n7nH7e-tmP!LNENi*?<@sf&hX5f&hX5g23+yT%{L`uFwlRt_Z#Gdy)t*f&hX5 zf&hX5g23NP;3~cF;fm)MR39Mp!rz+>h>;-(AP67`AP67`{GPy7dST)Uy%6x_U*p`m ztg8I08&N|LKoCF>KoCF>KoIzg2oN9<{4*Narzrnea@3!L10ae2Q$W7>hnp}j{%Fc; zDuFLN*Dqew7q4Hd42oJ{4SF>fM>A718#@~}Z+cB@7pSYXqn(B8Kl=la*#5D<;z%h; zXlPt`e#H54%i~uZ*?X#5Y8UnYv;U8yVj^jS?`g=Zs{GR*?Z5Ts;k7-+|AJi+ldF8&D_n@%ns_x zsRT8(#FnwKbA!6LVmt9-n;RROxnERm9E^>z9nJ1T&E2q_Zegpq-E-o@X0vd*jjh4z zYVB@mX$NJ+cH+mD=fQT>U^RENcd~~pou-~a%MJhmizb?iBYA%Fgq;$co1e

@Gfp3Fx<2P{H(N}s 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 literal 0 HcmV?d00001 diff --git a/cave/build/static/linux/cave/caveUtil.sh b/cave/build/static/linux/cave/caveUtil.sh index b15bf1c132..df1dcb049f 100644 --- a/cave/build/static/linux/cave/caveUtil.sh +++ b/cave/build/static/linux/cave/caveUtil.sh @@ -29,6 +29,7 @@ # Jan 30, 2014 #2593 bclement extracted generic part of getPidsOfMyRunningCaves into forEachRunningCave # added methods for reading max memory from .ini files # fixes for INI files with spaces +# Feb 20, 2014 #2780 bclement added site type ini file check # # @@ -68,7 +69,13 @@ function lookupINI() if [ ${RC} -eq 0 ]; then export CAVE_INI_ARG="--launcher.ini /awips2/cave/${ASSOCIATED_INI}" else - export CAVE_INI_ARG="--launcher.ini /awips2/cave/cave.ini" + siteTypeIni="/awips2/cave/${SITE_TYPE}.ini" + if [[ -e ${siteTypeIni} ]] + then + export CAVE_INI_ARG="--launcher.ini ${siteTypeIni}" + else + export CAVE_INI_ARG="--launcher.ini /awips2/cave/cave.ini" + fi fi return 0 fi diff --git a/cave/com.raytheon.uf.viz.thinclient.cave/META-INF/MANIFEST.MF b/cave/com.raytheon.uf.viz.thinclient.cave/META-INF/MANIFEST.MF index be854e77a5..7510bc3505 100644 --- a/cave/com.raytheon.uf.viz.thinclient.cave/META-INF/MANIFEST.MF +++ b/cave/com.raytheon.uf.viz.thinclient.cave/META-INF/MANIFEST.MF @@ -13,7 +13,8 @@ Require-Bundle: com.raytheon.uf.viz.core, com.raytheon.viz.core;bundle-version="1.12.1174", com.raytheon.viz.ui;bundle-version="1.12.1174", com.raytheon.viz.alerts;bundle-version="1.12.1174", - com.raytheon.uf.viz.thinclient;bundle-version="1.0.0" + com.raytheon.uf.viz.thinclient;bundle-version="1.0.0", + com.raytheon.viz.grid;bundle-version="1.12.1174" Import-Package: com.raytheon.uf.common.comm, com.raytheon.uf.common.datastorage, com.raytheon.uf.viz.core.maps.rsc, diff --git a/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/DataRefreshTask.java b/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/DataRefreshTask.java index a07089df10..ebffd8b5f0 100644 --- a/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/DataRefreshTask.java +++ b/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/DataRefreshTask.java @@ -19,12 +19,17 @@ **/ package com.raytheon.uf.viz.thinclient.cave.refresh; +import java.util.ArrayList; +import java.util.Collection; + import org.eclipse.jface.preference.IPreferenceStore; +import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.thinclient.Activator; import com.raytheon.uf.viz.thinclient.preferences.ThinClientPreferenceConstants; import com.raytheon.uf.viz.thinclient.refresh.TimedRefresher.RefreshTimerTask; import com.raytheon.viz.alerts.jobs.AutoUpdater; +import com.raytheon.viz.alerts.observers.ProductAlertObserver; /** * Timer task responsible for refreshing IEditorParts that implement @@ -38,6 +43,7 @@ import com.raytheon.viz.alerts.jobs.AutoUpdater; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Nov 10, 2011 mschenke Initial creation + * Feb 21, 2014 DR 16744 D. Friedman Update all alert observers * * * @@ -56,8 +62,17 @@ public class DataRefreshTask implements RefreshTimerTask { public void run() { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); if (store.getBoolean(ThinClientPreferenceConstants.P_DISABLE_JMS)) { - new AutoUpdater().alertArrived(ThinClientDataUpdateTree - .getInstance().updateAllData()); + Collection alerts = ThinClientDataUpdateTree + .getInstance().updateAllData(); + + // Make sure it gets to GridUpdater + ArrayList s = new ArrayList(alerts.size()); + for (AlertMessage am : alerts) { + s.add(am.dataURI); + } + ProductAlertObserver.processDataURIAlerts(s); + + new AutoUpdater().alertArrived(alerts); } } diff --git a/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/ThinClientDataUpdateTree.java b/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/ThinClientDataUpdateTree.java index 333d5db5d8..59544005c7 100644 --- a/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/ThinClientDataUpdateTree.java +++ b/cave/com.raytheon.uf.viz.thinclient.cave/src/com/raytheon/uf/viz/thinclient/cave/refresh/ThinClientDataUpdateTree.java @@ -30,8 +30,10 @@ import java.util.Set; import java.util.TimeZone; import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataquery.requests.DbQueryRequest; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; +import com.raytheon.uf.common.dataquery.responses.DbQueryResponse; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; @@ -46,6 +48,8 @@ import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData; import com.raytheon.uf.viz.core.rsc.AbstractResourceData; import com.raytheon.uf.viz.core.rsc.updater.DataUpdateTree; +import com.raytheon.viz.grid.inv.RadarUpdater; +import com.raytheon.viz.grid.util.RadarAdapter; /** * TODO Add Description @@ -57,6 +61,7 @@ import com.raytheon.uf.viz.core.rsc.updater.DataUpdateTree; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Dec 13, 2011 bsteffen Initial creation + * Feb 21, 2014 DR 16744 D. Friedman Add radar/grid updates * * * @@ -125,9 +130,77 @@ public class ThinClientDataUpdateTree extends DataUpdateTree { e); } } + getRadarUpdates(time, messages); + getGridUpdates(time, messages); return messages; } + /** + * Get radar update messages. This is needed to update the + * radar-as-gridded-data inventory. + */ + private void getRadarUpdates(String time, Set messages) { + Set radarMessages = new HashSet(); + Map metadata = RadarAdapter.getInstance().getUpdateConstraints(); + metadata = new HashMap(metadata); + metadata.put("insertTime", new RequestConstraint(time, + ConstraintType.GREATER_THAN)); + LayerProperty property = new LayerProperty(); + try { + property.setEntryQueryParameters(metadata, false); + List records = DataCubeContainer.getData(property, + 60000); // 60-second timeout + if (records != null && !records.isEmpty()) { + for (Object record : records) { + if (record instanceof PluginDataObject) { + PluginDataObject pdo = (PluginDataObject) record; + AlertMessage am = new AlertMessage(); + am.dataURI = pdo.getDataURI(); + am.decodedAlert = RecordFactory.getInstance() + .loadMapFromUri(am.dataURI); + radarMessages.add(am); + } + } + } + messages.addAll(radarMessages); + for (String dataURI: RadarUpdater.getInstance().convertRadarAlertsToGridDatauris(radarMessages)) { + AlertMessage am = new AlertMessage(); + am.dataURI = dataURI; + am.decodedAlert = RecordFactory.getInstance() + .loadMapFromUri(am.dataURI); + messages.add(am); + } + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), + e); + } + } + + /** Get gridded data update messages. */ + private void getGridUpdates(String time, Set messages) { + Map newQuery = new HashMap(); + DbQueryRequest dbRequest = new DbQueryRequest(); + newQuery.put("pluginName", new RequestConstraint("grid")); + newQuery.put("insertTime", new RequestConstraint(time, + ConstraintType.GREATER_THAN)); + dbRequest.setConstraints(newQuery); + dbRequest.addRequestField("dataURI"); + DbQueryResponse response = null; + try { + response = (DbQueryResponse) ThriftClient.sendRequest(dbRequest); + for (String dataURI: response.getFieldObjects("dataURI", String.class)) { + AlertMessage am = new AlertMessage(); + am.dataURI = dataURI; + am.decodedAlert = RecordFactory.getInstance() + .loadMapFromUri(am.dataURI); + messages.add(am); + } + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), + e); + } + } + /** * Get the estimated difference between the clock on the server and the * local clock. The offset returned from this method will always be slightly diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/EditorTafTabComp.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/EditorTafTabComp.java old mode 100755 new mode 100644 index b33b68b36d..7382bed6d4 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/EditorTafTabComp.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/editor/EditorTafTabComp.java @@ -73,7 +73,8 @@ import com.raytheon.viz.aviation.resource.ResourceConfigMgr.ResourceTag; * text height and width. * 12/9/2010 7380 rferrel Adjust text size to be more like AWIPS I. * 1/17/2011 7782 rferrel Added qcSkipCheck to mimic A1. - * 3/18/2011 7888 rferrel Added getLargeTF method. + * 3/18/2011 7888 rferrel Added getLargeTF method. + * 02/19/2014 16980 zhao added getter and setter for the Alt flag * * * @@ -1368,4 +1369,12 @@ public class EditorTafTabComp extends Composite { rtdRdo.setEnabled(editable); corRdo.setEnabled(editable); } + + public boolean getAlt() { + return alt; + } + + public void setAlt(boolean b) { + alt = b; + } } 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 db32e1ef6a..b1e55b751d 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 @@ -80,8 +80,10 @@ import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; @@ -226,6 +228,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback; * 01/09/2013 15528 zhao Modified saveFile() and restoreFile() * 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 * * * @@ -1088,6 +1091,11 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable, // Create the File menu item with a File "dropdown" menu Menu fileMenu = new Menu(menuBar); fileMenuItem.setMenu(fileMenu); + fileMenu.addListener(SWT.Show, new Listener() { + public void handleEvent(Event event) { + setAltFlagForEditorTafTabComp(); + } + }); // ------------------------------------------------- // Create all the items in the File dropdown menu @@ -1194,6 +1202,11 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable, // Create the Options menu item with a Options "dropdown" menu Menu optionsMenu = new Menu(menuBar); optionsMenuItem.setMenu(optionsMenu); + optionsMenu.addListener(SWT.Show, new Listener() { + public void handleEvent(Event event) { + setAltFlagForEditorTafTabComp(); + } + }); // ---------------------------------------------------- // Create all the items in the Options dropdown menu @@ -1268,7 +1281,12 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable, // Create the File menu item with a File "dropdown" menu Menu editMenu = new Menu(menuBar); editMenuItem.setMenu(editMenu); - + editMenu.addListener(SWT.Show, new Listener() { + public void handleEvent(Event event) { + setAltFlagForEditorTafTabComp(); + } + }); + // ------------------------------------------------- // Create all the items in the Edit dropdown menu // ------------------------------------------------- @@ -1342,6 +1360,19 @@ 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) + */ + private void setAltFlagForEditorTafTabComp() { + if ( editorTafTabComp.getAlt() ) { + editorTafTabComp.setAlt(false); + } + } /** * Create the Help menu. @@ -1359,6 +1390,11 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable, // Create the File menu item with a File "dropdown" menu Menu helpMenu = new Menu(menuBar); helpMenuItem.setMenu(helpMenu); + helpMenu.addListener(SWT.Show, new Listener() { + public void handleEvent(Event event) { + setAltFlagForEditorTafTabComp(); + } + }); // ------------------------------------------------- // Create all the items in the Help dropdown menu diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java index f74e5ce966..90e9186064 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java @@ -40,6 +40,7 @@ import com.raytheon.viz.grid.util.RadarProductCodeMapping; * ------------ ---------- ----------- -------------------------- * Sep 20, 2012 bsteffen Initial creation * Aug 30, 2013 2298 rjpeter Make getPluginName abstract + * Feb 21, 2014 DR 16744 D. Friedman Support thin client updates * * * @@ -150,10 +151,14 @@ public class RadarUpdater implements IAlertObserver { @Override public void alertArrived(Collection alertMessages) { + ProductAlertObserver.processDataURIAlerts(convertRadarAlertsToGridDatauris(alertMessages)); + } + + public Set convertRadarAlertsToGridDatauris(Collection alertMessages) { RadarStation configuredRadar = RadarAdapter.getInstance() .getConfiguredRadar(); if (configuredRadar == null) { - return; + return new HashSet(); } Set datauris = new HashSet(); for (AlertMessage alertMessage : alertMessages) { @@ -209,7 +214,7 @@ public class RadarUpdater implements IAlertObserver { "Unable to generate updates for derived product", e); } } - ProductAlertObserver.processDataURIAlerts(datauris); + return datauris; } private CacheKey getCacheKey(RadarRequestableLevelNode rNode) { diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/util/RadarAdapter.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/util/RadarAdapter.java index 73b1053f59..8154c29cec 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/util/RadarAdapter.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/util/RadarAdapter.java @@ -20,6 +20,7 @@ package com.raytheon.viz.grid.util; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -80,6 +81,7 @@ import com.raytheon.viz.radar.util.StationUtils; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Mar 23, 2010 #4473 rjpeter Initial creation + * Feb 21, 2014 DR 16744 D. Friedman Add getUpdateConstraints * * * @@ -394,4 +396,23 @@ public class RadarAdapter { return rval; } + + public Map getUpdateConstraints() { + RadarProductCodeMapping rpcMap = RadarProductCodeMapping.getInstance(); + HashSet productCodes = new HashSet(); + for (String abbrev : rpcMap.getParameterAbbrevs()) { + productCodes.addAll(rpcMap.getProductCodesForAbbrev(abbrev)); + } + Map rcMap = new HashMap(); + rcMap.put(RadarAdapter.PLUGIN_NAME_QUERY, new RequestConstraint( + RADAR_SOURCE)); + rcMap.put(ICAO_QUERY, new RequestConstraint(getConfiguredRadar() + .getRdaId().toLowerCase())); + rcMap.put( + PRODUCT_CODE_QUERY, + new RequestConstraint(Arrays.toString(new ArrayList( + productCodes).toArray()), + RequestConstraint.ConstraintType.IN)); + return rcMap; + } } diff --git a/edexOsgi/com.raytheon.uf.edex.event/res/spring/event-ingest.xml b/edexOsgi/com.raytheon.uf.edex.event/res/spring/event-ingest.xml deleted file mode 100644 index 9a2ecd4632..0000000000 --- a/edexOsgi/com.raytheon.uf.edex.event/res/spring/event-ingest.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.qc/src/com/raytheon/uf/edex/plugin/qc/QCScanner.java b/edexOsgi/com.raytheon.uf.edex.plugin.qc/src/com/raytheon/uf/edex/plugin/qc/QCScanner.java index 5c77463dda..f84d8bd4e9 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.qc/src/com/raytheon/uf/edex/plugin/qc/QCScanner.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.qc/src/com/raytheon/uf/edex/plugin/qc/QCScanner.java @@ -59,6 +59,7 @@ import com.raytheon.uf.edex.plugin.qc.dao.QCDao; * pupynere * May 16, 2013 1869 bsteffen Remove DataURI column from qc. * Aug 30, 2013 2298 rjpeter Make getPluginName abstract + * Feb 20, 2014 DR 17098 D. Friedman Filter out invalid lat/lon values. * * * @@ -207,13 +208,15 @@ public class QCScanner { while (ri < records.length) { QCRecord r = new QCRecord(); double obsTime = dObsTime.getDouble(ri); + double lat = dLat.getDouble(ri); + double lon = dLon.getDouble(ri); if ((obsTime != vObsTimeFillValue) - && ((vObsTimeMissingValue == null) || (vObsTimeMissingValue != obsTime))) { + && ((vObsTimeMissingValue == null) || (vObsTimeMissingValue != obsTime)) + && Math.abs(lon) <= 180 && Math.abs(lat) <= 90) { r.setDataTime(new DataTime(new Date( (long) (obsTime * 1000)))); SurfaceObsLocation loc = new SurfaceObsLocation(); - loc.assignLocation(dLat.getDouble(ri), - dLon.getDouble(ri)); + loc.assignLocation(lat, lon); loc.setElevation(dElev.getInt(ri)); StringBuilder stationId = new StringBuilder( ID_LENGTH); @@ -230,10 +233,12 @@ public class QCScanner { ++index; ++ri; } - if (oi < records.length) { - records = Arrays.copyOf(records, oi); + if (oi > 0) { + if (oi < records.length) { + records = Arrays.copyOf(records, oi); + } + target.acceptRecords(records); } - target.acceptRecords(records); } } finally { nc.close(); diff --git a/rpms/build/x86_64/build.sh b/rpms/build/x86_64/build.sh index 0f45a7b5cd..e3043a6207 100644 --- a/rpms/build/x86_64/build.sh +++ b/rpms/build/x86_64/build.sh @@ -411,7 +411,7 @@ if [ "${1}" = "-viz" ]; then buildRPM "awips2" buildRPM "awips2-common-base" #buildRPM "awips2-python-numpy" - buildRPM "awips2-ant" + #buildRPM "awips2-ant" #buildRPM "awips2-python-dynamicserialize" #buildRPM "awips2-python" #buildRPM "awips2-adapt-native"