From 98cf9048308f9a7c7cae6c71f2b2a4802fa65d18 Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Mon, 13 Mar 2023 20:45:51 +0000 Subject: [PATCH] first very incomplete deployment doc --- src/PamModel/PamModel.java | 3 +-- src/tethys/TethysLocationFuncs.java | 26 ++++++++++++++++++ src/tethys/TethysTimeFuncs.java | 39 +++++++++++++++++++++++++++ src/tethys/output/TethysExporter.java | 37 ++++++++++++++++++++++--- 4 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 src/tethys/TethysLocationFuncs.java create mode 100644 src/tethys/TethysTimeFuncs.java diff --git a/src/PamModel/PamModel.java b/src/PamModel/PamModel.java index 005c16d0..8506197d 100644 --- a/src/PamModel/PamModel.java +++ b/src/PamModel/PamModel.java @@ -473,8 +473,7 @@ final public class PamModel implements PamModelInterface, PamSettings { mi.setToolTipText("Interface to Tethys Database"); mi.setModulesMenuGroup(utilitiesGroup); mi.setMaxNumber(1); - } - + } /* diff --git a/src/tethys/TethysLocationFuncs.java b/src/tethys/TethysLocationFuncs.java new file mode 100644 index 00000000..d3d084c1 --- /dev/null +++ b/src/tethys/TethysLocationFuncs.java @@ -0,0 +1,26 @@ +package tethys; + +import GPS.GpsData; +import nilus.Deployment; + +/** + * Function(s) to get location information for Tethys in the required format. + * @author dg50 + * + */ +public class TethysLocationFuncs { + + + /** + * Get everything we need for a deployment document including the track # + * and the deployment / recovery information. Basically this means we + * have to load the GPS data, then potentially filter it. Slight risk this + * may all be too much for memory, but give it a go by loading GPS data for + * the deployment times. + * @param deployment + */ + public static void getTrackAndPositionData(Deployment deployment) { + long start = TethysTimeFuncs.millisFromGregorianXML(deployment.getDeploymentDetails().getAudioTimeStamp()); + } + +} diff --git a/src/tethys/TethysTimeFuncs.java b/src/tethys/TethysTimeFuncs.java new file mode 100644 index 00000000..53f6a666 --- /dev/null +++ b/src/tethys/TethysTimeFuncs.java @@ -0,0 +1,39 @@ +package tethys; + +import java.util.GregorianCalendar; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; + +public class TethysTimeFuncs { + + /* + * Copied from http://www.java2s.com/Code/Java/Development-Class/ConvertsagiventimeinmillisecondsintoaXMLGregorianCalendarobject.htm + */ + public static XMLGregorianCalendar xmlGregCalFromMillis(long millis) { + try { + final GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTimeInMillis(millis); + return DatatypeFactory.newInstance().newXMLGregorianCalendar( + calendar); + } + catch (final DatatypeConfigurationException ex) { + System.out.println("Unable to convert date '%s' to an XMLGregorianCalendar object"); + return null; + } + } + + /** + * Convert a Gregorian calendar value back to milliseconds. + * @param xmlGregorian + * @return + */ + public static Long millisFromGregorianXML(XMLGregorianCalendar xmlGregorian) { + if (xmlGregorian == null) { + return null; + } + GregorianCalendar gc2 = xmlGregorian.toGregorianCalendar(); + return gc2.getTimeInMillis(); + } +} diff --git a/src/tethys/output/TethysExporter.java b/src/tethys/output/TethysExporter.java index da49566f..b425811e 100644 --- a/src/tethys/output/TethysExporter.java +++ b/src/tethys/output/TethysExporter.java @@ -28,8 +28,11 @@ import generalDatabase.DBSchemaWriter; import generalDatabase.SQLLogging; import metadata.MetaDataContol; import metadata.deployment.DeploymentData; +import nilus.Deployment; import nilus.DeploymentRecoveryDetails; import tethys.TethysControl; +import tethys.TethysLocationFuncs; +import tethys.TethysTimeFuncs; import tethys.dbxml.DBXMLConnect; import tethys.pamdata.TethysDataProvider; import tethys.pamdata.TethysSchema; @@ -168,9 +171,10 @@ public class TethysExporter { /* * This will become the main loop over deployment documents */ + int i = 0; for (DeploymentRecoveryPair drd : deployRecover) { - + Deployment deployment = createDeploymentDocument(i++, drd); } @@ -200,6 +204,19 @@ public class TethysExporter { return true; } + private Deployment createDeploymentDocument(int i, DeploymentRecoveryPair drd) { + Deployment deployment = new Deployment(); + deployment.setDeploymentDetails(drd.deploymentDetails); + deployment.setRecoveryDetails(drd.recoveryDetails); + + TethysLocationFuncs.getTrackAndPositionData(deployment); + + + + return deployment; + } + + /** * find Deployment data. This is stored in a separate PAMGuard module, which may not * be present. @@ -295,9 +312,9 @@ public class TethysExporter { // just load everything. Probably OK for the acqusition, but will bring down daqInfoDataBlock.loadViewerData(0, Long.MAX_VALUE, null); ArrayList allStatusData = daqInfoDataBlock.getDataCopy(); + long dataStart = Long.MAX_VALUE; + long dataEnd = Long.MIN_VALUE; if (allStatusData != null && allStatusData.size() > 0) { - long dataStart = Long.MAX_VALUE; - long dataEnd = Long.MIN_VALUE; // find the number of times it started and stopped .... int nStart = 0, nStop = 0, nFile=0; for (DaqStatusDataUnit daqStatus : allStatusData) { @@ -336,8 +353,20 @@ public class TethysExporter { // */ //// for () // } + DeploymentRecoveryPair pair = new DeploymentRecoveryPair(); + DeploymentRecoveryDetails deployment = new DeploymentRecoveryDetails(); + DeploymentRecoveryDetails recovery = new DeploymentRecoveryDetails(); + pair.deploymentDetails = deployment; + pair.recoveryDetails = recovery; - return null; + deployment.setTimeStamp(TethysTimeFuncs.xmlGregCalFromMillis(dataStart)); + deployment.setAudioTimeStamp(TethysTimeFuncs.xmlGregCalFromMillis(dataStart)); + recovery.setTimeStamp(TethysTimeFuncs.xmlGregCalFromMillis(dataEnd)); + recovery.setAudioTimeStamp(TethysTimeFuncs.xmlGregCalFromMillis(dataEnd)); + + ArrayList drPairs = new ArrayList<>(); + drPairs.add(pair); + return drPairs; }