diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettingsScape.java b/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettingsScape.java index fb0498f..aac2450 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettingsScape.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/AcquisitionSettingsScape.java @@ -47,7 +47,7 @@ public interface AcquisitionSettingsScape extends AcquisitionSettings { * * @return immutable DefaultSliceSettings instance. */ - DefaultSliceSettings slice(); + SliceSettings slice(); /** * Returns the immutable DefaultScanSettings instance. diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java index 76b91f0..8d91871 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/BaseAcquisitionSettings.java @@ -5,6 +5,7 @@ import com.google.gson.JsonDeserializer; import org.micromanager.lightsheetmanager.api.AcquisitionSettings; import org.micromanager.lightsheetmanager.api.ChannelSettings; +import org.micromanager.lightsheetmanager.api.SliceSettings; import org.micromanager.lightsheetmanager.api.StageScanSettings; import org.micromanager.lightsheetmanager.model.DataStorage; @@ -230,6 +231,11 @@ public static T fromJson(final String json, fina // This forces Gson to use the concrete implementation class return context.deserialize(jsonElement, DefaultChannelSettings.class); }) + .registerTypeAdapter(SliceSettings.class, (JsonDeserializer) + (jsonElement, typeOfT, context) -> { + // This forces Gson to use the concrete implementation class + return context.deserialize(jsonElement, DefaultSliceSettings.class); + }) .create(); return gson.fromJson(json, cls); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultSliceSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultSliceSettings.java index e3cf6ed..706f2b2 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultSliceSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultSliceSettings.java @@ -16,6 +16,11 @@ private DefaultSliceSettings(Builder builder) { periodMinimized_ = builder.periodMinimized_; } + // Note: used by GSON library for deserialization + private DefaultSliceSettings() { + this(new Builder()); + } + public static Builder builder() { return new Builder(); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultStageScanSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultStageScanSettings.java index e6a2719..a2b55ac 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultStageScanSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/DefaultStageScanSettings.java @@ -203,7 +203,7 @@ public Builder fromNegativeDirection(final boolean state) { } @Override - public StageScanSettings build() { + public DefaultStageScanSettings build() { return new DefaultStageScanSettings(this); } diff --git a/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java b/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java index e9e2095..2353ba7 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java +++ b/src/main/java/org/micromanager/lightsheetmanager/api/internal/ScapeAcquisitionSettings.java @@ -2,6 +2,7 @@ import org.micromanager.lightsheetmanager.api.AcquisitionSettingsScape; import org.micromanager.lightsheetmanager.api.ChannelSettings; +import org.micromanager.lightsheetmanager.api.SliceSettings; import org.micromanager.lightsheetmanager.api.StageScanSettings; import org.micromanager.lightsheetmanager.api.data.AcquisitionMode; import org.micromanager.lightsheetmanager.api.data.CameraData; @@ -18,7 +19,7 @@ public static class Builder extends BaseAcquisitionSettings.Builder imp private ChannelSettings.Builder channelBuilder_ = DefaultChannelSettings.builder(); private DefaultTimingSettings.Builder timingBuilder_ = DefaultTimingSettings.builder(); private DefaultVolumeSettings.Builder volumeBuilder_ = DefaultVolumeSettings.builder(); - private DefaultSliceSettings.Builder sliceBuilder_ = DefaultSliceSettings.builder(); + private SliceSettings.Builder sliceBuilder_ = DefaultSliceSettings.builder(); private StageScanSettings.Builder stageScanBuilder_ = DefaultStageScanSettings.builder(); private DefaultSheetCalibration.Builder sheetCalibBuilder_ = DefaultSheetCalibration.builder(); private DefaultSliceCalibration.Builder sliceCalibBuilder_ = DefaultSliceCalibration.builder(); @@ -191,7 +192,7 @@ public DefaultVolumeSettings.Builder volumeBuilder() { return volumeBuilder_; } - public DefaultSliceSettings.Builder sliceBuilder() { + public SliceSettings.Builder sliceBuilder() { return sliceBuilder_; } @@ -236,7 +237,7 @@ public String toString() { private final ChannelSettings channels_; private final DefaultTimingSettings timing_; private final DefaultVolumeSettings volume_; - private final DefaultSliceSettings slice_; + private final SliceSettings slice_; private final StageScanSettings stageScan_; private final DefaultSheetCalibration sheetCalibration_; private final DefaultSliceCalibration sliceCalibration_; @@ -260,7 +261,7 @@ private ScapeAcquisitionSettings(Builder builder) { channels_ = builder.channelBuilder().build(); timing_ = builder.timingBuilder_.build(); volume_ = builder.volumeBuilder_.build(); - slice_ = builder.sliceBuilder_.build(); + slice_ = builder.sliceBuilder().build(); stageScan_ = builder.stageScanBuilder().build(); sheetCalibration_ = builder.sheetCalibBuilder_.build(); sliceCalibration_ = builder.sliceCalibBuilder_.build(); @@ -322,7 +323,7 @@ public DefaultVolumeSettings volume() { * @return immutable DefaultSliceSettings instance. */ @Override - public DefaultSliceSettings slice() { + public SliceSettings slice() { return slice_; } diff --git a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SlicePanel.java b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SlicePanel.java index c453ac4..7516719 100644 --- a/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SlicePanel.java +++ b/src/main/java/org/micromanager/lightsheetmanager/gui/tabs/acquisition/SlicePanel.java @@ -1,7 +1,7 @@ package org.micromanager.lightsheetmanager.gui.tabs.acquisition; +import org.micromanager.lightsheetmanager.api.SliceSettings; import org.micromanager.lightsheetmanager.api.data.CameraMode; -import org.micromanager.lightsheetmanager.api.internal.DefaultSliceSettings; import org.micromanager.lightsheetmanager.gui.components.CheckBox; import org.micromanager.lightsheetmanager.gui.components.Label; import org.micromanager.lightsheetmanager.gui.components.Panel; @@ -45,7 +45,7 @@ private void createUserInterface() { "[]5[]" ); - final DefaultSliceSettings sliceSettings = model_.acquisitions().settings().slice(); + final SliceSettings sliceSettings = model_.acquisitions().settings().slice(); final boolean isSlicePeriodMinimized = sliceSettings.periodMinimized(); // regular panel