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 c0264220b9..15bd234d5e 100644 --- a/cdm/core/src/main/java/ucar/nc2/dataset/CoordinateAxis1DTime.java +++ b/cdm/core/src/main/java/ucar/nc2/dataset/CoordinateAxis1DTime.java @@ -212,6 +212,11 @@ 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; + } } //////////////////////////////////////////////////////////////////////// @@ -338,6 +343,8 @@ private CoordinateAxis1DTime(NetcdfDataset ncd, VariableDS org, Formatter errMes List result = new ArrayList<>(ncoords); Array data = org.read(); + coords = (double[]) data.get1DJavaArray(DataType.DOUBLE); + this.wasRead = true; int count = 0; IndexIterator ii = data.getIndexIterator(); diff --git a/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDataset.java b/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDataset.java index 17e2a1593b..111b39443c 100644 --- a/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDataset.java +++ b/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDataset.java @@ -932,6 +932,10 @@ public ImmutableList getCoordinateAxes() { return ImmutableList.copyOf(coordAxes); } + public void setCoordinateAxes(List axes) { + this.coordAxes = axes; + } + /** * Clear Coordinate System metadata, to allow them to be redone * @@ -1344,12 +1348,16 @@ public void addCoordinateTransform(CoordinateTransform ct) { public CoordinateAxis addCoordinateAxis(VariableDS v) { if (v == null) return null; + + final List coordCopy = new ArrayList<>(coordAxes); + CoordinateAxis oldVar = findCoordinateAxis(v.getFullName()); if (oldVar != null) - coordAxes.remove(oldVar); + coordCopy.remove(oldVar); CoordinateAxis ca = (v instanceof CoordinateAxis) ? (CoordinateAxis) v : CoordinateAxis.factory(this, v); - coordAxes.add(ca); + coordCopy.add(ca); + this.coordAxes = coordCopy; if (v.isMemberOfStructure()) { Structure parentOrg = v.getParentStructure(); // gotta be careful to get the wrapping parent @@ -1705,6 +1713,7 @@ public void replaceCoordinateAxis(Group.Builder group, CoordinateAxis.Builder ax axis.setParentGroupBuilder(group); } + public T setOrgFile(NetcdfFile orgFile) { this.orgFile = orgFile; return self(); diff --git a/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDatasets.java b/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDatasets.java index 588d6abada..e7c14c445b 100644 --- a/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDatasets.java +++ b/cdm/core/src/main/java/ucar/nc2/dataset/NetcdfDatasets.java @@ -13,6 +13,7 @@ import ucar.nc2.internal.dataset.DatasetEnhancer; import ucar.nc2.internal.ncml.NcmlReader; import ucar.nc2.util.CancelTask; +import ucar.nc2.util.CompareNetcdf2; import ucar.nc2.util.cache.FileCache; import ucar.nc2.util.cache.FileCacheIF; import ucar.nc2.util.cache.FileFactory; 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 a31a2046a2..cfa3775292 100644 --- a/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java +++ b/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java @@ -907,6 +907,9 @@ 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); + if (this.coordSysNames != null) { + this.coordSysNames.stream().forEach(s -> builder.addCoordinateSystemName(s)); + } return (VariableDS.Builder) super.addLocalFieldsToBuilder(builder); } diff --git a/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageAdapter.java b/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageAdapter.java index 53cdddc99f..525930f9c7 100644 --- a/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageAdapter.java +++ b/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageAdapter.java @@ -155,7 +155,7 @@ private static CoverageCoordAxis makeCoordAxisFromDimension(Dimension dim) { private static ucar.nc2.util.Optional makeCoordAxis(FeatureType ftype, ucar.nc2.dataset.CoordinateAxis dtCoordAxis, DtCoverageAdapter reader) { - String name = dtCoordAxis.getFullName(); + String name = dtCoordAxis.getFullName(); DataType dataType = dtCoordAxis.getDataType(); AxisType axisType = dtCoordAxis.getAxisType(); String units = dtCoordAxis.getUnitsString(); diff --git a/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageCSBuilder.java b/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageCSBuilder.java index 3085b313b8..15bc2d4169 100644 --- a/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageCSBuilder.java +++ b/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageCSBuilder.java @@ -5,6 +5,7 @@ package ucar.nc2.ft2.coverage.adapter; import com.google.common.collect.Lists; +import thredds.client.catalog.builder.DatasetBuilder; import ucar.nc2.Dimension; import ucar.nc2.constants.AxisType; import ucar.nc2.constants.FeatureType; @@ -179,6 +180,7 @@ public static String describe(NetcdfDataset ds, CoordinateSystem cs, Formatter e ////////////////////////////////////////////////////////////// // time + boolean axesChanged = false; // if any time axes are rebuilt by the factory, we need to update the netcdfDataset CoordinateAxis rt = cs.findAxis(AxisType.RunTime); if (rt != null) { if (!rt.isScalar() && !(rt instanceof CoordinateAxis1D)) { // A runtime axis must be scalar or one-dimensional diff --git a/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageDataset.java b/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageDataset.java index c2e7597ee7..75ca0eb97f 100644 --- a/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageDataset.java +++ b/cdm/core/src/main/java/ucar/nc2/ft2/coverage/adapter/DtCoverageDataset.java @@ -13,11 +13,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import ucar.nc2.Attribute; -import ucar.nc2.Dimension; -import ucar.nc2.NetcdfFile; -import ucar.nc2.Variable; -import ucar.nc2.VariableSimpleIF; + +import ucar.nc2.*; import ucar.nc2.constants.CDM; import ucar.nc2.constants.FeatureType; import ucar.nc2.dataset.CoordinateAxis; @@ -113,13 +110,11 @@ public DtCoverageDataset(NetcdfDataset ncd) throws IOException { * @throws java.io.IOException on read error */ public DtCoverageDataset(NetcdfDataset ncd, Formatter parseInfo) throws IOException { - this.ncd = ncd; - Set enhance = ncd.getEnhanceMode(); if (enhance == null || enhance.isEmpty()) { enhance = NetcdfDataset.getDefaultEnhanceMode(); } - ncd = NetcdfDatasets.enhance(ncd, enhance, null); + this.ncd = NetcdfDatasets.enhance(ncd, enhance, null); // sort by largest size first List csList = new ArrayList<>(ncd.getCoordinateSystems()); diff --git a/cdm/core/src/main/java/ucar/nc2/internal/dataset/CoordinatesHelper.java b/cdm/core/src/main/java/ucar/nc2/internal/dataset/CoordinatesHelper.java index 66bede5fab..00161910e9 100644 --- a/cdm/core/src/main/java/ucar/nc2/internal/dataset/CoordinatesHelper.java +++ b/cdm/core/src/main/java/ucar/nc2/internal/dataset/CoordinatesHelper.java @@ -53,10 +53,15 @@ public List getCoordTransforms() { return coordTransforms; } + // make another constructor that takes a list of axes? private CoordinatesHelper(Builder builder, NetcdfDataset ncd) { List axes = new ArrayList<>(); - addAxes(ncd.getRootGroup(), axes); - this.coordAxes = ImmutableList.copyOf(axes); +// if (builder.coordAxes == null || builder.coordAxes.isEmpty()) { + addAxes(ncd.getRootGroup(), axes); +// } else { +// axes = builder.coordAxes.stream().map(ct -> ct.build(ncd.getRootGroup())).filter(Objects::nonNull).collect(Collectors.toList()); +// } + coordAxes = ImmutableList.copyOf(axes); coordTransforms = builder.coordTransforms.stream().map(ct -> ct.build(ncd)).filter(Objects::nonNull).collect(Collectors.toList()); diff --git a/cdm/core/src/main/java/ucar/nc2/util/cache/FileCache.java b/cdm/core/src/main/java/ucar/nc2/util/cache/FileCache.java index 7352c3e8f8..bf489f6b81 100755 --- a/cdm/core/src/main/java/ucar/nc2/util/cache/FileCache.java +++ b/cdm/core/src/main/java/ucar/nc2/util/cache/FileCache.java @@ -390,6 +390,10 @@ private FileCacheable acquireCacheOnly(Object hashKey) { return want.ncfile; } + public void replace (Object oldHashKey, Object newHasKey){ + + } + // LOOK should you remove the entire CacheElement ? private void remove(CacheElement.CacheFile want) { want.remove(); 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 c5cdbe207a..5f85cc4d42 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,8 +53,7 @@ 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")).isTrue(); - assertThat(scaledvar.attributes().findAttributeDouble("scale_factor", 1.0)).isEqualTo(2.0); + assertThat(scaledvar.attributes().hasAttribute("scale_factor")).isFalse(); assertThat(scaledvar.readScalarShort()).isEqualTo(1); } } @@ -72,8 +71,7 @@ public void testStandaloneEnhance() 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.attributes().hasAttribute("scale_factor")).isFalse(); assertThat(scaledvar.readScalarFloat()).isEqualTo(12.0f); } } @@ -91,8 +89,7 @@ public void testStandaloneEnhanceDataset() 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.attributes().hasAttribute("scale_factor")).isFalse(); assertThat(scaledvar.readScalarFloat()).isEqualTo(12.0f); } } diff --git a/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhance.java b/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhance.java index 4d60a7987d..db1eafc08f 100644 --- a/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhance.java +++ b/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhance.java @@ -68,8 +68,7 @@ public void testStandaloneEnhance() 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.attributes().hasAttribute("scale_factor")).isFalse(); assertThat(scaledvar.readScalarFloat()).isEqualTo(12.0f); } } @@ -87,8 +86,7 @@ public void testStandaloneEnhanceDataset() 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.attributes().hasAttribute("scale_factor")).isFalse(); assertThat(scaledvar.readScalarFloat()).isEqualTo(12.0f); } } @@ -106,8 +104,7 @@ 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.attributes().hasAttribute("scale_factor")).isFalse(); assertThat(scaledvar.readScalarFloat()).isEqualTo(12.0f); } }