Merge "Issue #2537 Increase efficiency of DAF geometry requests when geometries are reused. Change-Id: Idf0822745cdf3d52668223038f83c76e3de1c55c" into omaha_14.2.1

Former-commit-id: f0169367be [formerly cb58431f4a4d45a1e7ad32a0db6c30238de361cf]
Former-commit-id: 6234d3f493
This commit is contained in:
Nate Jensen 2014-01-06 16:28:38 -06:00 committed by Gerrit Code Review
commit 4546e5e881
6 changed files with 60 additions and 25 deletions

View file

@ -34,9 +34,10 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jun 03, 2013 dgilling Initial creation
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jun 03, 2013 dgilling Initial creation
* Jan 06, 2014 2537 bsteffen Store geometry index instead of WKT.
*
* </pre>
*
@ -51,13 +52,13 @@ public class GeometryResponseData extends AbstractResponseData {
private Map<String, Object[]> dataMap;
@DynamicSerializeElement
private String geometryWKT;
private int geometryWKTindex;
public GeometryResponseData() {
// no-op, for serialization
}
public GeometryResponseData(final IGeometryData data) {
public GeometryResponseData(final IGeometryData data, final int geometryWKTindex) {
super(data);
Set<String> parameters = data.getParameters();
@ -75,7 +76,7 @@ public class GeometryResponseData extends AbstractResponseData {
}
dataMap.put(param, dataTuple);
}
geometryWKT = data.getGeometry().toText();
this.geometryWKTindex = geometryWKTindex;
}
public Map<String, Object[]> getDataMap() {
@ -86,11 +87,11 @@ public class GeometryResponseData extends AbstractResponseData {
this.dataMap = dataMap;
}
public String getGeometryWKT() {
return geometryWKT;
public int getGeometryWKTindex() {
return geometryWKTindex;
}
public void setGeometryWKT(String geometry) {
this.geometryWKT = geometry;
public void setGeometryWKTindex(int geometryWKTindex) {
this.geometryWKTindex = geometryWKTindex;
}
}

View file

@ -34,9 +34,10 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jun 3, 2013 dgilling Initial creation
* Date Ticket# Engineer Description
* ------------- -------- ----------- --------------------------
* Jun 3, 2013 dgilling Initial creation
* Jan 06, 2014 2537 bsteffen Share geometry WKT.
*
* </pre>
*
@ -47,6 +48,9 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
@DynamicSerialize
public class GetGeometryDataResponse {
@DynamicSerializeElement
private List<String> geometryWKTs;
@DynamicSerializeElement
private List<GeometryResponseData> geoData;
@ -55,9 +59,16 @@ public class GetGeometryDataResponse {
}
public GetGeometryDataResponse(final Collection<IGeometryData> geoData) {
this.geometryWKTs = new ArrayList<String>();
this.geoData = new ArrayList<GeometryResponseData>(geoData.size());
for (IGeometryData element : geoData) {
this.geoData.add(new GeometryResponseData(element));
String wkt = element.getGeometry().toText();
int index = geometryWKTs.indexOf(wkt);
if (index == -1) {
index = geometryWKTs.size();
geometryWKTs.add(wkt);
}
this.geoData.add(new GeometryResponseData(element, index));
}
}
@ -68,4 +79,13 @@ public class GetGeometryDataResponse {
public void setGeoData(List<GeometryResponseData> geoData) {
this.geoData = geoData;
}
public List<String> getGeometryWKTs() {
return geometryWKTs;
}
public void setGeometryWKTs(List<String> geometryWKTs) {
this.geometryWKTs = geometryWKTs;
}
}

View file

@ -26,6 +26,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 06/04/13 #2023 dgilling Initial Creation.
# 01/06/14 #2537 bsteffen Store geometry index instead of WKT.
#
#
@ -37,7 +38,7 @@ class GeometryResponseData(AbstractResponseData):
def __init__(self):
super(GeometryResponseData, self).__init__()
self.dataMap = None
self.geometryWKT = None
self.geometryWKTindex = None
def getDataMap(self):
return self.dataMap
@ -45,8 +46,8 @@ class GeometryResponseData(AbstractResponseData):
def setDataMap(self, dataMap):
self.dataMap = dataMap
def getGeometryWKT(self):
return self.geometryWKT
def getGeometryWKTindex(self):
return self.geometryWKTindex
def setGeometryWKT(self, geometryWKT):
self.geometryWKT = geometryWKT
def setGeometryWKTindex(self, geometryWKTindex):
self.geometryWKTindex = geometryWKTindex

View file

@ -23,8 +23,15 @@
class GetGeometryDataResponse(object):
def __init__(self):
self.geometryWKTs = None
self.geoData = None
def getGeometryWKTs(self):
return self.geometryWKTs
def setGeometryWKTs(self, geometryWKTs):
self.geometryWKTs = geometryWKTs
def getGeoData(self):
return self.geoData

View file

@ -28,19 +28,18 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 06/03/13 dgilling Initial Creation.
# 01/06/14 #2537 bsteffen Share geometry WKT.
#
#
from ufpy.dataaccess import IGeometryData
from ufpy.dataaccess import PyData
import shapely.wkt
class PyGeometryData(IGeometryData, PyData.PyData):
def __init__(self, geoDataRecord):
def __init__(self, geoDataRecord, geometry):
PyData.PyData.__init__(self, geoDataRecord)
self.__geometry = shapely.wkt.loads(geoDataRecord.getGeometryWKT())
self.__geometry = geometry
self.__dataMap = {}
tempDataMap = geoDataRecord.getDataMap()
for key, value in tempDataMap.items():

View file

@ -28,10 +28,12 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 05/21/13 #2023 dgilling Initial Creation.
# 01/06/14 #2537 bsteffen Share geometry WKT.
#
import numpy
import shapely.wkt
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.impl import DefaultDataRequest
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetAvailableLocationNamesRequest
@ -43,6 +45,7 @@ from ufpy import ThriftClient
from ufpy.dataaccess import PyGeometryData
from ufpy.dataaccess import PyGridData
class ThriftClientRouter(object):
def __init__(self, host='localhost'):
@ -97,10 +100,14 @@ class ThriftClientRouter(object):
except TypeError:
geoDataRequest.setRequestedPeriod(times)
response = self._client.sendRequest(geoDataRequest)
geometries = []
for wkt in response.getGeometryWKTs():
geometries.append(shapely.wkt.loads(wkt))
retVal = []
for geoDataRecord in response.getGeoData():
retVal.append(PyGeometryData.PyGeometryData(geoDataRecord))
geom = geometries[geoDataRecord.getGeometryWKTindex()]
retVal.append(PyGeometryData.PyGeometryData(geoDataRecord, geom))
return retVal
def getAvailableLocationNames(self, request):