From 192f4686b85cf3036a93b7e0875e54a95a59a187 Mon Sep 17 00:00:00 2001 From: David Friedman Date: Wed, 13 Jan 2016 15:07:04 +0000 Subject: [PATCH] ASM #18495 - WarnGen: Does not load from a procedure after DCS 1794 Change-Id: Ice3cd107970b964360ed6431b63e4ddfa51b7f85 Former-commit-id: d26c2b47a709baf47f14a21e14666e5b51622307 --- .../viz/warngen/gui/WarngenLayer.java | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java index 74213629d9..1dc9499d72 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java @@ -805,7 +805,7 @@ public class WarngenLayer extends AbstractStormTrackResource { private class ExtensionAreaManager extends Job implements IChangeListener { private ExtensionAreaOptions options = new ExtensionAreaOptions(); - private WritableValue observableOptions = new WritableValue(options, null); + private WritableValue observableOptions; private GeospatialDataAccessor primaryGDA; private GeospatialDataAccessor gda; @@ -816,7 +816,6 @@ public class WarngenLayer extends AbstractStormTrackResource { public ExtensionAreaManager() { super("Generate extension area"); - observableOptions.addChangeListener(this); } public GeospatialDataAccessor getGDA() { @@ -831,8 +830,16 @@ public class WarngenLayer extends AbstractStormTrackResource { return options.isEnabled() && options.getDistance() > 0.0; } - public void setExtensionAreaConfig(ExtensionArea extensionAreaConfig) { - observableOptions.setValue(new ExtensionAreaOptions(extensionAreaConfig)); + public synchronized void setExtensionAreaConfig(ExtensionArea extensionAreaConfig) { + /* This could be called from a thread other than the main, before + * observable options has been initialized. + */ + ExtensionAreaOptions options = new ExtensionAreaOptions(extensionAreaConfig); + if (observableOptions != null) { + observableOptions.setValue(options); + } else { + realizeOptions(options); + } } private void realizeOptions(ExtensionAreaOptions options) { @@ -964,16 +971,23 @@ public class WarngenLayer extends AbstractStormTrackResource { } @Override - public void handleChange(ChangeEvent event) { + public synchronized void handleChange(ChangeEvent event) { ExtensionAreaOptions options = (ExtensionAreaOptions) ((WritableValue) event .getObservable()).getValue(); realizeOptions(options != null ? options : new ExtensionAreaOptions()); } + public synchronized WritableValue getObservableExtensionAreaOptions() { + if (observableOptions == null) { + observableOptions = new WritableValue(options, null); + observableOptions.addChangeListener(this); + } + return observableOptions; + } } public WritableValue getObservableExtensionAreaOptions() { - return extensionAreaManager.observableOptions; + return extensionAreaManager.getObservableExtensionAreaOptions(); } private class ExtensionAreaGeometryTask implements Callable { @@ -1208,13 +1222,6 @@ public class WarngenLayer extends AbstractStormTrackResource { setSpeedAndAngle(); setDuration(); - - observableExtensionAreaVisible.addChangeListener(new IChangeListener() { - @Override - public void handleChange(ChangeEvent event) { - issueRefresh(); - } - }); } @Override @@ -1462,7 +1469,7 @@ public class WarngenLayer extends AbstractStormTrackResource { } } - if ((Boolean) observableExtensionAreaVisible.getValue()) { + if ((Boolean) getObservableExtensionAreaVisible().getValue()) { if (extensionAreaVis != null) { extensionAreaShadedShape.reset(); JTSCompiler comp = new JTSCompiler(extensionAreaShadedShape, null, descriptor); @@ -1655,7 +1662,7 @@ public class WarngenLayer extends AbstractStormTrackResource { private Geometry extensionAreaVis; - private WritableValue observableExtensionAreaVisible = new WritableValue(false, null); + private WritableValue observableExtensionAreaVisible; private RGB extensionAreaVisualizationColor = new RGB(240, 128, 128); @@ -1664,15 +1671,24 @@ public class WarngenLayer extends AbstractStormTrackResource { private IShadedShape extensionAreaShadedShape = null; public WritableValue getObservableExtensionAreaVisible() { + if (observableExtensionAreaVisible == null) { + observableExtensionAreaVisible = new WritableValue(false, null); + observableExtensionAreaVisible.addChangeListener(new IChangeListener() { + @Override + public void handleChange(ChangeEvent event) { + issueRefresh(); + } + }); + } return observableExtensionAreaVisible; } public boolean isExtensionAreaVisible() { - return (Boolean) observableExtensionAreaVisible.getValue(); + return (Boolean) getObservableExtensionAreaVisible().getValue(); } public void setExtensionAreaVisualized(boolean visible) { - observableExtensionAreaVisible.setValue(visible); + getObservableExtensionAreaVisible().setValue(visible); } public RGB getExtensionAreaVisualizationColor() {