Merge branch 'master_14.1.1' into omaha_14.1.1

Conflicts:
	nativeLib/files.native/files.native.ecl
	nativeLib/ncep_grib2module/.cproject
	nativeLib/rary.cots.g2clib/.project
	nativeLib/rary.cots.g2clib/g2_unpack3.c
	rpms/awips2.core/Installer.python/component.spec
	rpms/awips2.core/Installer.python/nativeLib/x86_64/grib2.so
	rpms/awips2.core/Installer.python/nativeLib/x86_64/libjasper.so
	rpms/awips2.core/Installer.python/nativeLib/x86_64/libjasper.so.1

Former-commit-id: c76c856340 [formerly 412bcb0f21b7385a170d14b3a88dd67c91a301a2]
Former-commit-id: 665911b033
This commit is contained in:
Bryan Kowal 2013-10-31 15:23:08 -05:00
commit 4d7a4aefec
784 changed files with 4318 additions and 905 deletions

View file

@ -52,7 +52,7 @@
<resourceData xsi:type="plotResourceData" plotSource="METAR Plot"
plotModelFile="stdObsDesign.svg" spiFile="basemaps/MTR.spi"
isUpdatingOnMetadataOnly="true" retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" pixelSizeHint="45">
isRequeryNecessaryOnTimeMatch="true" isTopOfTheHour="true" pixelSizeHint="45">
<binOffset posOffset="1800" negOffset="1800" virtualOffset="0"/>
<metadataMap>
<mapping key="reportType">

View file

@ -46,6 +46,7 @@
# Cleaned up some constants
# Jun 21, 2013 14983 ryu Fixed encodeEditArea() to evaluate query
# when necessary
# Oct 07, 2013 2424 randerso remove use of pytz
#
########################################################################
import types, string, time, sys
@ -1479,14 +1480,14 @@ class SmartScript(BaseTool.BaseTool):
This should be used instead of time.localtime()
'''
from pytz import timezone
import dateutil.tz
if tz is None:
tzname = self.__dataMgr.getClient().getSiteTimeZone()
tz = timezone(tzname)
tz = dateutil.tz.gettz(tzname)
utczone = timezone('UTC')
gmdt = utczone.localize(self._gmtime(date))
utczone = dateutil.tz.gettz('UTC')
gmdt = self._gmtime(date).replace(tzinfo=utczone)
tzdt = gmdt.astimezone(tz)
return tzdt

View file

@ -17,7 +17,6 @@ FINT=
FLINE=
HILO=
HLSYM=
CLRBAR=0
WIND=
TITLE=5/-1/~ 1000-500 MB THICKNESS!0
COLORS=2

View file

@ -349,19 +349,7 @@ public class PlotResource2 extends
plots.put(normTime, list);
}
list.add(info);
// Sort this data in "backwards" so that the most recent observation
// for a particular station display correctly
Collections.sort(list, new Comparator<PlotInfo>() {
@Override
public int compare(PlotInfo o1, PlotInfo o2) {
return o1.dataTime.compareTo(o2.dataTime);
}
});
Collections.reverse(list);
}
}
@ -373,6 +361,19 @@ public class PlotResource2 extends
DataTime time = entry.getKey();
List<PlotInfo> info = entry.getValue();
FrameInformation frameInfo = frameMap.get(time);
// Sort this data in "backwards" so that the most recent observation
// for a particular station display correctly
if (info.size() > 1) {
Collections.sort(info, new Comparator<PlotInfo>() {
@Override
public int compare(PlotInfo o1, PlotInfo o2) {
return o2.dataTime.compareTo(o1.dataTime);
}
});
}
if (frameInfo != null) {
Map<String, Station> stationMap = frameInfo.stationMap;
for (PlotInfo plot : info) {

View file

@ -96,7 +96,8 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
* 07/26/2012 15171 rferrel Disable editor's send and clear AFOS PIL fields when
* invalid product Id and user want to edit it anyway.
* 09/20/2012 1196 rferrel Changing dialogs being called to not block.
* 11/26/2012 14526 mgamazaychikov Added traverse listener for RETURN key
* 11/26/2012 14526 mgamazaychikov Added traverse listener for RETURN key
* 10/07/2012 16664 mgamazaychikov Added padProdDesignatorText method
* </pre>
*
* @author lvenable
@ -411,21 +412,7 @@ public class AWIPSHeaderBlockDlg extends CaveSWTDialog implements
@Override
public void focusLost(FocusEvent e) {
StringBuilder sb = new StringBuilder(prodDesignatorTF.getText()
.trim());
if (sb.length() > 0) {
// Pad field with trailing spaces.
while (sb.length() < 3) {
sb.append(' ');
}
// Only trigger the modification listener when there is a
// real change.
String value = sb.toString();
if (!value.equals(prodDesignatorTF.getText())) {
prodDesignatorTF.setText(value);
}
}
padProdDesignatorText(prodDesignatorTF.getText());
}
@Override
@ -462,7 +449,23 @@ public class AWIPSHeaderBlockDlg extends CaveSWTDialog implements
}
}
/**
protected void padProdDesignatorText(String prodDesignatorText) {
StringBuilder sb = new StringBuilder(prodDesignatorText.trim());
if (sb.length() > 0) {
// Pad field with trailing spaces.
while (sb.length() < 3) {
sb.append(' ');
}
// Only trigger the modification listener when there is a
// real change.
String value = sb.toString();
if (!value.equals(prodDesignatorText)) {
prodDesignatorTF.setText(value);
}
}
}
/**
* Create the addressee control fields.
*/
private void createAddresseeFields() {
@ -1041,6 +1044,7 @@ public class AWIPSHeaderBlockDlg extends CaveSWTDialog implements
@Override
public void keyTraversed(TraverseEvent event) {
if (event.detail == SWT.TRAVERSE_RETURN) {
padProdDesignatorText(prodDesignatorTF.getText());
enterBtnPressed();
}
}

View file

@ -73,6 +73,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* the call to removeIntersectedSeg() with a call to adjustVertex(); updated
* removeDuplicateCoordinate(), computeCoordinate(), adjustPolygon() prolog, and
* removeOverlaidLinesegments(); added alterVertexes() and calcShortestDistance().
* 10/01/2013 DR 16632 Qinglu Lin Fixed the bug in for loop range.
* </pre>
*
* @author mschenke
@ -1102,6 +1103,9 @@ public class PolygonUtil {
if (verts == null) {
return null;
}
if (verts.length <= 3)
return verts;
Set<Coordinate> coords = new LinkedHashSet<Coordinate>();
for (Coordinate c : verts)
coords.add(c);
@ -1300,7 +1304,7 @@ public class PolygonUtil {
// of a straight line segment
coords = new Coordinate[coords.length - 1];
if (i == m - 2) {
for (int j = 1; j < m - 2; j++) {
for (int j = 1; j <= m - 2; j++) {
coords[j-1] = new Coordinate(expandedCoords[j]);
}
coords[coords.length-1] = new Coordinate(coords[0]);

View file

@ -149,6 +149,7 @@ import com.vividsolutions.jts.geom.Polygon;
* Aug 6, 2013 2243 jsanchez Refreshed the follow up list every minute.
* Aug 15, 2013 DR 16418 D. Friedman Make dialog visibility match editable state.
* Sep 17, 2013 DR 16496 D. Friedman Make editable state more consistent.
* Oct 01, 2013 DR16612 m.gamazaychikov Fixed inconsistencies with track locking and updateListSelected method
* </pre>
*
* @author chammack
@ -259,6 +260,8 @@ public class WarngenDialog extends CaveSWTDialog implements
private boolean polygonLocked = false;
private boolean trackLocked = false;
private int totalSegments = 0;
private String damBreakInstruct = null;
@ -1066,7 +1069,7 @@ public class WarngenDialog extends CaveSWTDialog implements
if (((followupData == null) || ((WarningAction.valueOf(followupData
.getAct()) == WarningAction.CON) && warngenLayer
.conWarnAreaChanged(followupData)))
&& !polygonLocked) {
&& !polygonLocked && !trackLocked) {
redrawFromWarned();
}
@ -1518,8 +1521,8 @@ public class WarngenDialog extends CaveSWTDialog implements
}
warngenLayer.getStormTrackState().setInitiallyMotionless(
(warngenLayer.getConfiguration().isTrackEnabled() == false)
|| (warngenLayer.getConfiguration()
.getPathcastConfig() == null));
|| (warngenLayer.getConfiguration()
.getPathcastConfig() == null));
if (warngenLayer.getStormTrackState().isInitiallyMotionless()) {
warngenLayer.getStormTrackState().speed = 0;
warngenLayer.getStormTrackState().angle = 0;
@ -1570,6 +1573,7 @@ public class WarngenDialog extends CaveSWTDialog implements
* @param b
*/
private void setTrackLocked(boolean b) {
trackLocked = b;
fromTrack.setEnabled(!b);
warngenLayer.getStormTrackState().editable = !b;
}
@ -1624,7 +1628,7 @@ public class WarngenDialog extends CaveSWTDialog implements
if ((WarningAction
.valueOf(warngenLayer.state.followupData
.getAct()) == WarningAction.CON)
&& (totalSegments > 1)) {
&& (totalSegments > 1)) {
sameProductMessage(warngenLayer.state.followupData
.getEquvialentString());
}
@ -1633,21 +1637,22 @@ public class WarngenDialog extends CaveSWTDialog implements
}
} else {
if (warngenLayer.state.followupData != null) {
// Sets the updatelist with the last selected vtec option
for (int i = 0; i < updateListCbo.getItemCount(); i++) {
String item = updateListCbo.getItem(i);
if (item.equals(warngenLayer.state.followupData
.getDisplayString())) {
updateListCbo.select(i);
updateListCbo.setText(item);
data = warngenLayer.state.followupData;
break;
}
}
} else {
// recreate updates before setting the updatelist to the
// last selected vtec option
recreateUpdates();
recreateDurations(durationList);
return;
for (int i = 0; i < updateListCbo.getItemCount(); i++) {
FollowupData fd = (FollowupData) updateListCbo
.getData(updateListCbo.getItem(i));
if ( fd != null ) {
if (fd.equals(warngenLayer.state.followupData)) {
updateListCbo.select(i);
updateListCbo.setText(updateListCbo.getItem(i));
data = warngenLayer.state.followupData;
return;
}
}
}
}
}
if (currMode == Mode.DRAG_ME) {
@ -2116,7 +2121,7 @@ public class WarngenDialog extends CaveSWTDialog implements
setPolygonLocked(false);
AbstractWarningRecord newWarn = CurrentWarnings.getInstance(
warngenLayer.getLocalizedSite()).getNewestByTracking(
data.getEtn(), data.getPhen() + "." + data.getSig());
data.getEtn(), data.getPhen() + "." + data.getSig());
updatePolygon(newWarn);
@ -2147,7 +2152,7 @@ public class WarngenDialog extends CaveSWTDialog implements
AbstractWarningRecord newWarn = CurrentWarnings.getInstance(
warngenLayer.getLocalizedSite()).getNewestByTracking(
data.getEtn(), data.getPhen() + "." + data.getSig());
data.getEtn(), data.getPhen() + "." + data.getSig());
updatePolygon(newWarn);
@ -2459,7 +2464,7 @@ public class WarngenDialog extends CaveSWTDialog implements
public void realizeEditableState() {
boolean layerEditable = warngenLayer.isEditable();
// TODO: Note there is no 'is track editing allowed' state yet.
warngenLayer.getStormTrackState().editable = layerEditable && trackEditable;
warngenLayer.getStormTrackState().editable = layerEditable && trackEditable && !trackLocked;
warngenLayer.setBoxEditable(layerEditable && boxEditable && !polygonLocked);
warngenLayer.issueRefresh();
}

View file

View file

0
deltaScripts/13.5.2/addBufrmosDataURI.sh Executable file → Normal file
View file

View file

@ -33,17 +33,12 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 01/17/13 dgilling Initial Creation.
# 10/09/13 16614 njensen Fixed reloadModules()
#
#
#
import os
import MasterInterface
import RollBackImporter
rollbackImporter = RollBackImporter.RollBackImporter()
class RollbackMasterInterface(MasterInterface.MasterInterface):
@ -75,8 +70,6 @@ class RollbackMasterInterface(MasterInterface.MasterInterface):
def reloadModules(self):
for script in self.scripts:
super(RollbackMasterInterface, self).removeModule(script)
rollbackImporter.rollback()
self.importModules()
super(RollbackMasterInterface, self).reloadModule(script)

View file

@ -19,6 +19,15 @@
##
# NOTE: THIS FILE SHOULD NOT BE USER-MODIFIED. INSTEAD REFER TO THE
# LOCAL CONFIG DOCUMENTATION ON HOW TO OVERRIDE SETTINGS IN THIS FILE.
#
# Baseline GFE server configuration
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 10/03/13 2424 randerso Change localTC to use dateutil instead of pytz
# to get correct offsets for Alaska
#----------------------------------------------------------------------------
# USEFUL DEFINES
@ -859,9 +868,10 @@ Persistent = (0, 0, 0) # special time constraint
# seconds local time, e.g., 6*HOUR would indicate 6am.
def localTC(start,repeat,duration,dst):
timezone = SITES[GFESUITE_SITEID][3]
import pytz
tz = pytz.timezone(timezone)
delta = tz.utcoffset(0) - tz.dst(0);
import dateutil.tz, datetime
tz = dateutil.tz.gettz(timezone)
dt = datetime.datetime.utcnow()
delta = tz.utcoffset(dt) + tz.dst(dt)
offset = delta.days*86400 + delta.seconds
start = start - offset
if dst == 1:

0
edexOsgi/build.edex/opt/db/ddl/maps/importShapeFile.sh Executable file → Normal file
View file

View file

@ -66,6 +66,7 @@ from com.raytheon.uf.common.localization import LocalizationContext_Localization
# A1, big perf improvement.
# 05/23/13 1759 dgilling Remove unnecessary imports.
# 07/25/13 2233 randerso Improved memory utilization and performance
# 09/20/13 2405 dgilling Clip grids before inserting into cache.
#
#
@ -97,8 +98,9 @@ def logDebug(*msg):
class WECache(object):
def __init__(self, we, inv):
def __init__(self, we, inv, clipArea):
self._we = we
self._clipArea = clipArea
self._inv = OrderedDict()
lst = list(inv)
while len(lst):
@ -109,7 +111,7 @@ class WECache(object):
gridsAndHist = self._we.get(javaTRs, True)
for idx, tr in enumerate(i):
pair = gridsAndHist.get(idx)
g = self.__encodeGridSlice(pair.getFirst())
g = self.__encodeGridSlice(pair.getFirst(), clipArea)
h = self.__encodeGridHistory(pair.getSecond())
self._inv[tr] = (g, h)
lst = lst[BATCH_WRITE_COUNT:]
@ -122,31 +124,32 @@ class WECache(object):
try:
return self._inv[key]
except KeyError:
logEvent("Cache miss for key:", str(key))
grid = self._we.getItem(iscUtil.toJavaTimeRange(key))
pyGrid = self.__encodeGridSlice(grid)
pyGrid = self.__encodeGridSlice(grid, self._clipArea)
history = grid.getGridDataHistory()
pyHist = self.__encodeGridHistory(history)
return (pyGrid, pyHist)
def __encodeGridSlice(self, grid):
def __encodeGridSlice(self, grid, clipArea):
gridType = grid.getGridInfo().getGridType().toString()
if gridType == "SCALAR":
return grid.__numpy__[0]
return clipToExtrema(grid.__numpy__[0], clipArea)
elif gridType == "VECTOR":
vecGrids = grid.__numpy__
return (vecGrids[0], vecGrids[1])
return (clipToExtrema(vecGrids[0], clipArea), clipToExtrema(vecGrids[1], clipArea))
elif gridType == "WEATHER":
keys = grid.getKeys()
keyList = []
for theKey in keys:
keyList.append(theKey.toString())
return (grid.__numpy__[0], keyList)
return (clipToExtrema(grid.__numpy__[0], clipArea), keyList)
elif gridType =="DISCRETE":
keys = grid.getKey()
keyList = []
for theKey in keys:
keyList.append(theKey.toString())
return (grid.__numpy__[0], keyList)
return (clipToExtrema(grid.__numpy__[0], clipArea), keyList)
def __encodeGridHistory(self, histories):
retVal = []
@ -524,55 +527,29 @@ def storeTopoGrid(client, file, databaseID, invMask, clipArea):
logEvent("Saved Topo Grid")
def historyFunc(x, y):
return y[x][1]
###-------------------------------------------------------------------------###
###
def storeGridDataHistory(file, we, wec, trList, timeRange):
def storeGridDataHistory(file, we, wec, trList):
"Stores the Grid Data history string for each grid in we."
histories = []
for tr in trList:
histories.append(historyFunc(tr, wec))
#histories = map(lambda x, y=wec: y[x][1], trList)
# get the maximum size of the history string
maxHistSize = 0
gridCount = 0
firstSlot = -1
lastSlot = 0
for x in xrange(len(trList)):
t = trList[x]
his = histories[x]
histList = []
for tr in trList:
his = wec[tr][1]
hisString = ''
for i in xrange(len(his)):
hisString = hisString + str(his[i])
for i,h in enumerate(his):
hisString = hisString + str(h)
if i != len(his) - 1:
hisString = hisString + " ^"
if overlaps(t, timeRange):
if firstSlot == -1:
firstSlot = gridCount
lastSlot = gridCount
if len(hisString) > maxHistSize:
maxHistSize = len(hisString)
gridCount = gridCount + 1
histList.append(hisString)
maxHistSize = max(maxHistSize,len(hisString))
# Make the history variable and fill it
histShape = (lastSlot - firstSlot + 1, maxHistSize + 1)
if firstSlot != -1:
histCube = numpy.zeros(histShape, 'c')
slot = 0
for i in xrange(firstSlot, lastSlot + 1):
his = histories[i]
hisString = ''
for h in range(len(his)):
hisString = hisString + str(his[h])
if h != len(his) - 1:
hisString = hisString + " ^"
histCube[slot:] = hisString
slot = slot + 1
histShape = (len(histList), maxHistSize + 1)
histCube = numpy.zeros(histShape, 'c')
for slot, hisString in enumerate(histList):
histCube[slot:] = hisString
# make the history variable anyway. iscMosaic needs it.
elemName = we.getParmid().getParmName() + "_" + we.getParmid().getParmLevel()
@ -582,7 +559,7 @@ def storeGridDataHistory(file, we, wec, trList, timeRange):
var = file.createVariable(varName, 'c', dims)
if firstSlot != -1:
if len(histList) > 0:
# store the cube in the netCDF file
var[:] = histCube
return
@ -756,9 +733,9 @@ def storeScalarWE(we, trList, file, timeRange, databaseID,
cube = numpy.empty(shape=(gridCount, clipSize[1], clipSize[0]), dtype=numpy.float32)
wec = WECache(we, overlappingTimes)
wec = WECache(we, overlappingTimes, clipArea)
for i,t in enumerate(overlappingTimes):
grid = clipToExtrema(wec[t][0], clipArea)
grid = wec[t][0]
#adjust for time changes
if we.getGpi().isRateParm():
durRatio = (float(timeList[i][1]-timeList[i][0]))/float((t[1]-t[0]))
@ -818,7 +795,7 @@ def storeScalarWE(we, trList, file, timeRange, databaseID,
setattr(var, "fillValue", fillValue)
## Extract the GridDataHistory info and save it
storeGridDataHistory(file, we, wec, trList, timeRange)
storeGridDataHistory(file, we, wec, overlappingTimes)
logEvent("Saved", gridCount, varName, " grids")
@ -841,11 +818,11 @@ def storeVectorWE(we, trList, file, timeRange,
magCube = numpy.empty(shape=(gridCount, clipSize[1], clipSize[0]),dtype=numpy.float32)
dirCube = numpy.empty(shape=(gridCount, clipSize[1], clipSize[0]),dtype=numpy.float32)
wec = WECache(we, overlappingTimes)
wec = WECache(we, overlappingTimes, clipArea)
for i,t in enumerate(overlappingTimes):
vecData = wec[t][0]
mag = clipToExtrema(vecData[0], clipArea)
dir = clipToExtrema(vecData[1], clipArea)
mag = vecData[0]
dir = vecData[1]
if we.getGpi().isRateParm():
durRatio = (float(timeList[i][1]-timeList[i][0]))/float((t[1]-t[0]))
mag *= durRatio
@ -947,7 +924,7 @@ def storeVectorWE(we, trList, file, timeRange,
setattr(dirVar, "fillValue", dfillValue)
## Extract the GridDataHistory info and save it
storeGridDataHistory(file, we, wec, trList, timeRange)
storeGridDataHistory(file, we, wec, overlappingTimes)
logEvent("Saved", gridCount, varName, "grids")
@ -1001,11 +978,10 @@ def storeWeatherWE(we, trList, file, timeRange, databaseID, invMask, clipArea):
byteCube = numpy.empty(shape=(gridCount, clipSize[1], clipSize[0]), dtype=numpy.int8)
keyList = []
wec = WECache(we, overlappingTimes)
wec = WECache(we, overlappingTimes, clipArea)
for i,t in enumerate(overlappingTimes):
wx = wec[t][0]
grid = clipToExtrema(wx[0], clipArea)
byteCube[i] = grid
byteCube[i] = wx[0]
keyList.append(wx[1])
# make the variable name
@ -1070,7 +1046,7 @@ def storeWeatherWE(we, trList, file, timeRange, databaseID, invMask, clipArea):
setattr(var, "fillValue", fillValue)
## Extract the GridDataHistory info and save it
storeGridDataHistory(file, we, wec, trList, timeRange)
storeGridDataHistory(file, we, wec, overlappingTimes)
logEvent("Saved", gridCount, varName, "grids")
@ -1092,11 +1068,10 @@ def storeDiscreteWE(we, trList, file, timeRange, databaseID, invMask, clipArea):
byteCube = numpy.empty(shape=(gridCount, clipSize[1], clipSize[0]), dtype=numpy.int8)
keyList = []
wec = WECache(we, overlappingTimes)
wec = WECache(we, overlappingTimes, clipArea)
for i,t in enumerate(overlappingTimes):
dis = wec[t][0]
grid = clipToExtrema(dis[0], clipArea)
byteCube[i] = grid
byteCube[i] = dis[0]
keyList.append(dis[1])
@ -1160,7 +1135,7 @@ def storeDiscreteWE(we, trList, file, timeRange, databaseID, invMask, clipArea):
setattr(var, "fillValue", fillValue)
## Extract the GridDataHistory info and save it
storeGridDataHistory(file, we, wec, trList, timeRange)
storeGridDataHistory(file, we, wec, overlappingTimes)
logEvent("Saved", gridCount, varName, "grids")
@ -1335,7 +1310,8 @@ def main(outputFilename, parmList, databaseID, startTime,
try:
timeRange = makeTimeRange(argDict['startTime'], argDict['endTime'])
except:
sys.exit(1)
logException("Unable to create TimeRange from arguments: startTime= " + str(argDict['startTime']) + ", endTime= " + argDict['endTime'])
return
# See if the databaseID is valid. An exception will be tossed
db = IFPDB(argDict['databaseID'])

View file

@ -2879,21 +2879,11 @@
<name>HPCGuide</name>
<center>7</center>
<subcenter>5</subcenter>
<grid>197</grid>
<process>
<id>183</id>
</process>
</model>
<model>
<name>HPCGuide-2.5km</name>
<center>7</center>
<subcenter>5</subcenter>
<process>
<id>183</id>
</process>
</model>
<model>
<name>HPCGuide-AK</name>
<center>7</center>

View file

@ -81,15 +81,6 @@ public class MhsMessage {
*/
static public final String EnvMhsTrace = "MHS_SHOW_TRACE";
/**
* Environment variable to determine the MHS interface to use. If undefined,
* it is the same as defining it to "NO" or "FALSE". If set to "YES" or
* "TRUE", then the JNI interface to the MHS DWB functions is used to submit
* messages. Any other value results in message submission occurring via the
* command line utility msg_send.
*/
static public final String EnvMhsUseNative = "MHS_USE_NATIVE_INTERFACE";
/**
* Minimum message code value
*/
@ -194,7 +185,6 @@ public class MhsMessage {
* Valid time parameter formatted as a string (mm/dd/yyyy:HHMM). This value
* is derived from {@link #validTime} during message submission.
*/
@SuppressWarnings("unused")
private String validTimeString;
/**
@ -207,7 +197,6 @@ public class MhsMessage {
* Timeout time parameter formatted as a string (mm/dd/yyyy:HHMM). This
* value is derived from {@link #timeoutTime} during message submission.
*/
@SuppressWarnings("unused")
private String timeoutTimeString;
/**
@ -259,11 +248,6 @@ public class MhsMessage {
*/
private String resultText;
/**
*
*/
private boolean useNativeInterface;
/**
* Sole constructor. Provides reasonable default values for a message
* object's fields as follows:
@ -286,14 +270,10 @@ public class MhsMessage {
*/
public MhsMessage(int code) {
String traceString = System.getenv(EnvMhsTrace);
String interfaceString = System.getenv(EnvMhsUseNative);
showTrace = (traceString != null)
&& ((traceString.equalsIgnoreCase("yes") || traceString
.equalsIgnoreCase("true")));
useNativeInterface = (interfaceString != null)
&& ((interfaceString.equalsIgnoreCase("yes")) || interfaceString
.equalsIgnoreCase("true"));
&& ((traceString.equalsIgnoreCase("yes")
|| traceString.equalsIgnoreCase("true")));
actionCode = code;
setRetryCount(0);
@ -313,21 +293,6 @@ public class MhsMessage {
submitted = false;
}
/**
* Submits a message to the message request server daemon. This is JNI code
* to translate a Java message object to a C MHS message object.
*
* @return 0 if successful; a positive integer if a MHS error is detected;
* -1 if an error occurs in a JNI call, which will usually result in
* a Java exception when control is returned toe the JVM.
* @see MhsMessage
*/
private native String submitMessage() throws MhsSubmitException;
static {
System.loadLibrary("coDDM_msg_send");
}
/**
* Gets the action code for this message object.
*
@ -839,30 +804,6 @@ public class MhsMessage {
return retryCount;
}
/**
* Call to force the MHS interface to be used for this message. The default
* value is determined by the environment variable MHS_USE_NATIVE_INTERFACE.
* Set to true to use the native C DWB functions. Set to false to use the
* command line utility msg_send.
*
* @param useNativeInterface
* the useNativeInterface to set
*/
public void setUseNativeInterface(boolean useNativeInterface) {
this.useNativeInterface = useNativeInterface;
}
/**
* Returns the MHS interface that will be used to submit this message. A
* true value indicates that the native C DWB functions will be used. False
* indicates that the command line utility msg_send will be used.
*
* @return the useNativeInterface
*/
public boolean isUseNativeInterface() {
return useNativeInterface;
}
/**
* Retrieves the message Id of this message.
*
@ -1153,147 +1094,136 @@ public class MhsMessage {
String timeStamp = timeStampFormat.format(System.currentTimeMillis());
System.out.println(timeStamp + ": Message submitted");
if (useNativeInterface) { // Submit the message using the MHS and DWB
// native libraries.
try {
messageId = submitMessage();
} catch (MhsSubmitException e) {
resultText = e.toString();
throw new MhsSubmitException(resultText);
}
} else { // Submit the message by constructing a command line and
// execing a new msg_send process
LinkedList<String> command = new LinkedList<String>();
LinkedList<String> command = new LinkedList<String>();
command.add("msg_send");
command.add("-c" + actionCode);
String addrStr = "";
String ackAddrStr = "";
String encList = "";
command.add("msg_send");
command.add("-c" + actionCode);
String addrStr = "";
String ackAddrStr = "";
String encList = "";
for (int i = 0; i < addressees.getCount(); i++) {
Addressee addr = addressees.get(i);
if (addr.isAckRequired()) {
if (ackAddrStr.isEmpty()) {
ackAddrStr = addr.getAddress();
} else {
ackAddrStr += "," + addr.getAddress();
}
for (int i = 0; i < addressees.getCount(); i++) {
Addressee addr = addressees.get(i);
if (addr.isAckRequired()) {
if (ackAddrStr.isEmpty()) {
ackAddrStr = addr.getAddress();
} else {
if (addrStr.isEmpty()) {
addrStr = addr.getAddress();
} else {
addrStr += "," + addr.getAddress();
}
ackAddrStr += "," + addr.getAddress();
}
}
if (!addrStr.isEmpty()) {
command.add("-a" + addrStr);
}
if (!ackAddrStr.isEmpty()) {
command.add("-A" + ackAddrStr);
}
if (retryCount != 0) {
command.add("-R" + retryCount);
}
for (int i = 0; i < enclosures.getCount(); i++) {
Enclosure enc = enclosures.get(i);
if (encList.isEmpty()) {
encList = enc.getEnclosureName();
} else {
if (addrStr.isEmpty()) {
addrStr = addr.getAddress();
} else {
encList += "," + enc.getEnclosureName();
}
}
if (!encList.isEmpty()) {
command.add("-e" + encList);
}
if (!timeoutTimeString.isEmpty()) {
command.add("-T" + timeoutTimeString);
}
if (!validTimeString.isEmpty()) {
command.add("-v" + validTimeString);
}
if (!bodyFile.isEmpty()) {
command.add("-b" + bodyFile);
}
if (!productId.isEmpty()) {
command.add("-i" + productId);
}
if (!subject.isEmpty()) {
command.add("-s" + subject);
}
if (priority != MhsMessagePriority.Default) {
command.add("-p" + priority.value());
}
if (type != MhsMessageType.Routine) {
command.add("-t" + type.text());
}
if (verifyAddressees) {
command.add("-C");
}
if (showTrace) {
System.out.print("Executing command: ");
for (int i = 0; i < command.size(); i++) {
System.out.print(command.get(i) + " ");
}
System.out.println();
}
Process proc = null;
try {
ProcessBuilder procDesc = new ProcessBuilder(command);
procDesc.redirectErrorStream(true);
proc = procDesc.start();
InputStream stdout = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdout);
BufferedReader br = new BufferedReader(isr);
String outp;
while ((outp = br.readLine()) != null) {
if (outp.length() > 0) {
// System.out.println(outp);
messageId = outp;
}
}
// System.out.println(line);
int exitVal = proc.waitFor();
if (exitVal != 0) {
// System.out.println("Abnormal exit code " + exitVal);
// resultText = messageId;
throw new MhsSubmitException(messageId);
}
if (showTrace) {
System.out
.println("Message successfully submitted. Message ID: "
+ messageId);
}
} catch (Throwable t) {
resultText = t.getMessage();
// System.out.println("Exception thrown: " + resultText);
throw new MhsSubmitException(resultText);
} finally {
// DR #10955
if (proc != null) {
proc.destroy();
addrStr += "," + addr.getAddress();
}
}
}
if (!addrStr.isEmpty()) {
command.add("-a" + addrStr);
}
if (!ackAddrStr.isEmpty()) {
command.add("-A" + ackAddrStr);
}
if (retryCount != 0) {
command.add("-R" + retryCount);
}
for (int i = 0; i < enclosures.getCount(); i++) {
Enclosure enc = enclosures.get(i);
if (encList.isEmpty()) {
encList = enc.getEnclosureName();
} else {
encList += "," + enc.getEnclosureName();
}
}
if (!encList.isEmpty()) {
command.add("-e" + encList);
}
if (!timeoutTimeString.isEmpty()) {
command.add("-T" + timeoutTimeString);
}
if (!validTimeString.isEmpty()) {
command.add("-v" + validTimeString);
}
if (!bodyFile.isEmpty()) {
command.add("-b" + bodyFile);
}
if (!productId.isEmpty()) {
command.add("-i" + productId);
}
if (!subject.isEmpty()) {
command.add("-s" + subject);
}
if (priority != MhsMessagePriority.Default) {
command.add("-p" + priority.value());
}
if (type != MhsMessageType.Routine) {
command.add("-t" + type.text());
}
if (verifyAddressees) {
command.add("-C");
}
if (showTrace) {
System.out.print("Executing command: ");
for (int i = 0; i < command.size(); i++) {
System.out.print(command.get(i) + " ");
}
System.out.println();
}
Process proc = null;
try {
ProcessBuilder procDesc = new ProcessBuilder(command);
procDesc.redirectErrorStream(true);
proc = procDesc.start();
InputStream stdout = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdout);
BufferedReader br = new BufferedReader(isr);
String outp;
while ((outp = br.readLine()) != null) {
if (outp.length() > 0) {
// System.out.println(outp);
messageId = outp;
}
}
// System.out.println(line);
int exitVal = proc.waitFor();
if (exitVal != 0) {
// System.out.println("Abnormal exit code " + exitVal);
// resultText = messageId;
throw new MhsSubmitException(messageId);
}
if (showTrace) {
System.out.println("Message successfully submitted. Message ID: "
+ messageId);
}
} catch (Throwable t) {
resultText = t.getMessage();
// System.out.println("Exception thrown: " + resultText);
throw new MhsSubmitException(resultText);
} finally {
// DR #10955
if (proc != null) {
proc.destroy();
}
}
return messageId;
}
}

View file

@ -26,6 +26,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometry;
* ------------ ---------- ----------- --------------------------
* Nov 15, 2010 mschenke Initial creation
* Apr 28, 2013 1955 jsanchez Added an ignoreUserData flag to intersection method.
* Oct 01, 2013 DR 16632 Qinglu Lin Catch exceptions thrown by intersection().
*
* </pre>
*
@ -120,8 +121,13 @@ public class GeometryUtil {
if (g1Name == null || g2Name == null || g2Name.equals(g1Name)
|| ignoreUserData) {
Geometry section = g1.intersection(g2);
if (section.isEmpty() == false) {
Geometry section = null;
try {
section = g1.intersection(g2);
} catch (Exception e) {
; //continue;
}
if (section != null && section.isEmpty() == false) {
if (g2.getUserData() != null) {
if (section instanceof GeometryCollection) {
for (int n = 0; n < section.getNumGeometries(); ++n) {

View file

@ -24,20 +24,21 @@ import java.util.HashMap;
import java.util.Iterator;
/**
* Encapsulates the query parameters for a database query
* Encapsulates the query parameters for a database query.
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 05/29/08 #875 bphillip Initial Creation
* May 29, 2008 875 bphillip Initial Creation
* Oct 07, 2013 2392 rjpeter Updated to auto handle passing a null value to an equal operand.
* </pre>
*
* @author bphillip
* @version 1.0
*/
public class QueryParam {
/** Enumeration containing the logic operands */
public enum QueryOperand {
EQUALS, NOTEQUALS, LESSTHAN, LESSTHANEQUALS, GREATERTHAN, GREATERTHANEQUALS, IN, LIKE, ILIKE, BETWEEN, ISNULL, ISNOTNULL
@ -71,11 +72,12 @@ public class QueryParam {
/** The query operand */
private String operand = "=";
private String className;
/**
* Creates a new QueryParam. Operand defaults to equals
* Creates a new QueryParam. Operand defaults to equals, unless value is
* null, then operand is isNull.
*
* @param field
* The field
@ -83,12 +85,12 @@ public class QueryParam {
* The value
*/
public QueryParam(String field, Object value) {
this.field = field;
this.value = value;
this(field, value, "=", null);
}
/**
* Creates a new QueryParam.
* Creates a new QueryParam. If value is null and operand is =, operand is
* updated to isNull.
*
* @param field
* The field
@ -98,31 +100,66 @@ public class QueryParam {
* The operand
*/
public QueryParam(String field, Object value, String operand) {
this.field = field;
this.value = value;
this.operand = operand;
this(field, value, operand, null);
}
public QueryParam(String field, Object value, String operand,String className) {
/**
* Creates a new QueryParam. If value is null and operand is =, operand is
* updated to isNull.
*
* @param field
* @param value
* @param operand
* @param className
*/
public QueryParam(String field, Object value, String operand,
String className) {
this.field = field;
this.value = value;
this.operand = operand;
if (value == null && "=".equals(operand)) {
this.operand = "isNull";
} else {
this.operand = operand;
}
this.className = className;
}
/**
* Creates a new QueryParam. If value is null and operand is =, operand is
* updated to isNull.
*
* @param field
* @param value
* @param operand
*/
public QueryParam(String field, Object value, QueryOperand operand) {
this.field = field;
this.value = value;
this.operand = QueryParam.reverseTranslateOperand(operand);
this(field, value, operand, null);
}
public QueryParam(String field, Object value, QueryOperand operand,String className) {
/**
* Creates a new QueryParam. If value is null and operand is =, operand is
* updated to isNull.
*
* @param field
* @param value
* @param operand
* @param className
*/
public QueryParam(String field, Object value, QueryOperand operand,
String className) {
this.field = field;
this.value = value;
this.operand = QueryParam.reverseTranslateOperand(operand);
if (value == null && QueryOperand.EQUALS.equals(operand)) {
this.operand = "isNull";
} else {
this.operand = QueryParam.reverseTranslateOperand(operand);
}
this.className = className;
}
/**
* Translates the string representation of an operand to the enumeration
@ -147,6 +184,7 @@ public class QueryParam {
return "=";
}
@Override
public String toString() {
return new StringBuffer().append(field).append(" ")
.append(this.operand).append(" ").append(this.value).toString();

View file

@ -112,7 +112,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
* May 07, 2013 1869 bsteffen Remove dataURI column from
* PluginDataObject.
* May 16, 2013 1869 bsteffen Rewrite dataURI property mappings.
*
* Oct 07, 2013 2392 rjpeter Updated to pass null productKeys as actual null instead of string null.
* </pre>
*
* @author bphillip
@ -1234,7 +1234,11 @@ public abstract class PluginDao extends CoreDao {
int index = 0;
for (Object obj : results) {
distinctValues[index] = new String[1];
distinctValues[index++][0] = String.valueOf(obj);
if (obj != null) {
distinctValues[index++][0] = String.valueOf(obj);
} else {
distinctValues[index++][0] = null;
}
}
} else {
List<Object[]> results = (List<Object[]>) this
@ -1247,7 +1251,12 @@ public abstract class PluginDao extends CoreDao {
int cIndex = 0;
for (Object obj : result) {
distinctValues[rIndex][cIndex++] = String.valueOf(obj);
if (obj != null) {
distinctValues[rIndex][cIndex++] = String
.valueOf(obj);
} else {
distinctValues[rIndex][cIndex++] = null;
}
}
rIndex++;

View file

View file

View file

View file

View file

View file

View file

View file

Some files were not shown because too many files have changed in this diff Show more