CHANGES for Netcdf-Java library
Version 2.2.16
Build Date = 2006-07-07 09:34:14

Changes in version 2.2.16
 Bugs
  * nexrad2 iosp: SpectrumWidth is now in bytes, unsigned with scale and offset. Also correct the time units.
  * ucar.nc2.dt.radial.NexradIIDataset: dont cache origin, shape arrays
  * Nexrad2 error when ngates different within a scan; unneeded, removed.
  * Grib IOSP workaround for "Grib2 generating process" field being ignored.
  * WRFEta not figuring out staggering
  * RadialDataset slow (cache)

Changes in version 2.2.15
 Features
  * CF-1 atmosphere_ln_pressure_coordinate - create new pressure 1D coordinate
  * incorporate Jeff McW improvements to bzip2 - 4x speedup on level2 compressed files.
  * factor out CoordTransBuilder from CoordSysBuilder: users can now plug in their own coordinate transforms.
  * dods client now allows compression ("Accept_Deflate"), previous bug made it too slow.
      however, it may still slow things down on a fast network.
  * NcML aggregation element processed first, so nested objects exist and can be modified by other NcML elements. 
  * Nexrad2 iosp uses more accurate station table locations.
  * NetcdfDataset: structure members can be coordinate axes.
  * BUFR iosp
  * Radar Dataset improvements
  * improve GRIB DL metadata
  * metar decoding
  * ForecastModelRunCollection
  * DiskCache2 improved
 API changes
  * VerticalCT.makeVerticalTransform(); also now takes a CoordTransBuilder in constructor.
  * include thredds.catalog.crawl package
  * DODSNetcdfFile.setAllowSessions(), DODSNetcdfFile.setAllowDeflate().
  * ThreddsDataFactory.openDataset() needs an acquire parameter to call open (not acquire) from NetcdfDatset.openFile()
  * PointCollection.getData return DataIterator, so that the IOException can be declared.
  * RadialDatasetSweep is new interface, other RadialDataset interfaces will be removed.
  * IOSP.readNestedData() remove flatten, handle flatten=false in NetcdfFile.readMemberData(); this allows IOSPs to be simpler
  * static DateUnit methods are removed, they are not thread safe, so we are forcing them to be changed. Use DateFormatter.
 Bugs
  * CF-1: assignment of vertical transforms may require time axis in coordinate system.
  * gini iosp : cache only if < Variable.defaultSizeToCache
  * dodsfile not always calling finish()
  * bugs in gini, nids, dmsp iosp on reading section with  ranges of length one, needs sectionNoReduce(). 
  * DateUnit.getDate(value) unecessarilty constructing a new TimUnit: ucar.units is slow !!
  * ThreddsDataFactory.openDataset("thredds:resolve") was leaving something in the NetcdfDatasetCache, because of a nested acquire.
  * strided access on NcML aggregation outer range was wrong.
  * remove dods DConnect retry on getData.
  * "NCDump -cdl" now generates valid input to ncgen
  * UnidataPoint/StationObsDataset more complete implementation
  * some bugs in CoordinateAxis when size = 0
  * grid.getLatLonBoundingBox() use all 4 corners; still not great for stuff close to the poles
  * Add Michael Godin patch for aggregation
  * grib.TimeCoord not thread-safe
  * ThreddsDataFactory: dont use HTTPServer / GRIB combination - too slow!
 ToolsUI
  * bug in viewer panel, hiding and showing nested structures
  * StructureTable deal with sequences (probably only dods)
 Libraries
  * remove bzip2 - modified version in ucar.unidata.io.bzip2

 Changes in version 2.2.14
 Bugs
  * N3iosp.open() trying a file.exists() when its an HTTP file, causing Security Error with applets.
  * bug with length 0 dods strings
  * close raf when NetcdfFile.open() fails
  * not handling dods servers that "send chars as String[1]" correctly
  * Array of DODS Strings -> Char werent getting subsetted
  * RandomAccessFile.readIntUnbuffered not converting to unsigned - only used by syncExtend().
  * grib time coordinates: check timeUnit when creating valid times; use baseTime in udunit, instead of times(0).
  * VerticalTransformSubset didnt properly deal with t_range == null
  * DODS Strings werent getting processed

Changes in version 2.2.13
 Features
  * clean up javadoc + user manual
  * CoordSysBuilder - try to give user advice of conventions problems. Uses NetcdfDatsetInfo helper class .
  * NetcdfDataset.openFile can handle thredds:catalog.xml#datasetId for thredds datasets and thredds:resolve:resolveURL
     for resolution of thredds datasets. Refactored ThreddsDataFactory.
  * IRIDL, EpicInSitu Convention parsers.
  * Refactor DODS reading - now can handle sequences and nested structures. More efficient handling of Structures.
  * User registered CoordSysBuilderIF will override system
  * Nexrad II variable descriptions follow IDV
  * FileWriter now writes by record; main has sleep option for testing.
  * Netcdf3 IOSP now can write records.
  * Implement sessions, add close() in dods.dap.DConnect().
 API changes
  * Variable.isUnknownLength() -> isVariableLength()
  * VerticalTransform.getCoordinateArray() now throws InvalidRangeExcception
  * ThreddsDataFactory.Result changes.
  * Refactor ArrayStructure, StructureData, make abstract. Clean up API, deprecate some methods.
    Add ArraySequence for nested sequences.
  * CoordSysBuilder now uses CoordSysBuilderIF
  * use static opens on NetcdfFileWriteable, deprecate constructors
 Bugs
  * bug when file size > 2^31
  * copy NcML (ncgen mode) to file, when there was a record structure.
  * geogrid.subset() was not dealing with vertical transforms.
  * ucar.ma2.Index.setCurrentElement() was wrong. This is only used for debugging.
  * RecordDatasetHelper.getData() returning List<StructureData> instead of List<PointObsDattype>
  * Point/StationObs: check altitude units, convert values to meters.
  * DODS: unescape dimension, structure names; dodsName dont change.
  * GribIosp assumed all reference times were identical; now it creates validTime = refTime + forecastHour
  * n3iosp.syncExtend() needs to bypass the raf buffer when checking on numrecs.
  * fill mode wasnt working correctly when writing.
 ToolsUI
  * add syncExtend button on Viewer Tab
 Libraries
  * change logging to use SLF4J. This is now deep in the core.
     - Use slf4j-jdk14.jar for ncCore (7K), which wraps JDK 1.4.
     - Use nlog4j for other jars (202K), which has log4j embedded in it.
  * upgrade commons-httpclient to version 3.0
  * remove STNDB.txt from resources, put in optional resources
  * use jdom 1.0
  * put dods code into nj22 library rather than leaving seperate. Remove from visad.jar. (visadNoDods.jar)

Changes in version 2.2.11
 Features
  * GridCoordSys allows String valued (ISO 8601) dates for time coordinates
  * geogrid subset deal with 2D lat, lon
  * new  projections: Albers, LambertAzimuth, Orthographic
  * NcML aggregation now works - uses NetcdfFileCache, DiskCache2
  * netcdf3: sync() will update numrecs if changed
  * geogrid.writeFile() to write a geogrid and its coord system to a file.
  * new ADAS Convention parser
  * add false_easting and false_northing to Lambert Conformal.
  * nexrad2 variables are now unsigned bytes with scale and offset
  * clean up nexrad level 2 processing - use logging for debug and error messages (iosp.nexrad2)
  * Add GINI Satellite reading
  * Add GeoGrid subsetting.
  * Detect if HTTP Server supports Range requests (HTTPRandomAccessFile)
 API changes
   * synch() -> sync() and syncExtend()
   * Dimension.isUnknown() -> Dimension.isVariableLength()
   * NetcdfDataset.acquire -> NetcdfDatasetCache.acquire
   * ucar.nc2.dt.RadialDataset refactored
 Bugs
  * Nids reader variable length strings
  * Grib reader now does subsetting
  * bug in Attribute.equals(): not allowing subclasses
  * was truncating non-netcdf raf files
  * GeoGrid lat/lon axis switched.
 ToolsUI
  * show grids as images
  * movie loop on image panel
  * Grid viewer now allows to enter x/y stride. must hit redraw to see.
  * add axes to GeoGridTable
  * Use HttpSession to deal with PUT redirect (302) from TDS SSH

Changes in version 2.2.10
 Features
  * add xerces to webstart to get catalog schema validation
  * add Dorade radar file reading
  * read all NIDS products; improve variable names, metadata.
  * CoordSysBuilder: choose comma delimited Conventions in order of adding
  * add iosp.synch(), implement for growing GRIB files.
  * NetcdfDataset no longer deals with thredds:dataset
  * add NetcdfFileCache, NetcdfFile.acquire, NetcdfDataset.acquireFile
  * change FileCache to DiskCache for clarity
  * start to use commons logging
  * add MADISStation convention parser
  * add IOServiceProviderWriter
 API changes
  * Dimension.isUnknown() -> Dimension.isVariableLength()
 Bugs
  * bugs in Unit parsing fixed
  * test if HTTP servers handle byte Ranges; upgrade to commons HTTPClient 3.0
  * always write "canonical length" files; truncate on overwrite.
  * read "non-canonical length" files.
  * accept COARDS vertical coordinates without positive attribute
  * DODS Structure attributes now work.
  * NIDS Structures now work.
  * Allow "." in NetCDF names
  * DODS CHAR variables now work.
  * append multiple String attributes when writing
  * speed up HDF5.isMine(): header must be within first 50K.
  * NetcdfFile.openInMemory was broken
  * cached data in VariableDS works : needed by NcML <values>
  * NCMLGWriter now works
  * RangeDateSelector now works
 ToolsUI
  * can startup with thredds:dataset on command line; also check for already running process
  * TDS Configurator tab for configuring Thredds Data Servers
  * improve ucar.util.prefs.ui
  * add HTTPServer access
  * use NetcdfFileCache
  * save prefs on exit always
  * openFile from THREDDS Catalog Chooser
  * can delete items from prefs.ComboBox
  * Trajectory Viewer uses NP to show trajectories; refactor NPController etc.
  * move station rendering to nc2.ui.point; add listener to StructureTable.
  * standard MapBeans

Changes in version 2.2.09
 Features
  * Add Stereographic projection in AWIPS conventions reader; handles MADIS RSAS files.
  * MADIS station data adapter handles most madis station data
  * automatically unzip ".zip", ".gzip", and ".gz" files (NetcdfFile.open())
  * GRIB uses "dense" coordinate systems.
  * PointObsDataset, StationObsDataset, TrajectoryObsDataset datatypes ready to be used
  * StructureData.convertScalarDouble() deals with scale/offset/missing
  * optimize StructureData: move it & DataType to ucar.ma2; add ArrayStructure
  * Netcdf-3 record Structure can be added after opening
 Bugs
  * put thredds schemas into released jars
  * Grib Polar Stereographic bug when longitude != 0
  * fix FileCache standardPolicy - was always using file cache directory
  * "wart" in netcdf C library allows file padding to be truncated
  * DateUnit, TimeUnit redone to always use "base" units.
  * NcML deals with record Structure
 ToolsUI
  * StructureTable use modal popup
  * PointObsViewer, StructureTable improved
  * DateRange widget mostly works now

Changes in version 2.2.08
 Features
  * Improve AWIPS convention parser for NSSL radar mosaic
  * Add ADAS convention parser
  * use standard cache policy (FileCache)
  * Add Atmospheric Sigma vertical transform
  * add ucar.nc2.geotiff package to release
  * IFSP Convention parsing
 Bugs
  * infinite loop on NIDS compress failure
  * check for _unsigned in scale/offset
  * Grib file can be HTTP, put index in cache
  * get unused dimensions through opendap server
  * truncated file when data not fully writtten, no fill
  * Grib1: constant value data
  * CSM vertical transform conflict with CF; general clean up
  * CF projections had incorrect _CoordinateAxes
  * Get ucar.unidata.io into minimal and standard libraries
  * Coordinate Transform attributes as Strings
  * CoordSysBuilder: dont add coordinate variables twice
 ToolsUI
  * fix twist-down handles in CatalogTreeView (thanks to Eric Russell)
  * first pass on TrajectoryDataset tab
  * add WCS testing to GridTable

Changes in version 2.2.07
 Features
  * add "maximal" coord system search to pick up forgotten coordinate axes (CoordSysBuilder)
  * improve GRIB vertical coord handling
  * NcML can be used like ncgen to create new files
  * NetcdfDataset "enhance" mode optional, also add equivilent flag to NcML
  * allow relative NcML file URIs
  * add Universal Transverse Mercator projection
  * add Ocean_Sigma vertical coordinate system
  * if filename ends with "*.Z", uncompress. Works for any iosp. (NetcdfFile)
  * use FileCache directory for writing (eg GRIB index, uncompress) when original directory not writeable
  * remove access to Structure and Variables from StructureData : more like Array now
 Bugs
  * bug in DODS reading when Grid array returns wrapped in Structure
  * bug using Double.MIN_VALUE instead of -Double.MAX_VALUE when finding limits (MAMath, and lots of other places)
  * recognize when a _CoordinateAxis attribute refers to a CoordinateSystem variable, rather than a data variable (CoordSysBuilder)
  * NUWG generated axis gave lat/lon AxisType GeoX/GeoY.
  * dont load GribServiceProvider if grib.jar  not present
  * correctly deal with GRIB latitude going from north to south.
 ToolsUI 
  * RadialPanel added, no viewer yet
  * GeoGridPanel correctly shows detail window.
  * NCDump window now works correctly when you change variable in combobox
  * StructureTable has resize off, so columns are visible in a scrollpane

Changes in version 2.2.06
 * add AWIPS satellite convention parser
 * try to find coordinate system when a variable has none. (CoordSysBuilder)
 * add FileManager widget to TextGetPutPane
 * add Mercator, Stereographic projections
 * missing data converted to NaNs as default.
 * fixed bug with some GRIB time units
 * fixed bug when CoordinateAxis wraps VariableDS wrads DODSVariable
 * Use Java-OPeNDAP library JDAP 1.1.7
 * ucar.nc2.dods uses unsigned types instead of widening
 * HTTP files should open without error message from opendap
 * geotiff reading/writing tab in ToolsUI
 * improvements for THREDDS WCS server
 * GRIB quasi-grids
 * add deprecated methods for backwards compatibility.

Changes in version 2.2.05

 * Prototype ADDE Station Data interface
 * Prototype catgen interface
 * fix bugs in GRIB reading

Changes in version 2.2.04

 * Lots of bug fixes and improvements, some minor API changes.
 * Add reading NIDS (Nexrad level 3) files. Radial and raster data only so far.
 * Convention parsing uses proposed Coordinates conventions.
 * NcML roundtrip (write NcML, read back in) pretty much works.


========================================
Changes from Java-Netcdf version 2.1

Package ucar.nc2

    Adds a "Pluggable Service Provider" layer for the actual I/O. This factors out specific code for reading HDF5 vs netCDF version 1 file formats. Also have a number of "I/O Service Providers" for non NetCDF file formats, eg GRIB, NEXRAD, etc.

DataType

   1. Add DataType STRUCTURE.
   2. Use DataType STRING for variable length array of chars.
   3. Use DataType CHAR for fixed length array of chars as in nc2 files. HDF5 has both fixed and variable length.

Attribute

   1. Use STRING DataType, dont use CHAR.
   2. Allow Array of Strings.
   3. remove public Object getValue() , add Array getValues()

Dimension

   1. Allow Dimensions that are not shared, i.e. are private to a Variable, for HDF5 and DODS: boolean isShared(); Only shared Dimensions appear in the NetcdfFile.getDimensions() list.
   2. We need to press OpenDAP and HDF5 to add shared Dimensions to their data models.

Group
   1. logical container for variables, dimensions, attributes, so looks like old netcdfFIle.
   2. always a "root group" in the netcdfFIle.

Variable

   1. adds convenience methods for scalars, eg double readScalarDouble().
   2. add Structure getParent() for Variables that are inside of a Structure.
   3. read with strides
   4. add section() method, creates a logical section of a Variable. This replaces the equivalent functionality in ucar.ma2.MultiArraySection, which is removed.

Sequence

   1. A Sequence is a 1D Variable whose length is unknown until the data is actually read.
   2. This corresponds to the HDF5 "Variable Length" DataType (type = 0) Sequence
   3. This corresponds to the DODS Sequence datatype.

Structure

   1. A subclass of Variable, is a container for other Variables, may be nested. This handles both arrays of Structures and scalar Structures as a rank-0 array, with some convenience routines for accessing scalar Structures.
   2. Generally, the programmer can assume that the data in a Structure are stored together, so that it is efficient to read a Structure all at once, then access the Variable data through the Arrays in the StructureData.

StructureData

   1. Container of the data for a Structure, analogous to how Array contains the data for a Variable.
 
Package ucar.ma2

   1. Remove MultiArray, IOArray, Array and Index interfaces; make ArrayAbstract into Array, IndexImpl into Index.
   2. Allow Array of Reference types. NetCDF will use String and StructureData.
   3. Use List of Range for section operations.
   4. Ranges can be specified by a String in fortran 90 syntax

