mirror of
https://github.com/PAMGuard/PAMGuard.git
synced 2024-11-25 08:32:32 +00:00
Tethys Localisation output
Not all types, but getting there.
This commit is contained in:
parent
36455153a2
commit
2929372533
@ -6,7 +6,7 @@
|
|||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-19">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="module" value="true"/>
|
<attribute name="module" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
@ -1,16 +1,26 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.fieldPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.fieldSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.localPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.localSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
|
||||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.3
|
org.eclipse.jdt.core.compiler.compliance=11
|
||||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||||
org.eclipse.jdt.core.compiler.release=disabled
|
org.eclipse.jdt.core.compiler.release=disabled
|
||||||
org.eclipse.jdt.core.compiler.source=1.3
|
org.eclipse.jdt.core.compiler.source=11
|
||||||
|
5
.settings/org.eclipse.jdt.ui.prefs
Normal file
5
.settings/org.eclipse.jdt.ui.prefs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.ui.exception.name=e
|
||||||
|
org.eclipse.jdt.ui.gettersetter.use.is=true
|
||||||
|
org.eclipse.jdt.ui.keywordthis=false
|
||||||
|
org.eclipse.jdt.ui.overrideannotation=true
|
4
pom.xml
4
pom.xml
@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.pamguard</groupId>
|
<groupId>org.pamguard</groupId>
|
||||||
<artifactId>Pamguard</artifactId>
|
<artifactId>Pamguard</artifactId>
|
||||||
<version>2.02.11d</version>
|
<version>2.02.12</version>
|
||||||
<name>Pamguard</name>
|
<name>Pamguard</name>
|
||||||
<description>Pamguard using Maven to control dependencies</description>
|
<description>Pamguard using Maven to control dependencies</description>
|
||||||
<url>www.pamguard.org</url>
|
<url>www.pamguard.org</url>
|
||||||
@ -580,7 +580,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fazecast</groupId>
|
<groupId>com.fazecast</groupId>
|
||||||
<artifactId>jSerialComm</artifactId>
|
<artifactId>jSerialComm</artifactId>
|
||||||
<version>2.5.3</version>
|
<version>2.11.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/edu.emory.mathcs/JTransforms -->
|
<!-- https://mvnrepository.com/artifact/edu.emory.mathcs/JTransforms -->
|
||||||
|
@ -724,8 +724,16 @@ public class TethysControl extends PamControlledUnit implements PamSettings, Tet
|
|||||||
*/
|
*/
|
||||||
public void exportedDetections(PamDataBlock dataBlock) {
|
public void exportedDetections(PamDataBlock dataBlock) {
|
||||||
countProjectDetections();
|
countProjectDetections();
|
||||||
// sendStateUpdate(new TethysState(StateType.NEWPAMGUARDSELECTION, Collection.Detections));
|
// sendStateUpdate(new TethysState(StateType.DELETEDATA));
|
||||||
|
sendStateUpdate(new TethysState(StateType.NEWPAMGUARDSELECTION, Collection.Detections));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deletedDetections(PamDataBlock dataBlock) {
|
||||||
|
countProjectDetections();
|
||||||
|
// sendStateUpdate(new TethysState(StateType.DELETEDATA));
|
||||||
|
sendStateUpdate(new TethysState(StateType.NEWPAMGUARDSELECTION, Collection.Detections));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the calibrationHandler
|
* @return the calibrationHandler
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package tethys.detection;
|
package tethys.detection;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -30,6 +31,8 @@ import nilus.AlgorithmType;
|
|||||||
import nilus.AlgorithmType.SupportSoftware;
|
import nilus.AlgorithmType.SupportSoftware;
|
||||||
import nilus.Localize.Effort;
|
import nilus.Localize.Effort;
|
||||||
import nilus.Localize.Effort.CoordinateReferenceSystem;
|
import nilus.Localize.Effort.CoordinateReferenceSystem;
|
||||||
|
import nilus.Localize.Effort.ReferencedDocuments;
|
||||||
|
import nilus.Localize.Effort.ReferencedDocuments.Document;
|
||||||
import nilus.Localize.Localizations;
|
import nilus.Localize.Localizations;
|
||||||
import nilus.DataSourceType;
|
import nilus.DataSourceType;
|
||||||
import nilus.Deployment;
|
import nilus.Deployment;
|
||||||
@ -49,6 +52,7 @@ import tethys.dbxml.DBXMLConnect;
|
|||||||
import tethys.dbxml.TethysException;
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.deployment.DeploymentHandler;
|
import tethys.deployment.DeploymentHandler;
|
||||||
import tethys.localization.CoordinateName;
|
import tethys.localization.CoordinateName;
|
||||||
|
import tethys.localization.LocalizationHandler;
|
||||||
import tethys.localization.LocalizationSubType;
|
import tethys.localization.LocalizationSubType;
|
||||||
import tethys.localization.LocalizationType;
|
import tethys.localization.LocalizationType;
|
||||||
import tethys.localization.PLocalization;
|
import tethys.localization.PLocalization;
|
||||||
@ -411,6 +415,8 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
DeploymentHandler depHandler = tethysControl.getDeploymentHandler();
|
DeploymentHandler depHandler = tethysControl.getDeploymentHandler();
|
||||||
ArrayList<PDeployment> deployments = depHandler.getMatchedDeployments();
|
ArrayList<PDeployment> deployments = depHandler.getMatchedDeployments();
|
||||||
|
|
||||||
|
LocalizationHandler localizationHandler = tethysControl.getLocalizationHandler();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main documents for both dets and locs.
|
* The main documents for both dets and locs.
|
||||||
*/
|
*/
|
||||||
@ -444,7 +450,7 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
exportObserver.update(prog);
|
exportObserver.update(prog);
|
||||||
granularityHandler.prepare(deployment.getAudioStart());
|
granularityHandler.prepare(deployment.getAudioStart());
|
||||||
|
|
||||||
List<Detection> detectionList;
|
List<Detection> detectionList = null;
|
||||||
|
|
||||||
// export everything in that deployment.
|
// export everything in that deployment.
|
||||||
// need to loop through all map points in this interval.
|
// need to loop through all map points in this interval.
|
||||||
@ -467,19 +473,19 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
// onEffortDetections.
|
// onEffortDetections.
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
else {
|
// else {
|
||||||
onEffortDetections = null;
|
// onEffortDetections = null;
|
||||||
detectionList = null;
|
// detectionList = null;
|
||||||
}
|
// }
|
||||||
if (localiseDocument == null && streamExportParams.exportLocalisations) {
|
if (localiseDocument == null && streamExportParams.exportLocalisations) {
|
||||||
localiseDocument = startLocalisationDocument(deployment, dataBlock, streamExportParams);
|
localiseDocument = startLocalisationDocument(deployment, detectionsDocument, dataBlock, streamExportParams);
|
||||||
Effort eff = localiseDocument.getEffort();
|
Effort eff = localiseDocument.getEffort();
|
||||||
localiseDocument.getEffort().setStart(TethysTimeFuncs.xmlGregCalFromMillis(deployment.getAudioStart()));
|
localiseDocument.getEffort().setStart(TethysTimeFuncs.xmlGregCalFromMillis(deployment.getAudioStart()));
|
||||||
localisations = localiseDocument.getLocalizations();
|
localisations = localiseDocument.getLocalizations();
|
||||||
}
|
}
|
||||||
else {
|
// else {
|
||||||
localisations = null;
|
// localisations = null;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (mapPoint.getEndTime() < deployment.getAudioStart()) {
|
if (mapPoint.getEndTime() < deployment.getAudioStart()) {
|
||||||
continue;
|
continue;
|
||||||
@ -495,17 +501,24 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
/*
|
/*
|
||||||
* Here is where we need to handle the different granularities.
|
* Here is where we need to handle the different granularities.
|
||||||
*/
|
*/
|
||||||
|
if (streamExportParams.exportDetections) {
|
||||||
Detection dets[] = granularityHandler.addDataUnit(dataUnit);
|
Detection dets[] = granularityHandler.addDataUnit(dataUnit);
|
||||||
if (dets != null) {
|
if (dets != null) {
|
||||||
for (int dd = 0; dd < dets.length; dd++) {
|
for (int dd = 0; dd < dets.length; dd++) {
|
||||||
exportCount++;
|
exportCount++;
|
||||||
documentCount++;
|
documentCount++;
|
||||||
if (streamExportParams.exportDetections) {
|
|
||||||
detectionList.add(dets[dd]);
|
detectionList.add(dets[dd]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Localisations don't do granularity, so do all.
|
||||||
|
*/
|
||||||
if (streamExportParams.exportLocalisations) {
|
if (streamExportParams.exportLocalisations) {
|
||||||
// convert the dets into localisations and add them.
|
// convert the dets into localisations and add them.
|
||||||
}
|
nilus.LocalizationType localization = localizationHandler.createLocalization(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
if (localization != null) {
|
||||||
|
localisations.getLocalization().add(localization);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -606,9 +619,9 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
prog = new DetectionExportProgress(null, null,totalMapPoints, totalMapPoints,
|
// prog = new DetectionExportProgress(null, null,totalMapPoints, totalMapPoints,
|
||||||
lastUnitTime, totalCount, exportCount, skipCount, DetectionExportProgress.STATE_COMPLETE);
|
// lastUnitTime, totalCount, exportCount, skipCount, DetectionExportProgress.STATE_COMPLETE);
|
||||||
exportObserver.update(prog);
|
// exportObserver.update(prog);
|
||||||
return DetectionExportProgress.STATE_COMPLETE;
|
return DetectionExportProgress.STATE_COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,7 +684,7 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
return detections;
|
return detections;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Localize startLocalisationDocument(PDeployment deployment, PamDataBlock dataBlock,
|
private Localize startLocalisationDocument(PDeployment deployment, Detections detectionsDocument, PamDataBlock dataBlock,
|
||||||
StreamExportParams exportParams) {
|
StreamExportParams exportParams) {
|
||||||
Localize localisations = new Localize();
|
Localize localisations = new Localize();
|
||||||
try {
|
try {
|
||||||
@ -680,8 +693,9 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (localisations.getEffort() == null) {
|
Effort eff = localisations.getEffort();
|
||||||
Effort eff = new Effort();
|
if (eff == null) {
|
||||||
|
eff = new Effort();
|
||||||
try {
|
try {
|
||||||
Helper.createRequiredElements(eff);
|
Helper.createRequiredElements(eff);
|
||||||
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException e) {
|
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException e) {
|
||||||
@ -690,6 +704,30 @@ public class DetectionsHandler extends CollectionHandler {
|
|||||||
}
|
}
|
||||||
localisations.setEffort(eff);
|
localisations.setEffort(eff);
|
||||||
}
|
}
|
||||||
|
if (detectionsDocument != null) {
|
||||||
|
/*
|
||||||
|
* add the reference document information.
|
||||||
|
* Within PAMGuard, this will always be 1:1 with a Detections doc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
ReferencedDocuments refDocs = eff.getReferencedDocuments();
|
||||||
|
if (refDocs == null) {
|
||||||
|
refDocs = new ReferencedDocuments();
|
||||||
|
try {
|
||||||
|
Helper.createRequiredElements(refDocs);
|
||||||
|
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
eff.setReferencedDocuments(refDocs);
|
||||||
|
}
|
||||||
|
Document detectsDoc = new Document();
|
||||||
|
detectsDoc.setId(detectionsDocument.getId());
|
||||||
|
detectsDoc.setType(Collection.Detections.collectionName());
|
||||||
|
detectsDoc.setIndex(BigInteger.ZERO);
|
||||||
|
eff.getReferencedDocuments().getDocument().add(detectsDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TethysDataProvider dataProvider = dataBlock.getTethysDataProvider(tethysControl);
|
TethysDataProvider dataProvider = dataBlock.getTethysDataProvider(tethysControl);
|
||||||
|
|
||||||
String prefix = deployment.nilusObject.getId() + "_" + dataProvider.getDetectionsName();
|
String prefix = deployment.nilusObject.getId() + "_" + dataProvider.getDetectionsName();
|
||||||
|
@ -1,24 +1,40 @@
|
|||||||
package tethys.localization;
|
package tethys.localization;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import PamDetection.AbstractLocalisation;
|
||||||
|
import PamDetection.LocContents;
|
||||||
|
import PamUtils.LatLong;
|
||||||
|
import PamUtils.PamUtils;
|
||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import nilus.CylindricalCoordinateType;
|
import PamguardMVC.PamDataUnit;
|
||||||
|
import nilus.AngularCoordinateType;
|
||||||
|
import nilus.BearingType;
|
||||||
|
import nilus.CoordinateType;
|
||||||
|
import nilus.Helper;
|
||||||
import nilus.LocalizationType;
|
import nilus.LocalizationType;
|
||||||
|
import nilus.LocalizationType.References;
|
||||||
|
import nilus.LocalizationType.References.Reference;
|
||||||
import nilus.Localize;
|
import nilus.Localize;
|
||||||
|
import nilus.SpeciesIDType;
|
||||||
import nilus.Localize.Effort.CoordinateReferenceSystem;
|
import nilus.Localize.Effort.CoordinateReferenceSystem;
|
||||||
import tethys.Collection;
|
import tethys.Collection;
|
||||||
import tethys.CollectionHandler;
|
import tethys.CollectionHandler;
|
||||||
import tethys.TethysControl;
|
import tethys.TethysControl;
|
||||||
|
import tethys.TethysTimeFuncs;
|
||||||
import tethys.detection.StreamDetectionsSummary;
|
import tethys.detection.StreamDetectionsSummary;
|
||||||
import tethys.niluswraps.NilusDataWrapper;
|
import tethys.niluswraps.NilusDataWrapper;
|
||||||
import tethys.niluswraps.PDeployment;
|
import tethys.niluswraps.PDeployment;
|
||||||
|
import tethys.output.StreamExportParams;
|
||||||
|
import tethys.pamdata.AutoTethysProvider;
|
||||||
|
import tethys.species.DataBlockSpeciesManager;
|
||||||
|
import tethys.species.SpeciesMapItem;
|
||||||
|
|
||||||
public class LocalizationHandler extends CollectionHandler {
|
public class LocalizationHandler extends CollectionHandler {
|
||||||
|
|
||||||
public LocalizationHandler(TethysControl tethysControl) {
|
public LocalizationHandler(TethysControl tethysControl) {
|
||||||
super(tethysControl, Collection.Localizations);
|
super(tethysControl, Collection.Localizations);
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// public LocalizationType getLoc() {
|
// public LocalizationType getLoc() {
|
||||||
@ -75,4 +91,231 @@ public class LocalizationHandler extends CollectionHandler {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Localization element object to add to a Localizations document.
|
||||||
|
* @param localiseDocument
|
||||||
|
* @param dataBlock
|
||||||
|
* @param dataUnit
|
||||||
|
* @param streamExportParams
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public LocalizationType createLocalization(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
/*
|
||||||
|
* Get the current type from the document. This should always exist, so
|
||||||
|
* just go for it, then switch on the value to make the localisation.
|
||||||
|
*/
|
||||||
|
CoordinateReferenceSystem coordSystem = localiseDocument.getEffort().getCoordinateReferenceSystem();
|
||||||
|
String name = coordSystem.getName();
|
||||||
|
CoordinateName coordName = CoordinateName.valueOf(name);
|
||||||
|
if (coordName == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
LocalizationType locEl = null;
|
||||||
|
switch (coordName) {
|
||||||
|
case Cartesian:
|
||||||
|
locEl = createCartesianLoc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
case Cylindrical:
|
||||||
|
locEl = createCylindricalLoc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
case PerpindicularRange:
|
||||||
|
locEl = createPerpRange(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
case Polar:
|
||||||
|
locEl = createPolarLoc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
case Range:
|
||||||
|
locEl = createRangeLoc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
case Spherical:
|
||||||
|
locEl = createSphericalLoc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
case UTM:
|
||||||
|
break;
|
||||||
|
case WGS84:
|
||||||
|
locEl = createWGS84Loc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return locEl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType makeBaseLoc(PamDataBlock dataBlock, PamDataUnit dataUnit) {
|
||||||
|
LocalizationType locType = new LocalizationType();
|
||||||
|
try {
|
||||||
|
Helper.createRequiredElements(locType);
|
||||||
|
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
locType.setTimeStamp(TethysTimeFuncs.xmlGregCalFromMillis(dataUnit.getTimeMilliseconds()));
|
||||||
|
|
||||||
|
DataBlockSpeciesManager spManager = dataBlock.getDatablockSpeciesManager();
|
||||||
|
if (spManager != null) {
|
||||||
|
SpeciesMapItem speciesStuff = spManager.getSpeciesItem(dataUnit);
|
||||||
|
SpeciesIDType species = new SpeciesIDType();
|
||||||
|
if (speciesStuff != null) {
|
||||||
|
species.setValue(BigInteger.valueOf(speciesStuff.getItisCode()));
|
||||||
|
locType.setSpeciesId(species);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
References references = locType.getReferences();
|
||||||
|
if (references == null) {
|
||||||
|
references = new References();
|
||||||
|
try {
|
||||||
|
Helper.createRequiredElements(references);
|
||||||
|
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
locType.setReferences(references);
|
||||||
|
}
|
||||||
|
Reference reference = new Reference();
|
||||||
|
reference.setIndex(BigInteger.valueOf(dataUnit.getUID()));
|
||||||
|
reference.setEventRef("UID");
|
||||||
|
locType.getReferences().getReference().add(reference);
|
||||||
|
|
||||||
|
return locType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get angle in degrees constrained to 0-360
|
||||||
|
* @param radians
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private double constrainRadianAngle(double radians) {
|
||||||
|
double deg = Math.toDegrees(radians);
|
||||||
|
if (Math.abs(deg) > 3600) {
|
||||||
|
return 359.9;
|
||||||
|
}
|
||||||
|
deg = PamUtils.constrainedAngle(deg);
|
||||||
|
deg = AutoTethysProvider.roundDecimalPlaces(deg, 2);
|
||||||
|
return deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createWGS84Loc(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
AbstractLocalisation loc = dataUnit.getLocalisation();
|
||||||
|
if (loc == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
LatLong latlong = loc.getLatLong(0);
|
||||||
|
if (latlong == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
LocalizationType locType = makeBaseLoc(dataBlock, dataUnit);
|
||||||
|
CoordinateType coord = new CoordinateType();
|
||||||
|
coord.setX(latlong.getLongitude());
|
||||||
|
coord.setY(latlong.getLatitude());
|
||||||
|
coord.setZ(latlong.getHeight());
|
||||||
|
|
||||||
|
locType.setCoordinate(coord);
|
||||||
|
|
||||||
|
return locType;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createSphericalLoc(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createRangeLoc(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createBearingLoc(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
AbstractLocalisation loc = dataUnit.getLocalisation();
|
||||||
|
if (loc == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
LocalizationType locType = makeBaseLoc(dataBlock, dataUnit);
|
||||||
|
double[] angles = loc.getAngles();
|
||||||
|
if (angles == null || angles.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
BearingType angType = new BearingType();
|
||||||
|
angType.setAngle1(constrainRadianAngle(angles[0]));
|
||||||
|
if (angles.length >= 2) {
|
||||||
|
angType.setAngle2(constrainRadianAngle(angles[1]));
|
||||||
|
}
|
||||||
|
locType.setBearing(angType);
|
||||||
|
|
||||||
|
double[] angErr = loc.getAngleErrors();
|
||||||
|
if (angErr != null && angErr.length >= 1) {
|
||||||
|
BearingType angErrType = new BearingType();
|
||||||
|
angErrType.setAngle1(constrainRadianAngle(angErr[0]));
|
||||||
|
if (angErr.length >= 2) {
|
||||||
|
angErrType.setAngle2(constrainRadianAngle(angErr[1]));
|
||||||
|
}
|
||||||
|
locType.setBearingError(angErrType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return locType;
|
||||||
|
}
|
||||||
|
private LocalizationType createPolarLoc(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
AbstractLocalisation loc = dataUnit.getLocalisation();
|
||||||
|
if (loc == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (loc.hasLocContent(LocContents.HAS_RANGE) == false) {
|
||||||
|
|
||||||
|
// do the more basic bearing type instead.
|
||||||
|
return createBearingLoc(localiseDocument, dataBlock, dataUnit, streamExportParams);
|
||||||
|
}
|
||||||
|
LocalizationType locType = makeBaseLoc(dataBlock, dataUnit);
|
||||||
|
double[] angles = loc.getAngles();
|
||||||
|
if (angles == null || angles.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
AngularCoordinateType angType = new AngularCoordinateType();
|
||||||
|
angType.setAngle1(constrainRadianAngle(angles[0]));
|
||||||
|
if (angles.length >= 2) {
|
||||||
|
angType.setAngle2(constrainRadianAngle(angles[1]));
|
||||||
|
}
|
||||||
|
if (loc.hasLocContent(LocContents.HAS_RANGE)) {
|
||||||
|
angType.setDistanceM(loc.getRange(0));
|
||||||
|
}
|
||||||
|
locType.setAngularCoordinate(angType);
|
||||||
|
|
||||||
|
double[] angErr = loc.getAngleErrors();
|
||||||
|
if (angErr != null && angErr.length >= 1) {
|
||||||
|
AngularCoordinateType angErrType = new AngularCoordinateType();
|
||||||
|
angErrType.setAngle1(constrainRadianAngle(angErr[0]));
|
||||||
|
if (angErr.length >= 2) {
|
||||||
|
angErrType.setAngle2(constrainRadianAngle(angErr[1]));
|
||||||
|
}
|
||||||
|
if (loc.hasLocContent(LocContents.HAS_RANGEERROR)) {
|
||||||
|
angErrType.setDistanceM(loc.getRangeError(0));
|
||||||
|
}
|
||||||
|
locType.setAngularCoordinateError(angErrType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return locType;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createPerpRange(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createCylindricalLoc(Localize localiseDocument, PamDataBlock dataBlock,
|
||||||
|
PamDataUnit dataUnit, StreamExportParams streamExportParams) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalizationType createCartesianLoc(Localize localiseDocument, PamDataBlock dataBlock, PamDataUnit dataUnit,
|
||||||
|
StreamExportParams streamExportParams) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -102,22 +102,17 @@ abstract public class AutoTethysProvider implements TethysDataProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AlgorithmType getAlgorithm() {
|
public AlgorithmType getAlgorithm() {
|
||||||
|
/**
|
||||||
|
* Probably need to split this to provide detection algorithm parameters and
|
||||||
|
* localisation algorithm parameters, or pass in the document type as a function
|
||||||
|
* argument.
|
||||||
|
*/
|
||||||
AlgorithmType algorithm = new AlgorithmType();
|
AlgorithmType algorithm = new AlgorithmType();
|
||||||
try {
|
try {
|
||||||
nilus.Helper.createRequiredElements(algorithm);
|
nilus.Helper.createRequiredElements(algorithm);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException | IllegalAccessException | InstantiationException e) {
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (InstantiationException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
// algorithm.setMethod(this.getAlgorithmMethod());
|
|
||||||
// algorithm.setSoftware("PAMGuard");
|
|
||||||
// algorithm.setVersion(PamguardVersionInfo.version);
|
|
||||||
nilus.AlgorithmType.Parameters algoParameters = this.getAlgorithmParameters();
|
nilus.AlgorithmType.Parameters algoParameters = this.getAlgorithmParameters();
|
||||||
if (algoParameters != null) {
|
if (algoParameters != null) {
|
||||||
algorithm.setParameters(algoParameters);
|
algorithm.setParameters(algoParameters);
|
||||||
|
@ -129,9 +129,13 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
return mainPanel;
|
return mainPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public void selectDataBlock(PamDataBlock dataBlock) {
|
* update table for this datablock
|
||||||
if (this.dataBlock == dataBlock) {
|
* @param dataBlock datablock
|
||||||
|
* @param always always update, even if datablock hasn't changed.
|
||||||
|
*/
|
||||||
|
public void selectDataBlock(PamDataBlock dataBlock, boolean always) {
|
||||||
|
if (this.dataBlock == dataBlock && !always) {
|
||||||
return; // stops lots of requerying, which matters when database is large.
|
return; // stops lots of requerying, which matters when database is large.
|
||||||
}
|
}
|
||||||
this.dataBlock = dataBlock;
|
this.dataBlock = dataBlock;
|
||||||
@ -147,6 +151,11 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
w.start();
|
w.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectDataBlock(PamDataBlock dataBlock) {
|
||||||
|
selectDataBlock(dataBlock, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void taskFinished(String result) {
|
public void taskFinished(String result) {
|
||||||
tableModel.fireTableDataChanged();
|
tableModel.fireTableDataChanged();
|
||||||
@ -169,13 +178,19 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(TethysState tethysState) {
|
public void updateState(TethysState tethysState) {
|
||||||
|
// boolean fullUpdate = needFullUpdate(tethysState);
|
||||||
if (dataBlock != null) {
|
if (dataBlock != null) {
|
||||||
PamDataBlock currBlock = dataBlock;
|
PamDataBlock currBlock = dataBlock;
|
||||||
selectDataBlock(null);
|
selectDataBlock(null);
|
||||||
selectDataBlock(dataBlock);
|
selectDataBlock(currBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// private boolean needFullUpdate(TethysState tethysState) {
|
||||||
|
// // TODO Auto-generated method stub
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
private class MouseActions extends MouseAdapter {
|
private class MouseActions extends MouseAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -235,7 +250,7 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
menuItem.addActionListener(new ActionListener() {
|
menuItem.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
// deleteDocument(pDets);
|
deleteDocument(pDets);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
popMenu.add(menuItem);
|
popMenu.add(menuItem);
|
||||||
@ -305,13 +320,13 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void taskFinished(Integer result) {
|
public void taskFinished(Integer result) {
|
||||||
getTethysControl().exportedDetections(dataBlock);
|
getTethysControl().deletedDetections(dataBlock);
|
||||||
selectDataBlock(dataBlock); // force table update.
|
selectDataBlock(dataBlock, true); // force table update.
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void deleteDocument(PDetections pDets) {
|
protected void deleteDocument(NilusDataWrapper pDets) {
|
||||||
String msg = String.format("Are you sure you want to delete the Detections document %s ?", pDets.getDocumentId());
|
String msg = String.format("Are you sure you want to delete the Detections document %s ?", pDets.getDocumentId());
|
||||||
int ans = WarnOnce.showWarning(PamGui.findComponentWindow(mainPanel), "Delete Document", msg, WarnOnce.OK_CANCEL_OPTION);
|
int ans = WarnOnce.showWarning(PamGui.findComponentWindow(mainPanel), "Delete Document", msg, WarnOnce.OK_CANCEL_OPTION);
|
||||||
if (ans != WarnOnce.OK_OPTION) {
|
if (ans != WarnOnce.OK_OPTION) {
|
||||||
@ -322,8 +337,8 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
} catch (TethysException e) {
|
} catch (TethysException e) {
|
||||||
getTethysControl().showException(e);
|
getTethysControl().showException(e);
|
||||||
}
|
}
|
||||||
getTethysControl().exportedDetections(dataBlock);
|
getTethysControl().deletedDetections(dataBlock);
|
||||||
selectDataBlock(dataBlock); // force table update.
|
selectDataBlock(dataBlock, true); // force table update.
|
||||||
}
|
}
|
||||||
|
|
||||||
private void displayDocument(NilusDataWrapper pDets) {
|
private void displayDocument(NilusDataWrapper pDets) {
|
||||||
|
@ -18,6 +18,7 @@ import PamView.panel.PamNorthPanel;
|
|||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import tethys.TethysControl;
|
import tethys.TethysControl;
|
||||||
import tethys.TethysState;
|
import tethys.TethysState;
|
||||||
|
import tethys.TethysState.StateType;
|
||||||
import tethys.TethysStateObserver;
|
import tethys.TethysStateObserver;
|
||||||
import tethys.detection.DetectionExportObserver;
|
import tethys.detection.DetectionExportObserver;
|
||||||
import tethys.detection.DetectionExportProgress;
|
import tethys.detection.DetectionExportProgress;
|
||||||
@ -164,6 +165,7 @@ public class ExportWorkerCard extends ExportWizardCard implements DetectionExpor
|
|||||||
progressText.setText("Export complete");
|
progressText.setText("Export complete");
|
||||||
detectionsExportWizard.getCancelButton().setText("Close");
|
detectionsExportWizard.getCancelButton().setText("Close");
|
||||||
detectionsExportWizard.getPreviousButton().setEnabled(false);
|
detectionsExportWizard.getPreviousButton().setEnabled(false);
|
||||||
|
// getTethysControl().sendStateUpdate(new TethysState(StateType.EXPORTRDATA));
|
||||||
break;
|
break;
|
||||||
case DetectionExportProgress.STATE_WRITING:
|
case DetectionExportProgress.STATE_WRITING:
|
||||||
progressText.setText("Writing to Tethys: " + progress.currentDetections.getId());
|
progressText.setText("Writing to Tethys: " + progress.currentDetections.getId());
|
||||||
|
Loading…
Reference in New Issue
Block a user