Merge branch 'master_15.1.1'(master_15.1.1-13) into field_16.1.1
Conflicts: cave/com.raytheon.uf.viz.useradmin/src/com/raytheon/uf/viz/useradmin/ui/UserAdminSelectDlg.java cave/com.raytheon.viz.gfe/localization/gfe/userPython/textUtilities/headline/FormatterRunner.py cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/PolygonUtil.java Change-Id: Id84ab89d032271c3c7e7919f339e56de7ec1597c Former-commit-id: 5ac30cbf77afe4982964c88467105f0bf64f2a6e
This commit is contained in:
commit
f74540b81a
42 changed files with 644 additions and 191 deletions
|
@ -22,7 +22,8 @@
|
|||
<list>
|
||||
<value>com.raytheon.uf.common.dataplugin.text</value>
|
||||
<value>com.raytheon.uf.common.dataplugin.shef</value>
|
||||
<value>com.raytheon.edex.plugin.shef</value>
|
||||
<value>com.raytheon.edex.plugin.shef</value>
|
||||
<value>com.raytheon.uf.common.bmh</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
|
|
@ -54,6 +54,7 @@ import com.raytheon.viz.ui.widgets.duallist.IUpdate;
|
|||
* May 23, 2012 mpduff Initial creation
|
||||
* Aug 08, 2012 863 jpiatt Added new interface method.
|
||||
* Jul 28, 2013 2236 mpduff Made resizable.
|
||||
* May 04, 2015 4419 rferrel Sort {@link #roleDualList}.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -208,6 +209,7 @@ public class ManageUserDlg extends CaveSWTDialog implements IUpdate {
|
|||
roleConfig.setSelectedList(selectedList);
|
||||
roleConfig.setFullList(fullList);
|
||||
roleConfig.setMenuData(menuData);
|
||||
roleConfig.setSortList(true);
|
||||
|
||||
roleDualList = new DualList(stackComp, SWT.NONE, roleConfig, this);
|
||||
|
||||
|
@ -240,6 +242,7 @@ public class ManageUserDlg extends CaveSWTDialog implements IUpdate {
|
|||
permConfig.setSelectedList(selectedPermList);
|
||||
permConfig.setFullList(fullPermList);
|
||||
permConfig.setMenuData(menuData2);
|
||||
permConfig.setSortList(true);
|
||||
|
||||
permDualList = new DualList(stackComp, SWT.NONE, permConfig, this);
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package com.raytheon.uf.viz.useradmin.ui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.DisposeEvent;
|
||||
|
@ -71,6 +72,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* and delete buttons. Give delete dialogs
|
||||
* a title.
|
||||
* Apr 02, 2015 4345 skorolev Fixed dialog to expand vertically properly.
|
||||
* May 04, 2015 4419 rferrel Sort {@link #userPermList}.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -563,7 +565,10 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
|
|||
rp.add(perm);
|
||||
}
|
||||
|
||||
userPermList.setItems(rp.toArray(new String[rp.size()]));
|
||||
String[] rpArray = rp.toArray(new String[rp.size()]);
|
||||
Arrays.sort(rpArray);
|
||||
|
||||
userPermList.setItems(rpArray);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,8 @@ import com.raytheon.viz.avnconfig.AvnConfigConstants.triggerType;
|
|||
* Feb 16, 2011 7878 rferrel Modifications to use ids.cfg file.
|
||||
* Apr 08, 2011 8856 rferrel Can now make a new station's templates
|
||||
* May 24, 2011 9060 rferrel Limit downloading of localization files.
|
||||
* Aug 09, 2013 2033 mschenke Switched File.separator to IPathManager.SEPARATOR
|
||||
* Aug 09, 2013 2033 mschenke Switched File.separator to IPathManager.SEPARATOR
|
||||
* May 04, 2015 17417 yteng Get all sites from product
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -299,13 +300,10 @@ public class TafSiteConfigIni implements ITafSiteConfig {
|
|||
HierarchicalINIConfiguration config = getProductConfig(product);
|
||||
if (config != null) {
|
||||
config.setDelimiterParsingDisabled(true);
|
||||
String sites = config.getString("sites.idents");
|
||||
if (sites != null) {
|
||||
String[] idents = config.getString("sites.idents").split(
|
||||
"\\s*,\\s*", 0);
|
||||
|
||||
for (String id : idents) {
|
||||
siteList.add(id);
|
||||
String[] sites = config.getStringArray("sites.idents");
|
||||
if (sites != null && sites.length > 0) {
|
||||
for (String site : sites) {
|
||||
siteList.add(site);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ import JUtil, VarDictGroker
|
|||
import RedirectLogging
|
||||
import UFStatusHandler
|
||||
|
||||
from java.io import File
|
||||
#
|
||||
# Runs the text formatter to generate text products
|
||||
#
|
||||
|
@ -41,6 +40,9 @@ from java.io import File
|
|||
# 04/16/15 #14946 ryu Fix getTimeZones to return the office TZ if timezone
|
||||
# is not set for any zone in a segment.
|
||||
# 04/20/2015 #4027 randerso Fixes for formatter autotests
|
||||
# 05/06/2015 #4467 randerso Convert to upper case before writing to files if
|
||||
# mixed case is not enabled for the product.
|
||||
# Cleaned up file writing code
|
||||
#
|
||||
#
|
||||
|
||||
|
@ -105,6 +107,33 @@ def executeFromJava(databaseID, site, username, dataMgr, forecastList, logFile,
|
|||
RedirectLogging.restore()
|
||||
return forecasts
|
||||
|
||||
def getPid(forecast):
|
||||
# taken from ProductParser.py
|
||||
import re
|
||||
|
||||
sl = r'^' # start of line
|
||||
el = r'\s*?\n' # end of line
|
||||
id3 = r'[A-Za-z]{3}' # 3 charater word
|
||||
empty = r'^\s*' + el # empty line
|
||||
|
||||
wmoid = r'(?P<wmoid>[A-Z]{4}\d{2})' # wmoid
|
||||
fsid = r'(?P<fsid>[A-Z]{4})' # full station id
|
||||
pit = r'(?P<pit>\d{6})' # product issuance time UTC
|
||||
ff = r'(?P<funnyfield> ' + id3 + ')?' # "funny" field
|
||||
|
||||
# CI block
|
||||
ci_start = sl + wmoid + ' ' + fsid + ' ' + pit + ff + el
|
||||
awipsid = r'(?P<pil>(?P<cat>[A-Z0-9]{3})(?P<lid>[A-Z0-9]{1,3}))' + el
|
||||
ci_block = r'(?P<ciblock>' + ci_start + awipsid + '\n?)'
|
||||
|
||||
ci_re = re.compile(ci_block)
|
||||
|
||||
pid = None
|
||||
m = ci_re.search(forecast)
|
||||
if m is not None:
|
||||
pid = m.group('cat')
|
||||
|
||||
return pid
|
||||
|
||||
def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
||||
username, dataMgr, serverFile=None,
|
||||
|
@ -234,16 +263,31 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
|||
|
||||
# For each Forecast Type,
|
||||
# Create generate forecast
|
||||
forecasts = ""
|
||||
forecasts = "" # returned value
|
||||
outForecasts = "" # written to output files
|
||||
for forecastType in forecastList:
|
||||
forecast = formatter.getForecast(forecastType, argDict)
|
||||
forecasts = forecasts + forecast
|
||||
|
||||
# Convert data written to files to upper case if required
|
||||
mixedCase = False
|
||||
pid = getPid(forecast)
|
||||
if pid is None:
|
||||
logger.warning("Unable to determine PID: defaulting to upper case")
|
||||
else:
|
||||
from com.raytheon.uf.common.dataplugin.text.db import MixedCaseProductSupport
|
||||
mixedCase = MixedCaseProductSupport.isMixedCase(pid)
|
||||
|
||||
if mixedCase:
|
||||
outForecasts = outForecasts + forecast
|
||||
else:
|
||||
outForecasts = outForecasts + forecast.upper()
|
||||
|
||||
logger.info("Text:\n" + str(forecasts))
|
||||
|
||||
try:
|
||||
outputFile = argDict["outputFile"]
|
||||
success = writeToFile(forecasts, outputFile, "w")
|
||||
success = writeToFile(outForecasts, outputFile, "w")
|
||||
if success == 0:
|
||||
print "Couldn't open output file", outputFile
|
||||
logger.error("Couldn't open output file: ", outputFile)
|
||||
|
@ -253,7 +297,7 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
|||
|
||||
try:
|
||||
outputFile = argDict["serverOutputFile"]
|
||||
success = writeToFile(forecasts, outputFile, "w")
|
||||
success = writeToFile(outForecasts, outputFile, "w")
|
||||
if success == 0:
|
||||
print "Couldn't open output file", outputFile
|
||||
logger.error("Couldn't open output file: ", outputFile)
|
||||
|
@ -264,7 +308,7 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
|||
|
||||
try:
|
||||
appendFile = argDict["appendFile"]
|
||||
success = writeToFile(forecasts, appendFile, "a")
|
||||
success = writeToFile(outForecasts, appendFile, "a")
|
||||
if success == 0:
|
||||
print "Couldn't open append file", appendFile
|
||||
logger.error("Couldn't write to append file: ", appendFile)
|
||||
|
@ -275,7 +319,7 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
|||
try:
|
||||
serverFile = argDict["serverFile"]
|
||||
writeToSite = (username == "SITE")
|
||||
success = writeToServerFile(forecasts, serverFile, writeToSite)
|
||||
success = writeToServerFile(outForecasts, serverFile, writeToSite)
|
||||
if success == 0:
|
||||
print "Couldn't open server output file", serverFile
|
||||
logger.error("Couldn't open server output file: ", serverFile)
|
||||
|
@ -283,6 +327,8 @@ def runFormatter(databaseID, site, forecastList, cmdLineVarDict, vtecMode,
|
|||
except:
|
||||
pass
|
||||
|
||||
del outForecasts
|
||||
|
||||
# Remove any lat/lon areas created temporarily
|
||||
#global LatLonIds
|
||||
#argDict["ifpClient"].deleteReferenceData(LatLonIds)
|
||||
|
@ -309,29 +355,37 @@ def getAbsTime(timeStr):
|
|||
return AbsTime.absTimeYMD(year, month, day, hour, minute)
|
||||
|
||||
def writeToFile(forecasts, outputFile, mode):
|
||||
if not outputFile is None and outputFile != "":
|
||||
outfile = open(outputFile, mode)
|
||||
os.chmod(outputFile, 0644)
|
||||
if outfile is None:
|
||||
if outputFile:
|
||||
logger.info("Writing forecast to " + outputFile)
|
||||
try:
|
||||
with open(outputFile, mode) as outfile:
|
||||
outfile.write(forecasts)
|
||||
|
||||
os.chmod(outputFile, 0644)
|
||||
except:
|
||||
logger.exception("Error writing forecast to "+outputFile)
|
||||
return 0
|
||||
else:
|
||||
outfile.write(forecasts)
|
||||
outfile.close()
|
||||
return 1
|
||||
|
||||
def writeToServerFile(forecasts, outputFile, writeToSite):
|
||||
if not outputFile is None and outputFile != "":
|
||||
if writeToSite:
|
||||
ctx = PATH_MGR.getContext(LocalizationType.COMMON_STATIC, LocalizationLevel.SITE)
|
||||
else:
|
||||
ctx = PATH_MGR.getContext(LocalizationType.COMMON_STATIC, LocalizationLevel.USER)
|
||||
filePath = File.separatorChar.join(["gfe", "text", "PRODGEN", outputFile + ".PRODGEN"])
|
||||
lFile = PATH_MGR.getLocalizationFile(ctx, filePath)
|
||||
javaFile = lFile.getFile()
|
||||
outfile = open(javaFile.getAbsolutePath(), 'w')
|
||||
outfile.write(forecasts)
|
||||
outfile.close()
|
||||
return lFile.save()
|
||||
if outputFile:
|
||||
try:
|
||||
if writeToSite:
|
||||
ctx = PATH_MGR.getContext(LocalizationType.COMMON_STATIC, LocalizationLevel.SITE)
|
||||
else:
|
||||
ctx = PATH_MGR.getContext(LocalizationType.COMMON_STATIC, LocalizationLevel.USER)
|
||||
filePath = PATH_MGR.SEPARATOR.join(["gfe", "text", "PRODGEN", outputFile + ".PRODGEN"])
|
||||
lFile = PATH_MGR.getLocalizationFile(ctx, filePath)
|
||||
logger.info("Writing forecast to " + str(lFile))
|
||||
|
||||
from LockingFile import File
|
||||
with File(lFile.getFile(), "", 'w') as outfile:
|
||||
outfile.write(forecasts)
|
||||
|
||||
return lFile.save()
|
||||
except:
|
||||
logger.exception("Error writing forecast to " + str(lFile))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
def getScripts(paths, nameMap, definitionMap):
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<WEGroup name="NWPS">
|
||||
<WEItem relativeCycleNumber="0" parmID="WaveHeight_SFC:xxx_GRID__nwpsCG1_00000000_0000"/>
|
||||
<WEItem relativeCycleNumber="0" parmID="Period_SFC:xxx_GRID__nwpsCG1_00000000_0000"/>
|
||||
<WEItem relativeCycleNumber="0" parmID="SwanSwell_SFC:xxx_GRID__nwpsCG1_00000000_0000"/>
|
||||
</WEGroup>
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<WEGroup name="nwpsTrackingCG0">
|
||||
<WEItem parmID="Period1_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period2_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period3_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period4_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period5_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period6_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period7_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period8_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period9_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Period10_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave1_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave2_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave3_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave4_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave5_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave6_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave7_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave8_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave9_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
<WEItem parmID="Wave10_SFC:xxx_GRID__nwpsTrkngCG0_20150207_0600" relativeCycleNumber="0"/>
|
||||
</WEGroup>
|
|
@ -19,7 +19,10 @@
|
|||
further_licensing_information.
|
||||
-->
|
||||
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<contribute xsi:type="menuItem" menuText="Cloud Cover" key="CCP" indentText="false" />
|
||||
<contribute xsi:type="menuItem" menuText="Cloud Cover Anl Uncertainty" key="CCPerranl" indentText="false" />
|
||||
<contribute xsi:type="menuItem" menuText="Visibility" key="Vis" indentText="false" />
|
||||
<contribute xsi:type="menuItem" menuText="Visibility Anl Uncertainty" key="Viserranl" indentText="false" />
|
||||
<contribute xsi:type="menuItem" menuText="Turbulence" key="TURB" indentText="false" />
|
||||
<contribute xsi:type="menuItem" menuText="Turbulence Index" key="TPFI" indentText="false" />
|
||||
<contribute xsi:type="menuItem" menuText="Icing Probability" key="ICPRB" indentText="false" />
|
||||
|
|
|
@ -35,7 +35,9 @@ import javax.jms.Session;
|
|||
|
||||
import com.raytheon.uf.common.dataplugin.text.request.InsertStdTextProductRequest;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.core.comm.JMSConnection;
|
||||
|
@ -60,6 +62,7 @@ import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
|
|||
* 02Aug2010 2187 cjeanbap Update variable/method signature to be consistent.
|
||||
* 04Oct2010 7193 cjeanbap Add time-to-live value to MessageProducer.
|
||||
* Sep 13, 2013 2368 rjpeter Set delivery mode to PERSISTENT.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -70,6 +73,9 @@ public class WarningSender implements IWarngenObserver {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(WarningSender.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
private final String hostName = null;
|
||||
|
||||
private boolean notifyError;
|
||||
|
@ -105,8 +111,8 @@ public class WarningSender implements IWarngenObserver {
|
|||
long t0 = System.currentTimeMillis();
|
||||
String siteNode = SiteAbbreviationUtil.getSiteNode(LocalizationManager
|
||||
.getInstance().getCurrentSite());
|
||||
statusHandler.debug("Get site node time: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Get site node time",
|
||||
System.currentTimeMillis() - t0);
|
||||
if (host == null) {
|
||||
statusHandler.handle(Priority.ERROR,
|
||||
"Text Workstation host not set in preferences.");
|
||||
|
@ -144,7 +150,7 @@ public class WarningSender implements IWarngenObserver {
|
|||
m.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
|
||||
mp.send(m);
|
||||
long t1 = System.currentTimeMillis();
|
||||
statusHandler.debug(id + " sent to text workstation in "
|
||||
perfLog.log(id + " sent to text workstation in "
|
||||
+ (t1 - t0) + "ms in " + (connectCount + 1)
|
||||
+ (connectCount > 0 ? " tries" : " try"));
|
||||
messageNotSent = false;
|
||||
|
@ -260,8 +266,8 @@ public class WarningSender implements IWarngenObserver {
|
|||
ThriftClient.sendRequest(new InsertStdTextProductRequest(id, warning,
|
||||
operationalMode));
|
||||
|
||||
statusHandler.debug(id + " saved to textdb in "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
perfLog.logDuration(id + " save to textdb",
|
||||
System.currentTimeMillis() - t0);
|
||||
}
|
||||
|
||||
public static String getCurTimeString() {
|
||||
|
|
|
@ -27,6 +27,8 @@ import com.raytheon.uf.common.geospatial.ISpatialQuery.SearchMode;
|
|||
import com.raytheon.uf.common.geospatial.SpatialException;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryFactory;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.uf.viz.core.maps.rsc.DbMapQueryFactory;
|
||||
import com.raytheon.viz.core.map.GeoUtil;
|
||||
|
@ -53,6 +55,7 @@ import com.vividsolutions.jts.geom.Point;
|
|||
* Feb 12, 2013 1600 jsanchez Used adjustAngle method from AbstractStormTrackResource.
|
||||
* Mar 5, 2013 1600 jsanchez Used AdjustAngle instead of AbstractStormTrackResource to handle angle adjusting.
|
||||
* Mar 26, 2013 1819 jsanchez Allowed points to be not be based on point source inclusion constraints.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -61,6 +64,9 @@ import com.vividsolutions.jts.geom.Point;
|
|||
*/
|
||||
abstract public class AbstractDbSourceDataAdaptor {
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
private static final String transformedKey = "com.raytheon.transformed";
|
||||
|
||||
private static final String GEOM_FIELD = "the_geom";
|
||||
|
@ -176,8 +182,8 @@ abstract public class AbstractDbSourceDataAdaptor {
|
|||
ptFields.toArray(new String[ptFields.size()]),
|
||||
searchArea, filter, SearchMode.INTERSECTS);
|
||||
}
|
||||
System.out.println("Retrieve location data for '" + pointSource
|
||||
+ "' = " + (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Retrieve location data for '" + pointSource + "'",
|
||||
System.currentTimeMillis() - t0);
|
||||
} catch (SpatialException e) {
|
||||
throw new VizException("Error querying " + pointSource + " table: "
|
||||
+ e.getLocalizedMessage(), e);
|
||||
|
|
|
@ -44,7 +44,9 @@ import com.raytheon.uf.common.geospatial.ISpatialQuery.SearchMode;
|
|||
import com.raytheon.uf.common.geospatial.SpatialException;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryFactory;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
|
@ -87,6 +89,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometry;
|
|||
* Sep 14, 2014 ASM #641 dhuffman Filtered out cases where Areas do not match Zones by using
|
||||
* refactored WarngenLayer::filterArea.
|
||||
* Mar 9, 2014 ASM #17190 D. Friedman Use fipsField and areaField for unique area ID.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -96,6 +99,9 @@ public class Area {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(Area.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
/**
|
||||
* If an area greater than this percentage of the area is covered, no
|
||||
* direction is included
|
||||
|
@ -167,6 +173,7 @@ public class Area {
|
|||
|
||||
// Query for points within polygon
|
||||
SpatialQueryResult[] ptFeatures = null;
|
||||
long t0 = System.currentTimeMillis();
|
||||
if (pointField != null) {
|
||||
try {
|
||||
ptFeatures = SpatialQueryFactory.create().query(pointSource,
|
||||
|
@ -177,6 +184,8 @@ public class Area {
|
|||
e);
|
||||
}
|
||||
}
|
||||
perfLog.logDuration("affected areas '" + areaConfig.getVariable()
|
||||
+ "' spatial query", System.currentTimeMillis() - t0);
|
||||
|
||||
Abbreviation abbreviation = null;
|
||||
|
||||
|
@ -194,6 +203,7 @@ public class Area {
|
|||
|
||||
List<String> uniqueAreaIDs = new ArrayList<String>();
|
||||
List<AffectedAreas> areas = new ArrayList<AffectedAreas>();
|
||||
long t0f = System.currentTimeMillis();
|
||||
for (GeospatialData regionFeature : countyMap.values()) {
|
||||
Geometry regionGeom = regionFeature.geometry;
|
||||
PreparedGeometry preparedRegionGeom = regionFeature.prepGeom;
|
||||
|
@ -284,6 +294,8 @@ public class Area {
|
|||
areas.add(area);
|
||||
}
|
||||
}
|
||||
perfLog.logDuration("affected areas '" + areaConfig.getVariable()
|
||||
+ "' features", System.currentTimeMillis() - t0f);
|
||||
|
||||
// Perform Sort
|
||||
if (fields.size() > 0) {
|
||||
|
|
|
@ -54,6 +54,7 @@ import com.vividsolutions.jts.geom.LinearRing;
|
|||
import com.vividsolutions.jts.geom.Point;
|
||||
import com.vividsolutions.jts.geom.Polygon;
|
||||
import com.vividsolutions.jts.geom.PrecisionModel;
|
||||
import com.vividsolutions.jts.geom.TopologyException;
|
||||
import com.vividsolutions.jts.geom.prep.PreparedGeometry;
|
||||
import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
|
||||
import com.vividsolutions.jts.precision.SimpleGeometryPrecisionReducer;
|
||||
|
@ -90,7 +91,9 @@ import com.vividsolutions.jts.precision.SimpleGeometryPrecisionReducer;
|
|||
* hatched area would be retained after redrawing.
|
||||
* 07/22/2014 DR 17475 Qinglu Lin Updated createPolygonByPoints() and created second createPolygonByPoints().
|
||||
* 04/02/2015 DR 4353 dgilling Fix bad exception handler in hatchWarningArea.
|
||||
*
|
||||
* 04/29/2015 DR 17310 D. Friedman Use Geometry.buffer() to fix self-intersections. Fix bug in alterVertexes.
|
||||
* 05/07/2015 DR 17438 D. Friedman Clean up debug and performance logging.
|
||||
* 05/08/2015 DR 17310 D. Friedman Prevent reducePoints from generating invalid polygons.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -570,12 +573,27 @@ public class PolygonUtil {
|
|||
|
||||
GeometryFactory gf = new GeometryFactory();
|
||||
points.add(new Coordinate(points.get(0)));
|
||||
truncate(points, 2);
|
||||
Polygon rval = gf.createPolygon(gf.createLinearRing(points
|
||||
.toArray(new Coordinate[points.size()])), null);
|
||||
|
||||
if (!rval.isValid()) {
|
||||
statusHandler.handle(Priority.DEBUG, String.format(
|
||||
"Polygon %s is invalid. Attempting to fix...", rval));
|
||||
String resultMessage = null;
|
||||
try {
|
||||
Polygon p2 = (Polygon) rval.buffer(0.0);
|
||||
rval = gf.createPolygon((LinearRing) p2.getExteriorRing());
|
||||
resultMessage = String.format(" ...fixed. Result: %s", rval);
|
||||
} catch (TopologyException e) {
|
||||
resultMessage = " ...fix failed";
|
||||
} catch (ClassCastException e) {
|
||||
resultMessage = " ...resulted in something other than a polygon";
|
||||
}
|
||||
statusHandler.handle(Priority.DEBUG, resultMessage);
|
||||
}
|
||||
|
||||
if (rval.isValid() == false) {
|
||||
System.out.println("Fixing intersected segments");
|
||||
statusHandler.handle(Priority.DEBUG, "Fixing intersected segments");
|
||||
Coordinate[] coords = rval.getCoordinates();
|
||||
adjustVertex(coords);
|
||||
PolygonUtil.round(coords, 2);
|
||||
|
@ -841,6 +859,7 @@ public class PolygonUtil {
|
|||
int npts = pts.length;
|
||||
double xavg = 0, yavg = 0;
|
||||
int[] yesList = new int[npts];
|
||||
boolean[] excludeList = new boolean[npts];
|
||||
int nyes = 0;
|
||||
int k, k1, k2, kn, y, simple;
|
||||
double bigDis, maxDis, dis, dx, dy, dx0, dy0, bas;
|
||||
|
@ -908,7 +927,9 @@ public class PolygonUtil {
|
|||
}
|
||||
if (k == k2) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (excludeList[k])
|
||||
continue;
|
||||
dx = pts[k].x - pts[k1].x;
|
||||
dy = pts[k].y - pts[k1].y;
|
||||
dis = dx * dx0 + dy * dy0;
|
||||
|
@ -916,7 +937,8 @@ public class PolygonUtil {
|
|||
dis = -dis;
|
||||
} else {
|
||||
dis -= bas;
|
||||
}
|
||||
double newMaxDis = maxDis;
|
||||
int newSimple = simple;
|
||||
if (dis <= 0) {
|
||||
if (simple == 0) {
|
||||
continue;
|
||||
|
@ -924,19 +946,31 @@ public class PolygonUtil {
|
|||
dis = dx * dy0 - dy * dx0;
|
||||
if (dis < 0) {
|
||||
dis = -dis;
|
||||
}
|
||||
} else if (simple != 0) {
|
||||
maxDis = simple = 0;
|
||||
}
|
||||
if (dis < maxDis) {
|
||||
} else if (simple != 0)
|
||||
newMaxDis = newSimple = 0;
|
||||
if (dis < newMaxDis) {
|
||||
maxDis = newMaxDis;
|
||||
continue;
|
||||
}
|
||||
if (! checkReducePointsValid(pts, yesList, nyes, k)) {
|
||||
excludeList[k] = true;
|
||||
continue;
|
||||
}
|
||||
simple = newSimple;
|
||||
maxDis = dis;
|
||||
kn = k;
|
||||
}
|
||||
k1 = k2;
|
||||
}
|
||||
|
||||
Arrays.fill(excludeList, false);
|
||||
if (kn < 0) {
|
||||
statusHandler.debug(
|
||||
String.format("reducePoints(..., %d): Unable to find a valid point\npoints: %s",
|
||||
maxNpts, points));
|
||||
break;
|
||||
}
|
||||
|
||||
if (simple != 0 && nyes > 2) {
|
||||
if (maxDis * 40 < bigDis) {
|
||||
break;
|
||||
|
@ -963,6 +997,24 @@ public class PolygonUtil {
|
|||
points.addAll(Arrays.asList(Arrays.copyOf(pts, npts)));
|
||||
}
|
||||
|
||||
private boolean checkReducePointsValid(Coordinate[] pts, int[] yesList, int nyes, int k) {
|
||||
Coordinate[] verts = new Coordinate[nyes + 2];
|
||||
int vi = 0;
|
||||
for (int i = 0; i < nyes; ++i) {
|
||||
if (k >= 0 && k < yesList[i]) {
|
||||
verts[vi++] = pts[k];
|
||||
k = -1;
|
||||
}
|
||||
verts[vi++] = pts[yesList[i]];
|
||||
}
|
||||
if (k >= 0) {
|
||||
verts[vi++] = pts[k];
|
||||
}
|
||||
verts[verts.length - 1] = new Coordinate(verts[0]);
|
||||
GeometryFactory gf = new GeometryFactory();
|
||||
return gf.createPolygon(verts).isValid();
|
||||
}
|
||||
|
||||
/**
|
||||
* A1 ported point reduction method 2
|
||||
*
|
||||
|
@ -1786,9 +1838,8 @@ public class PolygonUtil {
|
|||
if (intersectCoord != null) {
|
||||
index1 = calcShortestDistance(intersectCoord, ls1);
|
||||
index2 = calcShortestDistance(intersectCoord, ls2);
|
||||
Coordinate c = new Coordinate(
|
||||
0.5 * (coord[index1].x + coord[2 + index2].x),
|
||||
0.5 * (coord[index1].y + coord[2 + index2].y));
|
||||
Coordinate c = new Coordinate(0.5*(coord[index[index1]].x + coord[index[2+index2]].x),
|
||||
0.5*(coord[index[index1]].y + coord[index[2+index2]].y));
|
||||
PolygonUtil.round(c, 2);
|
||||
coord[index[index1]] = new Coordinate(c);
|
||||
coord[index[2 + index2]] = new Coordinate(c);
|
||||
|
|
|
@ -51,7 +51,9 @@ 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.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
|
@ -86,6 +88,7 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* extension of a watch to counties which are of same/different fe_area.
|
||||
* Sep 25, 2014 ASM #16783 D. Friedman Do not use VTEC action to determine Watch uniqueness.
|
||||
* Apr 28, 2015 RODO #4027 randerso Expunged Calendar from ActiveTableRecord
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
|
@ -96,6 +99,9 @@ public class WatchUtil {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(WatchUtil.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
private static final UnitConverter milesToKilometer = NonSI.MILE
|
||||
.getConverterTo(SI.KILOMETER);
|
||||
|
||||
|
@ -230,8 +236,8 @@ public class WatchUtil {
|
|||
Polygon watchArea = (Polygon) warningPolygon
|
||||
.buffer(milesToKilometer.convert(watchAreaBuffer)
|
||||
/ KmToDegrees);
|
||||
System.out.println("create watch area buffer time: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Create watch area buffer time",
|
||||
System.currentTimeMillis() - t0);
|
||||
HashSet<String> validUgcZones = new HashSet<String>(
|
||||
warngenLayer.getUgcsForWatches(watchArea,
|
||||
GeoFeatureType.COUNTY));
|
||||
|
|
|
@ -64,7 +64,9 @@ import com.raytheon.uf.common.geospatial.ISpatialQuery.SearchMode;
|
|||
import com.raytheon.uf.common.geospatial.MapUtil;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryFactory;
|
||||
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
|
@ -118,6 +120,7 @@ import com.vividsolutions.jts.geom.Point;
|
|||
* Dec 4, 2013 2604 jsanchez Refactored GisUtil.
|
||||
* Apr 29, 2014 3033 jsanchez Updated method to retrieve files in localization.
|
||||
* Jun 17, 2014 DR 17390 Qinglu Lin Updated getClosestPoints().
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -127,6 +130,9 @@ public class Wx {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(Wx.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
private long wwaStopTime;
|
||||
|
||||
private long wwaStartTime;
|
||||
|
@ -531,8 +537,8 @@ public class Wx {
|
|||
pathcasts.remove(pathcasts.size() - 1);
|
||||
}
|
||||
|
||||
System.out.println("Time to get pathcast = "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
perfLog.logDuration("Get pathcast",
|
||||
System.currentTimeMillis() - t0);
|
||||
return pathcasts.toArray(new PathCast[pathcasts.size()]);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
|
@ -608,8 +614,8 @@ public class Wx {
|
|||
+ variable + "'", t);
|
||||
}
|
||||
}
|
||||
System.out.println("Time to get closestPoints = "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
perfLog.logDuration("Get closestPoints",
|
||||
System.currentTimeMillis() - t0);
|
||||
return pointsMap;
|
||||
}
|
||||
|
||||
|
@ -729,8 +735,8 @@ public class Wx {
|
|||
localizedSite));
|
||||
}
|
||||
long t1 = System.currentTimeMillis();
|
||||
System.out.println("getClosestPoint.dbQuery took " + (t1 - t0)
|
||||
+ " for point source " + pointConfig.getPointSource());
|
||||
perfLog.logDuration("getClosestPoints.dbQuery for point source "
|
||||
+ pointConfig.getPointSource(), t1 - t0);
|
||||
}
|
||||
|
||||
// Convert searchArea to a local projection
|
||||
|
|
|
@ -67,7 +67,9 @@ import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
|||
import com.raytheon.uf.common.dataplugin.warning.config.BulletActionGroup;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.DamInfoBullet;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.WarngenConfiguration;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.SimulatedTime;
|
||||
|
@ -159,6 +161,11 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* Jul 01, 2014 DR 17450 D. Friedman Use list of templates from backup site.
|
||||
* Jul 21, 2014 3419 jsanchez Created a hidden button to make recreating polygons easier.
|
||||
* Feb 26, 2015 3353 rjpeter Fixed NPE on clear.
|
||||
* Apr 27, 2015 DR 17359 Qinglu Lin Updated changeTemplate(). The approach for solving slowness issue while switching from
|
||||
* one marine product to another is to skip computing hatching area. The hatching area might
|
||||
* not be as expected if percentage/area is different between the two products. But the
|
||||
* chance for that to occur is trivial.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -169,6 +176,9 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(WarngenDialog.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
/*
|
||||
* This flag allows a hidden button to appear to help recreating warning
|
||||
* polygons that had issues in the feed.
|
||||
|
@ -1111,6 +1121,7 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
* Action for OK button
|
||||
*/
|
||||
private void okPressed() {
|
||||
final long t0okPressed = System.currentTimeMillis();
|
||||
if (checkDamSelection() == false) {
|
||||
return;
|
||||
} else if (warngenLayer.getWarningArea() == null) {
|
||||
|
@ -1165,9 +1176,9 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
@Override
|
||||
public void run(IProgressMonitor monitor)
|
||||
throws InvocationTargetException, InterruptedException {
|
||||
long t0 = System.currentTimeMillis();
|
||||
try {
|
||||
monitor.beginTask("Generating product", 1);
|
||||
long t0 = System.currentTimeMillis();
|
||||
String result = TemplateRunner.runTemplate(
|
||||
warngenLayer, startTime.getTime(),
|
||||
endTime.getTime(), selectedBullets,
|
||||
|
@ -1178,8 +1189,6 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
while (m.find()) {
|
||||
totalSegments++;
|
||||
}
|
||||
System.out.println("Time to run template = "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(
|
||||
Priority.PROBLEM,
|
||||
|
@ -1187,19 +1196,23 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
+ e.getLocalizedMessage(), e);
|
||||
} finally {
|
||||
monitor.done();
|
||||
perfLog.logDuration("Run template",
|
||||
System.currentTimeMillis() - t0);
|
||||
perfLog.logDuration("click to finish template",
|
||||
System.currentTimeMillis() - t0okPressed);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
System.out.println(WarningSender.getCurTimeString()
|
||||
+ ": Creating Transmitting Warning Job");
|
||||
statusHandler.handle(Priority.DEBUG,
|
||||
"Creating Transmitting Warning Job");
|
||||
|
||||
new Job("Transmitting Warning") {
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
System.out.println(WarningSender.getCurTimeString()
|
||||
+ ": Transmitting Warning Job Running");
|
||||
statusHandler.debug(
|
||||
": Transmitting Warning Job Running");
|
||||
|
||||
// Launch the text editor display as the warngen editor
|
||||
// dialog using the result aka the warngen text product.
|
||||
|
@ -1218,6 +1231,8 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
"Error sending warning: "
|
||||
+ e.getLocalizedMessage(), e);
|
||||
}
|
||||
perfLog.logDuration("click to finish sending",
|
||||
System.currentTimeMillis() - t0okPressed);
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
}.schedule();
|
||||
|
@ -1657,14 +1672,17 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
.equalsIgnoreCase(lastAreaSource);
|
||||
boolean snapHatchedAreaToPolygon = isDifferentAreaSources;
|
||||
boolean preservedSelection = !isDifferentAreaSources;
|
||||
// If template has a different hatched area source from the previous
|
||||
// template, then the warned area would be based on the polygon and not
|
||||
// preserved.
|
||||
try {
|
||||
warngenLayer.updateWarnedAreas(snapHatchedAreaToPolygon,
|
||||
preservedSelection);
|
||||
} catch (VizException e1) {
|
||||
statusHandler.handle(Priority.PROBLEM, "WarnGen Error", e1);
|
||||
if (isDifferentAreaSources || !warngenLayer.getConfiguration()
|
||||
.getHatchedAreaSource().getAreaSource().toLowerCase().equals("marinezones")) {
|
||||
// If template has a different hatched area source from the previous
|
||||
// template, then the warned area would be based on the polygon and not
|
||||
// preserved.
|
||||
try {
|
||||
warngenLayer.updateWarnedAreas(snapHatchedAreaToPolygon,
|
||||
preservedSelection);
|
||||
} catch (VizException e1) {
|
||||
statusHandler.handle(Priority.PROBLEM, "WarnGen Error", e1);
|
||||
}
|
||||
}
|
||||
// Properly sets the "Create Text" button.
|
||||
setInstructions();
|
||||
|
|
|
@ -81,7 +81,9 @@ import com.raytheon.uf.common.jms.notification.INotificationObserver;
|
|||
import com.raytheon.uf.common.jms.notification.NotificationException;
|
||||
import com.raytheon.uf.common.jms.notification.NotificationMessage;
|
||||
import com.raytheon.uf.common.site.SiteMap;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.DataTime;
|
||||
|
@ -236,6 +238,8 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* 02/09/2015 3954 dlovely Only draw "W" if the county is displayed.
|
||||
* 02/25/2014 3353 rjpeter Fix synchronized use case, updated to not create dialog before init is finished.
|
||||
* 04/24/2015 ASM #17394 D. Friedman Fix geometries that become invalid in local coordinate space.
|
||||
* 05/07/2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* 05/08/2015 ASM #17310 D. Friedman Log input polygon when output of AreaHatcher is invalid.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -246,6 +250,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(WarngenLayer.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
String uniqueFip = null;
|
||||
|
||||
String backupOfficeShort = null;
|
||||
|
@ -490,9 +497,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
if ((warningArea != null) && (warningPolygon != null)) {
|
||||
long t0 = System.currentTimeMillis();
|
||||
Polygon inputWarningPolygon = warningPolygon;
|
||||
Polygon outputHatchedArea = null;
|
||||
Geometry outputHatchedWarningArea = null;
|
||||
String adjustmentMessage = null;
|
||||
try {
|
||||
warningPolygon = PolygonUtil
|
||||
.removeDuplicateCoordinate(warningPolygon);
|
||||
|
@ -512,11 +521,12 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
GeometryFactory gf = new GeometryFactory();
|
||||
LinearRing lr = gf.createLinearRing(coords);
|
||||
outputHatchedArea = gf.createPolygon(lr, null);
|
||||
long tadj0 = System.currentTimeMillis();
|
||||
int adjustPolygon_counter = 0;
|
||||
while (!outputHatchedArea.isValid()
|
||||
&& (adjustPolygon_counter < 1)) {
|
||||
System.out.println("Calling adjustPolygon #"
|
||||
+ adjustPolygon_counter);
|
||||
adjustmentMessage = "adjustPolygon #"
|
||||
+ adjustPolygon_counter;
|
||||
PolygonUtil.adjustPolygon(coords);
|
||||
PolygonUtil.round(coords, 2);
|
||||
coords = PolygonUtil
|
||||
|
@ -529,16 +539,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
int counter = 0;
|
||||
if (!outputHatchedArea.isValid() && (counter < 2)) {
|
||||
System.out
|
||||
.println("calling adjustVertex & alterVertexes: loop #"
|
||||
+ counter);
|
||||
int adjustVertex_counter = 0;
|
||||
lr = gf.createLinearRing(coords);
|
||||
outputHatchedArea = gf.createPolygon(lr, null);
|
||||
while (!outputHatchedArea.isValid()
|
||||
&& (adjustVertex_counter < 5)) {
|
||||
System.out.println(" Calling adjustVertex #"
|
||||
+ adjustVertex_counter);
|
||||
coords = PolygonUtil.adjustVertex(coords);
|
||||
coords = PolygonUtil
|
||||
.removeDuplicateCoordinate(coords);
|
||||
|
@ -549,12 +554,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
adjustVertex_counter += 1;
|
||||
}
|
||||
int inner_counter = 0;
|
||||
System.out.println("");
|
||||
while (!outputHatchedArea.isValid()
|
||||
&& (inner_counter < 5)) {
|
||||
System.out
|
||||
.println(" Calling alterVertexes #"
|
||||
+ inner_counter);
|
||||
coords = PolygonUtil.alterVertexes(coords);
|
||||
coords = PolygonUtil
|
||||
.removeDuplicateCoordinate(coords);
|
||||
|
@ -564,7 +565,15 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
outputHatchedArea = gf.createPolygon(lr, null);
|
||||
inner_counter += 1;
|
||||
}
|
||||
|
||||
counter += 1;
|
||||
adjustmentMessage = String.format(
|
||||
"adjustVertex & alterVertexes: %d, %d",
|
||||
adjustVertex_counter, inner_counter);
|
||||
}
|
||||
if (adjustmentMessage != null) {
|
||||
perfLog.logDuration("Vertex adjustments", System.currentTimeMillis() - tadj0);
|
||||
statusHandler.debug(adjustmentMessage);
|
||||
}
|
||||
for (Coordinate c : outputHatchedArea.getCoordinates()) {
|
||||
if (Double.isNaN(c.x) || Double.isNaN(c.y)) {
|
||||
|
@ -575,6 +584,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
outputHatchedWarningArea = createWarnedArea(
|
||||
latLonToLocal(outputHatchedArea),
|
||||
latLonToLocal(warningArea));
|
||||
if (! outputHatchedArea.isValid()) {
|
||||
statusHandler.debug(String.format("Input %s redrawn to invalid %s",
|
||||
inputWarningPolygon, outputHatchedArea));
|
||||
}
|
||||
}
|
||||
this.hatchedArea = outputHatchedArea;
|
||||
this.hatchedWarningArea = outputHatchedWarningArea;
|
||||
|
@ -587,9 +600,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
* priority in getHatchedAreas().
|
||||
*/
|
||||
statusHandler.handle(Priority.DEBUG, String.format(
|
||||
"Error redrawing polygon: %s\n Input: %s\n",
|
||||
e.getLocalizedMessage(), inputWarningPolygon), e);
|
||||
"Error redrawing polygon: %s\n Input: %s\nAdjustments: %s\n",
|
||||
e.getLocalizedMessage(), inputWarningPolygon, adjustmentMessage), e);
|
||||
}
|
||||
perfLog.logDuration("AreaHatcher total", System.currentTimeMillis() - t0);
|
||||
}
|
||||
|
||||
return Status.OK_STATUS;
|
||||
|
@ -610,6 +624,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
public synchronized Geometry[] getHatchedAreas() {
|
||||
long t0 = System.currentTimeMillis();
|
||||
while (getState() != Job.NONE) {
|
||||
try {
|
||||
join();
|
||||
|
@ -617,6 +632,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
return new Geometry[] { null, null };
|
||||
}
|
||||
}
|
||||
long t1 = System.currentTimeMillis();
|
||||
if (t1 - t0 > 250) {
|
||||
perfLog.logDuration("Wait for AreaHatcher", t1 - t0);
|
||||
}
|
||||
if (getResult() == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -1259,8 +1278,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
this.configuration = config;
|
||||
}// end synchronize
|
||||
|
||||
System.out.println("Total time to init warngen config = "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
perfLog.logDuration("Init warngen config",
|
||||
System.currentTimeMillis() - t0);
|
||||
}
|
||||
|
||||
private void initializeGeomUpdateObserver() {
|
||||
|
@ -1459,8 +1478,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
|
||||
gData.localGridGeometry = new GeneralGridGeometry(range, ge);
|
||||
|
||||
System.out.println("Time to lookup geospatial data "
|
||||
+ (System.currentTimeMillis() - tq0));
|
||||
perfLog.logDuration("Lookup geospatial data",
|
||||
System.currentTimeMillis() - tq0);
|
||||
siteMap.put(currKey, gData);
|
||||
|
||||
GeospatialData[] timezones = GeospatialFactory.getTimezones();
|
||||
|
@ -1957,8 +1976,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
: null);
|
||||
updateWarnedAreaState(newWarningArea, snapHatchedAreaToPolygon);
|
||||
|
||||
System.out.println("determining hatchedArea took "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Determining hatchedArea",
|
||||
System.currentTimeMillis() - t0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2664,8 +2683,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
return true;
|
||||
}
|
||||
|
||||
long t0 = System.currentTimeMillis();
|
||||
try {
|
||||
long t0 = System.currentTimeMillis();
|
||||
Polygon hatched = state.getWarningPolygon();
|
||||
Geometry hatchedArea = state.getWarningArea();
|
||||
if (areaHatcher != null) {
|
||||
|
@ -2713,13 +2732,13 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
issueRefresh();
|
||||
result = false;
|
||||
}
|
||||
System.out.println("Time to createWarningPolygon: "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error hatching polygon", e);
|
||||
result = false;
|
||||
}
|
||||
perfLog.logDuration("redrawBoxFromHatched",
|
||||
System.currentTimeMillis() - t0);
|
||||
issueRefresh();
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -62,7 +62,9 @@ import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel
|
|||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.site.SiteMap;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.DataTime;
|
||||
|
@ -145,6 +147,7 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* Aug 28, 2014 ASM #15551 Qinglu Lin Replaced 1200 PM/1200 AM by NOON/MIDNIGHT, removed days in
|
||||
* 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.
|
||||
* </pre>
|
||||
*
|
||||
* @author njensen
|
||||
|
@ -155,6 +158,9 @@ public class TemplateRunner {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(TemplateRunner.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
private static final String LOGIN_NAME_KEY = "LOGNAME";
|
||||
|
||||
private static final Pattern BBB_PATTERN = Pattern
|
||||
|
@ -295,15 +301,15 @@ public class TemplateRunner {
|
|||
t0 = System.currentTimeMillis();
|
||||
areas = area.findAffectedAreas(config, warnPolygon, warningArea,
|
||||
threeLetterSiteId);
|
||||
System.out.println("Time to get areas = "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("runTemplate get areas",
|
||||
System.currentTimeMillis() - t0);
|
||||
context.put(config.getHatchedAreaSource().getVariable(), areas);
|
||||
|
||||
t0 = System.currentTimeMillis();
|
||||
intersectAreas = area.findInsectingAreas(config, warnPolygon,
|
||||
warningArea, threeLetterSiteId, warngenLayer);
|
||||
System.out.println("Time to get intersecting areas = "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("runTemplate get intersecting areas",
|
||||
System.currentTimeMillis() - t0);
|
||||
for (String ia : intersectAreas.keySet()) {
|
||||
context.put(ia, intersectAreas.get(ia));
|
||||
}
|
||||
|
@ -380,9 +386,8 @@ public class TemplateRunner {
|
|||
"Either timezoneGeom or/and warningArea is null. "
|
||||
+ "Timezone cannot be determined.");
|
||||
}
|
||||
System.out
|
||||
.println("Time to do size computation = "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("runTemplate size computation",
|
||||
System.currentTimeMillis() - t0);
|
||||
if (totalSize > minSize) {
|
||||
timeZones.add(oneLetterTZ[i]);
|
||||
}
|
||||
|
@ -544,8 +549,8 @@ public class TemplateRunner {
|
|||
context.put("eventLocation", coords);
|
||||
t0 = System.currentTimeMillis();
|
||||
ToolsDataManager.getInstance().setStormTrackData(std);
|
||||
System.out.println("save storm track data: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Save storm track data",
|
||||
System.currentTimeMillis() - t0);
|
||||
} else {
|
||||
// Retrieve the old Warning
|
||||
// Example: s[0-5] = T.CON-KLWX.SV.W.0123
|
||||
|
@ -601,8 +606,8 @@ public class TemplateRunner {
|
|||
std.setMotionSpeed(oldWarn.getMotspd());
|
||||
t0 = System.currentTimeMillis();
|
||||
ToolsDataManager.getInstance().setStormTrackData(std);
|
||||
System.out.println("save storm track data: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Save storm track data",
|
||||
System.currentTimeMillis() - t0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -859,8 +864,7 @@ public class TemplateRunner {
|
|||
WatchUtil watchUtil = new WatchUtil(warngenLayer);
|
||||
List<Watch> watches = watchUtil.getWatches(config, warnPolygon,
|
||||
simulatedTime);
|
||||
System.out.println("getWatches time: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("getWatches", System.currentTimeMillis() - t0);
|
||||
if (watches != null && watches.isEmpty() == false) {
|
||||
context.put("watches", watches);
|
||||
}
|
||||
|
@ -875,8 +879,7 @@ public class TemplateRunner {
|
|||
long tz0 = System.currentTimeMillis();
|
||||
String script = createScript(warngenLayer.getTemplateName() + ".vm",
|
||||
context);
|
||||
System.out.println("velocity time: "
|
||||
+ (System.currentTimeMillis() - tz0));
|
||||
perfLog.logDuration("velocity", System.currentTimeMillis() - tz0);
|
||||
|
||||
String text = script.toString();
|
||||
WarningTextHandler handler = WarningTextHandlerFactory.getHandler(
|
||||
|
|
|
@ -23,6 +23,8 @@ import java.util.regex.Matcher;
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.viz.warngen.gis.AffectedAreas;
|
||||
|
||||
/**
|
||||
|
@ -36,6 +38,7 @@ import com.raytheon.viz.warngen.gis.AffectedAreas;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Sep 24, 2012 15322 jsanchez Initial creation
|
||||
* Jan 8, 2013 15664 Qinglu Lin Appended WarningAction to handle()'s parameter list, etc.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -43,6 +46,8 @@ import com.raytheon.viz.warngen.gis.AffectedAreas;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class WarningTextHandler {
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
private AbstractLockingBehavior lockingBehavior;
|
||||
|
||||
|
@ -69,8 +74,8 @@ public class WarningTextHandler {
|
|||
|
||||
text = clean(text);
|
||||
|
||||
System.out.println("Time to handle the text: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
perfLog.logDuration("Handle the text",
|
||||
System.currentTimeMillis() - t0);
|
||||
return text;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,9 @@ 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.site.SiteMap;
|
||||
import com.raytheon.uf.common.status.IPerformanceStatusHandler;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.PerformanceStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.ISimulatedTimeChangeListener;
|
||||
|
@ -78,6 +80,7 @@ import com.vividsolutions.jts.geom.Geometry;
|
|||
* Aug 14, 2013 DR 16483 Qinglu Lin Fixed no option issue in WarnGen dropdown menu after
|
||||
* issuance of an CANCON and restart of CAVE.
|
||||
* Oct 16, 2013 2439 rferrel Restrict retrieval of warnings to prevent getting future warnings.
|
||||
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -88,6 +91,9 @@ public class CurrentWarnings {
|
|||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(CurrentWarnings.class);
|
||||
|
||||
private static final IPerformanceStatusHandler perfLog = PerformanceStatus
|
||||
.getHandler("WG:");
|
||||
|
||||
public static interface IWarningsArrivedListener {
|
||||
public void warningsArrived();
|
||||
}
|
||||
|
@ -244,8 +250,8 @@ public class CurrentWarnings {
|
|||
|
||||
long t0 = System.currentTimeMillis();
|
||||
List<AbstractWarningRecord> warnings = requestRecords(constraints);
|
||||
System.out.println("Time to request CurrentWarnings records: "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
perfLog.logDuration("Request CurrentWarnings records",
|
||||
System.currentTimeMillis() - t0);
|
||||
processRecords(warnings);
|
||||
}
|
||||
|
||||
|
@ -542,8 +548,8 @@ public class CurrentWarnings {
|
|||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
}
|
||||
System.out.println("Time to prepare " + records.size()
|
||||
+ " records = " + (System.currentTimeMillis() - t0) + "ms");
|
||||
perfLog.logDuration("Prepare " + records.size() + " records",
|
||||
System.currentTimeMillis() - t0);
|
||||
}
|
||||
|
||||
return prepared;
|
||||
|
|
|
@ -68,6 +68,7 @@ import com.vividsolutions.jts.geom.Geometry;
|
|||
* Mar 04, 2014 2832 njensen Moved disposeInternal() to abstract class
|
||||
* Apr 07, 2014 2959 njensen Correct handling of color change
|
||||
* Apr 14, 2014 DR 17257 D. Friedman Redo time matching on per-minute refresh.
|
||||
* Apr 28, 2015 ASM #15008 D. Friedman Create polygon for EXTs even if original product is not found.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -268,9 +269,11 @@ public class WarningsResource extends AbstractWWAResource {
|
|||
}
|
||||
}
|
||||
}
|
||||
// create the new polygon for the CON outside of the above
|
||||
// for loop
|
||||
if (createShape != null) {
|
||||
/* Create a new polygon for the follow-up to the original
|
||||
* product found in the above loop. Also create a polygon
|
||||
* for EXT actions even if the original was not found.
|
||||
*/
|
||||
if (createShape != null || act == WarningAction.EXT) {
|
||||
initShape(target, warnrec);
|
||||
}
|
||||
} else {
|
||||
|
|
76
deltaScripts/14.4.1/DR4462/updateStdTextProducts.sh
Executable file
76
deltaScripts/14.4.1/DR4462/updateStdTextProducts.sh
Executable file
|
@ -0,0 +1,76 @@
|
|||
#!/bin/bash
|
||||
##
|
||||
# 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.
|
||||
##
|
||||
|
||||
# Issue: #4462 Update script to update stdtextprodcts entries with blank site values.
|
||||
#
|
||||
# This script will modify table stdtextproducts in the fxatext.public schema.
|
||||
#
|
||||
PSQL="/awips2/psql/bin/psql"
|
||||
|
||||
if [ ${#1} != 4 ] ; then
|
||||
echo "ERROR: First argument must be local site to use in the stdtextproducts table. Example: KOAX"
|
||||
exit 1
|
||||
else
|
||||
siteId=${1}
|
||||
siteLtr=${siteId:0:1}
|
||||
fi
|
||||
|
||||
if [ ! -f ${PSQL} ];
|
||||
then
|
||||
echo "ERROR: The PSQL executable does not exist - ${PSQL}."
|
||||
echo "FATAL: Update Failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
UPDATE_BY_XXX="update public.stdtextproducts set site = '${siteLtr}' || xxxid where site='' and xxxid not like '% ';"
|
||||
UPDATE_LOC_SITE="update public.stdtextproducts set site='${siteId}' where site='' and xxxid like '% ';"
|
||||
|
||||
function updateXXXentries
|
||||
{
|
||||
echo "INFO: Updating stdtextproducts using xxxid"
|
||||
${PSQL} -U awips -d fxatext -a -c "${UPDATE_BY_XXX}"
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
echo "FATAL: Update by xxxid Failed!"
|
||||
exit 1
|
||||
fi
|
||||
echo "INFO: Completed updating stdtextproducts using xxxid."
|
||||
}
|
||||
|
||||
function updateSITEentries
|
||||
{
|
||||
echo "INFO: Updating stdtextproduct table's site using local site."
|
||||
${PSQL} -U awips -d fxatext -a -c "${UPDATE_LOC_SITE}"
|
||||
if [ $? -ne 0 ];
|
||||
then
|
||||
echo "FATAL: unable to update stdtextproducts using local site."
|
||||
exit 1
|
||||
fi
|
||||
echo "INFO: Finish updating stdtextproducts using local site."
|
||||
}
|
||||
|
||||
echo "INFO: start update stdtextproducts"
|
||||
updateXXXentries
|
||||
updateSITEentries
|
||||
echo "INFO: finish update stdtextproducts"
|
||||
exit 0
|
||||
|
||||
|
|
@ -22,8 +22,8 @@ package com.raytheon.edex.plugin.gfe.isc;
|
|||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
@ -31,11 +31,20 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
|
||||
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
|
||||
import com.raytheon.edex.plugin.gfe.server.IFPServer;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.request.IscDataRecRequest;
|
||||
import com.raytheon.uf.common.python.concurrent.IPythonJobListener;
|
||||
import com.raytheon.uf.common.python.concurrent.PythonJobCoordinator;
|
||||
|
@ -44,7 +53,6 @@ import com.raytheon.uf.common.status.UFStatus;
|
|||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.uf.common.util.file.FilenameFilters;
|
||||
import com.raytheon.uf.edex.site.SiteAwareRegistry;
|
||||
|
||||
/**
|
||||
* ISC data receive service. Takes incoming request and executes iscDataRec
|
||||
|
@ -60,6 +68,7 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
|
|||
* Mar 12, 2013 #1759 dgilling Re-implement using IscScript.
|
||||
* Mar 14, 2013 #1794 djohnson Consolidate common FilenameFilter implementations.
|
||||
* Dec 10, 2014 #4953 randerso Properly handle single file reception
|
||||
* May 06, 2015 #4383 dgilling Properly XML parse incoming XML file.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -68,9 +77,12 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
|
|||
*/
|
||||
|
||||
public class IscReceiveSrv {
|
||||
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(IscReceiveSrv.class);
|
||||
|
||||
private static final String ISC_REQUEST = "iscrequest";
|
||||
|
||||
private static final String METHOD_NAME = "main";
|
||||
|
||||
private static final FilenameFilter docFileFilter = FilenameFilters
|
||||
|
@ -113,6 +125,9 @@ public class IscReceiveSrv {
|
|||
} catch (GfeConfigurationException e) {
|
||||
statusHandler.error("Error getting GFE configuration", e);
|
||||
return;
|
||||
} catch (SAXException | ParserConfigurationException e) {
|
||||
statusHandler.error("Error parsing received XML file.", e);
|
||||
return;
|
||||
}
|
||||
|
||||
for (Entry<String, String[]> siteArgs : siteArgMap.entrySet()) {
|
||||
|
@ -132,7 +147,9 @@ public class IscReceiveSrv {
|
|||
}
|
||||
|
||||
private Map<String, String[]> prepareIscDataRec(String[] args)
|
||||
throws IOException, InterruptedException, GfeConfigurationException {
|
||||
throws IOException, InterruptedException,
|
||||
GfeConfigurationException, SAXException,
|
||||
ParserConfigurationException {
|
||||
Map<String, String[]> siteMap = new HashMap<String, String[]>();
|
||||
|
||||
String[] incomingFiles = args[2].split(",");
|
||||
|
@ -145,26 +162,21 @@ public class IscReceiveSrv {
|
|||
xmlFileName = incomingFiles[1];
|
||||
}
|
||||
|
||||
// TODO properly decode the xml
|
||||
final File incomingXMLFile = new File(xmlFileName);
|
||||
String fileContents = FileUtil.file2String(incomingXMLFile);
|
||||
Pattern siteTagRegEx = Pattern.compile("<site>(.*?)</site>");
|
||||
Matcher matcher = siteTagRegEx.matcher(fileContents);
|
||||
List<String> siteList = new ArrayList<String>();
|
||||
while (matcher.find()) {
|
||||
siteList.add(matcher.group(1));
|
||||
}
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
Document doc = db.parse(incomingXMLFile);
|
||||
doc.getDocumentElement().normalize();
|
||||
|
||||
List<String> activeSites = Arrays.asList(SiteAwareRegistry
|
||||
.getInstance().getActiveSites());
|
||||
if (fileContents.contains("<iscrequest>")) {
|
||||
// Need to copy the request file if more than 1 site is active
|
||||
// on this EDEX server. Otherwise, the file will be deleted
|
||||
// after the first site has processed the request file
|
||||
siteList.remove(siteList.size() - 1);
|
||||
Collection<String> siteList = getXMLDestinations(doc);
|
||||
Set<String> activeSites = IFPServer.getActiveSites();
|
||||
|
||||
for (int i = 0; i < siteList.size(); i++) {
|
||||
final String siteId = siteList.get(i);
|
||||
if (ISC_REQUEST.equals(doc.getDocumentElement().getNodeName())) {
|
||||
/*
|
||||
* This case is for processing an ISC Request/Reply message
|
||||
* requesting our site's grids.
|
||||
*/
|
||||
for (String siteId : siteList) {
|
||||
if (activeSites.contains(siteId)) {
|
||||
if (IFPServerConfigManager.getServerConfig(siteId)
|
||||
.requestISC()) {
|
||||
|
@ -180,11 +192,8 @@ public class IscReceiveSrv {
|
|||
}
|
||||
incomingXMLFile.delete();
|
||||
} else {
|
||||
// Remove the source site
|
||||
siteList.remove(0);
|
||||
Set<String> siteSet = new HashSet<String>(siteList);
|
||||
try {
|
||||
for (String site : siteSet) {
|
||||
for (String site : siteList) {
|
||||
if (activeSites.contains(site)
|
||||
&& IFPServerConfigManager.getServerConfig(site)
|
||||
.requestISC()) {
|
||||
|
@ -272,4 +281,46 @@ public class IscReceiveSrv {
|
|||
|
||||
return siteMap;
|
||||
}
|
||||
|
||||
private Collection<String> getXMLDestinations(final Document doc)
|
||||
throws SAXException, IOException, ParserConfigurationException {
|
||||
Collection<String> destinations = new HashSet<>();
|
||||
|
||||
// Expected XML format:
|
||||
// <isc>
|
||||
// <source></source>
|
||||
// <destinations>
|
||||
// <address>
|
||||
// <site>SITE_ID</site>
|
||||
// </address>
|
||||
// </destinations>
|
||||
// </isc>
|
||||
NodeList destNodes = doc.getElementsByTagName("destinations");
|
||||
if (destNodes.getLength() > 0) {
|
||||
Node destNode = destNodes.item(0);
|
||||
|
||||
if (destNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element destElement = (Element) destNode;
|
||||
|
||||
NodeList addrNodes = destElement
|
||||
.getElementsByTagName("address");
|
||||
for (int i = 0; i < addrNodes.getLength(); i++) {
|
||||
Node addrNode = addrNodes.item(i);
|
||||
if (addrNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element addrElement = (Element) addrNode;
|
||||
|
||||
NodeList siteIdNodes = addrElement
|
||||
.getElementsByTagName("site");
|
||||
if (siteIdNodes.getLength() > 0) {
|
||||
Node siteIDNode = siteIdNodes.item(0);
|
||||
String siteID = siteIDNode.getTextContent();
|
||||
destinations.add(siteID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return destinations;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,9 +97,8 @@
|
|||
<alias base="GFS161">gfs161</alias>
|
||||
<alias base="GFS199">gfs161</alias>
|
||||
<alias base="RUC130">ruc130</alias>
|
||||
<alias base="RTMA">rtmaNDFD</alias>
|
||||
<alias base="RTMA25">rtmaNDFD</alias>
|
||||
<alias base="URMA25">urmaNDFD</alias>
|
||||
<alias base="RTMA-Mosaic">rtmaNDFD</alias>
|
||||
<alias base="AK-RTMA">aKrtmaNDFD</alias>
|
||||
<alias base="NamDNG5">NamDNG5</alias>
|
||||
<alias base="GlobalWave">GlobalWave</alias>
|
||||
|
@ -143,8 +142,6 @@
|
|||
<alias base="SREF243">sref243</alias>
|
||||
<alias base="RTGSST">RTGSST235</alias>
|
||||
<alias base="GFSGuide">gfsGuide232</alias>
|
||||
<alias base="RTMA">rtmaNDFD</alias>
|
||||
<alias base="RTMA-Mosaic">rtmaNDFD</alias>
|
||||
<alias base="AK-RTMA">aKrtmaNDFD</alias>
|
||||
<alias base="AK-RTMA3">aKrtmaNDFD</alias>
|
||||
<alias base="HI-RTMA">HIrtmaNDFD</alias>
|
||||
|
|
|
@ -333,6 +333,7 @@
|
|||
<alias base="tp6c6">tp6c6</alias>
|
||||
<alias base="tp6c7">tp6c7</alias>
|
||||
<alias base="tp6c8">tp6c8</alias>
|
||||
<alias base="TCCerranl">tccerranl</alias>
|
||||
<alias base="TP6mean">tpmean6</alias>
|
||||
<alias base="TP6sprd">tpsprd6</alias>
|
||||
<alias base="TP-ECMWF">tpecmwf</alias>
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
# being off
|
||||
# being off
|
||||
# 04/20/2015 #4414 dgilling Add missing NWPSTrkngCG0 weather elements.
|
||||
#
|
||||
# 05/12/2015 #17144 bhunder Added RTMA model
|
||||
########################################################################
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
@ -316,6 +316,8 @@ VisUnc = ("VisUnc", SCALAR, "SM", "Vsby Anl Uncertainty", 10.0, 0.0, 2, NO)
|
|||
PressUnc = ("PressUnc", SCALAR, "Pa", "Press Anl Uncertainty", 110000.0, 0.0, 2, NO)
|
||||
Pressure = ("Pressure", SCALAR, "Pa", "Pressure", 110000.0, 0.0, 2, NO)
|
||||
WGustUnc = ("WGustUnc", SCALAR, "kts", "WGust Anl Uncertainty", 12.0, 0.0, 0, NO)
|
||||
# DR 17144
|
||||
SkyUnc = ("SkyUnc", SCALAR, "%", "Sky Uncertainty", 100.0, 0.0, 0, NO)
|
||||
|
||||
# NamDNG5 parms
|
||||
QPF3 = ("QPF3", SCALAR, "in", "3HR QPF", 3.0, 0.0, 2, YES)
|
||||
|
@ -1307,7 +1309,8 @@ elif SID in CONUS_EAST_SITES:
|
|||
('nwpsCG1', 'nwpsCG1'),
|
||||
('nwpsTrkngCG0', 'nwpsTrkngCG0'),
|
||||
'MOSGuide',
|
||||
'RTMA',
|
||||
##############DR17144
|
||||
('RTMA25', 'RTMA'),
|
||||
'NamDNG5',
|
||||
('TPCWindProb','TPCProb'),
|
||||
('SREF212', 'SREF'),
|
||||
|
@ -1384,7 +1387,8 @@ else: #######DCS3501 WEST_CONUS
|
|||
('nwpsCG1', 'nwpsCG1'),
|
||||
('nwpsTrkngCG0', 'nwpsTrkngCG0'),
|
||||
'MOSGuide',
|
||||
'RTMA',
|
||||
#######DR17144
|
||||
('RTMA25', 'RTMA'),
|
||||
'NamDNG5',
|
||||
('TPCWindProb','TPCProb'),
|
||||
('SREF212', 'SREF'),
|
||||
|
@ -2065,17 +2069,17 @@ TPCTCM_MODEL = [([HiWind], TC3)]
|
|||
|
||||
# RTMA database parameter groupings
|
||||
#if SID in ALASKA_SITES: - not sure if this is right
|
||||
# DCS17288
|
||||
# DCS17288/DR17144
|
||||
if SID in ALASKA_SITES or SID in ["HFO", "SJU"]:
|
||||
RTMAPARMS = [([Temp,Td,RH,Wind,Vis,Pressure,WindGust],TC1),
|
||||
([MinT],MinTTC), ([MaxT],MaxTTC),
|
||||
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
||||
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc],TC1)]
|
||||
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc,SkyUnc],TC1)]
|
||||
else:
|
||||
RTMAPARMS = [([Temp,Td,RH,Wind,QPE,Sky,Vis,Pressure,WindGust],TC1),
|
||||
([MinT],MinTTC), ([MaxT],MaxTTC),
|
||||
([MinRH],MinRHTC), ([MaxRH],MaxRHTC),
|
||||
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc],TC1)]
|
||||
([TUnc,TdUnc,WSpdUnc,WDirUnc,VisUnc,PressUnc,WGustUnc,SkyUnc],TC1)]
|
||||
|
||||
# NamDNG5 database parameter groupings
|
||||
NamDNG5PARMS = [([Temp, Td, RH, Wind, Sky, WindGust, Vis], TC3),
|
||||
|
|
|
@ -200,11 +200,11 @@ def execIscDataRec(MSGID,SUBJECT,FILES):
|
|||
elif SUBJECT == 'GET_ACTIVE_TABLE2':
|
||||
IrtServer.getVTECActiveTable(dataFile, xmlFileBuf)
|
||||
elif SUBJECT in ['ISCGRIDS', 'ISCGRIDS2']:
|
||||
import localConfig
|
||||
import serverConfig
|
||||
|
||||
additionalISCRouting = []
|
||||
if localConfig.AdditionalISCRouting:
|
||||
additionalISCRouting = localConfig.AdditionalISCRouting
|
||||
if serverConfig.AdditionalISCRouting:
|
||||
additionalISCRouting = serverConfig.AdditionalISCRouting
|
||||
putISCGrids(dataFile, siteConfig.GFESUITE_SITEID, srcServer.get('site'), additionalISCRouting)
|
||||
elif SUBJECT == 'ISCREQUEST':
|
||||
IrtServer.serviceISCRequest(dataFile)
|
||||
|
|
|
@ -100,6 +100,21 @@
|
|||
<level>EA</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>tccerranl</short_name>
|
||||
<long_name>Total Cloud Cover error analysis</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ErrorAnalysisCloud</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>EA</levelsDesc>
|
||||
<levels>
|
||||
<level>EA</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>tp</short_name>
|
||||
<long_name>total precipitation</long_name>
|
||||
|
|
|
@ -1065,25 +1065,21 @@ class Forecaster(GridUtilities):
|
|||
LogStream.logEvent(msg)
|
||||
|
||||
try:
|
||||
rval = apply(mthd, tuple(gargs))
|
||||
rval = apply(mthd, tuple(gargs))
|
||||
|
||||
if rval is not None:
|
||||
if type(rval) is not ndarray:
|
||||
if type(rval) is not tuple:
|
||||
jrval = rval
|
||||
rval = rval.__numpy__
|
||||
if len(rval) == 1:
|
||||
if rval[0].dtype != int8:
|
||||
if type(rval) is not ndarray and rval is not None:
|
||||
if type(rval) is not tuple:
|
||||
jrval = rval
|
||||
rval = rval.__numpy__
|
||||
if len(rval) == 1:
|
||||
if rval[0].dtype != int8:
|
||||
# scalar
|
||||
rval = rval[0]
|
||||
else:
|
||||
else:
|
||||
# discrete or weather
|
||||
keys = JUtil.javaObjToPyVal(jrval.getKeyList())
|
||||
rval.append(keys)
|
||||
cache[we] = (rval, time)
|
||||
|
||||
else:
|
||||
cache[we] = (None, time)
|
||||
cache[we] = (rval, time)
|
||||
|
||||
if rval is not None and cache['mtime'][0] is not None and doStore:
|
||||
parm = self.__getNewWE(we)
|
||||
|
|
|
@ -52,6 +52,12 @@ class RTMAForecaster(Forecaster):
|
|||
grid = tcc_EA
|
||||
return clip(grid, 0, 100)
|
||||
##--------------------------------------------------------------------------
|
||||
## Sky Analysis Uncertainty
|
||||
##--------------------------------------------------------------------------
|
||||
def calcSkyUnc(self, tccerranl_EA):
|
||||
grid = tccerranl_EA
|
||||
return clip(grid, 0, 100)
|
||||
##--------------------------------------------------------------------------
|
||||
## T - change K to F
|
||||
##--------------------------------------------------------------------------
|
||||
def calcT(self, t_FHAG2):
|
||||
|
|
|
@ -17,6 +17,14 @@
|
|||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# May 01, 2015 17421 ryu Changed analysis methods for StormTotalSnow
|
||||
#
|
||||
##
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Description: This product creates a ZFP-type series of text phrases
|
||||
# for consecutive time periods for a list of edit areas. It can be
|
||||
|
@ -475,7 +483,7 @@ class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis):
|
|||
("PoP", self._PoP_analysisMethod("Period_1"), [3]),
|
||||
("PoP", self.binnedPercent, [3]),
|
||||
("SnowAmt", self.accumMinMax),
|
||||
("StormTotalSnow", self.accumMinMax),
|
||||
("StormTotalSnow", self.minMax),
|
||||
("IceAccum", self.accumMinMax),
|
||||
("SnowLevel", self.avg),
|
||||
("Wind", self.vectorMedianRange, [6]),
|
||||
|
@ -564,7 +572,7 @@ class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis):
|
|||
("PoP", self._PoP_analysisMethod("Period_2_3"), [6]),
|
||||
("PoP", self.binnedPercent, [6]),
|
||||
("SnowAmt", self.accumMinMax),
|
||||
("StormTotalSnow", self.accumMinMax),
|
||||
("StormTotalSnow", self.minMax),
|
||||
("IceAccum", self.accumMinMax),
|
||||
("SnowLevel", self.avg),
|
||||
("Wind", self.vectorMedianRange, [6]),
|
||||
|
@ -791,7 +799,7 @@ class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis):
|
|||
("PoP", self._PoP_analysisMethod("FirstFcstPeriod"), [6]),
|
||||
("PoP", self.binnedPercent, [6]),
|
||||
("SnowAmt", self.accumMinMax),
|
||||
("StormTotalSnow", self.accumMinMax),
|
||||
("StormTotalSnow", self.minMax),
|
||||
("IceAccum", self.accumMinMax),
|
||||
("SnowLevel", self.avg),
|
||||
("Wind", self.vectorMedianRange, [6]),
|
||||
|
@ -852,7 +860,7 @@ class TextProduct(TextRules.TextRules, SampleAnalysis.SampleAnalysis):
|
|||
("PoP", self._PoP_analysisMethod("AreaFcstPeriod"), [6]),
|
||||
("PoP", self.binnedPercent, [6]),
|
||||
("SnowAmt", self.accumMinMax),
|
||||
("StormTotalSnow", self.accumMinMax),
|
||||
("StormTotalSnow", self.minMax),
|
||||
("IceAccum", self.accumMinMax),
|
||||
("SnowLevel", self.avg),
|
||||
("Wind", self.vectorMedianRange, [6]),
|
||||
|
|
|
@ -77,12 +77,12 @@
|
|||
</info>
|
||||
<info>
|
||||
<title>GFS20-PAC</title>
|
||||
<dataset>GFS-PAC-20KM</dataset>
|
||||
<datasetId>GFS-PAC-20KM</datasetId>
|
||||
<dt>3</dt>
|
||||
</info>
|
||||
<info>
|
||||
<title>GFS20-PRICO</title>
|
||||
<dataset>GFS-PRICO-20KM</dataset>
|
||||
<datasetId>GFS-PRICO-20KM</datasetId>
|
||||
<dt>3</dt>
|
||||
</info>
|
||||
<info>
|
||||
|
|
|
@ -45,6 +45,8 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
|||
* Feb 12, 2014 2655 njensen Set source
|
||||
* Jun 05, 2014 3226 bclement LightningStikePoint refactor
|
||||
* Jun 10, 2014 3226 bclement fixed source
|
||||
* May 8, 2015 DR17252 MPorricelli Removed setting of source.
|
||||
* Source set in TextLightningParser.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -57,12 +59,6 @@ public class TextLightningDecoder extends AbstractDecoder implements
|
|||
|
||||
private String traceId = null;
|
||||
|
||||
/*
|
||||
* inferred from Wufeng Zhou comment in BinLightningDecoderUtil, stands for
|
||||
* World Wide Lightning Location Network
|
||||
*/
|
||||
private static final String SOURCE = "WWLLN";
|
||||
|
||||
/**
|
||||
* Construct a TextLightning decoder. Calling hasNext() after construction
|
||||
* will return false, decode() will return a null.
|
||||
|
@ -103,8 +99,6 @@ public class TextLightningDecoder extends AbstractDecoder implements
|
|||
|
||||
report.setTraceId(traceId);
|
||||
|
||||
report.setSource(SOURCE);
|
||||
|
||||
return new PluginDataObject[] { report };
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 3, 2014 3226 bclement Initial creation
|
||||
* May 8, 2015 DR17252 MPorricelli Use HOUR_OF_DAY for setHour
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -118,7 +119,7 @@ public class BaseLightningPoint {
|
|||
* Hour of the day [0..23].
|
||||
*/
|
||||
public void setHour(int hour) {
|
||||
this.time.set(Calendar.HOUR, hour);
|
||||
this.time.set(Calendar.HOUR_OF_DAY, hour);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -162,4 +162,10 @@
|
|||
install-size="0"
|
||||
version="0.0.0"/>
|
||||
|
||||
<plugin
|
||||
id="org.jfreechart"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"/>
|
||||
|
||||
</feature>
|
||||
|
|
29
edexOsgi/com.raytheon.uf.edex.ndm/modes/ndm-modes.xml
Normal file
29
edexOsgi/com.raytheon.uf.edex.ndm/modes/ndm-modes.xml
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?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.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Refer to edex/modes/README.txt for documentation
|
||||
-->
|
||||
<edexModes>
|
||||
<mode name="ingestHydro">
|
||||
<include>ndm-ingest.xml</include>
|
||||
</mode>
|
||||
</edexModes>
|
|
@ -100,6 +100,7 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
|
|||
* 10/16/2014 3454 bphillip Upgrading to Hibernate 4
|
||||
* 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.
|
||||
* </pre>
|
||||
*
|
||||
* @author garmendariz
|
||||
|
@ -220,6 +221,22 @@ public class StdTextProductDao extends CoreDao {
|
|||
prodId.setNnnid(nnn);
|
||||
prodId.setXxxid(xxx);
|
||||
Session session = this.getSession();
|
||||
String site = textProduct.getProdId().getSite();
|
||||
if ((site == null) || site.trim().isEmpty()) {
|
||||
// Determine product site.
|
||||
if (xxx.trim().length() == MAX_FIELD_LENGTH) {
|
||||
site = SiteMap.getInstance().getSite4LetterId(xxx);
|
||||
} else {
|
||||
site = SiteMap.getInstance().getSite4LetterId(
|
||||
SiteUtil.getSite());
|
||||
}
|
||||
if (logger.isInfoEnabled()) {
|
||||
logger.info("Write \"" + ccc + nnn + xxx
|
||||
+ "\" setting site to " + site);
|
||||
}
|
||||
textProduct.getProdId().setSite(site);
|
||||
}
|
||||
|
||||
try {
|
||||
try {
|
||||
Query query = session.createQuery("SELECT refTime from "
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -39,6 +39,7 @@
|
|||
#20140612 3230 rferrel Add pattern for URMA.
|
||||
#20150121 4014 dgilling Add pattern for ETSS.
|
||||
#20150202 4066 rferrel Add pattern form Earth Networks Total Lightning: SFPA42
|
||||
#20150507 4434 skorolev Add pattern for GFS20
|
||||
#***************************************************************
|
||||
# AWIPS 1 PATTERN GRAPHIC ^[PQ].* /redbook/Raw
|
||||
# PGNA00 KWNS 010001 !redbook 1_1/NMCGPHMCD/MCDSUM/PXSF001CN/20110201 0001
|
||||
|
@ -171,6 +172,13 @@ HDS ^(O.[LN].{1,3}) (KWBM|KWBI) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([
|
|||
HDS ^(OEBA88) KNWC (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})/(F[0-9]{3})/([^/]*)
|
||||
FILE -overwrite -log -close -edex /data_store/\5/(\2:yyyy)(\2:mm)\2/\3/ICE/GRID\7/\9Z_\(10)_\(11)-\1_KNWC_\2\3\4_(seq).\5.%Y%m%d%H
|
||||
|
||||
# DR 17480 Add HFR (High Frequency Radar) Pattern
|
||||
# Note: There isn't much metadata here to work with, if more is needed Unidata should be contacted.
|
||||
# OUTA98 KWNB 111100 !grib2/
|
||||
|
||||
ANY ^(OUTA98) KWNB (..)(..)(..)[^!]*!(grib|grib2)
|
||||
FILE -overwrite -log -close -edex /data_store/\5/(\2:yyyy)(\2:mm)\2/\3/HFR/\1_KWNB_\2\3\4_(seq).\5.%Y%m%d%H
|
||||
|
||||
# AWIPS1: GRID ^[YZ][UV]M.98.*KNHC /Grid/SBN/Raw
|
||||
# *** NOT FOUND IN INGEST STREAM ***
|
||||
|
||||
|
@ -799,3 +807,13 @@ NGRID ^(MHU...) (KNHC) (..)(..)(..)
|
|||
# ETSS-AK
|
||||
NGRID ^(MHR...) (KNHC) (..)(..)(..)
|
||||
FILE -overwrite -log -close -edex /data_store/grib2/(\3:yyyy)(\3:mm)\3/\4/ETSS/NDFD-AK/\1_\2_\3\4\5_(seq).grib2.%Y%m%d%H
|
||||
#NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
||||
# FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
|
||||
|
||||
# GFS20 - Alaska, Puerto Rico, Pacific and CONUS
|
||||
# YUFC97 KWBC 051200 !grib2/ncep/GFS/#255/201505051200F012/UREL/2 K*m**2*kg-1*s-1
|
||||
# ZONK67 KWBC 051200 !grib2/ncep/GFS/#215/201505051200F021/OMEG/675 hPa PRES
|
||||
# ZVBK86 KWBC 051200 !grib2/ncep/GFS/#217/201505051200F021/VREL/180-150 hPa PDLY
|
||||
|
||||
NGRID ^([YZ][BCE-HMO-Y][BEFN][A-Z][0-9][0-9]) KWBC (..)(..)(..) [^!]*!(grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
|
||||
FILE -overwrite -log -close -edex /data_store/grib2/(\2:yyyy)(\2:mm)\2/\3/\6/GRID\7/\9Z_\(10)_\(11)_\1_KWBC_\2\3\4_(seq).\5.%Y%m%d%H
|
||||
|
|
Loading…
Add table
Reference in a new issue