Merge "ASM #17882 - Changed scp commands to scp -q" into asm_15.1.1
Former-commit-id: dd0a7086a5cc5c829a1c31853d5022f47f8bbb93
This commit is contained in:
commit
63d34b08dc
24 changed files with 981 additions and 325 deletions
|
@ -62,7 +62,8 @@ import com.raytheon.uf.viz.thinclient.ui.ThinClientConnectivityDialog;
|
|||
* May 19, 2014 3164 bsteffen Disable request compression if it
|
||||
* doesn't work.
|
||||
* Sep 05, 2014 3570 bclement HTTP client API changes
|
||||
* Jan 26, 2014 3952 njensen gzip handled by default
|
||||
* Jan 26, 2015 3952 njensen gzip handled by default
|
||||
* Jul 06, 2015 4614 njensen explicitly enable gzip
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -88,6 +89,7 @@ public class ThinClientLocalizationInitializer extends LocalizationInitializer {
|
|||
HttpClient httpClient = HttpClient.getInstance();
|
||||
HttpClientConfigBuilder confBuilder = new HttpClientConfigBuilder(
|
||||
httpClient.getConfig());
|
||||
confBuilder.setGzipEnabled(true);
|
||||
HttpClient.configureGlobalInstance(confBuilder.build());
|
||||
if (promptUI) {
|
||||
ThinClientConnectivityDialog dlg = new ThinClientConnectivityDialog(
|
||||
|
|
|
@ -1082,7 +1082,7 @@ FORECASTER STEWART"""
|
|||
|
||||
# We need to reverse the order of the advisories so the latest
|
||||
# advisories come first in this list
|
||||
stormAdvisories.reverse()
|
||||
stormAdvisories.sort(reverse=True)
|
||||
|
||||
lastTwoAdvisories = []
|
||||
|
||||
|
|
|
@ -22,47 +22,6 @@
|
|||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
|
@ -84,6 +43,47 @@
|
|||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
|
|
|
@ -23,6 +23,48 @@
|
|||
<displays xsi:type="d2DMapRenderableDisplay"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true"/>
|
||||
<properties isSystemResource="false" isBlinking="false"
|
||||
isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning"
|
||||
constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
|
@ -64,48 +106,6 @@
|
|||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true"/>
|
||||
<properties isSystemResource="false" isBlinking="false"
|
||||
isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning"
|
||||
constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<bundle>
|
||||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="60" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="60" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="60" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
</bundle>
|
||||
|
|
@ -22,47 +22,6 @@
|
|||
<displayList>
|
||||
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<descriptor xsi:type="mapDescriptor">
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
|
@ -84,6 +43,47 @@
|
|||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingCloudFlashes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
<resource>
|
||||
<loadProperties loadWithoutData="true">
|
||||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
<constraint constraintValue="binlightning" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
<mapping key="source">
|
||||
<constraint constraintValue="${source}" constraintType="EQUALS" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
</resource>
|
||||
</descriptor>
|
||||
</displays>
|
||||
</displayList>
|
||||
|
|
|
@ -27,10 +27,11 @@
|
|||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="true" />
|
||||
isVisible="false" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
|
@ -68,11 +69,10 @@
|
|||
</loadProperties>
|
||||
<properties isSystemResource="false"
|
||||
isBlinking="false" isMapLayer="false" isHoverOn="false"
|
||||
isVisible="false" />
|
||||
isVisible="true" />
|
||||
<resourceData xsi:type="lightningResourceData"
|
||||
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
|
||||
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
|
||||
handlingPulses="true">
|
||||
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
|
||||
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
|
||||
<metadataMap>
|
||||
<mapping key="pluginName">
|
||||
|
|
|
@ -31,6 +31,9 @@
|
|||
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot5Min.xml"
|
||||
menuText="5min plot" id="5MinLightningFlashPlot">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot1Min.xml"
|
||||
menuText="1min plot" id="1MinLightningFlashPlot">
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/LightningSeq.xml"
|
||||
menuText="1min Lgtng Seq Plot" id="1MinLightningFlashSeq">
|
||||
</contribute>
|
||||
|
|
|
@ -70,5 +70,21 @@
|
|||
menuText="5min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="300"/>
|
||||
</contribute>
|
||||
|
||||
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
|
||||
menuText="1min cloud to ground density" id="1HrGridLightningCGPlot">
|
||||
<substitute key="negOffset" value="60"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
|
||||
menuText="1min cloud flash density" id="1HrGridLightningCloudFlashPlot">
|
||||
<substitute key="negOffset" value="60"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
|
||||
menuText="1min total flash density" id="1HrGridLightningFlashPlot">
|
||||
<substitute key="negOffset" value="60"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
|
||||
menuText="1min pulse density" id="1HrGridLightningPulsePlot">
|
||||
<substitute key="negOffset" value="60"/>
|
||||
</contribute>
|
||||
</menuTemplate>
|
|
@ -39,12 +39,12 @@
|
|||
<substitute key="source" value="GLD"/>
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="Total Lightning" id="ENTLNSubMenu">
|
||||
<contribute xsi:type="subMenu" menuText="ENI Total Lightning" id="ENTLNSubMenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/entlnLightningBundleItems.xml">
|
||||
<substitute key="source" value="ENTLN"/>
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="Total Lightning Grid" id="entlnGridSubmenu">
|
||||
<contribute xsi:type="subMenu" menuText="ENI Total Lightning Grid" id="entlnGridSubmenu">
|
||||
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningMenuItems.xml">
|
||||
<substitute key="source" value="ENTLN"/>
|
||||
</contribute>
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.Map;
|
|||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import javax.measure.converter.UnitConverter;
|
||||
import javax.measure.unit.NonSI;
|
||||
import javax.measure.unit.SI;
|
||||
import javax.measure.unit.Unit;
|
||||
|
||||
|
@ -52,12 +53,16 @@ import com.raytheon.uf.common.style.StyleException;
|
|||
import com.raytheon.uf.common.style.image.ColorMapParameterFactory;
|
||||
import com.raytheon.uf.common.style.image.DataScale;
|
||||
import com.raytheon.uf.common.style.image.ImagePreferences;
|
||||
import com.raytheon.uf.common.style.level.Level.LevelType;
|
||||
import com.raytheon.uf.common.style.level.SingleLevel;
|
||||
import com.raytheon.uf.common.time.BinOffset;
|
||||
import com.raytheon.uf.common.time.DataTime;
|
||||
import com.raytheon.uf.viz.core.cache.CacheObject;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
||||
import com.raytheon.viz.grid.rsc.general.AbstractGridResource;
|
||||
import com.raytheon.viz.grid.rsc.general.GeneralGridData;
|
||||
import com.raytheon.viz.lightning.LightningResourceData.DisplayType;
|
||||
import com.raytheon.viz.lightning.cache.LightningFrame;
|
||||
import com.raytheon.viz.lightning.cache.LightningFrameMetadata;
|
||||
import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
||||
|
@ -76,6 +81,7 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
|||
* Jul 28, 2014 3451 bclement uses intended range min
|
||||
* Jul 29, 2014 3463 bclement uses sparse data source
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
* Jul 02, 2015 4606 bclement added getDisplayParameterName()
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -85,7 +91,13 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
|||
public class GridLightningResource extends
|
||||
AbstractGridResource<GridLightningResourceData> {
|
||||
|
||||
public static final String DENSITY_PARAM = "lightning density";
|
||||
public static final String DENSITY_PARAM = "Lightning Density";
|
||||
|
||||
private static final Unit<?> BIN_OFFSET_UNIT = SI.SECOND;
|
||||
|
||||
private static final Unit<?> TIME_PARAM_UNIT = NonSI.MINUTE;
|
||||
|
||||
private static final String TIME_PARAM_LABEL = "min";
|
||||
|
||||
private final Map<DataTime, CacheObject<LightningFrameMetadata, LightningFrame>> cacheObjectMap = new ConcurrentHashMap<>();
|
||||
|
||||
|
@ -107,7 +119,39 @@ public class GridLightningResource extends
|
|||
@Override
|
||||
public ParamLevelMatchCriteria getMatchCriteria() {
|
||||
ParamLevelMatchCriteria rval = new ParamLevelMatchCriteria();
|
||||
rval.setParameterName(Arrays.asList(DENSITY_PARAM));
|
||||
GridLightningResourceData resourceData = getResourceData();
|
||||
|
||||
DisplayType type = resourceData.getDisplayType();
|
||||
BinOffset offset = resourceData.getBinOffset();
|
||||
String param = getDisplayParameterName(type, offset);
|
||||
/* cave gets angry if there is ever more than one parameter here */
|
||||
rval.setParameterName(Arrays.asList(param));
|
||||
|
||||
int resolution = resourceData.getKmResolution();
|
||||
SingleLevel level = new SingleLevel(LevelType.DEFAULT);
|
||||
level.setValue(resolution);
|
||||
rval.setLevel(level);
|
||||
return rval;
|
||||
}
|
||||
|
||||
private static String getDisplayParameterName(DisplayType type,
|
||||
BinOffset offset) {
|
||||
String rval;
|
||||
if (!type.equals(DisplayType.UNDEFINED)) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(type.label).append(' ');
|
||||
sb.append(DENSITY_PARAM).append(' ');
|
||||
UnitConverter converter = BIN_OFFSET_UNIT
|
||||
.getConverterTo(TIME_PARAM_UNIT);
|
||||
double interval = converter.convert(offset.getInterval());
|
||||
int timeLabel = (int) Math.round(interval);
|
||||
sb.append(Integer.toString(timeLabel)).append(TIME_PARAM_LABEL);
|
||||
rval = sb.toString();
|
||||
} else {
|
||||
/* if there isn't a display type defined, use the default param name */
|
||||
rval = DENSITY_PARAM;
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
|
@ -149,8 +193,7 @@ public class GridLightningResource extends
|
|||
*/
|
||||
rval = ColorMapParameterFactory.build(imgPrefs, Unit.ONE);
|
||||
} catch (StyleException e) {
|
||||
throw new VizException(
|
||||
"Problem building lightning colormap"
|
||||
throw new VizException("Problem building lightning colormap"
|
||||
+ " parameters from image preferences", e);
|
||||
}
|
||||
} else {
|
||||
|
@ -332,15 +375,13 @@ public class GridLightningResource extends
|
|||
* @throws VizException
|
||||
*/
|
||||
private MathTransform getLonLatTransform(CoordinateReferenceSystem crs,
|
||||
GeneralGridGeometry gridGeom)
|
||||
throws VizException {
|
||||
GeneralGridGeometry gridGeom) throws VizException {
|
||||
try {
|
||||
MathTransform latLonToCrs = MapUtil.getTransformFromLatLon(crs);
|
||||
MathTransform crsToGrid = gridGeom.getGridToCRS(
|
||||
PixelInCell.CELL_CENTER).inverse();
|
||||
DefaultMathTransformFactory dmtf = new DefaultMathTransformFactory();
|
||||
return dmtf.createConcatenatedTransform(
|
||||
latLonToCrs, crsToGrid);
|
||||
return dmtf.createConcatenatedTransform(latLonToCrs, crsToGrid);
|
||||
} catch (Exception e) {
|
||||
throw new VizException(
|
||||
"Problem converting from lon/lat to requested grid geometry",
|
||||
|
|
|
@ -59,6 +59,7 @@ import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
|||
import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.DensityCapability;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.MagnificationCapability;
|
||||
import com.raytheon.viz.lightning.LightningResourceData.DisplayType;
|
||||
import com.raytheon.viz.lightning.cache.LightningFrame;
|
||||
import com.raytheon.viz.lightning.cache.LightningFrameMetadata;
|
||||
import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
||||
|
@ -96,6 +97,8 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
|
|||
* Aug 19, 2014 3542 bclement fixed strike count clipping issue
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
* Apr 09, 2015 4386 bclement added updateLightningFrames()
|
||||
* Jul 01, 2015 4592 bclement cloud flashes are now points instead of circles
|
||||
* Jul 01, 2015 4597 bclement reworked resource name using DisplayType
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -209,26 +212,14 @@ public class LightningResource extends
|
|||
} else {
|
||||
rval = convertTimeIntervalToString(absTimeInterval);
|
||||
}
|
||||
if (resourceData.isExclusiveForType()) {
|
||||
String modifier;
|
||||
if (resourceData.isHandlingCloudFlashes()) {
|
||||
modifier = "Cloud Flash ";
|
||||
} else if (resourceData.isHandlingNegativeStrikes()) {
|
||||
modifier = "Negative ";
|
||||
} else if (resourceData.isHandlingPositiveStrikes()) {
|
||||
modifier = "Positive ";
|
||||
} else if (resourceData.isHandlingPulses()) {
|
||||
modifier = "Pulse ";
|
||||
} else {
|
||||
/* space to preserve formatting */
|
||||
modifier = " ";
|
||||
}
|
||||
rval += modifier;
|
||||
DisplayType displayType = resourceData.getDisplayType();
|
||||
if (!displayType.equals(DisplayType.UNDEFINED)) {
|
||||
rval += displayType.label + ' ';
|
||||
}
|
||||
|
||||
String source = resourceData.getSource();
|
||||
if (source != null) {
|
||||
rval += source + " ";
|
||||
rval += source + ' ';
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
@ -337,7 +328,7 @@ public class LightningResource extends
|
|||
}
|
||||
if (resourceData.isHandlingCloudFlashes()) {
|
||||
cloudCount = drawFilteredPoints(target, magnification,
|
||||
color, PointStyle.CIRCLE, extent, currCloudList);
|
||||
color, PointStyle.POINT, extent, currCloudList);
|
||||
}
|
||||
if (resourceData.isHandlingPulses()) {
|
||||
pulseCount = drawFilteredPoints(target, magnification,
|
||||
|
|
|
@ -46,9 +46,10 @@ import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Feb 18, 2009 chammack Initial creation
|
||||
* Feb 27, 2013 DCS 152 jgerth Support for WWLLN and multiple sources
|
||||
* Jun 19, 2014 3214 bclement added pulse and cloud flash support
|
||||
* Jul 07, 2014 3333 bclement removed plotLightSource field
|
||||
* Jun 19, 2014 3214 bclement added pulse and cloud flash support
|
||||
* Jul 07, 2014 3333 bclement removed plotLightSource field
|
||||
* Mar 05, 2015 4233 bsteffen include source in cache key.
|
||||
* Jul 01, 2015 4597 bclement added DisplayType
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -59,6 +60,20 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(LightningResourceData.class);
|
||||
|
||||
/*
|
||||
* certain combination of lightning types get specific display labels
|
||||
*/
|
||||
public static enum DisplayType {
|
||||
UNDEFINED(""), CLOUD_FLASH("Cloud Flash"), NEGATIVE("Negative"), POSITIVE(
|
||||
"Positive"), PULSE("Pulse"), TOTAL_FLASH("Total"), CLOUD_TO_GROUND(
|
||||
"Cloud to Ground");
|
||||
public final String label;
|
||||
|
||||
private DisplayType(String name) {
|
||||
this.label = name;
|
||||
}
|
||||
}
|
||||
|
||||
@XmlAttribute
|
||||
private boolean handlingPositiveStrikes = true;
|
||||
|
||||
|
@ -73,7 +88,7 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
|
||||
@XmlAttribute
|
||||
private int countPosition = 0;
|
||||
|
||||
|
||||
@Override
|
||||
protected AbstractVizResource<?, ?> constructResource(
|
||||
LoadProperties loadProperties, PluginDataObject[] objects) {
|
||||
|
@ -97,8 +112,8 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
|
||||
@Override
|
||||
public boolean isUpdatingOnMetadataOnly() {
|
||||
if (this.isUpdatingOnMetadataOnly == false)
|
||||
return false;
|
||||
if (this.isUpdatingOnMetadataOnly == false)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -159,32 +174,6 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
return handlingPulses;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #isHandlingCloudFlashes()
|
||||
* @see #isHandlingNegativeStrikes()
|
||||
* @see #isHandlingPositiveStrikes()
|
||||
* @see #isHandlingPulses()
|
||||
* @return true if resource data handles exactly one type of data
|
||||
*/
|
||||
public boolean isExclusiveForType() {
|
||||
boolean[] bools = { isHandlingCloudFlashes(),
|
||||
isHandlingNegativeStrikes(), isHandlingPositiveStrikes(),
|
||||
isHandlingPulses() };
|
||||
boolean handlingZero = true;
|
||||
boolean handlingMoreThanOne = false;
|
||||
for (boolean handlingSomething : bools) {
|
||||
if (handlingSomething) {
|
||||
if (handlingZero) {
|
||||
handlingZero = false;
|
||||
} else {
|
||||
handlingMoreThanOne = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return !handlingZero && !handlingMoreThanOne;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param handlingPulses
|
||||
* the handlingPulses to set
|
||||
|
@ -194,11 +183,10 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
}
|
||||
|
||||
/**
|
||||
* @return countPosition
|
||||
* the countPosition to get - JJG
|
||||
* @return countPosition the countPosition to get - JJG
|
||||
*/
|
||||
public int getCountPosition() {
|
||||
return countPosition;
|
||||
return countPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -218,6 +206,47 @@ public class LightningResourceData extends AbstractRequestableResourceData {
|
|||
return null;
|
||||
}
|
||||
|
||||
public DisplayType getDisplayType() {
|
||||
DisplayType rval;
|
||||
byte bitset = 0x00;
|
||||
if (handlingCloudFlashes) {
|
||||
bitset |= 0x01;
|
||||
}
|
||||
if (handlingNegativeStrikes) {
|
||||
bitset |= 0x02;
|
||||
}
|
||||
if (handlingPositiveStrikes) {
|
||||
bitset |= 0x04;
|
||||
}
|
||||
if (handlingPulses) {
|
||||
bitset |= 0x08;
|
||||
}
|
||||
|
||||
switch (bitset) {
|
||||
case 0x01:
|
||||
rval = DisplayType.CLOUD_FLASH;
|
||||
break;
|
||||
case 0x02:
|
||||
rval = DisplayType.NEGATIVE;
|
||||
break;
|
||||
case 0x04:
|
||||
rval = DisplayType.POSITIVE;
|
||||
break;
|
||||
case 0x06:
|
||||
rval = DisplayType.CLOUD_TO_GROUND;
|
||||
break;
|
||||
case 0x07:
|
||||
rval = DisplayType.TOTAL_FLASH;
|
||||
break;
|
||||
case 0x08:
|
||||
rval = DisplayType.PULSE;
|
||||
break;
|
||||
default:
|
||||
rval = DisplayType.UNDEFINED;
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.raytheon.viz.volumebrowser.vbui.VBMenuBarItemsMgr.ViewMenu;
|
|||
* Dec 11, 2013 2602 bsteffen Remove ISerializableObject.
|
||||
* Aug 14, 2014 3506 mapeters Added remove field and equals
|
||||
* and hashCode functions.
|
||||
* Jul 10, 2015 4641 mapeters Added toString().
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -142,7 +143,6 @@ public class VbSource {
|
|||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
|
||||
if (that instanceof VbSource) {
|
||||
if ((this.key.equals(((VbSource) that).getKey()) && (this
|
||||
.getCategory().compareTo(((VbSource) that).getCategory()) == 0))) {
|
||||
|
@ -156,6 +156,20 @@ public class VbSource {
|
|||
public int hashCode() {
|
||||
String newKey = key.concat(category);
|
||||
return newKey.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sourceString = new StringBuilder("VbSource[");
|
||||
sourceString.append("key=").append(key);
|
||||
sourceString.append(", ");
|
||||
sourceString.append("name=").append(name);
|
||||
sourceString.append(", ");
|
||||
sourceString.append("category=").append(category);
|
||||
sourceString.append(", ");
|
||||
sourceString.append("subCategory=").append(subCategory);
|
||||
sourceString.append("]");
|
||||
|
||||
return sourceString.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Collections;
|
|||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
|
@ -32,6 +33,9 @@ import com.raytheon.uf.common.menus.xml.CommonMenuContribution;
|
|||
import com.raytheon.uf.common.menus.xml.CommonTitleImgContribution;
|
||||
import com.raytheon.uf.common.menus.xml.CommonToolBarContribution;
|
||||
import com.raytheon.uf.common.menus.xml.CommonToolbarSubmenuContribution;
|
||||
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.viz.volumebrowser.vbui.VBMenuBarItemsMgr.ViewMenu;
|
||||
|
||||
/**
|
||||
|
@ -51,6 +55,8 @@ import com.raytheon.viz.volumebrowser.vbui.VBMenuBarItemsMgr.ViewMenu;
|
|||
* Aug 19, 2014 3506 mapeters Populate toolbar contributions from directory of
|
||||
* source files instead of one file, merge sources from
|
||||
* different localization levels instead of overriding.
|
||||
* Jul 07, 2015 4641 mapeters Fix/improve comparators for VbSource sorting.
|
||||
* Jul 10, 2015 4641 mapeters Added check for sources with null key/category fields.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -61,30 +67,88 @@ import com.raytheon.viz.volumebrowser.vbui.VBMenuBarItemsMgr.ViewMenu;
|
|||
@XmlRootElement
|
||||
public class VbSourceList {
|
||||
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(VbSourceList.class);
|
||||
|
||||
private final static IPathManager pm = PathManagerFactory.getPathManager();
|
||||
|
||||
/** The sources categories in order */
|
||||
private static final String[] CATEGORIES = new String[] { "Volume",
|
||||
"SfcGrid", "Local", "Point" };
|
||||
|
||||
/**
|
||||
* Comparator for sorting sources (compares category, then subcategory, then
|
||||
* name).
|
||||
*/
|
||||
private static Comparator<VbSource> comparator = new Comparator<VbSource>() {
|
||||
/*
|
||||
* For sorting sources, compare subcategories first. If they are the
|
||||
* same or either source doesn't have one, compare display names.
|
||||
*/
|
||||
@Override
|
||||
public int compare(VbSource source1, VbSource source2) {
|
||||
String cat1 = source1.getCategory();
|
||||
String cat2 = source2.getCategory();
|
||||
if (!cat1.equals(cat2)) {
|
||||
/*
|
||||
* Categories are in the format
|
||||
* "DropDownMenu/SubMenu/SubMenu/..."
|
||||
*/
|
||||
String[] cat1Parts = cat1.split("/");
|
||||
String[] cat2Parts = cat2.split("/");
|
||||
int minParts = Math.min(cat1Parts.length, cat2Parts.length);
|
||||
for (int i = 0; i < minParts; i++) {
|
||||
if (!cat1Parts[i].equals(cat2Parts[i])) {
|
||||
/*
|
||||
* Compare the drop down menu names differently to keep
|
||||
* them in the order the NWS is used to.
|
||||
*/
|
||||
Comparator<String> comparator = (i == 0) ? categoryComparator
|
||||
: stringComparator;
|
||||
return comparator.compare(cat1Parts[i], cat2Parts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* At this point, categories must match up to the end of the
|
||||
* smaller of the two (e.g. SfcGrid and SfcGrid/RTOFS/forecast).
|
||||
* Return the comparison of sourceWithShorterCategory's name and
|
||||
* otherSource's next submenu level (RTOFS in the example).
|
||||
*/
|
||||
if (cat1Parts.length > minParts) {
|
||||
return stringComparator.compare(cat1Parts[minParts],
|
||||
source2.getName());
|
||||
} else {
|
||||
return stringComparator.compare(source1.getName(),
|
||||
cat2Parts[minParts]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Compare subcategories next. If one source has a subcategory and
|
||||
* another doesn't, return the source with a subcategory as being
|
||||
* larger (later in the list).
|
||||
*/
|
||||
String subCat1 = source1.getSubCategory();
|
||||
String subCat2 = source2.getSubCategory();
|
||||
if (subCat1 != null && subCat2 != null && !subCat1.equals(subCat2)) {
|
||||
return comparatorString.compare(subCat1, subCat2);
|
||||
if (subCat1 != null && subCat2 != null) {
|
||||
if (!subCat1.equals(subCat2)) {
|
||||
return stringComparator.compare(subCat1, subCat2);
|
||||
}
|
||||
} else if (subCat1 != null) {
|
||||
return 1;
|
||||
} else if (subCat2 != null) {
|
||||
return -1;
|
||||
}
|
||||
return comparatorString.compare(source1.getName(),
|
||||
|
||||
// Compare names if categories and subcategories match.
|
||||
return stringComparator.compare(source1.getName(),
|
||||
source2.getName());
|
||||
}
|
||||
};
|
||||
|
||||
private static Comparator<String> comparatorString = new Comparator<String>() {
|
||||
/*
|
||||
* Compares two strings, ignoring capitalization and comparing numeric
|
||||
* values.
|
||||
*/
|
||||
/**
|
||||
* Comparator for comparing two strings, ignoring capitalization and
|
||||
* comparing numeric values (assumes there are no leading zeros in the
|
||||
* numeric values).
|
||||
*/
|
||||
private static Comparator<String> stringComparator = new Comparator<String>() {
|
||||
@Override
|
||||
public int compare(String s1, String s2) {
|
||||
int n1 = s1.length();
|
||||
|
@ -95,47 +159,54 @@ public class VbSourceList {
|
|||
for (int i = 0; i < min; i++) {
|
||||
char c1 = s1.charAt(i);
|
||||
char c2 = s2.charAt(i);
|
||||
if (c1 != c2) {
|
||||
if (Character.isDigit(c1) && Character.isDigit(c2)) {
|
||||
// Store aligned numeric values as strings
|
||||
number1 += c1;
|
||||
number2 += c2;
|
||||
} else if (!number1.equals(number2)) {
|
||||
if (Character.isDigit(c1)) {
|
||||
/*
|
||||
* Return first string as larger if it has
|
||||
* longer/larger numeric value.
|
||||
*/
|
||||
return 1;
|
||||
} else if (Character.isDigit(c2)) {
|
||||
/*
|
||||
* Return second string as larger if it has
|
||||
* longer/larger numeric value.
|
||||
*/
|
||||
return -1;
|
||||
} else {
|
||||
/*
|
||||
* Compare stored numeric values.
|
||||
*/
|
||||
return number1.charAt(0) - number2.charAt(0);
|
||||
}
|
||||
if (Character.isDigit(c1) && Character.isDigit(c2)) {
|
||||
/*
|
||||
* If aligned characters are both digits, store them as
|
||||
* strings and proceed to next pair of aligned characters.
|
||||
*/
|
||||
number1 += c1;
|
||||
number2 += c2;
|
||||
continue;
|
||||
} else if (!(Character.isDigit(c1) || Character.isDigit(c2))) {
|
||||
/*
|
||||
* If neither aligned character is a digit, return
|
||||
* difference in stored numbers if they aren't equal,
|
||||
* otherwise reset numbers if they aren't already empty.
|
||||
*/
|
||||
if (!number1.equals(number2)) {
|
||||
return Integer.valueOf(number1)
|
||||
- Integer.valueOf(number2);
|
||||
} else if (!number1.isEmpty()) {
|
||||
number1 = "";
|
||||
number2 = "";
|
||||
}
|
||||
} else if (!number1.isEmpty()) {
|
||||
/*
|
||||
* Exactly one of the two characters must be a digit to
|
||||
* reach here. If the numbers aren't empty, whichever string
|
||||
* has the extra digit is larger as its number is larger.
|
||||
*/
|
||||
if (Character.isDigit(c1)) {
|
||||
return 1;
|
||||
} else {
|
||||
c1 = Character.toUpperCase(c1);
|
||||
c2 = Character.toUpperCase(c2);
|
||||
if (c1 != c2) {
|
||||
c1 = Character.toLowerCase(c1);
|
||||
c2 = Character.toLowerCase(c2);
|
||||
if (c1 != c2) {
|
||||
// No overflow because of numeric promotion
|
||||
return c1 - c2;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
c1 = Character.toUpperCase(c1);
|
||||
c2 = Character.toUpperCase(c2);
|
||||
if (c1 != c2) {
|
||||
c1 = Character.toLowerCase(c1);
|
||||
c2 = Character.toLowerCase(c2);
|
||||
if (c1 != c2) {
|
||||
// No overflow because of numeric promotion
|
||||
return c1 - c2;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* If two strings end with numeric values after for loop, check for
|
||||
* additional digits beyond minimum length to determine order.
|
||||
* If two strings end with unequal numeric values after for loop,
|
||||
* check for additional digits beyond minimum length to determine
|
||||
* order.
|
||||
*/
|
||||
if (!number1.equals(number2)) {
|
||||
if (n1 > n2 && Character.isDigit(s1.charAt(n2))) {
|
||||
|
@ -143,16 +214,49 @@ public class VbSourceList {
|
|||
} else if (n2 > n1 && Character.isDigit(s2.charAt(n1))) {
|
||||
return -1;
|
||||
} else
|
||||
return number1.charAt(0) - number2.charAt(0);
|
||||
return Integer.valueOf(number1) - Integer.valueOf(number2);
|
||||
}
|
||||
return n1 - n2;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Comparator for comparing the drop down menu names of the sources.
|
||||
* Determines order based on {@link #CATEGORIES}.
|
||||
*/
|
||||
private static Comparator<String> categoryComparator = new Comparator<String>() {
|
||||
@Override
|
||||
public int compare(String cat1, String cat2) {
|
||||
if (cat1.equals(cat2)) {
|
||||
return 0;
|
||||
}
|
||||
for (String category : CATEGORIES) {
|
||||
/*
|
||||
* The categories aren't equal (checked for above), so whichever
|
||||
* one appears first in the ordered categories list (CATEGORIES)
|
||||
* should be returned as being smaller (making it also appear
|
||||
* earlier in the sorted list of VbSources).
|
||||
*/
|
||||
if (cat1.equals(category)) {
|
||||
return -1;
|
||||
} else if (cat2.equals(category)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If neither category is in the ordered list of expected
|
||||
* categories, compare them alphabetically.
|
||||
*/
|
||||
return stringComparator.compare(cat1, cat2);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated This file path string exists only to support legacy overrides
|
||||
* and should eventually be removed.
|
||||
*/
|
||||
@Deprecated
|
||||
private final static String VB_SOURCE_FILE = "volumebrowser/VbSources.xml";
|
||||
|
||||
private final static char SUB_MENU_SPLIT = '/';
|
||||
|
@ -257,6 +361,18 @@ public class VbSourceList {
|
|||
List<VbSource> sources = JAXB.unmarshal(locFile.getFile(),
|
||||
VbSourceList.class).getEntries();
|
||||
if (sources != null) {
|
||||
Iterator<VbSource> itr = sources.iterator();
|
||||
while (itr.hasNext()) {
|
||||
VbSource source = itr.next();
|
||||
if (source.getCategory() == null
|
||||
|| source.getKey() == null) {
|
||||
statusHandler
|
||||
.handle(Priority.WARN,
|
||||
source
|
||||
+ " was excluded from sources menu due to null key and/or category field.");
|
||||
itr.remove();
|
||||
}
|
||||
}
|
||||
allSources.addAll(sources);
|
||||
}
|
||||
}
|
||||
|
@ -267,8 +383,11 @@ public class VbSourceList {
|
|||
DatasetInfo info;
|
||||
// Set containing sources to not be added to lists
|
||||
Set<VbSource> removes = new HashSet<VbSource>();
|
||||
for (int i = 0; i < allSources.size(); i++) {
|
||||
VbSource source = allSources.get(i);
|
||||
Iterator<VbSource> itr = allSources.iterator();
|
||||
// The current index in allSources
|
||||
int i = 0;
|
||||
while (itr.hasNext()) {
|
||||
VbSource source = itr.next();
|
||||
// Set display names for sources
|
||||
if (source.getName() == null) {
|
||||
info = lookup.getInfo(source.getKey());
|
||||
|
@ -277,11 +396,14 @@ public class VbSourceList {
|
|||
if (source.getRemove()) {
|
||||
// Add sources with remove tags to removal set and remove them.
|
||||
removes.add(source);
|
||||
allSources.remove(i--);
|
||||
itr.remove();
|
||||
} else if (removes.contains(source)
|
||||
|| allSources.subList(0, i).contains(source)) {
|
||||
// Remove sources in removal set and repeats
|
||||
allSources.remove(i--);
|
||||
itr.remove();
|
||||
} else {
|
||||
// Increment index in allSources if source wasn't removed
|
||||
i++;
|
||||
}
|
||||
}
|
||||
Collections.sort(allSources, comparator);
|
||||
|
|
|
@ -100,6 +100,7 @@ import com.raytheon.viz.warnings.DateUtil;
|
|||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
import com.vividsolutions.jts.geom.Geometry;
|
||||
import com.vividsolutions.jts.geom.Polygon;
|
||||
import com.vividsolutions.jts.geom.TopologyException;
|
||||
import com.vividsolutions.jts.io.WKTReader;
|
||||
|
||||
/**
|
||||
|
@ -148,6 +149,7 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* included tornado/severe thunderstorm watch message.
|
||||
* Sep 18, 2014 ASM #15465 Qinglu Lin For backup, get officeShort and officeLoc from backup WFO's config.xml.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* Jul 15, 2015 DR17716 mgamazaychikov Change to Geometry class in total intersection calculations.
|
||||
* </pre>
|
||||
*
|
||||
* @author njensen
|
||||
|
@ -331,7 +333,7 @@ public class TemplateRunner {
|
|||
} else {
|
||||
// Determine if one letter timezone is going to be
|
||||
// put into timeZones.
|
||||
Polygon[] poly1, poly2;
|
||||
Geometry[] poly1, poly2;
|
||||
int n1, n2;
|
||||
double size, totalSize;
|
||||
for (int i = 0; i < oneLetterTimeZones.length(); i++) {
|
||||
|
@ -351,25 +353,32 @@ public class TemplateRunner {
|
|||
if (intersectSize.get(oneLetterTZ[i]) != null) {
|
||||
continue;
|
||||
}
|
||||
poly1 = new Polygon[warningArea
|
||||
poly1 = new Geometry[warningArea
|
||||
.getNumGeometries()];
|
||||
n1 = warningArea.getNumGeometries();
|
||||
for (int j = 0; j < n1; j++) {
|
||||
poly1[j] = (Polygon) warningArea
|
||||
poly1[j] = warningArea
|
||||
.getGeometryN(j);
|
||||
}
|
||||
poly2 = new Polygon[timezoneGeom
|
||||
poly2 = new Geometry[timezoneGeom
|
||||
.getNumGeometries()];
|
||||
n2 = timezoneGeom.getNumGeometries();
|
||||
for (int j = 0; j < n2; j++) {
|
||||
poly2[j] = (Polygon) timezoneGeom
|
||||
poly2[j] = timezoneGeom
|
||||
.getGeometryN(j);
|
||||
}
|
||||
// Calculate the total size of intersection
|
||||
for (Polygon p1 : poly1) {
|
||||
for (Polygon p2 : poly2) {
|
||||
size = p1.intersection(p2)
|
||||
.getArea();
|
||||
for (Geometry p1 : poly1) {
|
||||
for (Geometry p2 : poly2) {
|
||||
try {
|
||||
size = p1.intersection(p2)
|
||||
.getArea();
|
||||
} catch (TopologyException e) {
|
||||
statusHandler
|
||||
.handle(Priority.VERBOSE,
|
||||
"Geometry error calculating the total size of intersection.",
|
||||
e);
|
||||
}
|
||||
if (size > 0.0) {
|
||||
totalSize += size;
|
||||
}
|
||||
|
|
|
@ -57,6 +57,7 @@ import com.raytheon.viz.warngen.gis.AffectedAreas;
|
|||
* Apr 29, 2014 3033 jsanchez Moved patterns into ICommonPatterns
|
||||
* May 1, 2014 DR 16627 Qinglu Lin Added hasStateAbbrev(), isOtherType(), lockListOfNames(), and updated lock().
|
||||
* May 13, 2014 DR 17177 Qinglu Lin Updated secondBullet().
|
||||
* Jul 15, 2015 DR17716 mgamazaychikov Remove all nulls from the affectedAreas to avoid TimSort NPE in initialize.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -311,6 +312,8 @@ abstract public class AbstractLockingBehavior implements ICommonPatterns {
|
|||
if (canceledAreas != null) {
|
||||
this.affectedAreas.addAll(Arrays.asList(canceledAreas));
|
||||
}
|
||||
// remove all nulls from the collection to avoid TimSort NPE
|
||||
this.affectedAreas.removeAll(Collections.singleton(null));
|
||||
Collections.sort(this.affectedAreas, comparator);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
# 05/07/2015 4027 randerso Migrated A1 OB9.16 code to A2
|
||||
# 06/17/2015 4027 dgilling Perform case-insensitive
|
||||
# comparisons in foundCTAs.
|
||||
# 07/13/2015 4648 randerso Fix bullets in follow up products
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
# Description: This product is a template for creating Hazard Products.
|
||||
|
@ -707,21 +708,21 @@ class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis,
|
|||
print "newBullets = ", newBullets
|
||||
print "segment text is: ", segmentText
|
||||
for bullet in newBullets:
|
||||
if not "* " + bullet + "..." in segmentText:
|
||||
if re.search("\* " + bullet + "\.\.\.", segmentText, flags=re.IGNORECASE) is None:
|
||||
print bullet + " not in segmentText"
|
||||
start = self._bulletOrder().index(bullet) + 1
|
||||
end = len(self._bulletOrder())
|
||||
bulletFlag = 1
|
||||
for i in range(start,end):
|
||||
if "* " + self._bulletOrder()[i] + "..." in segmentText and bulletFlag:
|
||||
if (re.search("\* " + self._bulletOrder()[i] + "\.\.\.", segmentText, flags=re.IGNORECASE) is not None) and bulletFlag:
|
||||
print "* " + self._bulletOrder()[i] + "... found!"
|
||||
segmentTextSplit = string.split(segmentText,"* " + self._bulletOrder()[i] + "...")
|
||||
segmentTextSplit = re.split("\* " + self._bulletOrder()[i] + "\.\.\.", segmentText, flags=re.IGNORECASE)
|
||||
segmentText = string.join(segmentTextSplit,"* " + bullet + \
|
||||
"...|* Enter bullet text *|\n\n* " + self._bulletOrder()[i] + "...")
|
||||
bulletFlag = 0
|
||||
if bulletFlag:
|
||||
print "appending to bottom list of bullets!"
|
||||
segmentTextSplit = string.split(segmentText,"Precautionary/preparedness actions...")
|
||||
segmentTextSplit = re.split("Precautionary/preparedness actions\.\.\.", segmentText, flags=re.IGNORECASE)
|
||||
segmentText = "\n" + string.join(segmentTextSplit,"* " + bullet + \
|
||||
"...|* Enter bullet text *|\n\nPrecautionary/preparedness actions...")
|
||||
bulletFlag = 0
|
||||
|
@ -751,14 +752,14 @@ class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis,
|
|||
print "hazardBodyText info: removeBulletList: ",removeBulletList
|
||||
# Finally remove the bullets no longer needed.
|
||||
for bullet in removeBulletList:
|
||||
if string.find(segmentText,"* "+ bullet + "...") != -1:
|
||||
segmentTextSplit = string.split(segmentText,"* " + bullet + "...")
|
||||
if re.search("\* "+ bullet + "\.\.\.", segmentText, flags=re.IGNORECASE) is not None:
|
||||
segmentTextSplit = re.split("\* " + bullet + "\.\.\.", segmentText, flags=re.IGNORECASE)
|
||||
print "segmentTextSplit is ", segmentTextSplit
|
||||
segmentTextSplit2 = string.split(segmentTextSplit[1],"*",1)
|
||||
if len(segmentTextSplit2) == 2:
|
||||
segmentTextSplit[1] = "*" + segmentTextSplit2[1]
|
||||
else:
|
||||
segmentTextSplit2 = string.split(segmentTextSplit[1],"Precautionary/preparedness actions...",1)
|
||||
segmentTextSplit2 = re.split("Precautionary/preparedness actions\.\.\.", segmentTextSplit[1], 1, flags=re.IGNORECASE)
|
||||
if len(segmentTextSplit2) == 2:
|
||||
segmentTextSplit[1] = "Precautionary/preparedness actions..." + segmentTextSplit2[1]
|
||||
segmentText = string.join(segmentTextSplit,"")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Version 2015.6.16-0
|
||||
# Version 2015.7.22-0
|
||||
|
||||
import GenericHazards
|
||||
import string, time, os, re, types, copy, LogStream, collections
|
||||
|
@ -23,7 +23,7 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
|||
Definition["database"] = "Official" # Source database
|
||||
Definition["debug"] = 1
|
||||
Definition["mapNameForCombinations"] = "Zones_<site>"
|
||||
Definition["defaultEditAreas"] = ""
|
||||
Definition["defaultEditAreas"] = []
|
||||
Definition["showZoneCombiner"] = 0 # 1 to cause zone combiner to display
|
||||
|
||||
Definition["productName"] = "Local Statement"
|
||||
|
@ -1137,6 +1137,8 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
|||
statDict = statList[period]
|
||||
for threatName in ['WindThreat', 'FloodingRainThreat', 'TornadoThreat']:
|
||||
self._sampleRankedDiscreteValue(threatName, statDict)
|
||||
# TODO: Investigate if this sampling method is still really needed. The JSON files may
|
||||
# have all the needed information now
|
||||
self._sampleMostSignificantDiscreteValue(threatName, statDict)
|
||||
|
||||
qpfToFfgRatio = self._getStatValue(statDict, "QPFtoFFGRatio", "Max")
|
||||
|
@ -1183,7 +1185,6 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
|||
for period in range(len(statList)):
|
||||
statDict = statList[period]
|
||||
self._sampleRankedDiscreteValue('StormSurgeThreat', statDict)
|
||||
self._sampleMostSignificantDiscreteValue('StormSurgeThreat', statDict)
|
||||
|
||||
inundationMax = self._getStatValue(statDict, "InundationMax", "Max")
|
||||
decidingField = self._samplingDict['StormSurgeThreat']['decidingField']
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Version 2015.5.22-0
|
||||
# Version 2015.7.23-0
|
||||
|
||||
import GenericHazards
|
||||
import JsonSupport
|
||||
|
@ -433,7 +433,6 @@ class TextProduct(HLSTCV_Common.TextProduct):
|
|||
analysisList = [
|
||||
("InundationMax", self.moderatedMax, [6]),
|
||||
("InundationTiming", self.moderatedMax, [6]),
|
||||
("StormSurgeThreat", self.mostSignificantDiscreteValue),
|
||||
]
|
||||
|
||||
return analysisList
|
||||
|
@ -1774,16 +1773,36 @@ class StormSurgeSection(SectionCommon):
|
|||
summary + " storm surge possible")
|
||||
|
||||
def _peakSurge(self, segmentDict, productSegmentGroup, productSegment):
|
||||
self._textProduct.debug_print("_peakSurge _inundationMax = %s" % (self._stats._inundationMax), 1)
|
||||
|
||||
if self._stats._inundationMax is not None and self._stats._inundationMax >= 1:
|
||||
max = self._stats._inundationMax
|
||||
max = round(self._stats._inundationMax)
|
||||
self._stats._maxThreat = "None"
|
||||
if max > 10:
|
||||
maxRange = 4
|
||||
self._stats._maxThreat = "Extreme"
|
||||
elif max > 6:
|
||||
maxRange = 3
|
||||
elif max > 2:
|
||||
if max >= 10:
|
||||
self._stats._maxThreat = "Extreme"
|
||||
else:
|
||||
self._stats._maxThreat = "High"
|
||||
elif max >= 3:
|
||||
maxRange = 2
|
||||
if max >= 4:
|
||||
self._stats._maxThreat = "Mod"
|
||||
else:
|
||||
self._stats._maxThreat = "Elevated"
|
||||
else:
|
||||
maxRange = None
|
||||
if max > 0:
|
||||
self._stats._maxThreat = "Elevated"
|
||||
|
||||
self._textProduct.debug_print("_peakSurge maxRange = %s" % (maxRange), 1)
|
||||
self._textProduct.debug_print("_peakSurge _maxThreat = %s" % (self._stats._maxThreat), 1)
|
||||
|
||||
# Save off the surge threat to the advisory
|
||||
self._textProduct._currentAdvisory['ZoneData'][self._segment]["StormSurgeThreat"] = self._stats._maxThreat
|
||||
|
||||
if maxRange is not None:
|
||||
words = str(int(max - maxRange)) + "-" + str(int(max)) + " feet above ground"
|
||||
|
@ -2680,8 +2699,7 @@ class StormSurgeSectionStats(SectionCommonStats):
|
|||
|
||||
if phishEndTime is None:
|
||||
phishEndTime = tr.startTime()
|
||||
|
||||
self._updateThreatStats(tr, statDict, "StormSurgeThreat")
|
||||
|
||||
|
||||
self._windowSurge = "Window of concern: "
|
||||
|
||||
|
@ -2720,7 +2738,6 @@ class StormSurgeSectionStats(SectionCommonStats):
|
|||
else:
|
||||
self._windowSurge += "through " + endTimeDescriptor
|
||||
|
||||
self._currentAdvisory["StormSurgeThreat"] = self._maxThreat
|
||||
if self._inundationMax is not None:
|
||||
# Round so we don't store values like 1.600000023841858
|
||||
self._currentAdvisory["StormSurgeForecast"] = \
|
||||
|
@ -2751,10 +2768,6 @@ class StormSurgeSectionStats(SectionCommonStats):
|
|||
# Inundation timing - only applies if any inundation forecast
|
||||
if self._inundationMax >= 1 and self._onsetSurgeHour is None:
|
||||
missingGridsList.append("InundationTiming")
|
||||
|
||||
# Threat grid
|
||||
if self._maxThreat is None:
|
||||
missingGridsList.append("StormSurgeThreat")
|
||||
|
||||
# If there are any missing grids - let the user know
|
||||
if len(missingGridsList) > 0:
|
||||
|
|
|
@ -21,18 +21,330 @@
|
|||
<styleRuleset>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>lightning density</parameter>
|
||||
<parameter>Lightning Density</parameter>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LOG">
|
||||
<minValue>0.5</minValue>
|
||||
<maxValue>30000</maxValue>
|
||||
</range>
|
||||
<range scale="LOG">
|
||||
<minValue>0.5</minValue>
|
||||
<maxValue>30000</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 3 10 30 100 300 1000 3000 10000 30000</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud to Ground Lightning Density 1min</parameter>
|
||||
<parameter>Cloud Flash Lightning Density 1min</parameter>
|
||||
<parameter>Total Lightning Density 1min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>50</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 10 20 30 40 50</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud to Ground Lightning Density 5min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>50</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 10 20 30 40 50</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud to Ground Lightning Density 15min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>50</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 10 20 30 40 50</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud Flash Lightning Density 5min</parameter>
|
||||
<parameter>Total Lightning Density 5min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>100</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 20 40 60 80 100</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud to Ground Lightning Density 60min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>200</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 25 50 75 100 125 150 175 200</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud to Ground Lightning Density 1min</parameter>
|
||||
<parameter>Cloud to Ground Lightning Density 5min</parameter>
|
||||
<parameter>Cloud to Ground Lightning Density 15min</parameter>
|
||||
<parameter>Cloud to Ground Lightning Density 60min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>20</lower>
|
||||
<upper>40</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>200</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 25 50 75 100 125 150 175 200</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud Flash Lightning Density 15min</parameter>
|
||||
<parameter>Cloud Flash Lightning Density 60min</parameter>
|
||||
<parameter>Total Lightning Density 15min</parameter>
|
||||
<parameter>Total Lightning Density 60min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>300</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 50 100 150 200 250 300</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud Flash Lightning Density 1min</parameter>
|
||||
<parameter>Cloud Flash Lightning Density 5min</parameter>
|
||||
<parameter>Cloud Flash Lightning Density 15min</parameter>
|
||||
<parameter>Total Lightning Density 1min</parameter>
|
||||
<parameter>Total Lightning Density 5min</parameter>
|
||||
<parameter>Total Lightning Density 15min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>20</lower>
|
||||
<upper>40</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>300</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 50 100 150 200 250 300</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Pulse Lightning Density 1min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>500</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 100 200 300 400 500</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Pulse Lightning Density 5min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>750</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 100 200 300 400 500 600 700</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Pulse Lightning Density 15min</parameter>
|
||||
<parameter>Pulse Lightning Density 60min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>1</lower>
|
||||
<upper>8</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>3000</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 500 1000 1500 2000 2500 3000</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Pulse Lightning Density 1min</parameter>
|
||||
<parameter>Pulse Lightning Density 5min</parameter>
|
||||
<parameter>Pulse Lightning Density 15min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>20</lower>
|
||||
<upper>40</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>3000</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 500 1000 1500 2000 2500 3000</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Cloud Flash Lightning Density 60min</parameter>
|
||||
<parameter>Total Lightning Density 60min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>20</lower>
|
||||
<upper>40</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>3000</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 500 1000 1500 2000 2500 3000</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
<styleRule>
|
||||
<paramLevelMatches>
|
||||
<parameter>Pulse Lightning Density 60min</parameter>
|
||||
<!-- level is km resolution -->
|
||||
<rangeLevel units="DEFAULT">
|
||||
<lower>20</lower>
|
||||
<upper>40</upper>
|
||||
</rangeLevel>
|
||||
</paramLevelMatches>
|
||||
<imageStyle>
|
||||
<interpolate>false</interpolate>
|
||||
<range scale="LINEAR">
|
||||
<minValue>0</minValue>
|
||||
<maxValue>25000</maxValue>
|
||||
</range>
|
||||
<defaultColormap>Grid/gridded data</defaultColormap>
|
||||
<colorbarLabeling>
|
||||
<values>1 5000 10000 15000 20000 25000</values>
|
||||
</colorbarLabeling>
|
||||
</imageStyle>
|
||||
</styleRule>
|
||||
</styleRuleset>
|
||||
|
|
|
@ -335,7 +335,7 @@ VTECTable = {
|
|||
upgradeHazardsDict = {
|
||||
'WC.W': ['WC.A', 'WC.Y'],
|
||||
'WC.Y': ['WC.A'],
|
||||
'BZ.W': ['WS.W', 'LE.W', 'WW.Y','ZR.Y', 'LE.Y',
|
||||
'BZ.W': ['WS.W', 'LE.W', 'ZR.Y', 'LE.Y', 'WW.Y',
|
||||
'BZ.A', 'WS.A', 'LE.A'],
|
||||
'IS.W': ['WS.W', 'LE.W', 'ZR.Y', 'LE.Y', 'WW.Y',
|
||||
'BZ.A', 'WS.A', 'LE.A'],
|
||||
|
|
|
@ -101,6 +101,7 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
|
|||
* 10/28/2014 3454 bphillip Fix usage of getSession()
|
||||
* Jan 27, 2015 4031 rferrel Resolve AFOS PILs site conflict using preferredAfosFirstLetter.
|
||||
* May 05, 2015 4462 rferrel {@link #write(StdTextProduct)} when missing set the textProduct's site.
|
||||
* Jul 06, 2015 4612 rferrel Get all sites matching the preferredafosFirstLetter.
|
||||
* </pre>
|
||||
*
|
||||
* @author garmendariz
|
||||
|
@ -132,7 +133,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
|
||||
private static final String NNN_ID = "nnnid";
|
||||
|
||||
private static final String SITE = "site";
|
||||
private static final String SITES = "sites";
|
||||
|
||||
private static final String PRODUCT = "product";
|
||||
|
||||
|
@ -161,7 +162,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
|
||||
+ " and " + ProdXXX_ID + " = :" + XXX_ID
|
||||
|
||||
+ " and " + ProdSITE + " = :" + SITE
|
||||
+ " and " + ProdSITE + " in (:" + SITES + ")"
|
||||
|
||||
+ " order by " + REFTIME + " desc" + ", " + INSERTTIME + " desc";
|
||||
|
||||
|
@ -309,7 +310,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
List<StdTextProduct> products = null;
|
||||
|
||||
try {
|
||||
final List<Pair<String, AFOSProductId>> siteAfosIdList = querySiteAfosId(
|
||||
final List<Pair<String[], AFOSProductId>> siteAfosIdList = querySiteAfosId(
|
||||
ccc, nnn, xxx);
|
||||
|
||||
products = txTemplate
|
||||
|
@ -337,14 +338,14 @@ public class StdTextProductDao extends CoreDao {
|
|||
query.setMaxResults(version + 1);
|
||||
}
|
||||
|
||||
for (Pair<String, AFOSProductId> siteAfosId : siteAfosIdList) {
|
||||
String site = siteAfosId.getFirst();
|
||||
for (Pair<String[], AFOSProductId> siteAfosId : siteAfosIdList) {
|
||||
String[] sites = siteAfosId.getFirst();
|
||||
AFOSProductId afosId = siteAfosId.getSecond();
|
||||
if (site != null) {
|
||||
if (sites != null) {
|
||||
query.setParameter(CCC_ID, afosId.getCcc());
|
||||
query.setParameter(NNN_ID, afosId.getNnn());
|
||||
query.setParameter(XXX_ID, afosId.getXxx());
|
||||
query.setParameter(SITE, site);
|
||||
query.setParameterList(SITES, sites);
|
||||
|
||||
List<?> results = query.list();
|
||||
if (results != null && results.size() > 0) {
|
||||
|
@ -387,15 +388,15 @@ public class StdTextProductDao extends CoreDao {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get desired site for the afosId the pairs are order by AfosId.
|
||||
* Get desired sites for the afosId the pairs are order by AfosId.
|
||||
*
|
||||
* @param ccc
|
||||
* @param nnn
|
||||
* @param xxx
|
||||
* @return siteAfosIds
|
||||
*/
|
||||
private List<Pair<String, AFOSProductId>> querySiteAfosId(final String ccc,
|
||||
final String nnn, final String xxx) {
|
||||
private List<Pair<String[], AFOSProductId>> querySiteAfosId(
|
||||
final String ccc, final String nnn, final String xxx) {
|
||||
boolean hasCCC = ((ccc != null) && (ccc.length() > 0) && (!ccc
|
||||
.equals("000")));
|
||||
boolean hasNNN = ((nnn != null) && (nnn.length() > 0) && (!nnn
|
||||
|
@ -405,10 +406,10 @@ public class StdTextProductDao extends CoreDao {
|
|||
final boolean createInitialFilter = !(hasCCC && hasNNN && hasXXX);
|
||||
|
||||
return txTemplate
|
||||
.execute(new TransactionCallback<List<Pair<String, AFOSProductId>>>() {
|
||||
.execute(new TransactionCallback<List<Pair<String[], AFOSProductId>>>() {
|
||||
|
||||
@Override
|
||||
public List<Pair<String, AFOSProductId>> doInTransaction(
|
||||
public List<Pair<String[], AFOSProductId>> doInTransaction(
|
||||
TransactionStatus status) {
|
||||
String paddedccc = StringUtils.rightPad(ccc,
|
||||
MAX_FIELD_LENGTH);
|
||||
|
@ -417,7 +418,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
String paddedxxx = StringUtils.rightPad(xxx,
|
||||
MAX_FIELD_LENGTH);
|
||||
Session session = getCurrentSession();
|
||||
List<Pair<String, AFOSProductId>> siteProductPairList = null;
|
||||
List<Pair<String[], AFOSProductId>> siteProductPairList = null;
|
||||
StdTextProduct stdTextProduct = getStdTextProductInstance();
|
||||
|
||||
if (createInitialFilter) {
|
||||
|
@ -472,30 +473,30 @@ public class StdTextProductDao extends CoreDao {
|
|||
.keySet());
|
||||
Collections.sort(indices);
|
||||
for (int index : indices) {
|
||||
String site = getSite(siteMap.get(index)
|
||||
String[] sites = getSite(siteMap.get(index)
|
||||
.toArray());
|
||||
AFOSProductId afosId = orderedAfosIds
|
||||
.get(index);
|
||||
Pair<String, AFOSProductId> pair = new Pair<String, AFOSProductId>(
|
||||
site, afosId);
|
||||
siteProductPairList.add(pair);
|
||||
siteProductPairList
|
||||
.add(new Pair<String[], AFOSProductId>(
|
||||
sites, afosId));
|
||||
}
|
||||
} else {
|
||||
siteProductPairList = new ArrayList<Pair<String, AFOSProductId>>(
|
||||
siteProductPairList = new ArrayList<Pair<String[], AFOSProductId>>(
|
||||
0);
|
||||
}
|
||||
} else {
|
||||
AFOSProductId afosId = new AFOSProductId(paddedccc,
|
||||
paddednnn, paddedxxx);
|
||||
String site = getSite(afosId);
|
||||
if (site == null) {
|
||||
siteProductPairList = new ArrayList<Pair<String, AFOSProductId>>(
|
||||
String[] sites = getSite(afosId);
|
||||
if (sites == null) {
|
||||
siteProductPairList = new ArrayList<Pair<String[], AFOSProductId>>(
|
||||
0);
|
||||
} else {
|
||||
siteProductPairList = new ArrayList<>(1);
|
||||
siteProductPairList
|
||||
.add(new Pair<String, AFOSProductId>(
|
||||
site, afosId));
|
||||
.add(new Pair<String[], AFOSProductId>(
|
||||
sites, afosId));
|
||||
}
|
||||
}
|
||||
return siteProductPairList;
|
||||
|
@ -504,12 +505,12 @@ public class StdTextProductDao extends CoreDao {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get site based on the ordering from preferredAfosFirstLetter.
|
||||
* Get sites based on the ordering from preferredAfosFirstLetter.
|
||||
*
|
||||
* @param afosId
|
||||
* @return site or null when no data.
|
||||
* @return sites or null when no data.
|
||||
*/
|
||||
private String getSite(AFOSProductId afosId) {
|
||||
private String[] getSite(AFOSProductId afosId) {
|
||||
String ccc = afosId.getCcc();
|
||||
String nnn = afosId.getNnn();
|
||||
String xxx = afosId.getXxx();
|
||||
|
@ -534,17 +535,18 @@ public class StdTextProductDao extends CoreDao {
|
|||
}
|
||||
|
||||
/**
|
||||
* From the array of sites determine which one is the preferred site.
|
||||
* From the array of sites determine which ones are preferred sites.
|
||||
*
|
||||
* @param values
|
||||
* - Assume sites with common afosId
|
||||
* @return site first site based on preferredAfosFirstLetter
|
||||
* @return sites based on preferredAfosFirstLetter
|
||||
*/
|
||||
private String getSite(Object[] values) {
|
||||
private String[] getSite(Object[] values) {
|
||||
if (values != null) {
|
||||
if (values.length == 1) {
|
||||
return (String) values[0];
|
||||
return new String[] { (String) values[0] };
|
||||
} else if (values.length > 1) {
|
||||
List<String> results = new ArrayList<>(values.length);
|
||||
String[] sites = new String[values.length];
|
||||
for (int i = 0; i < values.length; ++i) {
|
||||
sites[i] = (String) values[i];
|
||||
|
@ -552,17 +554,20 @@ public class StdTextProductDao extends CoreDao {
|
|||
for (char c : preferredAfosFirstLetter) {
|
||||
for (String site : sites) {
|
||||
if (site.charAt(0) == c) {
|
||||
return site;
|
||||
results.add(site);
|
||||
}
|
||||
}
|
||||
if (!results.isEmpty()) {
|
||||
return results.toArray(new String[results.size()]);
|
||||
}
|
||||
}
|
||||
if (logger.isInfoEnabled()) {
|
||||
String message = "None of the sites first character in preferred AFOS first letter list \""
|
||||
+ new String(preferredAfosFirstLetter)
|
||||
+ "\". Using site: " + sites[0];
|
||||
+ "\". Using sites: " + sites;
|
||||
logger.info(message);
|
||||
}
|
||||
return sites[0];
|
||||
return sites;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -586,7 +591,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
Session session = null;
|
||||
|
||||
try {
|
||||
List<Pair<String, AFOSProductId>> siteAfosIdList = querySiteAfosId(
|
||||
List<Pair<String[], AFOSProductId>> siteAfosIdList = querySiteAfosId(
|
||||
ccc, nnn, xxx);
|
||||
|
||||
session = getSession();
|
||||
|
@ -640,7 +645,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
Session session = null;
|
||||
|
||||
try {
|
||||
List<Pair<String, AFOSProductId>> siteAfosIdList = querySiteAfosId(
|
||||
List<Pair<String[], AFOSProductId>> siteAfosIdList = querySiteAfosId(
|
||||
ccc, nnn, xxx);
|
||||
|
||||
session = getSession();
|
||||
|
@ -687,7 +692,7 @@ public class StdTextProductDao extends CoreDao {
|
|||
* @throws HibernateException
|
||||
*/
|
||||
private List<StdTextProduct> listProducts(Criteria criteria,
|
||||
List<Pair<String, AFOSProductId>> siteAfosIdList)
|
||||
List<Pair<String[], AFOSProductId>> siteAfosIdList)
|
||||
throws HibernateException {
|
||||
|
||||
List<?> prodList = criteria.list();
|
||||
|
@ -699,9 +704,9 @@ public class StdTextProductDao extends CoreDao {
|
|||
products = new ArrayList<>(prodList.size());
|
||||
|
||||
Iterator<?> iter = prodList.iterator();
|
||||
Iterator<Pair<String, AFOSProductId>> siteAfosIdIter = siteAfosIdList
|
||||
Iterator<Pair<String[], AFOSProductId>> siteAfosIdIter = siteAfosIdList
|
||||
.iterator();
|
||||
Pair<String, AFOSProductId> pair = siteAfosIdIter.next();
|
||||
Pair<String[], AFOSProductId> pair = siteAfosIdIter.next();
|
||||
|
||||
while (iter.hasNext()) {
|
||||
StdTextProduct prod = (StdTextProduct) iter.next();
|
||||
|
@ -715,8 +720,11 @@ public class StdTextProductDao extends CoreDao {
|
|||
pair = siteAfosIdIter.next();
|
||||
}
|
||||
String site = prod.getSite();
|
||||
if (site.equals(pair.getFirst())) {
|
||||
products.add(prod);
|
||||
for (String pSite : pair.getFirst()) {
|
||||
if (site.equals(pSite)) {
|
||||
products.add(prod);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ public class FaxSender {
|
|||
faxWriter.write("\n");
|
||||
faxWriter.close();
|
||||
StringBuilder faxDataCommand = new StringBuilder();
|
||||
faxDataCommand.append("scp ");
|
||||
faxDataCommand.append("scp -q ");
|
||||
faxDataCommand.append(faxDataFilename);
|
||||
faxDataCommand.append(" ldad@ls1:");
|
||||
faxDataCommand.append(ldadDataFilename);
|
||||
|
@ -136,7 +136,7 @@ public class FaxSender {
|
|||
return retval;
|
||||
}
|
||||
StringBuilder ldadDataCommand = new StringBuilder();
|
||||
ldadDataCommand.append("scp ");
|
||||
ldadDataCommand.append("scp -q ");
|
||||
ldadDataCommand.append(faxScriptFilename);
|
||||
ldadDataCommand.append(" ldad@ls1:");
|
||||
ldadDataCommand.append(ldadScriptFilename);
|
||||
|
|
Loading…
Add table
Reference in a new issue