Update Calibration export

Stop repeating hydrophones and add two addresses to Calibrations docs
This commit is contained in:
Douglas Gillespie 2023-12-07 20:08:17 +00:00
parent 9c86b41027
commit 860d1bec17
5 changed files with 134 additions and 71 deletions

View File

@ -45,6 +45,7 @@ import tethys.TethysTimeFuncs;
import tethys.calibration.swing.CalibrationsExportWizard;
import tethys.dbxml.DBXMLConnect;
import tethys.dbxml.TethysException;
import tethys.niluswraps.NilusSettingsWrapper;
import tethys.niluswraps.NilusUnpacker;
import tethys.pamdata.AutoTethysProvider;
@ -176,6 +177,9 @@ public class CalibrationHandler implements TethysStateObserver {
return 0;
}
NilusSettingsWrapper<Calibration> wrappedSample = new NilusSettingsWrapper<Calibration>();
wrappedSample.setNilusObject(sampleCal);
PamArray array = ArrayManager.getArrayManager().getCurrentArray();
int nPhone = array.getHydrophoneCount();
DBXMLConnect dbxml = tethysControl.getDbxmlConnect();
@ -184,6 +188,8 @@ public class CalibrationHandler implements TethysStateObserver {
boolean exists;
for (int i = 0; i < nPhone; i++) {
// String docName = getHydrophoneId(i);
NilusSettingsWrapper<Calibration> clonedWrap = wrappedSample.clone();
sampleCal = clonedWrap.getNilusObject(Calibration.class);
Calibration calDoc = createCalibrationDocument(i);
if (sampleCal != null) {
calDoc.setMetadataInfo(sampleCal.getMetadataInfo());

View File

@ -16,6 +16,7 @@ import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import PamView.dialog.PamGridBagContraints;
import PamView.panel.WestAlignedPanel;
import PamView.wizard.PamWizard;
import nilus.AlgorithmType;
import nilus.AlgorithmType.Parameters;
@ -43,8 +44,10 @@ public class CalibrationProcessCard extends CalibrationsCard {
super(pamWizard, "Calibration Process");
this.setLayout(new BorderLayout());
processPanel = new JPanel(new GridBagLayout());
processPanel.setBorder(new TitledBorder("Calibration Process"));
this.add(BorderLayout.NORTH, processPanel);
WestAlignedPanel wp;
this.add(BorderLayout.NORTH, wp = new WestAlignedPanel(processPanel));
wp.setBorder(new TitledBorder("Calibration Process"));
GridBagConstraints c = new PamGridBagContraints();
calMethod = new JComboBox<String>();

View File

@ -7,6 +7,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
@ -19,6 +20,7 @@ import org.jdesktop.swingx.JXDatePicker;
import PamView.dialog.PamDialog;
import PamView.dialog.PamGridBagContraints;
import PamView.panel.WestAlignedPanel;
import PamView.wizard.PamWizard;
import nilus.Calibration;
import nilus.ContactInfo;
@ -26,20 +28,25 @@ import nilus.MetadataInfo;
import nilus.ResponsibleParty;
import tethys.TethysTimeFuncs;
import tethys.calibration.CalibrationHandler;
import tethys.swing.export.ResponsiblePartyPanel;
public class CalibrationsContactCard extends CalibrationsCard {
private JXDatePicker datePicker;
private JTextField individual, organisation, position, email;
private ResponsiblePartyPanel calibrator, dataManager;
private JComboBox<String> updateInterval;
private MetadataInfo metaData;
private JButton copyDown, copyUp;
public CalibrationsContactCard(PamWizard pamWizard) {
super(pamWizard, "Contact Details");
// TODO Auto-generated constructor stub
// setBorder(new TitledBorder("Contact"));
setLayout(new BorderLayout());
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
updateInterval = new JComboBox<>();
String[] vals = CalibrationHandler.updateOptions;
@ -48,8 +55,8 @@ public class CalibrationsContactCard extends CalibrationsCard {
}
JPanel datePanel = new JPanel(new GridBagLayout());
datePanel.setBorder(new TitledBorder("Calibration date"));
add(BorderLayout.NORTH, datePanel);
JPanel lp = new WestAlignedPanel(datePanel);
lp.setBorder(new TitledBorder("Calibration date"));
GridBagConstraints c = new PamGridBagContraints();
datePanel.add(new JLabel("Calibration date: ", JLabel.RIGHT), c);
datePicker = new JXDatePicker();
@ -61,67 +68,66 @@ public class CalibrationsContactCard extends CalibrationsCard {
c.gridx++;
datePanel.add(updateInterval, c);
calibrator = new ResponsiblePartyPanel("Technical Person");
dataManager = new ResponsiblePartyPanel("Data Manager");
JPanel contactPanel = new JPanel(new GridBagLayout());
contactPanel.setBorder(new TitledBorder("Contact"));
this.add(BorderLayout.CENTER, contactPanel);
JPanel copyPanel = new JPanel(new GridBagLayout());
c = new PamGridBagContraints();
contactPanel.add(new JLabel("Individual Name "), c);
copyPanel.add(copyDown = new JButton("Copy down"),c);
c.gridx++;
contactPanel.add(individual = new JTextField(15), c);
c.gridx = 0;
c.gridy++;
contactPanel.add(new JLabel("Organisation "), c);
c.gridx++;
contactPanel.add(organisation = new JTextField(15), c);
c.gridx = 0;
c.gridy++;
contactPanel.add(new JLabel("Position "), c);
c.gridx++;
contactPanel.add(position = new JTextField(15), c);
c.gridx = 0;
c.gridy++;
contactPanel.add(new JLabel("Email "), c);
c.gridx++;
contactPanel.add(email = new JTextField(15), c);
c.gridx = 0;
c.gridy++;
copyPanel.add(copyUp = new JButton("Copy up"), c);
add(lp);
add(calibrator.getMainPanel());
add(copyPanel);
add(dataManager.getMainPanel());
copyDown.setToolTipText("Copy technical person to data manager");
copyUp.setToolTipText("Copy data manager to technical person");
copyDown.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
copyRPDown();
}
});
copyUp.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
copyRPUp();
}
});
}
protected void copyRPDown() {
copyRPData(calibrator, dataManager);
}
private void copyRPUp() {
copyRPData(dataManager, calibrator);
}
private void copyRPData(ResponsiblePartyPanel rFrom, ResponsiblePartyPanel rTo) {
ResponsibleParty rp = checkRPChildren(null);
rFrom.getParams(rp);
rTo.setParams(rp);
}
@Override
public boolean getParams(Calibration cardParams) {
if (cardParams == null) {
return false;
}
MetadataInfo metaInf = cardParams.getMetadataInfo();
if (metaInf == null) {
metaInf = new MetadataInfo();
cardParams.setMetadataInfo(metaInf);
}
ResponsibleParty contact = metaInf.getContact();
if (contact == null) {
contact = new ResponsibleParty();
metaInf.setContact(contact);
}
ContactInfo contactInfo = contact.getContactInfo();
if (contactInfo == null) {
contactInfo = new ContactInfo();
contact.setContactInfo(contactInfo);
}
ResponsibleParty rp = checkRPChildren(cardParams.getResponsibleParty());
cardParams.setResponsibleParty(rp);
calibrator.getParams(rp);
// so far as I'm aware, the meta info contains the time we create this record
// and the other timestamp is the data the calibration was donw.
metaInf.setDate(TethysTimeFuncs.xmlGregCalFromMillis(System.currentTimeMillis()));
metaInf.setUpdateFrequency((String) updateInterval.getSelectedItem());
metaData = cardParams.getMetadataInfo();
if (metaData == null) {
metaData = new MetadataInfo();
cardParams.setMetadataInfo(metaData);
}
metaData.setContact(checkRPChildren(metaData.getContact()));
dataManager.getParams(metaData.getContact());
contact.setIndividualName(individual.getText());
contact.setOrganizationName(organisation.getText());
contact.setPositionName(position.getText());
contactInfo.setContactInstructions(email.getText());
// and set this both as the RepsonsiblePArty and in the metadata.
cardParams.setResponsibleParty(contact);
metaData.setUpdateFrequency((String) updateInterval.getSelectedItem());
metaData.setDate(TethysTimeFuncs.xmlGregCalFromMillis(System.currentTimeMillis()));
Date date = datePicker.getDate();
if (date == null) {
@ -133,6 +139,19 @@ public class CalibrationsContactCard extends CalibrationsCard {
return true;
}
private ResponsibleParty checkRPChildren(ResponsibleParty rp) {
if (rp == null) {
rp = new ResponsibleParty();
}
if (rp.getContactInfo() == null) {
rp.setContactInfo(new ContactInfo());
}
if (rp.getContactInfo().getAddress() == null) {
// rp.getContactInfo().setAddress(new Address());
}
return rp;
}
private ResponsibleParty findResponsibleParty(Calibration cal) {
if (cal == null) {
return null;
@ -151,19 +170,17 @@ public class CalibrationsContactCard extends CalibrationsCard {
@Override
public void setParams(Calibration cardParams) {
// fill in as much as possible from the existing Calibration
ResponsibleParty resp = findResponsibleParty(cardParams);
ResponsibleParty resp = cardParams.getResponsibleParty();
if (resp != null) {
individual.setText(resp.getIndividualName());
organisation.setText(resp.getOrganizationName());
position.setText(resp.getPositionName());
ContactInfo cInf = resp.getContactInfo();
if (cInf != null) {
email.setText(cInf.getContactInstructions());
}
calibrator.setParams(resp);
}
MetadataInfo metaInf = cardParams.getMetadataInfo();
if (metaInf != null) {
resp = metaInf.getContact();
if (resp != null) {
dataManager.getParams(resp);
}
String uf = metaInf.getUpdateFrequency();
if (uf != null) {
updateInterval.setSelectedItem(uf);

View File

@ -102,7 +102,8 @@ public class NilusSettingsWrapper<T extends Object> implements Serializable, Clo
}
/**
* Repack the object. May want to do this before serializing.
* Repack the object.i.e. write the xml text string.
* May want to do this before serializing or cloning.
* @return
*/
public boolean repackNilusObject() {
@ -149,6 +150,25 @@ public class NilusSettingsWrapper<T extends Object> implements Serializable, Clo
public void reSerialise() {
packNilusObject(nilusObject);
}
@Override
public NilusSettingsWrapper<T> clone() {
/**
* Clone the underlying data, then force it to re-read the string into a new object.
*/
this.repackNilusObject();
NilusSettingsWrapper<T> clone = null;
try {
clone = (NilusSettingsWrapper<T>) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
if (nilusObject != null) {
clone.nilusObject = clone.unpackNilusObject(nilusObject.getClass());
}
return clone;
}
// private Class<?> getNilusClass() throws NoSuchMethodException, SecurityException {

View File

@ -9,6 +9,7 @@ import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import PamView.dialog.PamGridBagContraints;
import nilus.ContactInfo.Address;
import nilus.ResponsibleParty;
/**
@ -21,14 +22,18 @@ public class ResponsiblePartyPanel {
private JTextField name, organisation, position, email;
private JPanel mainPanel;
public ResponsiblePartyPanel() {
this(null);
}
/**
*
*/
public ResponsiblePartyPanel() {
public ResponsiblePartyPanel(String borderTitle) {
super();
mainPanel = new JPanel(new GridBagLayout());
// mainPanel.setBorder(new TitledBorder("Responsible party"));
if (borderTitle != null)
mainPanel.setBorder(new TitledBorder(borderTitle));
GridBagConstraints c = new PamGridBagContraints();
mainPanel.add(new JLabel("Name ", JLabel.RIGHT), c);
c.gridx++;
@ -64,14 +69,26 @@ public class ResponsiblePartyPanel {
name.setText(responsibleParty.getIndividualName());
organisation.setText(responsibleParty.getOrganizationName());
position.setText(responsibleParty.getPositionName());
email.setText(responsibleParty.getContactInfo().getContactInstructions());
Address addr = responsibleParty.getContactInfo().getAddress();
if (addr != null) {
email.setText(addr.getElectronicMailAddress());
}
}
public boolean getParams(ResponsibleParty responsibleParty) {
responsibleParty.setIndividualName(name.getText());
responsibleParty.setOrganizationName(organisation.getText());
responsibleParty.setPositionName(position.getText());
responsibleParty.getContactInfo().setContactInstructions(email.getText());
Address addr = responsibleParty.getContactInfo().getAddress();
if (addr == null) {
addr = new Address();
responsibleParty.getContactInfo().setAddress(addr);
}
addr.setElectronicMailAddress(email.getText());
return true;
}
}