diff --git a/src/Acquisition/FolderInputSystem.java b/src/Acquisition/FolderInputSystem.java index f3a33ed4..93107b31 100644 --- a/src/Acquisition/FolderInputSystem.java +++ b/src/Acquisition/FolderInputSystem.java @@ -318,6 +318,9 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings, D } selection = folderInputParameters.getSelectedFiles(); } + if (selection == null) { + return 0; + } if (selection.length > 0) { System.out.println("FolderInputSystem.makeSelFileList(): Searching for sound files in " + selection[0]); } diff --git a/src/Map/MapPanel.java b/src/Map/MapPanel.java index e3122141..225f01ef 100644 --- a/src/Map/MapPanel.java +++ b/src/Map/MapPanel.java @@ -1096,6 +1096,7 @@ public class MapPanel extends JPanelWithPamKey implements PamObserver, ColorMana return; } ds = dataBlock.getDataSelector(simpleMapRef.getUnitName(), false, DATASELECTNAME); +// ds = null; ArrayList dataCopy = dataBlock.getDataCopy(earliestToPlot, now, true, ds); duIterator = dataCopy.listIterator(); while (duIterator.hasNext()) { diff --git a/src/PamController/PamSettingManager.java b/src/PamController/PamSettingManager.java index ddd15740..46bc0679 100644 --- a/src/PamController/PamSettingManager.java +++ b/src/PamController/PamSettingManager.java @@ -476,7 +476,7 @@ public class PamSettingManager { */ public PamSettings findSettingsOwner(String unitType, String unitName, String unitClassName) { for (PamSettings owner:owners) { - if (owner.getClass() != null) { + if (owner.getClass() != null && unitClassName != null) { if (owner.getClass().getName().equals(unitClassName) == false) { continue; } diff --git a/src/PamController/UsedModuleInfo.java b/src/PamController/UsedModuleInfo.java index 88756866..390ab1c0 100644 --- a/src/PamController/UsedModuleInfo.java +++ b/src/PamController/UsedModuleInfo.java @@ -58,4 +58,12 @@ public class UsedModuleInfo implements Serializable, ManagedParameters { return ps; } + /** + * Get the unit name of the module being imported. + * @return + */ + public String getUnitName() { + return unitName; + } + } diff --git a/src/PamController/settings/SettingsImport.java b/src/PamController/settings/SettingsImport.java index 0c52fb31..16e23f35 100644 --- a/src/PamController/settings/SettingsImport.java +++ b/src/PamController/settings/SettingsImport.java @@ -116,14 +116,16 @@ public class SettingsImport { */ private PamControlledUnit importReplace(SettingsImportGroup importGroup, String replaceModule) { PamControlledUnitSettings mainSet = importGroup.getMainSettings(); - PamControlledUnit unit = PamController.getInstance().findControlledUnit(mainSet.getUnitType(), replaceModule); + UsedModuleInfo importInfo = importGroup.getUsedModuleInfo(); + PamControlledUnit unit = PamController.getInstance().findControlledUnit(importInfo.getUnitType(), replaceModule); if (unit == null) { - System.out.println("Unable to find " + mainSet.getUnitType() + " " + mainSet.getUnitName() + " for settings replacement"); + System.out.println("Unable to find " + importInfo.getUnitType() + " " + importInfo.getUnitName() + " for settings replacement"); return null; } // check we can cast it to PamSettings - if (PamSettings.class.isAssignableFrom(unit.getClass())) { + if (PamSettings.class.isAssignableFrom(unit.getClass()) && mainSet != null) { try { + mainSet.setUnitName(replaceModule); ((PamSettings) unit).restoreSettings(mainSet); } catch (Exception e) { @@ -132,7 +134,7 @@ public class SettingsImport { System.err.println(e.getMessage()); } } - loadSubUnitSettings(importGroup, mainSet.getUnitName()); + loadSubUnitSettings(importGroup, replaceModule); return unit; } @@ -149,7 +151,15 @@ public class SettingsImport { } PamSettingManager setManager = PamSettingManager.getInstance(); for (PamControlledUnitSettings pamSettings:subSets) { - PamSettings owner = setManager.findSettingsOwner(pamSettings.getUnitType(), unitName, pamSettings.getOwnerClassName()); + /* + * class name in pamSettings is no longer correct, so cannot use pamSettings.getOwnerClassName(). + * but the classnames of all the sub modules are unknown (and will be different form the unit class name + * which can be got from importGroup.getPamModuleInfo().getClassName + * so will have to do this only on the unit type and name and hope for no conflicts (catch exception). + */ +// PamModuleInfo moduleInfo = importGroup.getPamModuleInfo(); +// String className = moduleInfo.getClassName(); + PamSettings owner = setManager.findSettingsOwner(pamSettings.getUnitType(), unitName, null); if (owner == null) { System.out.println(String.format("Cannot find settings owner for %s %s in current model", pamSettings.getUnitType(), unitName)); continue; @@ -168,7 +178,8 @@ public class SettingsImport { private PamControlledUnit importNew(SettingsImportGroup importGroup) { PamControlledUnitSettings mainSet = importGroup.getMainSettings(); - String moduleName = mainSet.getUnitName(); + UsedModuleInfo importInfo = importGroup.getUsedModuleInfo(); + String moduleName = importInfo.unitName; // check we've got a name that doesnt' exist and replace it if if does. // int startChar = 0; @@ -199,11 +210,11 @@ public class SettingsImport { PamControlledUnit unit = PamController.getInstance().addModule(PamController.getMainFrame(), moduleInfo); if (unit == null) { - System.out.println("Unable to find " + mainSet.getUnitType() + " " + mainSet.getUnitName() + " for settings replacement"); + System.out.println("Unable to find " + importInfo.getUnitType() + " " + importInfo.getUnitName() + " for settings replacement"); return null; } // check we can cast it to PamSettings - if (PamSettings.class.isAssignableFrom(unit.getClass())) { + if (PamSettings.class.isAssignableFrom(unit.getClass()) && mainSet != null) { try { mainSet.setUnitName(unit.getUnitName()); // need to force the unit name for some modules. ((PamSettings) unit).restoreSettings(mainSet); diff --git a/src/PamController/settings/SettingsImportDialog.java b/src/PamController/settings/SettingsImportDialog.java index 6f6621e6..4241a0cf 100644 --- a/src/PamController/settings/SettingsImportDialog.java +++ b/src/PamController/settings/SettingsImportDialog.java @@ -195,12 +195,14 @@ public class SettingsImportDialog extends PamDialog { @Override public Object getValueAt(int rowIndex, int columnIndex) { SettingsImportGroup set = groupedSettings.get(rowIndex); - PamControlledUnitSettings mainSet = set.getMainSettings(); +// PamControlledUnitSettings mainSet = set.getMainSettings(); switch (columnIndex) { case 0: - return mainSet.getUnitType(); + return set.getUsedModuleInfo().getUnitType(); +// return mainSet.getUnitType(); case 1: - return mainSet.getUnitName(); + return set.getUsedModuleInfo().unitName; +// return mainSet.getUnitName(); case 2: // return choiceBoxes[rowIndex].getSelectedItem().toString(); return set.getImportChoice().toString(); diff --git a/src/PamController/settings/SettingsImportGroup.java b/src/PamController/settings/SettingsImportGroup.java index a74a6885..98bf1e4f 100644 --- a/src/PamController/settings/SettingsImportGroup.java +++ b/src/PamController/settings/SettingsImportGroup.java @@ -82,8 +82,10 @@ public class SettingsImportGroup { try { ownerClass = Class.forName(usedModuleInfo.className); } catch (ClassNotFoundException e) { + + System.out.println("Unknown class in loaded settings: " + usedModuleInfo.className); // TODO Auto-generated catch block - e.printStackTrace(); +// e.printStackTrace(); } ArrayList existingModules = PamController.getInstance().findControlledUnits(ownerClass); diff --git a/src/loggerForms/FormDescription.java b/src/loggerForms/FormDescription.java index b3d55501..95b204cb 100644 --- a/src/loggerForms/FormDescription.java +++ b/src/loggerForms/FormDescription.java @@ -38,6 +38,14 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; +import Array.streamerOrigin.GPSOriginMethod; +import Array.streamerOrigin.GPSOriginSystem; +import Array.streamerOrigin.HydrophoneOriginMethod; +import Array.streamerOrigin.HydrophoneOriginMethods; +import Array.streamerOrigin.OriginIterator; +import Array.streamerOrigin.StaticOriginSystem; +import GPS.GpsData; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -49,6 +57,7 @@ import pamScrollSystem.ScrollPaneAddon; import PamView.PamTabPanel; import PamView.panel.PamPanel; import PamView.symbol.StandardSymbolManager; +import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataUnit; import PamController.PamControlledUnitSettings; import PamController.PamController; @@ -2021,4 +2030,32 @@ public class FormDescription implements Cloneable, Comparable { public void setNeedsUDFSave(boolean needsUDFSave) { this.needsUDFSave = needsUDFSave; } + + public GpsData getOriginLatLong(FormsDataUnit formsDataUnit) { + GpsData gps = getOrigin(GPSOriginSystem.class, formsDataUnit); + if (gps != null) { + return gps; + } + gps = getOrigin(StaticOriginSystem.class, formsDataUnit); + return gps; + } + + private GpsData getOrigin(Class originClass, FormsDataUnit formsDataUnit) { + HydrophoneOriginMethods origins = HydrophoneOriginMethods.getInstance(); + HydrophoneOriginMethod origin = origins.getMethod(GPSOriginMethod.class, null, null); + if (origin == null) { + return null; + } + OriginIterator gpsIter = origin.getGpsDataIterator(PamDataBlock.ITERATOR_END); + GpsData prev = null; + while (gpsIter.hasPrevious()) { + prev = gpsIter.previous(); + if (prev.getTimeInMillis() < formsDataUnit.getTimeMilliseconds()) { + break; + } + } + return prev; + } + + } diff --git a/src/loggerForms/FormsControl.java b/src/loggerForms/FormsControl.java index e88c1343..94cf9112 100644 --- a/src/loggerForms/FormsControl.java +++ b/src/loggerForms/FormsControl.java @@ -614,6 +614,32 @@ public class FormsControl extends PamControlledUnit { return new ModuleStatus(ModuleStatus.STATUS_OK); } + + /** + * Some things that are meant to be boolean are coming out as int or string so + * need to do some type checking. + * @param value + * @return + */ + public static Boolean checkBadBoolean(Object value) { + if (value instanceof Boolean) { + return (Boolean) value; + } + if (value == null) { + return null; + } + if (value instanceof String) { + String str = (String) value; + str = str.strip(); + return str.equals("1") || str.toLowerCase().equals("false"); + } + if (value instanceof Integer) { + int val = (Integer) value; + return val != 0; + } + + return null; + } // @Override // public Serializable getSettingsReference() { // return (Serializable) dummyParams; diff --git a/src/loggerForms/FormsDataDisplayTable.java b/src/loggerForms/FormsDataDisplayTable.java index f30316fe..26e2f5b3 100644 --- a/src/loggerForms/FormsDataDisplayTable.java +++ b/src/loggerForms/FormsDataDisplayTable.java @@ -208,7 +208,15 @@ public class FormsDataDisplayTable { Object[] fd = pamDataUnit.getFormData(); int ctIndex = columnIndex-extraColumns.length; ControlDescription ctrlDescription = formDescription.getInputControlDescriptions().get(ctIndex); - return ctrlDescription.formatDataItem(fd[ctIndex]); + Object value = ctrlDescription.formatDataItem(fd[ctIndex]); + if (value == null) return null; + if (getColumnClass(columnIndex) == Boolean.class) { + if (value instanceof Boolean == false) { +// System.out.println("Bad boolean value: " + value); + return FormsControl.checkBadBoolean(value); + } + } + return value; // return fd[ctIndex]; } catch (Exception e) { @@ -252,6 +260,7 @@ public class FormsDataDisplayTable { } + /** * Called when data have changed in the datablock. */ diff --git a/src/loggerForms/FormsDataUnit.java b/src/loggerForms/FormsDataUnit.java index 963c6374..32ab905d 100644 --- a/src/loggerForms/FormsDataUnit.java +++ b/src/loggerForms/FormsDataUnit.java @@ -87,7 +87,9 @@ public class FormsDataUnit extends PamDataUnit { * we want to as a reference, etc. */ if (recalculate || formOriginLatLong == null) { - formOriginLatLong = loggerForm.getOriginLatLong(this); + if (formDescription != null) { + formOriginLatLong = formDescription.getOriginLatLong(this); + } } return formOriginLatLong; } diff --git a/src/loggerForms/FormsLogging.java b/src/loggerForms/FormsLogging.java index 5420f3a9..64e0d8e6 100644 --- a/src/loggerForms/FormsLogging.java +++ b/src/loggerForms/FormsLogging.java @@ -112,7 +112,7 @@ public class FormsLogging extends SQLLogging { // } // } - +// formDescription.getf FormsDataUnit formsDataUnit = new FormsDataUnit(null, timeMilliseconds, formDescription, formData); formsDataUnit.setDatabaseIndex(databaseIndex); diff --git a/src/loggerForms/LoggerForm.java b/src/loggerForms/LoggerForm.java index 11f562a7..58215478 100644 --- a/src/loggerForms/LoggerForm.java +++ b/src/loggerForms/LoggerForm.java @@ -104,7 +104,7 @@ public class LoggerForm{ private CounterControl counter; - private HydrophoneOriginMethods origins = HydrophoneOriginMethods.getInstance(); +// private HydrophoneOriginMethods origins = HydrophoneOriginMethods.getInstance(); /** * @return the hasCounter @@ -911,30 +911,30 @@ public class LoggerForm{ return saveButton; } - public GpsData getOriginLatLong(FormsDataUnit formsDataUnit) { - GpsData gps = getOrigin(GPSOriginSystem.class, formsDataUnit); - if (gps != null) { - return gps; - } - gps = getOrigin(StaticOriginSystem.class, formsDataUnit); - return gps; - } - - private GpsData getOrigin(Class originClass, FormsDataUnit formsDataUnit) { - HydrophoneOriginMethod origin = origins.getMethod(GPSOriginMethod.class, null, null); - if (origin == null) { - return null; - } - OriginIterator gpsIter = origin.getGpsDataIterator(PamDataBlock.ITERATOR_END); - GpsData prev = null; - while (gpsIter.hasPrevious()) { - prev = gpsIter.previous(); - if (prev.getTimeInMillis() < formsDataUnit.getTimeMilliseconds()) { - break; - } - } - return prev; - } +// public GpsData getOriginLatLong(FormsDataUnit formsDataUnit) { +// GpsData gps = getOrigin(GPSOriginSystem.class, formsDataUnit); +// if (gps != null) { +// return gps; +// } +// gps = getOrigin(StaticOriginSystem.class, formsDataUnit); +// return gps; +// } +// +// private GpsData getOrigin(Class originClass, FormsDataUnit formsDataUnit) { +// HydrophoneOriginMethod origin = origins.getMethod(GPSOriginMethod.class, null, null); +// if (origin == null) { +// return null; +// } +// OriginIterator gpsIter = origin.getGpsDataIterator(PamDataBlock.ITERATOR_END); +// GpsData prev = null; +// while (gpsIter.hasPrevious()) { +// prev = gpsIter.previous(); +// if (prev.getTimeInMillis() < formsDataUnit.getTimeMilliseconds()) { +// break; +// } +// } +// return prev; +// } // /** diff --git a/src/loggerForms/controls/CheckboxControl.java b/src/loggerForms/controls/CheckboxControl.java index 3be6dd8f..a0ec06e0 100644 --- a/src/loggerForms/controls/CheckboxControl.java +++ b/src/loggerForms/controls/CheckboxControl.java @@ -9,6 +9,7 @@ import NMEA.NMEADataBlock; import NMEA.NMEADataUnit; import PamView.dialog.PamCheckBox; import PamView.dialog.PamLabel; +import loggerForms.FormsControl; import loggerForms.LoggerForm; import loggerForms.controlDescriptions.ControlDescription; @@ -41,7 +42,7 @@ public class CheckboxControl extends LoggerControl { return; } try { - checkBox.setSelected((Boolean) data); + checkBox.setSelected(FormsControl.checkBadBoolean(data)); } catch(ClassCastException e) { e.printStackTrace(); diff --git a/src/loggerForms/dataselect/FormDataSelector.java b/src/loggerForms/dataselect/FormDataSelector.java index de627d29..926e68cb 100644 --- a/src/loggerForms/dataselect/FormDataSelector.java +++ b/src/loggerForms/dataselect/FormDataSelector.java @@ -70,7 +70,7 @@ public class FormDataSelector extends DataSelector { @Override public double scoreData(PamDataUnit pamDataUnit) { if (controlDataSelector == null) { - return 0; + return 1; } Object[] formData = null; if (pamDataUnit instanceof FormsDataUnit) {