mirror of
https://github.com/PAMGuard/PAMGuard.git
synced 2024-11-25 16:42:27 +00:00
Exception handling
Exception handling and warning messages on Tethys transactions
This commit is contained in:
parent
71c8415bc8
commit
00410d2017
@ -23,6 +23,7 @@ import PamController.PamControllerInterface;
|
|||||||
import PamController.PamSettingManager;
|
import PamController.PamSettingManager;
|
||||||
import PamController.PamSettings;
|
import PamController.PamSettings;
|
||||||
import PamView.PamTabPanel;
|
import PamView.PamTabPanel;
|
||||||
|
import PamView.dialog.warn.WarnOnce;
|
||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import metadata.MetaDataContol;
|
import metadata.MetaDataContol;
|
||||||
import metadata.deployment.DeploymentData;
|
import metadata.deployment.DeploymentData;
|
||||||
@ -30,6 +31,7 @@ import tethys.TethysState.StateType;
|
|||||||
import tethys.dbxml.DBXMLConnect;
|
import tethys.dbxml.DBXMLConnect;
|
||||||
import tethys.dbxml.DBXMLQueries;
|
import tethys.dbxml.DBXMLQueries;
|
||||||
import tethys.dbxml.ServerStatus;
|
import tethys.dbxml.ServerStatus;
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.deployment.DeploymentHandler;
|
import tethys.deployment.DeploymentHandler;
|
||||||
import tethys.detection.DetectionsHandler;
|
import tethys.detection.DetectionsHandler;
|
||||||
import tethys.niluswraps.PDeployment;
|
import tethys.niluswraps.PDeployment;
|
||||||
@ -507,4 +509,26 @@ public class TethysControl extends PamControlledUnit implements PamSettings, Tet
|
|||||||
return detectionsHandler;
|
return detectionsHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showException(TethysException tethysException) {
|
||||||
|
String title = tethysException.getMessage();
|
||||||
|
StackTraceElement[] stack = tethysException.getStackTrace();
|
||||||
|
String msg = "";
|
||||||
|
if (stack != null) {
|
||||||
|
msg = "Caused in";
|
||||||
|
for (int i = 0; i < Math.min(stack.length, 2); i++) {
|
||||||
|
msg += "<br>" + stack[i].getClassName() + "." + stack[i].getMethodName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String xml = tethysException.getXmlError();
|
||||||
|
if (xml != null) {
|
||||||
|
// msg += "<textarea rows=\"6\" cols=\"80\" style=\"border:none;\">" + xml + "</textarea>";
|
||||||
|
xml = xml.replace("<", "<");
|
||||||
|
xml = xml.replace(">", ">");
|
||||||
|
xml = xml.replace("\n", "<br>");
|
||||||
|
// msg += xml;
|
||||||
|
msg += "<pre>"+xml+"</pre>";
|
||||||
|
}
|
||||||
|
WarnOnce.showWarning(title, msg, WarnOnce.WARNING_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import java.util.ArrayList;
|
|||||||
import javax.swing.JMenuItem;
|
import javax.swing.JMenuItem;
|
||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.niluswraps.PDeployment;
|
import tethys.niluswraps.PDeployment;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -36,7 +37,11 @@ public class TethysMenuActions {
|
|||||||
menuItem.addActionListener(new ActionListener() {
|
menuItem.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
deleteDeployment(pDeployment);
|
deleteDeployment(pDeployment);
|
||||||
|
} catch (TethysException e1) {
|
||||||
|
tethysControl.showException(e1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
menu.add(menuItem);
|
menu.add(menuItem);
|
||||||
@ -47,7 +52,11 @@ public class TethysMenuActions {
|
|||||||
menuItem.addActionListener(new ActionListener() {
|
menuItem.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
deleteDeployment(pDeployment);
|
deleteDeployment(pDeployment);
|
||||||
|
} catch (TethysException e1) {
|
||||||
|
tethysControl.showException(e1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
menu.add(menuItem);
|
menu.add(menuItem);
|
||||||
@ -55,7 +64,7 @@ public class TethysMenuActions {
|
|||||||
menu.show(e.getComponent(), e.getX(), e.getY());
|
menu.show(e.getComponent(), e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void deleteDeployment(PDeployment pDeployment) {
|
protected void deleteDeployment(PDeployment pDeployment) throws TethysException {
|
||||||
tethysControl.getDbxmlConnect().deleteDeployment(pDeployment.deployment.getId());
|
tethysControl.getDbxmlConnect().deleteDeployment(pDeployment.deployment.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,54 @@ public class DBXMLConnect {
|
|||||||
return queries;
|
return queries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* take a nilus object loaded with PamGuard data and post it to the Tethys database
|
||||||
|
*
|
||||||
|
* @param pamGuardObjs a nilus object loaded with PamGuard data
|
||||||
|
* @return error string, null string means there are no errors
|
||||||
|
* @throws TethysException
|
||||||
|
*/
|
||||||
|
public boolean postToTethys(Object nilusObject) throws TethysException
|
||||||
|
{
|
||||||
|
Class objClass = nilusObject.getClass();
|
||||||
|
String collection = getTethysCollection(objClass.getName());
|
||||||
|
TethysExportParams params = new TethysExportParams();
|
||||||
|
String importReturn = null;
|
||||||
|
String tempName = getTempFileName(nilusObject);
|
||||||
|
tempName = tempDirectory.getAbsolutePath() + File.separator + tempName + ".xml";
|
||||||
|
File tempFile = new File(tempName);
|
||||||
|
String bodgeName = tempName;//"C:\\Users\\dg50\\AppData\\Local\\Temp\\PAMGuardTethys\\Meygen2022_10a.xml";
|
||||||
|
try {
|
||||||
|
MarshalXML marshal = new MarshalXML();
|
||||||
|
marshal.createInstance(objClass);
|
||||||
|
marshal.marshal(nilusObject, tempFile.toString());
|
||||||
|
// tempFile = stripXMLHeader(tempFile);
|
||||||
|
importReturn = Importer.ImportFiles(params.getFullServerName(), collection,
|
||||||
|
new String[] { bodgeName }, "", "", false);
|
||||||
|
|
||||||
|
|
||||||
|
tempFile.deleteOnExit();
|
||||||
|
} catch(IllegalArgumentException e) {
|
||||||
|
throw new TethysException("IllegalArgumentException posting to Tethys: " + e.getMessage(), null);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new TethysException("IOException posting to Tethys: " + e.getMessage(), null);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new TethysException("JAXBException posting to Tethys: " + e.getMessage(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The returned string consists of the file name, then an XML report.
|
||||||
|
* Quite hard to see much common structure in this, so just look for
|
||||||
|
* two words, <Success> and <Error>
|
||||||
|
*/
|
||||||
|
boolean error = importReturn.contains("<Error>");
|
||||||
|
boolean success = importReturn.contains("<Success>");
|
||||||
|
if (error) {
|
||||||
|
throw new TethysException("Error posting to Tethys", importReturn);
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update a document within Tethys. We're assuming that a
|
* Update a document within Tethys. We're assuming that a
|
||||||
* document with the same name in the same collection already
|
* document with the same name in the same collection already
|
||||||
@ -92,8 +140,9 @@ public class DBXMLConnect {
|
|||||||
* the removedocument function
|
* the removedocument function
|
||||||
* @param nilusDocument
|
* @param nilusDocument
|
||||||
* @return
|
* @return
|
||||||
|
* @throws TethysException
|
||||||
*/
|
*/
|
||||||
public String updateDocument(Object nilusDocument) {
|
public boolean updateDocument(Object nilusDocument) throws TethysException {
|
||||||
deleteDocument(nilusDocument);
|
deleteDocument(nilusDocument);
|
||||||
return postToTethys(nilusDocument);
|
return postToTethys(nilusDocument);
|
||||||
}
|
}
|
||||||
@ -104,15 +153,16 @@ public class DBXMLConnect {
|
|||||||
* class to identify the correct collection.
|
* class to identify the correct collection.
|
||||||
* @param nilusDocument
|
* @param nilusDocument
|
||||||
* @return
|
* @return
|
||||||
|
* @throws TethysException
|
||||||
*/
|
*/
|
||||||
public boolean deleteDocument(Object nilusDocument) {
|
public boolean deleteDocument(Object nilusDocument) throws TethysException {
|
||||||
|
|
||||||
Class objClass = nilusDocument.getClass();
|
Class objClass = nilusDocument.getClass();
|
||||||
String collection = getTethysCollection(objClass.getName());
|
String collection = getTethysCollection(objClass.getName());
|
||||||
String docId = getDocumentId(nilusDocument);
|
String docId = getDocumentId(nilusDocument);
|
||||||
String result = null;
|
String result = null;
|
||||||
try {
|
try {
|
||||||
result = jerseyClient.removeDocument(collection, docId );
|
result = jerseyClient.removeDocument(collection+" uio", docId );
|
||||||
/**
|
/**
|
||||||
* Return from a sucessful delete is something like
|
* Return from a sucessful delete is something like
|
||||||
*
|
*
|
||||||
@ -120,57 +170,73 @@ public class DBXMLConnect {
|
|||||||
<DELETE>
|
<DELETE>
|
||||||
<ITEM> ['ECoastNARW0'] </ITEM>
|
<ITEM> ['ECoastNARW0'] </ITEM>
|
||||||
</DELETE>
|
</DELETE>
|
||||||
|
An error will throw an exception.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
System.out.printf("Error deleting %s %s: %s\n", collection, docId, e.getMessage());
|
// System.out.printf("Error deleting %s %s: %s\n", collection, docId, e.getMessage());
|
||||||
|
String msg = String.format("Error deleting %s:%s", collection, docId);
|
||||||
|
throw new TethysException(msg, e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
// forceFlush();
|
// forceFlush();
|
||||||
return result == null;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* take a nilus object loaded with PamGuard data and post it to the Tethys database
|
* Delete a Deploymnet and any contained Detections document. Doesn't work !
|
||||||
*
|
* @param deploymentId
|
||||||
* @param pamGuardObjs a nilus object loaded with PamGuard data
|
* @return
|
||||||
* @return error string, null string means there are no errors
|
* @throws TethysException
|
||||||
*/
|
*/
|
||||||
public String postToTethys(Object nilusObject)
|
public boolean deleteDeployment(String deploymentId) throws TethysException {
|
||||||
{
|
ArrayList<String> detDocNames = tethysControl.getDbxmlQueries().getDetectionsDocuments(deploymentId);
|
||||||
Class objClass = nilusObject.getClass();
|
JerseyClient jerseyClient = getJerseyClient();
|
||||||
String collection = getTethysCollection(objClass.getName());
|
Queries queries = null;
|
||||||
TethysExportParams params = new TethysExportParams();
|
String result = null;
|
||||||
String fileError = null;
|
|
||||||
String tempName = getTempFileName(nilusObject);
|
|
||||||
tempName = tempDirectory.getAbsolutePath() + File.separator + tempName + ".xml";
|
|
||||||
File tempFile = new File(tempName);
|
|
||||||
String bodgeName = tempName;//"C:\\Users\\dg50\\AppData\\Local\\Temp\\PAMGuardTethys\\Meygen2022_10a.xml";
|
|
||||||
try {
|
try {
|
||||||
MarshalXML marshal = new MarshalXML();
|
result = jerseyClient.removeDocument("Deployments", deploymentId );
|
||||||
marshal.createInstance(objClass);
|
|
||||||
// Path tempFile = Files.createTempFile("pamGuardToTethys", ".xml");
|
|
||||||
marshal.marshal(nilusObject, tempFile.toString());
|
|
||||||
// tempFile = stripXMLHeader(tempFile);
|
|
||||||
fileError = Importer.ImportFiles(params.getFullServerName(), collection,
|
|
||||||
new String[] { bodgeName }, "", "", false);
|
|
||||||
|
|
||||||
// System.out.println(fileError);
|
|
||||||
|
|
||||||
tempFile.deleteOnExit();
|
|
||||||
} catch(IllegalArgumentException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (JAXBException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
System.out.println(fileError);
|
catch (Exception e) {
|
||||||
return fileError;
|
throw new TethysException("Error deleting deployment document " + deploymentId, e.getMessage());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check the return string from importFiles and if it's an
|
||||||
|
* error, throw an exception. Otherwise do nothing.
|
||||||
|
* @param fileError
|
||||||
|
*/
|
||||||
|
private void checkReturnString(String fileError) {
|
||||||
|
/**
|
||||||
|
* Example good string is
|
||||||
|
*
|
||||||
|
C:\Users\dg50\AppData\Local\Temp\PAMGuardTethys\20080311_2DSimplex_0.xml: 7360 bytes
|
||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<Import>
|
||||||
|
<Document name="20080311_2DSimplex_0">added</Document>
|
||||||
|
<SummaryReport>
|
||||||
|
<Success>
|
||||||
|
<Document>20080311_2DSimplex_0</Document>
|
||||||
|
</Success>
|
||||||
|
</SummaryReport>
|
||||||
|
</Import>
|
||||||
|
|
||||||
|
Example error (file not existing)
|
||||||
|
C:\Users\dg50\AppData\Local\Temp\PAMGuardTethys\20080311_2DSimplex_0.xmlnot: 0 bytes
|
||||||
|
<Error>
|
||||||
|
<File>
|
||||||
|
<Name>C:\Users\dg50\AppData\Local\Temp\PAMGuardTethys\20080311_2DSimplex_0.xmlnot</Name>
|
||||||
|
<Cause> does not exist </Cause>
|
||||||
|
</File>
|
||||||
|
</Error>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Seems we have to get rid of the line <?xml version="1.0" encoding="UTF-8"?>
|
* Seems we have to get rid of the line <?xml version="1.0" encoding="UTF-8"?>
|
||||||
@ -223,22 +289,22 @@ public class DBXMLConnect {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// /*
|
// /*
|
||||||
// * force a fluch by sending a dummy document to th eimporter which will rail, but ...
|
// * force a fluch by sending a dummy document to th eimporter which will rail, but ...
|
||||||
// */
|
// */
|
||||||
// private void forceFlush() {
|
// private void forceFlush() {
|
||||||
// TethysExportParams params = new TethysExportParams();
|
// TethysExportParams params = new TethysExportParams();
|
||||||
// String fileError = null;
|
// String fileError = null;
|
||||||
// try {
|
// try {
|
||||||
// fileError = Importer.ImportFiles(params.getFullServerName(), "NoCollection",
|
// fileError = Importer.ImportFiles(params.getFullServerName(), "NoCollection",
|
||||||
// new String[] { "ThereIsNoFileE" }, "", "", false);
|
// new String[] { "ThereIsNoFileE" }, "", "", false);
|
||||||
// }
|
// }
|
||||||
// catch (Exception e) {
|
// catch (Exception e) {
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
//// System.out.println(fileError);
|
//// System.out.println(fileError);
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a temp folder to hold xml output. This will be the standard
|
* Get a temp folder to hold xml output. This will be the standard
|
||||||
@ -332,40 +398,6 @@ public class DBXMLConnect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a Deploymnet and any contained Detections document. Doesn't work !
|
|
||||||
* @param deploymentId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public boolean deleteDeployment(String deploymentId) {
|
|
||||||
ArrayList<String> detDocNames = tethysControl.getDbxmlQueries().getDetectionsDocuments(deploymentId);
|
|
||||||
JerseyClient jerseyClient = getJerseyClient();
|
|
||||||
Queries queries = null;
|
|
||||||
String result;
|
|
||||||
// for (int i = 0; i < detDocNames.size(); i++) {
|
|
||||||
// try {
|
|
||||||
// System.out.println("Delete " + detDocNames.get(i));
|
|
||||||
// result = jerseyClient.removeDocument("Detections", detDocNames.get(i));
|
|
||||||
// }
|
|
||||||
// catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
//// return false;
|
|
||||||
//// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
try {
|
|
||||||
// String doc = queries.getDocument("Deployments", deploymentId);
|
|
||||||
// queries.
|
|
||||||
result = jerseyClient.removeDocument("Deployments", deploymentId );
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public synchronized boolean openConnections() {
|
public synchronized boolean openConnections() {
|
||||||
TethysExportParams params = tethysControl.getTethysExportParams();
|
TethysExportParams params = tethysControl.getTethysExportParams();
|
||||||
currentSiteURL = params.getFullServerName();
|
currentSiteURL = params.getFullServerName();
|
||||||
@ -391,7 +423,7 @@ public class DBXMLConnect {
|
|||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
// CUrl curl = new CUrl(cmd);
|
// CUrl curl = new CUrl(cmd);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,8 +54,9 @@ public class DBXMLQueries {
|
|||||||
* Or will return null if the server is not connected
|
* Or will return null if the server is not connected
|
||||||
* @param jsonQueryString
|
* @param jsonQueryString
|
||||||
* @return query result
|
* @return query result
|
||||||
|
* @throws TethysQueryException
|
||||||
*/
|
*/
|
||||||
private DBQueryResult executeQuery(String jsonQueryString) {
|
private DBQueryResult executeQuery(String jsonQueryString) throws TethysQueryException {
|
||||||
|
|
||||||
long t1 = System.currentTimeMillis();
|
long t1 = System.currentTimeMillis();
|
||||||
|
|
||||||
@ -73,14 +74,15 @@ public class DBXMLQueries {
|
|||||||
JerseyClient jerseyClient = dbxmlConnect.getJerseyClient();
|
JerseyClient jerseyClient = dbxmlConnect.getJerseyClient();
|
||||||
// String url = jerseyClient.getURL();
|
// String url = jerseyClient.getURL();
|
||||||
|
|
||||||
Queries queries = new Queries(jerseyClient);
|
// Queries queries = new Queries(jerseyClient);
|
||||||
|
|
||||||
queryResult = jerseyClient.queryJSON(jsonQueryString, 0);
|
queryResult = jerseyClient.queryJSON(jsonQueryString, 0);
|
||||||
schemaPlan = jerseyClient.queryJSON(jsonQueryString, 1);
|
schemaPlan = jerseyClient.queryJSON(jsonQueryString, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
return new DBQueryResult(System.currentTimeMillis()-t1, e);
|
// return new DBQueryResult(System.currentTimeMillis()-t1, e);
|
||||||
|
throw new TethysQueryException("Error running JSON query", jsonQueryString);
|
||||||
|
|
||||||
}
|
}
|
||||||
return new DBQueryResult(System.currentTimeMillis()-t1, queryResult, schemaPlan);
|
return new DBQueryResult(System.currentTimeMillis()-t1, queryResult, schemaPlan);
|
||||||
@ -90,7 +92,13 @@ public class DBXMLQueries {
|
|||||||
|
|
||||||
String projectQuery = "{\"return\":[\"Deployment/Project\"],\"select\":[],\"enclose\":1}";
|
String projectQuery = "{\"return\":[\"Deployment/Project\"],\"select\":[],\"enclose\":1}";
|
||||||
|
|
||||||
DBQueryResult result = executeQuery(projectQuery);
|
DBQueryResult result;
|
||||||
|
try {
|
||||||
|
result = executeQuery(projectQuery);
|
||||||
|
} catch (TethysQueryException e) {
|
||||||
|
tethysControl.showException(e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (result == null || result.queryResult == null) {
|
if (result == null || result.queryResult == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -161,7 +169,12 @@ public class DBXMLQueries {
|
|||||||
String qBase = "{\"return\":[\"Deployment\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Deployment/Project\",\"%s\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
String qBase = "{\"return\":[\"Deployment\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Deployment/Project\",\"%s\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
||||||
String qStr = String.format(qBase, projectName);
|
String qStr = String.format(qBase, projectName);
|
||||||
|
|
||||||
DBQueryResult result = executeQuery(qStr);
|
DBQueryResult result = null;
|
||||||
|
try {
|
||||||
|
result = executeQuery(qStr);
|
||||||
|
} catch (TethysQueryException e1) {
|
||||||
|
tethysControl.showException(e1);
|
||||||
|
}
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -253,7 +266,13 @@ public class DBXMLQueries {
|
|||||||
query = queryWithDepl.replace("TheDeploymentId", deploymentId);
|
query = queryWithDepl.replace("TheDeploymentId", deploymentId);
|
||||||
}
|
}
|
||||||
query = query.replace("LongDataName", dataBlock.getLongDataName());
|
query = query.replace("LongDataName", dataBlock.getLongDataName());
|
||||||
DBQueryResult queryResult = executeQuery(query);
|
DBQueryResult queryResult = null;
|
||||||
|
try {
|
||||||
|
queryResult = executeQuery(query);
|
||||||
|
} catch (TethysQueryException e1) {
|
||||||
|
tethysControl.showException(e1);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (queryResult ==null) {
|
if (queryResult ==null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -289,7 +308,13 @@ public class DBXMLQueries {
|
|||||||
public ArrayList<String> getDetectionsDocuments(String deploymentId) {
|
public ArrayList<String> getDetectionsDocuments(String deploymentId) {
|
||||||
String queryBase = "{\"species\":{\"query\":{\"op\":\"lib:abbrev2tsn\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]},\"return\":{\"op\":\"lib:tsn2abbrev\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]}},\"return\":[\"Detections/Id\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Detections/DataSource/DeploymentId\",\"SomeDeploymentId\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
String queryBase = "{\"species\":{\"query\":{\"op\":\"lib:abbrev2tsn\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]},\"return\":{\"op\":\"lib:tsn2abbrev\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]}},\"return\":[\"Detections/Id\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Detections/DataSource/DeploymentId\",\"SomeDeploymentId\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
||||||
String queryStr = queryBase.replace("SomeDeploymentId", deploymentId);
|
String queryStr = queryBase.replace("SomeDeploymentId", deploymentId);
|
||||||
DBQueryResult queryResult = executeQuery(queryStr);
|
DBQueryResult queryResult = null;
|
||||||
|
try {
|
||||||
|
queryResult = executeQuery(queryStr);
|
||||||
|
} catch (TethysQueryException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
if (queryResult == null || queryResult.queryException != null) {
|
if (queryResult == null || queryResult.queryException != null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -461,7 +486,13 @@ public class DBXMLQueries {
|
|||||||
private int[] countDataForDeployment(String projectId, String deploymentId, String[] dataPrefixes) {
|
private int[] countDataForDeployment(String projectId, String deploymentId, String[] dataPrefixes) {
|
||||||
String queryBase = "{\"species\":{\"query\":{\"op\":\"lib:abbrev2tsn\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]},\"return\":{\"op\":\"lib:tsn2abbrev\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]}},\"return\":[\"Detections/Id\",\"Detections/OnEffort/Detection/Start\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Detections/DataSource/DeploymentId\",\"ReplaceDeploymentIdString\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
String queryBase = "{\"species\":{\"query\":{\"op\":\"lib:abbrev2tsn\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]},\"return\":{\"op\":\"lib:tsn2abbrev\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]}},\"return\":[\"Detections/Id\",\"Detections/OnEffort/Detection/Start\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Detections/DataSource/DeploymentId\",\"ReplaceDeploymentIdString\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
||||||
String queryString = queryBase.replace("ReplaceDeploymentIdString", deploymentId);
|
String queryString = queryBase.replace("ReplaceDeploymentIdString", deploymentId);
|
||||||
DBQueryResult result = executeQuery(queryString);
|
DBQueryResult result;
|
||||||
|
try {
|
||||||
|
result = executeQuery(queryString);
|
||||||
|
} catch (TethysQueryException e) {
|
||||||
|
tethysControl.showException(e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (result == null || result.queryResult == null) {
|
if (result == null || result.queryResult == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -560,7 +591,13 @@ public class DBXMLQueries {
|
|||||||
public Detections getDetectionsDocInfo(String detectionsDocName) {
|
public Detections getDetectionsDocInfo(String detectionsDocName) {
|
||||||
String queryBase = "{\"species\":{\"query\":{\"op\":\"lib:abbrev2tsn\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]},\"return\":{\"op\":\"lib:tsn2abbrev\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]}},\"return\":[\"Detections/Id\",\"Detections/Description\",\"Detections/DataSource\",\"Detections/Algorithm\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Detections/Id\",\"DetectionsDocName\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
String queryBase = "{\"species\":{\"query\":{\"op\":\"lib:abbrev2tsn\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]},\"return\":{\"op\":\"lib:tsn2abbrev\",\"optype\":\"function\",\"operands\":[\"%s\",\"SIO.SWAL.v1\"]}},\"return\":[\"Detections/Id\",\"Detections/Description\",\"Detections/DataSource\",\"Detections/Algorithm\"],\"select\":[{\"op\":\"=\",\"operands\":[\"Detections/Id\",\"DetectionsDocName\"],\"optype\":\"binary\"}],\"enclose\":1}";
|
||||||
String query = queryBase.replace("DetectionsDocName", detectionsDocName);
|
String query = queryBase.replace("DetectionsDocName", detectionsDocName);
|
||||||
DBQueryResult queryResult = executeQuery(query);
|
DBQueryResult queryResult;
|
||||||
|
try {
|
||||||
|
queryResult = executeQuery(query);
|
||||||
|
} catch (TethysQueryException e) {
|
||||||
|
tethysControl.showException(e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
Document doc;
|
Document doc;
|
||||||
try {
|
try {
|
||||||
doc = queryResult.getDocument();
|
doc = queryResult.getDocument();
|
||||||
|
18
src/tethys/dbxml/TethysException.java
Normal file
18
src/tethys/dbxml/TethysException.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package tethys.dbxml;
|
||||||
|
|
||||||
|
public class TethysException extends Exception {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private String xmlError;
|
||||||
|
|
||||||
|
public TethysException(String message, String xmlError) {
|
||||||
|
super(message);
|
||||||
|
this.xmlError = xmlError;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getXmlError() {
|
||||||
|
return xmlError;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
16
src/tethys/dbxml/TethysQueryException.java
Normal file
16
src/tethys/dbxml/TethysQueryException.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package tethys.dbxml;
|
||||||
|
|
||||||
|
public class TethysQueryException extends TethysException {
|
||||||
|
|
||||||
|
private String queryString;
|
||||||
|
|
||||||
|
public TethysQueryException(String message, String queryString) {
|
||||||
|
super(message, null);
|
||||||
|
this.queryString = queryString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getQueryString() {
|
||||||
|
return queryString;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -27,6 +27,7 @@ import PamController.PamControlledUnit;
|
|||||||
import PamController.PamController;
|
import PamController.PamController;
|
||||||
import PamUtils.LatLong;
|
import PamUtils.LatLong;
|
||||||
import PamUtils.PamUtils;
|
import PamUtils.PamUtils;
|
||||||
|
import PamView.dialog.warn.WarnOnce;
|
||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import PamguardMVC.PamRawDataBlock;
|
import PamguardMVC.PamRawDataBlock;
|
||||||
import binaryFileStorage.BinaryStore;
|
import binaryFileStorage.BinaryStore;
|
||||||
@ -59,6 +60,7 @@ import tethys.TethysStateObserver;
|
|||||||
import tethys.TethysTimeFuncs;
|
import tethys.TethysTimeFuncs;
|
||||||
import tethys.TethysState.StateType;
|
import tethys.TethysState.StateType;
|
||||||
import tethys.dbxml.DBXMLConnect;
|
import tethys.dbxml.DBXMLConnect;
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.niluswraps.PDeployment;
|
import tethys.niluswraps.PDeployment;
|
||||||
import tethys.output.TethysExportParams;
|
import tethys.output.TethysExportParams;
|
||||||
|
|
||||||
@ -311,6 +313,7 @@ public class DeploymentHandler implements TethysStateObserver {
|
|||||||
}
|
}
|
||||||
DBXMLConnect dbxmlConnect = getTethysControl().getDbxmlConnect();
|
DBXMLConnect dbxmlConnect = getTethysControl().getDbxmlConnect();
|
||||||
PDeployment exDeploymnet = onePeriod.getMatchedTethysDeployment();
|
PDeployment exDeploymnet = onePeriod.getMatchedTethysDeployment();
|
||||||
|
try {
|
||||||
if (exDeploymnet != null) {
|
if (exDeploymnet != null) {
|
||||||
deployment.setId(exDeploymnet.deployment.getId());
|
deployment.setId(exDeploymnet.deployment.getId());
|
||||||
dbxmlConnect.updateDocument(deployment);
|
dbxmlConnect.updateDocument(deployment);
|
||||||
@ -318,6 +321,10 @@ public class DeploymentHandler implements TethysStateObserver {
|
|||||||
else {
|
else {
|
||||||
dbxmlConnect.postToTethys(deployment);
|
dbxmlConnect.postToTethys(deployment);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (TethysException e) {
|
||||||
|
getTethysControl().showException(e);
|
||||||
|
}
|
||||||
getTethysControl().sendStateUpdate(new TethysState(StateType.UPDATESERVER));
|
getTethysControl().sendStateUpdate(new TethysState(StateType.UPDATESERVER));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,6 +351,7 @@ public class DeploymentHandler implements TethysStateObserver {
|
|||||||
deployment.setSite(globalMeta.getSite());
|
deployment.setSite(globalMeta.getSite());
|
||||||
// also need to sort out track data here, etc.
|
// also need to sort out track data here, etc.
|
||||||
DBXMLConnect dbxmlConnect = getTethysControl().getDbxmlConnect();
|
DBXMLConnect dbxmlConnect = getTethysControl().getDbxmlConnect();
|
||||||
|
try {
|
||||||
if (exDeploymnet != null) {
|
if (exDeploymnet != null) {
|
||||||
dbxmlConnect.updateDocument(deployment);
|
dbxmlConnect.updateDocument(deployment);
|
||||||
}
|
}
|
||||||
@ -351,6 +359,10 @@ public class DeploymentHandler implements TethysStateObserver {
|
|||||||
dbxmlConnect.postToTethys(deployment);
|
dbxmlConnect.postToTethys(deployment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (TethysException e) {
|
||||||
|
getTethysControl().showException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
getTethysControl().sendStateUpdate(new TethysState(StateType.UPDATESERVER));
|
getTethysControl().sendStateUpdate(new TethysState(StateType.UPDATESERVER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@ import tethys.deployment.DeploymentHandler;
|
|||||||
import tethys.TethysStateObserver;
|
import tethys.TethysStateObserver;
|
||||||
import tethys.TethysTimeFuncs;
|
import tethys.TethysTimeFuncs;
|
||||||
import tethys.dbxml.DBXMLConnect;
|
import tethys.dbxml.DBXMLConnect;
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.detection.DetectionGranularity.GRANULARITY;
|
import tethys.detection.DetectionGranularity.GRANULARITY;
|
||||||
import tethys.niluswraps.PDeployment;
|
import tethys.niluswraps.PDeployment;
|
||||||
import tethys.niluswraps.PDetections;
|
import tethys.niluswraps.PDetections;
|
||||||
@ -434,7 +435,11 @@ public class DetectionsHandler {
|
|||||||
lastUnitTime, totalCount, exportCount, skipCount, DetectionExportProgress.STATE_WRITING);
|
lastUnitTime, totalCount, exportCount, skipCount, DetectionExportProgress.STATE_WRITING);
|
||||||
exportObserver.update(prog);
|
exportObserver.update(prog);
|
||||||
closeDetectionsDocument(currentDetections, mapPoint.getEndTime());
|
closeDetectionsDocument(currentDetections, mapPoint.getEndTime());
|
||||||
|
try {
|
||||||
dbxmlConnect.postToTethys(currentDetections);
|
dbxmlConnect.postToTethys(currentDetections);
|
||||||
|
} catch (TethysException e) {
|
||||||
|
tethysControl.showException(e);
|
||||||
|
}
|
||||||
currentDetections = null;
|
currentDetections = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -443,7 +448,11 @@ public class DetectionsHandler {
|
|||||||
prog = new DetectionExportProgress(deployment, currentDetections,
|
prog = new DetectionExportProgress(deployment, currentDetections,
|
||||||
lastUnitTime, totalCount, exportCount, skipCount, DetectionExportProgress.STATE_WRITING);
|
lastUnitTime, totalCount, exportCount, skipCount, DetectionExportProgress.STATE_WRITING);
|
||||||
closeDetectionsDocument(currentDetections, deployment.getAudioEnd());
|
closeDetectionsDocument(currentDetections, deployment.getAudioEnd());
|
||||||
|
try {
|
||||||
dbxmlConnect.postToTethys(currentDetections);
|
dbxmlConnect.postToTethys(currentDetections);
|
||||||
|
} catch (TethysException e) {
|
||||||
|
tethysControl.showException(e);
|
||||||
|
}
|
||||||
currentDetections = null;
|
currentDetections = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import metadata.deployment.DeploymentData;
|
|||||||
import nilus.Deployment;
|
import nilus.Deployment;
|
||||||
import tethys.TethysControl;
|
import tethys.TethysControl;
|
||||||
import tethys.dbxml.DBXMLConnect;
|
import tethys.dbxml.DBXMLConnect;
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.deployment.DeploymentHandler;
|
import tethys.deployment.DeploymentHandler;
|
||||||
import tethys.deployment.DeploymentOverview;
|
import tethys.deployment.DeploymentOverview;
|
||||||
import tethys.deployment.DeploymentRecoveryPair;
|
import tethys.deployment.DeploymentRecoveryPair;
|
||||||
@ -189,7 +190,11 @@ public class TethysExporter {
|
|||||||
Deployment deployment = deploymentHandler.createDeploymentDocument(i++, recordingPeriod);
|
Deployment deployment = deploymentHandler.createDeploymentDocument(i++, recordingPeriod);
|
||||||
// System.out.println(deployment.toString());
|
// System.out.println(deployment.toString());
|
||||||
deploymentDocs.add(deployment);
|
deploymentDocs.add(deployment);
|
||||||
|
try {
|
||||||
tethysControl.getDbxmlConnect().postToTethys(deployment);
|
tethysControl.getDbxmlConnect().postToTethys(deployment);
|
||||||
|
} catch (TethysException e) {
|
||||||
|
tethysControl.showException(e);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import PamView.tables.SwingTableColumnWidths;
|
|||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import nilus.Detections;
|
import nilus.Detections;
|
||||||
import tethys.TethysControl;
|
import tethys.TethysControl;
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.detection.StreamDetectionsSummary;
|
import tethys.detection.StreamDetectionsSummary;
|
||||||
import tethys.niluswraps.PDetections;
|
import tethys.niluswraps.PDetections;
|
||||||
|
|
||||||
@ -117,7 +118,11 @@ public class DatablockDetectionsPanel extends TethysGUIPanel implements StreamTa
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void deleteDocument(PDetections pDets) {
|
protected void deleteDocument(PDetections pDets) {
|
||||||
|
try {
|
||||||
getTethysControl().getDbxmlConnect().deleteDocument(pDets.detections);
|
getTethysControl().getDbxmlConnect().deleteDocument(pDets.detections);
|
||||||
|
} catch (TethysException e) {
|
||||||
|
getTethysControl().showException(e);
|
||||||
|
}
|
||||||
selectDataBlock(dataBlock); // force table update.
|
selectDataBlock(dataBlock); // force table update.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ import nilus.Deployment;
|
|||||||
import tethys.TethysControl;
|
import tethys.TethysControl;
|
||||||
import tethys.TethysState;
|
import tethys.TethysState;
|
||||||
import tethys.TethysState.StateType;
|
import tethys.TethysState.StateType;
|
||||||
|
import tethys.dbxml.TethysException;
|
||||||
import tethys.deployment.DeploymentHandler;
|
import tethys.deployment.DeploymentHandler;
|
||||||
import tethys.deployment.DeploymentOverview;
|
import tethys.deployment.DeploymentOverview;
|
||||||
import tethys.deployment.RecordingPeriod;
|
import tethys.deployment.RecordingPeriod;
|
||||||
@ -164,7 +165,11 @@ public class PAMGuardDeploymentsTable extends TethysGUIPanel {
|
|||||||
if (ans == WarnOnce.CANCEL_OPTION) {
|
if (ans == WarnOnce.CANCEL_OPTION) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
boolean gone = getTethysControl().getDbxmlConnect().deleteDocument(dep);
|
boolean gone = getTethysControl().getDbxmlConnect().deleteDocument(dep);
|
||||||
|
} catch (TethysException e) {
|
||||||
|
getTethysControl().showException(e);
|
||||||
|
}
|
||||||
getTethysControl().sendStateUpdate(new TethysState(StateType.UPDATESERVER));
|
getTethysControl().sendStateUpdate(new TethysState(StateType.UPDATESERVER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user