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 78c92119..1170027a 100644 --- a/src/PamController/UsedModuleInfo.java +++ b/src/PamController/UsedModuleInfo.java @@ -59,4 +59,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/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 97720f23..1300fc79 100644 --- a/src/loggerForms/FormsDataDisplayTable.java +++ b/src/loggerForms/FormsDataDisplayTable.java @@ -213,7 +213,7 @@ public class FormsDataDisplayTable { if (getColumnClass(columnIndex) == Boolean.class) { if (value instanceof Boolean == false) { // System.out.println("Bad boolean value: " + value); - return interpretBadBoolean(value); + return FormsControl.checkBadBoolean(value); } } return value; @@ -260,22 +260,6 @@ public class FormsDataDisplayTable { } - public Boolean interpretBadBoolean(Object 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; - } /** 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) {