awips2/cave/com.raytheon.viz.gfe/python/query/DBSSClient.py
2022-05-05 12:34:50 -05:00

148 lines
4.9 KiB
Python

##
# 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.
##
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------- -------- --------- --------------------------------------------
# Sep 01, 2014 3572 randerso Fix getTopo
# Apr 23, 2015 4259 njensen Updated for new JEP API
# Dec 02, 2015 18356 yteng Fix typo in __getitem__
# Jan 04, 2018 7178 randerso removed populate call
# Apr 27, 2018 7256 randerso Raise KeyError instead of returning null for
# missing parm
#
########################################################################
import DatabaseID, AbsTime, JUtil
from com.raytheon.uf.common.dataplugin.gfe.db.objects import DatabaseID as JavaDatabaseID
from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceID
from com.raytheon.uf.common.dataplugin.gfe.db.objects import ParmID
import numpy
class DBSSWE:
def __init__(self, parm):
self._parm = parm
self.parmName = parm.getParmID().getCompositeName()
def keys(self):
#return map(lambda x : (
# x.getGridTime().getStart().unixTime(),
# x.getGridTime().getEnd().unixTime()),
# self._parm.getGridInventory())
result = []
times = self._parm.getGridInventory()
for x in times:
start = AbsTime.AbsTime(x.getGridTime().getStart())
end = AbsTime.AbsTime(x.getGridTime().getEnd())
encodedTime = (start.unixTime(), end.unixTime())
result.append(encodedTime)
return result
def __getitem__(self, key):
for t, g in map(lambda x, y: (x, y), list(self.keys()),
self._parm.getGridInventory()):
if t == key:
gridSlice = g.getGridSlice()
result = gridSlice.getNDArray()
if type(result) is numpy.ndarray and result.dtype == numpy.int8:
# discrete or weather
dkeys = JUtil.javaObjToPyVal(gridSlice.getKeyList())
result = [result, dkeys]
return result
return None
def __iter__(self):
return iter(self.keys())
def __contains__(self, item):
return item in self.keys()
class DBSSDB:
def __init__(self, pmgr, key):
javaDbId = JavaDatabaseID(key)
self._pmgr = pmgr
self._dbid = DatabaseID.DatabaseID(javaDbId)
def keys(self):
return [str(x.getCompositeName()) for x in self._pmgr.getAvailableParms(self._dbid.toJavaObj())]
def __getitem__(self, key):
#pid = AFPS.ParmID_string(key + ":" + str(self._dbid))
pid = ParmID(key + ":" + str(self._dbid))
parm = self._pmgr.getParm(pid)
if parm:
return DBSSWE(parm)
else:
raise KeyError("Weather element %s is not loaded." % key)
def __iter__(self):
return iter(self.keys())
def __contains__(self, item):
return item in self.keys()
class DBSSClient:
def __init__(self, dataMgr):
self._dataMgr = dataMgr
self._pmgr = dataMgr.getParmManager()
self._refmgr = dataMgr.getRefManager()
self._tmgr = dataMgr.getTopoManager()
self.siteIDs = [dataMgr.getSiteID()]
def keys(self):
dbs = self._pmgr.getAvailableDbs()
availDbs = []
for i in range(dbs.size()):
availDbs.append(dbs.get(i))
return [str(x) for x in availDbs]
def __getitem__(self, key):
return DBSSDB(self._pmgr, key)
def editAreaNames(self):
result = []
avail = self._refmgr.getAvailableSets()
size = avail.size()
for x in range(size):
result.append(avail.get(x).getName())
#return map(lambda x : x.name(), self._refmgr.getAvailableSets())
return result
def getEditArea(self, name):
rs = self._refmgr.loadRefSet(ReferenceID(name))
if rs.isQuery():
return rs.getQuery()
return rs.getGrid().getNDArray()
def getOpMode(self):
return self._dataMgr.getOpMode().name()
def getTopo(self):
return self._tmgr.getCompositeTopo().getNDArray()
def __iter__(self):
return iter(self.keys())
def __contains__(self, item):
return item in self.keys()