Changes for Tethys integration

This commit is contained in:
Douglas Gillespie 2023-01-25 16:40:03 +00:00
parent 5e6cd42eea
commit f02001a6fc
18 changed files with 1096 additions and 6 deletions

View File

@ -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-16.0.2">
<attributes> <attributes>
<attribute name="module" value="true"/> <attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
@ -17,5 +17,10 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="lib" path="C:/Users/dg50/Tethys/NilusXMLGenerator/target/nilus-1.5.jar">
<attributes>
<attribute name="javadoc_location" value="jar:file:/C:/Users/dg50/Tethys/NilusXMLGenerator/target/nilus-1.5-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/> <classpathentry kind="output" path="target/classes"/>
</classpath> </classpath>

23
pom.xml
View File

@ -555,8 +555,29 @@
<groupId>com.sun.xml.bind</groupId> <groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId> <artifactId>jaxb-impl</artifactId>
<version>2.3.2</version> <version>2.3.2</version>
</dependency>-->
<!-- From NilusXMLGenerator POM at https://bitbucket.org/tethysacousticmetadata/nilusxmlgenerator/src/master/-->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency> </dependency>
--> <dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jflac/jflac-codec --> <!-- https://mvnrepository.com/artifact/org.jflac/jflac-codec -->
<dependency> <dependency>

View File

@ -44,6 +44,7 @@ import whistlesAndMoans.AbstractWhistleDataUnit;
import fftManager.FFTDataUnit; import fftManager.FFTDataUnit;
import fftManager.PamFFTControl; import fftManager.PamFFTControl;
import group3dlocaliser.Group3DLocaliserControl; import group3dlocaliser.Group3DLocaliserControl;
import metadata.MetaDataContol;
import meygenturbine.MeygenTurbine; import meygenturbine.MeygenTurbine;
import networkTransfer.receive.BuoyStatusDataUnit; import networkTransfer.receive.BuoyStatusDataUnit;
import networkTransfer.receive.NetworkReceiver; import networkTransfer.receive.NetworkReceiver;
@ -461,6 +462,12 @@ final public class PamModel implements PamModelInterface, PamSettings {
mi.setModulesMenuGroup(utilitiesGroup); mi.setModulesMenuGroup(utilitiesGroup);
mi.setMaxNumber(1); mi.setMaxNumber(1);
mi = PamModuleInfo.registerControlledUnit(MetaDataContol.class.getName(), MetaDataContol.unitType);
mi.setToolTipText("Deployment Meta Data");
mi.setModulesMenuGroup(utilitiesGroup);
mi.setMaxNumber(1);
if (isViewer) { if (isViewer) {
mi = PamModuleInfo.registerControlledUnit(TethysControl.class.getName(), TethysControl.defaultName); mi = PamModuleInfo.registerControlledUnit(TethysControl.class.getName(), TethysControl.defaultName);
mi.setToolTipText("Interface to Tethys Database"); mi.setToolTipText("Interface to Tethys Database");

View File

@ -34,6 +34,11 @@ abstract public class PamParameterData {
*/ */
private String postTitle; private String postTitle;
/**
* field length for automatic dialogs.
*/
private int fieldLength;
/** /**
* @param parentObject * @param parentObject
@ -45,6 +50,21 @@ abstract public class PamParameterData {
this.field = field; this.field = field;
} }
/**
* @param parentObject
* @param field
* @param shortName
* @param toolTip
* @param fieldLength length of text in automatic dialogs.
*/
public PamParameterData(Object parentObject, Field field, String shortName, String toolTip, int fieldLength) {
super();
this.field = field;
this.shortName = shortName;
this.toolTip = toolTip;
this.fieldLength = fieldLength;
}
/** /**
* @param parentObject * @param parentObject
* @param field * @param field
@ -58,7 +78,6 @@ abstract public class PamParameterData {
this.toolTip = toolTip; this.toolTip = toolTip;
} }
/** /**
* @param shortName the shortName to set * @param shortName the shortName to set
*/ */
@ -66,6 +85,20 @@ abstract public class PamParameterData {
this.shortName = shortName; this.shortName = shortName;
} }
/**
* Set info about a parameter
* @param shortName short name, e.g. to use in a dialog
* @param postTitle post title, e.g. text coming after a data entry field in a dialog
* @param toolTip tool tip to display over the component in a dialog.
* @param fieldLength length of text in automatic dialogs.
*/
public void setInfo(String shortName, String postTitle, String toolTip, int fieldLength) {
this.shortName = shortName;
this.postTitle = postTitle;
this.toolTip = toolTip;
this.fieldLength = fieldLength;
}
/** /**
* Set info about a parameter * Set info about a parameter
* @param shortName short name, e.g. to use in a dialog * @param shortName short name, e.g. to use in a dialog
@ -136,6 +169,9 @@ abstract public class PamParameterData {
* @return a short name for the field, suitable for use in dialogs. * @return a short name for the field, suitable for use in dialogs.
*/ */
public String getShortName() { public String getShortName() {
if (shortName == null) {
return getFieldName();
}
return shortName; return shortName;
} }
@ -166,5 +202,19 @@ abstract public class PamParameterData {
return String.format("Param %s class %s", getFieldName(), getDataClass()); return String.format("Param %s class %s", getFieldName(), getDataClass());
} }
/**
* @return the fieldLength
*/
public int getFieldLength() {
return fieldLength;
}
/**
* @param fieldLength the fieldLength to set
*/
public void setFieldLength(int fieldLength) {
this.fieldLength = fieldLength;
}
} }

View File

@ -59,9 +59,12 @@ public class PamParameterDataGetter extends PrivatePamParameterData {
if (setter == null) { if (setter == null) {
return false; return false;
} }
// need to convert the type
Object convObj = convertStringType(data);
try { try {
setter.invoke(getParentObject(), data); Object parentObj = getParentObject();
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { setter.invoke(parentObj, convObj);
} catch (InvocationTargetException e) {
e.printStackTrace(); e.printStackTrace();
return false; return false;
} }

View File

@ -286,4 +286,5 @@ public class PamParameterSet {
public PamParameterData removeParameterData(String paramName) { public PamParameterData removeParameterData(String paramName) {
return parameterDatas.remove(paramName); return parameterDatas.remove(paramName);
} }
} }

View File

@ -0,0 +1,73 @@
package PamModel.parametermanager;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenuItem;
import PamModel.parametermanager.swing.ManagedParameterDialog;
import generalDatabase.parameterstore.ParameterDatabaseStore;
/**
* Just about everything giving overall control of some managed parameters.
* May be a bit too specific on first cut and need to be abstracted.
* Testing on 'Deployment' data.
* @author dg50
*
* @param <T>
*/
public class ParameterSetManager<T extends ManagedParameters> {
private T managedParams;
private String name;
public ParameterSetManager(T defaultParams, String name) {
setManagedParams(defaultParams);
this.name = name;
// if (managedParams == null) {
// managedParams = new T();
// }
}
/**
* @return the managedParams
*/
public T getManagedParams() {
return managedParams;
}
/**
* @param managedParams the managedParams to set
*/
public void setManagedParams(T managedParams) {
this.managedParams = managedParams;
}
public JMenuItem getMenuItem(Window parent) {
if (managedParams == null) {
return null;
}
JMenuItem menuItem = new JMenuItem(name + " ...");
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
showDialog(parent);
}
});
return menuItem;
}
protected void showDialog(Window parent) {
ManagedParameterDialog<T> dialog = new ManagedParameterDialog<T>(parent, name, managedParams);
T newParams = dialog.showDialog(parent, name, managedParams);
if (newParams != null) {
ParameterDatabaseStore paramDatabase = new ParameterDatabaseStore("MetaData");
paramDatabase.saveParameterSet(newParams);
}
}
}

View File

@ -1,6 +1,7 @@
package PamModel.parametermanager; package PamModel.parametermanager;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Type;
/** /**
* Abstract instance of PamParameterDataInterface which implements everything * Abstract instance of PamParameterDataInterface which implements everything
@ -36,9 +37,48 @@ public abstract class PrivatePamParameterData extends PamParameterData {
* This should really be implemented in every concrete class, but no time to do that now. Aim to delete * This should really be implemented in every concrete class, but no time to do that now. Aim to delete
* this function here, then go through and implement everywhere ... * this function here, then go through and implement everywhere ...
*/ */
return false; // return false;
Object convData = convertStringType(data);
getField().set(this, convData);
return true;
}
/**
* convert a string type to a different type appropriate for the field in
* question.
* @param value
* @return
*/
public Object convertStringType(Object value) {
if (value == null) {
return null;
}
if (value instanceof String == false) {
return value;
}
String str = (String) value;
Type type = getField().getGenericType();
Class<?> cls = getField().getType();
String clsName = cls.getName();
switch (clsName) {
case "int":
case "Integer":
return Integer.valueOf(str);
case "double":
case "Double":
return Double.valueOf(str);
case "float":
case "Float":
return Float.valueOf(str);
case "short":
case "Short":
return Short.valueOf(str);
}
return value;
} }
} }

View File

@ -0,0 +1,49 @@
package PamModel.parametermanager.swing;
import java.awt.Window;
import PamModel.parametermanager.ManagedParameters;
import PamView.dialog.PamDialog;
public class ManagedParameterDialog<T extends ManagedParameters> extends PamDialog {
private T params;
private ManagedParameterPanel<T> parameterPanel;
public ManagedParameterDialog(Window parentFrame, String title, T params) {
super(parentFrame, title, false);
parameterPanel = new ManagedParameterPanel<T>(params);
setDialogComponent(parameterPanel.getPanel());
}
public T showDialog(Window parentFrame, String title, T parameters) {
// ManagedParameterDialog dialog = new ManagedParameterDialog<>(parentFrame, title, parameters);
setParams(parameters);
setVisible(true);
return params;
}
private void setParams(T params) {
this.params = params;
this.parameterPanel.setParams(params);
}
@Override
public boolean getParams() {
return parameterPanel.getParams(params);
}
@Override
public void cancelButtonPressed() {
params = null;
}
@Override
public void restoreDefaultSettings() {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,149 @@
package PamModel.parametermanager.swing;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.Collection;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;
import PamModel.parametermanager.FieldNotFoundException;
import PamModel.parametermanager.ManagedParameters;
import PamModel.parametermanager.PamParameterData;
import PamModel.parametermanager.PamParameterSet;
import PamView.dialog.PamDialog;
import PamView.dialog.PamGridBagContraints;
public class ManagedParameterPanel<T extends ManagedParameters> {
private JPanel mainPanel;
private Collection<PamParameterData> parameterSet;
private static final int DEFAULT_TEXT_LENGTH = 6;
private static final int MAX_SINGLE_LINE_LENGTH = 40;
private JTextComponent[] textComponents;
public ManagedParameterPanel(T parameterExample) {
mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new PamGridBagContraints();
PamParameterSet exampleSet = parameterExample.getParameterSet();
parameterSet = exampleSet.getParameterCollection();
int n = parameterSet.size();
textComponents = new JTextComponent[n];
int i = 0;
for (PamParameterData paramData : parameterSet) {
textComponents[i] = createComponent(paramData);
c.gridx = 0;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.NORTHEAST;
mainPanel.add(new JLabel(paramData.getShortName(), JLabel.RIGHT), c);
c.gridx++;
if (textComponents[i] instanceof JTextArea) {
c.fill = GridBagConstraints.HORIZONTAL;
}
else {
c.fill = GridBagConstraints.NONE;
}
c.anchor = GridBagConstraints.WEST;
mainPanel.add(textComponents[i], c);
textComponents[i].setToolTipText(getTipText(paramData));
c.gridy++;
i++;
}
}
private String getTipText(PamParameterData paramData) {
String tip = paramData.getToolTip();
if (tip != null) {
return tip;
}
else {
return paramData.getFieldName();
}
}
private JTextComponent createComponent(PamParameterData paramData) {
int textLen = paramData.getFieldLength();
if (textLen == 0) {
textLen = DEFAULT_TEXT_LENGTH;
}
if (textLen <= MAX_SINGLE_LINE_LENGTH) {
return new JTextField(textLen);
}
else {
JTextField dummyField = new JTextField(2);
// dummyField.getBorder().
JTextArea textArea = new JTextArea(textLen/MAX_SINGLE_LINE_LENGTH+1, MAX_SINGLE_LINE_LENGTH);
textArea.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
return textArea;
}
}
public JComponent getPanel() {
return mainPanel;
}
public void setParams(T params) {
int i = 0;
PamParameterData newParamData = null;
Object data = null;
for (PamParameterData paramData : this.parameterSet) {
// find the parameter in the new parameters (parameterSet is just a formatting placeholder)
try {
newParamData = params.getParameterSet().findParameterData(paramData.getFieldName());
} catch (FieldNotFoundException e) {
e.printStackTrace();
}
try {
data = newParamData.getData();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (data != null) {
textComponents[i].setText(data.toString());
}
else {
textComponents[i].setText(null);
}
i++;
}
}
public boolean getParams(T params) {
int i = 0;
PamParameterData newParamData = null;
Object data = null;
for (PamParameterData paramData : this.parameterSet) {
// find the parameter in the new parameters (parameterSet is just a formatting placeholder)
try {
newParamData = params.getParameterSet().findParameterData(paramData.getFieldName());
} catch (FieldNotFoundException e) {
e.printStackTrace();
}
String txt = textComponents[i].getText();
try {
newParamData.setData(txt);
} catch (IllegalArgumentException | IllegalAccessException e) {
String msg = "Invalid parameter. Data type should be " + paramData.getField().getType().getName();
return PamDialog.showWarning(null, newParamData.getShortName(), msg);
}
i++;
}
return true;
}
}

View File

@ -0,0 +1,187 @@
package generalDatabase.parameterstore;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Arrays;
import java.util.Collection;
import PamModel.parametermanager.ManagedParameters;
import PamModel.parametermanager.PamParameterData;
import PamModel.parametermanager.PamParameterSet;
import generalDatabase.DBControlUnit;
import generalDatabase.EmptyTableDefinition;
import generalDatabase.PamConnection;
import generalDatabase.PamTableItem;
import generalDatabase.SQLTypes;
/**
* Store parameters from a managed parameter set in the PAMGuard database. These go into a dead simple table, which has
* two columns. The first is a name, the second a string value. Each parameter can only appear once.
* This works with ManagedParameters using the same names and field names that go into the xml output.
* @author dg50
*
*/
public class ParameterDatabaseStore {
private EmptyTableDefinition tableDef;
private PamTableItem nameItem, dataItem;
public ParameterDatabaseStore(String tableName) {
tableDef = new EmptyTableDefinition(tableName);
tableDef.addTableItem(nameItem = new PamTableItem("ParameterName", Types.VARCHAR));
tableDef.addTableItem(dataItem = new PamTableItem("Value", Types.VARCHAR));
}
public boolean saveParameterSet(ManagedParameters managedParameters) {
if (managedParameters == null) {
return false;
}
return saveParameterSet(managedParameters.getClass().getSimpleName(), managedParameters);
}
private boolean saveParameterSet(String name, ManagedParameters managedParameters) {
DBControlUnit dbControl = DBControlUnit.findDatabaseControl();
if (dbControl == null) {
return false;
}
PamConnection con = dbControl.getConnection();
if (checkTable(con) == false) {
return false;
}
String prefix;
if (name == null) {
prefix = "";
}
else {
prefix = name + ".";
}
PamParameterSet paramSet = managedParameters.getParameterSet();
Collection<PamParameterData> params = paramSet.getParameterCollection();
for (PamParameterData paramData : params) {
String paramName = paramData.getFieldName();
paramName = prefix + paramName;
Object data = null;
try {
data = paramData.getData();// .getField().get(managedParameters);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
// System.out.printf("Store param \"%s\" as \"%s\"\n", paramName, data);
saveToDatabase(con, paramName, data);
}
dbControl.commitChanges();
return true;
}
private boolean saveToDatabase(PamConnection con, String name, Object data) {
int[] existing = findExistingRows(con, name);
boolean ok = true;
if (existing == null || existing.length == 0) {
ok |= newRecord(con, name, data);
}
else {
ok |= updateRecord(con, existing[0], name, data);
if (existing.length > 1) {
for (int i = 1; i < existing.length; i++) {
ok |= deleteDuplicateRow(con, existing[i]);
}
}
}
return true;
}
private int[] findExistingRows(PamConnection con, String name) {
/**
* Find existing rows with that name.
*/
int[] rows = new int[0];
if (con == null) {
return rows;
}
String qStr = String.format("SELECT Id FROM %s WHERE %s='%s'", tableDef.getTableName(), nameItem.getName(), name);
try {
Statement stmt = con.getConnection().createStatement();
ResultSet res = stmt.executeQuery(qStr);
while (res.next()) {
int rowId = res.getInt(1);
rows = Arrays.copyOf(rows, rows.length+1);
rows[rows.length-1] = rowId;
}
res.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return rows;
}
private boolean newRecord(PamConnection con, String name, Object data) {
String insertStr = tableDef.getSQLInsertString(con.getSqlTypes());
try {
PreparedStatement stmt = con.getConnection().prepareStatement(insertStr);
stmt.setString(1, name);
if (data == null) {
stmt.setNull(2, Types.VARCHAR);
}
else {
stmt.setString(2, data.toString());
}
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
private boolean updateRecord(PamConnection con, int iRow, String name, Object data) {
SQLTypes st = con.getSqlTypes();
String updateString = String.format("UPDATE %s SET %s = '%s' WHERE Id = %d", tableDef.getTableName(),
st.formatColumnName(dataItem.getName()), data, iRow);
try {
PreparedStatement stmt = con.getConnection().prepareStatement(updateString);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
private boolean deleteDuplicateRow(PamConnection con, int rowId) {
String delStr = String.format("DELETE FROM %s WHERE Id=%d", tableDef.getTableName(), rowId);
try {
PreparedStatement stmt = con.getConnection().prepareStatement(delStr);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
private boolean checkTable(PamConnection con) {
DBControlUnit dbControl = DBControlUnit.findDatabaseControl();
if (dbControl == null) {
return false;
}
dbControl.commitChanges();
return dbControl.getDbProcess().checkTable(tableDef);
}
}

View File

@ -0,0 +1,30 @@
package metadata;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import PamController.PamControlledUnit;
import PamModel.parametermanager.ParameterSetManager;
import generalDatabase.parameterstore.ParameterDatabaseStore;
import metadata.deployment.DeploymentData;
public class MetaDataContol extends PamControlledUnit {
public static final String unitType = "Meta Data";
private DeploymentData deploymentData = new DeploymentData();
private ParameterSetManager<DeploymentData> deploymentSetManager;
public MetaDataContol(String unitName) {
super(unitType, unitName);
deploymentSetManager = new ParameterSetManager<DeploymentData>(deploymentData, "Deployment Data");
}
@Override
public JMenuItem createFileMenu(JFrame parentFrame) {
return deploymentSetManager.getMenuItem(parentFrame);
}
}

View File

@ -0,0 +1,266 @@
package metadata.deployment;
import java.io.Serializable;
import PamModel.parametermanager.FieldNotFoundException;
import PamModel.parametermanager.ManagedParameters;
import PamModel.parametermanager.PamParameterSet;
/**
* Class to hold Deployment data in a form consistent with the ANSI PAM
* Standard. This has been keep separate from the Tethys Interface to keep it
* easy to benefit from these data without using Tethys itself.
*
* @author dg50
*
*/
public class DeploymentData implements Serializable, Cloneable, ManagedParameters {
public static final long serialVersionUID = 1L;
/**
* String that uniquely identifies this deployment.
*/
private String id;
/**
* Name of project associated with this deployment. Can be related to a
* geographic region, funding source, etc
*/
private String project;
/**
* Deployment identifier, a number related to either the Nth deployment
* operation in a series of deployments or the Nth deployment at a specific
* site. This is different from Id which is unique across all deployments
*/
private int deploymentId;
/**
* Alternative deployment description.
*/
private String deploymentAlias;
/**
* Name for current location.
*/
private String site;
/**
* Alternative names for the deployment location
*/
private String siteAliases;
/**
* Name of deployment cruise.
*/
private String cruise;
/**
* On what platform is the instrument deployed? (e.g. mooring, tag)
*/
private String platform = "Unknown";
/**
* Name of geographic region.
*/
private String region;
/**
* Instrument type, e.g. HARP, EAR, Popup, DMON, etc.
*/
private String instrumentType;
/**
* Instrument identifier, e.g. serial number
*/
private String instrumentId;
public DeploymentData() {
}
@Override
protected DeploymentData clone() {
try {
return (DeploymentData) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
@Override
public PamParameterSet getParameterSet() {
PamParameterSet ps = PamParameterSet.autoGenerate(this);
try {
ps.findParameterData("id").setInfo("Unique Id", null, "String that uniquely identifies this deployment", 128);
// ps.setOrder("id", 0);
ps.findParameterData("project").setInfo("Project Name", null, "Name of project associated with this deployment. Can be related to a geographic region, funding source, etc", 200);
ps.findParameterData("deploymentId").setInfo("Deployment Identifier", null, "Deployment identifier, a number related to either the Nth deployment operation in a series of deployments or the Nth deployment at a specific site. This is different from Id which is unique across all deployments");
ps.findParameterData("deploymentAlias").setInfo("Alternative deployment description", null, "Alternative deployment description", 20);
ps.findParameterData("site").setInfo("Site name", null, "Name for current location", 40);
ps.findParameterData("siteAliases").setInfo("Alternative site name", null, "Alternative site description", 40);
ps.findParameterData("cruise").setInfo("Deployment cruise", null, "Name of deployment cruise");
ps.findParameterData("platform").setInfo("Platform type", null, "On what platform is the instrument deployed? (e.g. mooring, tag)", 20);
ps.findParameterData("region").setInfo("Geographic Region", "", "Name of geographic region", 40);
} catch (FieldNotFoundException e) {
e.printStackTrace();
}
return ps;
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the project
*/
public String getProject() {
return project;
}
/**
* @param project the project to set
*/
public void setProject(String project) {
this.project = project;
}
/**
* @return the deploymentId
*/
public int getDeploymentId() {
return deploymentId;
}
/**
* @param deploymentId the deploymentId to set
*/
public void setDeploymentId(int deploymentId) {
this.deploymentId = deploymentId;
}
/**
* @return the deplomentAlias
*/
public String getDeploymentAlias() {
return deploymentAlias;
}
/**
* @param deplomentAlias the deplomentAlias to set
*/
public void setDeploymentAlias(String deplomentAlias) {
this.deploymentAlias = deplomentAlias;
}
/**
* @return the site
*/
public String getSite() {
return site;
}
/**
* @param site the site to set
*/
public void setSite(String site) {
this.site = site;
}
/**
* @return the siteAliases
*/
public String getSiteAliases() {
return siteAliases;
}
/**
* @param siteAliases the siteAliases to set
*/
public void setSiteAliases(String siteAliases) {
this.siteAliases = siteAliases;
}
/**
* @return the cruise
*/
public String getCruise() {
return cruise;
}
/**
* @param cruise the cruise to set
*/
public void setCruise(String cruise) {
this.cruise = cruise;
}
/**
* @return the platform
*/
public String getPlatform() {
return platform;
}
/**
* @param platform the platform to set
*/
public void setPlatform(String platform) {
this.platform = platform;
}
/**
* @return the region
*/
public String getRegion() {
return region;
}
/**
* @param region the region to set
*/
public void setRegion(String region) {
this.region = region;
}
/**
* @return the instrumentType
*/
public String getInstrumentType() {
return instrumentType;
}
/**
* @param instrumentType the instrumentType to set
*/
public void setInstrumentType(String instrumentType) {
this.instrumentType = instrumentType;
}
/**
* @return the instrumentId
*/
public String getInstrumentId() {
return instrumentId;
}
/**
* @param instrumentId the instrumentId to set
*/
public void setInstrumentId(String instrumentId) {
this.instrumentId = instrumentId;
}
}

View File

@ -0,0 +1,40 @@
package metadata.deployment;
import java.io.Serializable;
import PamModel.parametermanager.ManagedParameters;
import PamModel.parametermanager.PamParameterSet;
/**
* Largely the content of the Tethys QualityAssurance schema
* @author dg50
*
*/
public class QAData implements Serializable, Cloneable, ManagedParameters {
public static final long serialVersionUID = 1L;
private String objectives;
private String qaAbstract;
private String method;
private String responsibleName;
private String responsibleOrganisation;
private String responsiblePosition;
private String responsiblePhone;
private String responsibleAddress;
private String responsibleEmail;
public QAData() {
// TODO Auto-generated constructor stub
}
@Override
public PamParameterSet getParameterSet() {
PamParameterSet ps = PamParameterSet.autoGenerate(this);
return ps;
}
}

View File

@ -11,6 +11,8 @@ import javax.swing.JMenuItem;
import PamController.PamControlledUnit; import PamController.PamControlledUnit;
import PamController.PamController; import PamController.PamController;
import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataBlock;
import nilus.Deployment;
import nilus.Deployment.Instrument;
import tethys.output.StreamExportParams; import tethys.output.StreamExportParams;
import tethys.output.TethysExportParams; import tethys.output.TethysExportParams;
import tethys.output.swing.TethysExportDialog; import tethys.output.swing.TethysExportDialog;
@ -57,6 +59,19 @@ public class TethysControl extends PamControlledUnit {
return tethysExportParams; return tethysExportParams;
} }
/**
* Get a nilus deployment document, as full populated as possible.
* @return
*/
public Deployment getDeployment() {
Deployment deployment = new Deployment();
Deployment.Instrument instrument = new Instrument();
// instrument.
// deployment.
return null;
}
/** /**
* We'll probably want to * We'll probably want to
* @param parentFrame * @param parentFrame

View File

@ -0,0 +1,85 @@
package tethys.deployment;
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedType;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.namespace.QName;
import javax.xml.validation.Schema;
import nilus.Deployment.Data.Audio;
import nilus.Deployment;
import nilus.Deployment.Data;
import nilus.Deployment.Instrument;
public class DeploymentWrapper<T extends Serializable> {
public DeploymentWrapper(T tethysObject) {
}
public List<String> getFieldNames() {
return null;
}
public List<Serializable> getComplexObjects() {
return null;
}
public static void main(String[] args) {
// quick play with some JAXB objects to see what they can do.
Deployment deployment = new Deployment();
Class<? extends Deployment> deploymentClass = deployment.getClass();
Annotation[] annots = deploymentClass.getAnnotations();
AnnotatedType[] annotInterfaces = deploymentClass.getAnnotatedInterfaces();
Annotation[] declAnnots = deploymentClass.getDeclaredAnnotations();
Instrument instrument = new Instrument();
instrument.setID("22");
instrument.setType("SoundTrap");
QName qName = new QName("Instrument");
JAXBElement<Instrument> jInst = new JAXBElement<Deployment.Instrument>(qName, Instrument.class, instrument);
deployment.getContent().add(jInst);
Deployment.Data data = new Data();
Audio audio = new Audio();
audio.setProcessed("??");
data.setAudio(audio);
JAXBElement jData = new JAXBElement<Deployment.Data>(new QName("Data"), Data.class, data);
deployment.getContent().add(jData);
String project = "Project Name";
JAXBElement<String> jProj = new JAXBElement<String>(new QName("Project"), String.class, project);
deployment.getContent().add(jProj);
String aaa = "Project Something else";
JAXBElement<String> jProj2 = new JAXBElement<String>(new QName("Region"), String.class, aaa);
deployment.getContent().add(jProj2);
try {
JAXBContext jContext = JAXBContext.newInstance(Deployment.class);
Marshaller mar = (Marshaller) jContext.createMarshaller();
mar.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
mar.marshal(deployment, bos);
String xml = new String(bos.toByteArray());
System.out.println(xml);
// Schema schema = mar.getSchema(); // is null. Can't generate it's own it seems.
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,64 @@
package tethys.deployment;
import java.io.Serializable;
import nilus.DeploymentRecoveryDetails;
/**
* Wrapper and functions associated with the Tethys Deployment object which can
* exchange these with the PAMGuard database and display Everything is just held
* within a list, in no particular order, which getContent public
*
* This is from the Deployment JavaDoc. TBH it's pretty horrible, since it's possible to have
* more than one of each type of object in the list, so not sure what to do about that. Would be nicer
* as a HashTable. however we are where we're are for now. Start by focussing on getting the
* content saved for each type
*
* List<Serializable> getContent()
*
* Gets the value of the content property. This accessor method returns a
* reference to the live list,not a snapshot. Therefore any modification you
* make to the returned list will be present inside the JAXB object.This is why
* there is not a set method for the content property.
*
* For example, to add a new item, do as follows: getContent().add(newItem);
*
*
* Objects of the following type(s) are allowed in the list JAXBElement<String>
* JAXBElement<String>
* JAXBElement<Integer>
* JAXBElement<DeploymentRecoveryDetails>
* JAXBElement<String>
* JAXBElement<Deployment.SamplingDetails>
* JAXBElement<Deployment.Sensors>
* JAXBElement<Deployment.Instrument>
* JAXBElement<String>
* JAXBElement<Deployment.Data>
* JAXBElement<String> String
* JAXBElement<AcousticDataQAType>
* JAXBElement<Deployment.SiteAliases>
* JAXBElement<String>
* JAXBElement<DeploymentRecoveryDetails>
*
*
* @author dg50
*
*/
public class PamDeployment {
public PamDeployment() {
}
public DeploymentRecoveryDetails getDeploymentRecoveryDetails() {
DeploymentRecoveryDetails drd = new DeploymentRecoveryDetails();
return null;
}
private void ripApart(Serializable object) {
Class cls = object.getClass();
// cls.get
}
}

View File

@ -0,0 +1,5 @@
package tethys.exchange;
public interface TethysExchange {
// JAXB
}