diff --git a/cdm/core/src/main/java/ucar/nc2/dataset/CoordinateAxis1DTime.java b/cdm/core/src/main/java/ucar/nc2/dataset/CoordinateAxis1DTime.java index 233d9b6b86..b723fdd592 100644 --- a/cdm/core/src/main/java/ucar/nc2/dataset/CoordinateAxis1DTime.java +++ b/cdm/core/src/main/java/ucar/nc2/dataset/CoordinateAxis1DTime.java @@ -212,11 +212,6 @@ protected void readValues() { } // make sure parent methods do not try to read from the orgVar again this.wasRead = true; - if (orgVar instanceof CoordinateAxis1D) { - CoordinateAxis1D orgAxis = (CoordinateAxis1D) orgVar; - this.wasRead = orgAxis.wasRead; - this.coords = orgAxis.coords; - } } //////////////////////////////////////////////////////////////////////// diff --git a/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java b/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java index 88c659bd98..b552f2f63d 100644 --- a/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java +++ b/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java @@ -841,6 +841,7 @@ protected VariableDS(Builder builder, Group parentGroup) { this.orgFileTypeId = builder.orgFileTypeId; this.enhanceProxy = new EnhancementsImpl(this, builder.units, builder.getDescription()); + this.scaleOffset = builder.scaleOffset; createEnhancements(); @@ -859,7 +860,9 @@ private void createEnhancements() { this.dataType = unsignedConversion != null ? unsignedConversion.getOutType() : dataType; } if (this.enhanceMode.contains(Enhance.ApplyScaleOffset) && (dataType.isNumeric() || dataType == DataType.CHAR)) { - this.scaleOffset = ScaleOffset.createFromVariable(this); + if (this.scaleOffset == null) { + this.scaleOffset = ScaleOffset.createFromVariable(this); + } this.dataType = scaleOffset != null ? scaleOffset.getScaledOffsetType() : this.dataType; } Attribute standardizerAtt = findAttribute(CDM.STANDARDIZE); @@ -903,6 +906,7 @@ protected Builder addLocalFieldsToBuilder(Builder> build builder.setOriginalVariable(this.orgVar).setOriginalDataType(this.orgDataType).setOriginalName(this.orgName) .setOriginalFileTypeId(this.orgFileTypeId).setEnhanceMode(this.enhanceMode).setUnits(this.enhanceProxy.units) .setDesc(this.enhanceProxy.desc); + builder.scaleOffset = this.scaleOffset; if (this.coordSysNames != null) { this.coordSysNames.stream().forEach(s -> builder.addCoordinateSystemName(s)); } @@ -948,6 +952,8 @@ public static abstract class Builder> extends Variable.Buil private boolean fillValueIsMissing = NetcdfDataset.fillValueIsMissing; private boolean missingDataIsMissing = NetcdfDataset.missingDataIsMissing; + private ScaleOffset scaleOffset; + private boolean built; protected abstract T self(); @@ -1044,6 +1050,7 @@ public T copyFrom(VariableDS.Builder builder) { setFillValueIsMissing(builder.fillValueIsMissing); setInvalidDataIsMissing(builder.invalidDataIsMissing); setMissingDataIsMissing(builder.missingDataIsMissing); + this.scaleOffset = builder.scaleOffset; this.orgVar = builder.orgVar; this.orgDataType = builder.orgDataType; this.orgFileTypeId = builder.orgFileTypeId; diff --git a/cdm/core/src/test/java/ucar/nc2/dataset/TestScaleOffsetMissingUnsigned.java b/cdm/core/src/test/java/ucar/nc2/dataset/TestScaleOffsetMissingUnsigned.java index cb2faddb43..4e791a0972 100644 --- a/cdm/core/src/test/java/ucar/nc2/dataset/TestScaleOffsetMissingUnsigned.java +++ b/cdm/core/src/test/java/ucar/nc2/dataset/TestScaleOffsetMissingUnsigned.java @@ -8,6 +8,7 @@ import static java.lang.Float.NaN; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -85,7 +86,6 @@ public void testWrite() throws Exception { Array readEnhanced; - // read the packed form, enhance using scale/offset, compare to original try (NetcdfDataset ncd = NetcdfDatasets.openDataset(filename)) { VariableDS vs = (VariableDS) ncd.findVariable("packed"); vs.removeEnhancement(Enhance.ConvertMissing); @@ -133,7 +133,6 @@ private void doSubset(String filename) throws IOException, InvalidRangeException } } - // Asserts that "scale_factor" is applied to "_FillValue". // This test demonstrated the bug in https://github.com/Unidata/thredds/issues/1065. @Test @@ -141,7 +140,7 @@ public void testScaledFillValue() throws URISyntaxException, IOException { File testResource = new File(getClass().getResource("testScaledFillValue.ncml").toURI()); // LOOK removeEnhancement does not work in new - try (NetcdfDataset ncd = NetcdfDataset.openDataset(testResource.getAbsolutePath(), true, null)) { + try (NetcdfDataset ncd = NetcdfDatasets.openDataset(testResource.getAbsolutePath(), true, null)) { VariableDS fooVar = (VariableDS) ncd.findVariable("foo"); double expectedFillValue = .99999; diff --git a/cdm/core/src/test/java/ucar/nc2/internal/ncml/TestEnhance.java b/cdm/core/src/test/java/ucar/nc2/internal/ncml/TestEnhance.java index 5f85cc4d42..41585fd5d6 100644 --- a/cdm/core/src/test/java/ucar/nc2/internal/ncml/TestEnhance.java +++ b/cdm/core/src/test/java/ucar/nc2/internal/ncml/TestEnhance.java @@ -53,7 +53,8 @@ public void testStandaloneNoEnhanceDataset() throws IOException { Variable scaledvar = ncfile.findVariable("scaledvar"); assertThat((Object) scaledvar).isNotNull(); assertThat(scaledvar.getDataType()).isEqualTo(DataType.SHORT); - assertThat(scaledvar.attributes().hasAttribute("scale_factor")).isFalse(); + assertThat(scaledvar.attributes().hasAttribute("scale_factor")).isTrue(); + assertThat(scaledvar.attributes().findAttributeDouble("scale_factor", 1.0)).isEqualTo(2.0); assertThat(scaledvar.readScalarShort()).isEqualTo(1); } } @@ -107,8 +108,6 @@ public void testStandaloneDoubleEnhanceDataset() throws IOException { Variable scaledvar = ncfile.findVariable("scaledvar"); assertThat((Object) scaledvar).isNotNull(); assertThat(scaledvar.getDataType()).isEqualTo(DataType.FLOAT); - assertThat(scaledvar.attributes().hasAttribute("scale_factor")).isTrue(); - assertThat(scaledvar.attributes().findAttributeDouble("scale_factor", 1.0)).isEqualTo(2.0); assertThat(scaledvar.readScalarFloat()).isEqualTo(12.0f); } }