Skip to content

Commit

Permalink
Cleanup the DAP4 support in the tds repository (#394)
Browse files Browse the repository at this point in the history
* ## Cleanup the DAP4 support in the tds repository

## Description of Changes

WARNING: The merging of this PR needs to be synchronized with the following netcdf-java PR: Unidata/netcdf-java#1211 So after both PRs are reviewed and approved, both need to be merged one right
after the other.

This PR make major changes to the DAP4 code. It also makes some small but necessary changes to non-DAP4 code, which will be described below.

### DAP4 Change Overview

* Cleanup the D4TS server -- D4TS standing for Dap4 Test Server -- so that it properly operates in the remotetest.unidata.ucar.edu test server.
* Remove all DAP4 tests; they all depended on using MockServlet, which basically does not work. The assumption is that we will test dap4 support in the process of testing DAP4 support in netcdf-java and netcdf-c.
* The DAP4 service in TDS is left disabled until everything has been successfully merged.
* Update gradle files to reflect the flattening of the netcdf-java/dap4 module from PR Unidata/netcdf-java#1133.

#### DAP4 Specific Changes
* Remove all DSP types and replace with the *CDMWrap* class.
* Move the Odometer classes from *netcdf-java* to *tds* since they are only used in that repo.
* Remove the attempt to replace netcdf-c JNA system. Now relies only on CDM API.
* Remove the synthetic test case generator and all supporting classes.
* Remove the dap4/d4tests directory since there are no longer any tests.
* Change the gradle "compile" action to the "implementation" to conform to the upcoming gradle version 7 (this change is only partially completed).
* Move the various D4TS support files into the WEB-INF directory so the from() actions are no longer needed.
* Create a new set of .nc files to be used for testing clients. These files come from and are consistent with those expected by netcdf-c.
* Create a new D4TS server web page template (the so-called "FrontPage").
* Created DSR template files to support per-dataset creation of DSRs.
* Rebuilt the handling of the *getResourcePath* function to make it dependent on the specific DAP4 Servlet/Controller (i.e. under d4ts vs under thredds).
* Added an abstract *getWebContentRoot* function to *DapController* so that each servlet can provide specific locations for the template files.
* When a zero-size dimension is encountered, now suppress that dimension and any variable that used it. Ideally this should be an error, but we have encountered too many instances in the wild, so it is better to suppress rather than cause an error.
* A number of classes were renamed to more accurately reflect their semantics. Specifically:
  - *CDMCursor* -> *CDMData*
* Convert DSP LRU cache to only cache the NetcdfFile instances.
* Remove some now unused classes:
  - *URLMap*
  - *URLMapDefault*
* *Dap4Controller* was modified to enable DAP4 as a service.
* Properly handle checksums in the DMR and DAP.

### Non-DAP4 Specific Changes
* Modify CatalogViewContextParser to map a request for file using the DAP4 service: change from *.dmr.xml* to *.dsr.html*. This may change again in the future if we try to emulate the DAP2 .ascii format.
* Re-enable the Dap4Controller
* Enable the DAP4 service in various test catalogs.
* The changes to the intercept code in netcdf-java required changes to some tds tests; specificially *TestFormBuilder* (also converted to JUNIT4 parameterized test format).
* Some constants and static utility functions were moved into the CDM class.
Currently, this only affects one file outside of DAP4, namely the opendap file NcDAS.java.
* Change occurrences of "static protected|public" to "protected|public static".

## PR Checklist
<!-- This will become an interactive checklist once the PR is opened -->
- [X] Link to any issues that the PR addresses
- [ ] Add labels
- [X] Open as a [draft PR](https://github.blog/2019-02-14-introducing-draft-pull-requests/) until ready for review
- [X] Make sure GitHub tests pass
- [X] Mark PR as "Ready for Review"

* Upgrade to latest master

---------

Co-authored-by: haileyajohnson <hailey.johnson@ufl.edu>
  • Loading branch information
DennisHeimbigner and haileyajohnson authored Jan 22, 2024
1 parent 03bcc72 commit 65b9065
Show file tree
Hide file tree
Showing 551 changed files with 3,155 additions and 17,966 deletions.
14 changes: 0 additions & 14 deletions dap4/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,6 @@ ext.title = 'Data Access Protocol (DAP) version 4.0' // Will be inherited by su

// dap4 has no source code nor any artifacts to publish

// NON-TRANSITIVE Dependency graph:
// module depends on
// ----------------------------------------
// common:
// d4core nothing
// d4lib d4core httpservices
// d4cdm d4lib cdm
// server:
// d4servletshared d4cdmshared netcdf4
// d4ts d4servletshared
// d4tswar d4ts
// tests:
// d4tests d4servletshared d4ts

subprojects {
// TODO: Give the subprojects real titles.
ext.title = "DAP4: $name"
Expand Down
7 changes: 4 additions & 3 deletions dap4/d4servlet/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ apply from: "$rootDir/gradle/any/java-published.gradle"
dependencies {
implementation enforcedPlatform(project(':tds-platform'))

compile 'edu.ucar:dap4'
compile 'edu.ucar:httpservices'
implementation 'edu.ucar:dap4'
implementation 'edu.ucar:httpservices'
implementation 'edu.ucar:cdm-core'

compileOnly 'jakarta.servlet:jakarta.servlet-api'
compile 'org.slf4j:slf4j-api'
compileOnly 'org.slf4j:slf4j-api'
}
84 changes: 84 additions & 0 deletions dap4/d4servlet/src/main/java/dap4/servlet/CDMDMR.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* Copyright 2012, UCAR/Unidata.
* See the LICENSE file for more information.
*/

package dap4.servlet;

import dap4.core.dmr.*;

public class CDMDMR {
//////////////////////////////////////////////////

public static class CDMAttribute extends DapAttribute {
public CDMAttribute(String name, DapType basetype) {
super(name, basetype);
}
}

public static class CDMAttributeSet extends DapAttributeSet {
public CDMAttributeSet(String name) {
super(name);
}
}

public static class CDMDimension extends DapDimension {
public CDMDimension(String name, long size) {
super(name, size);
}
}

public static class CDMMap extends DapMap {
public CDMMap(String target) {
super(target);
}
}

public abstract static class CDMVariable extends DapVariable {
public CDMVariable(String name, DapType t) {
super(name, t);
}
}

public static class CDMGroup extends DapGroup {
public CDMGroup(String name) {
super(name);
}
}

public static class CDMDataset extends DapDataset {
public CDMDataset(String name) {
super(name);
}
}

public static class CDMEnumeration extends DapEnumeration {
public CDMEnumeration(String name, DapType basetype) {
super(name, basetype);
}
}

public static class CDMEnumConst extends DapEnumConst {
public CDMEnumConst(String name, long value) {
super(name, value);
}
}

public static class CDMStructure extends DapStructure {
public CDMStructure(String name) {
super(name);
}
}

public static class CDMSequence extends DapSequence {
public CDMSequence(String name) {
super(name);
}
}

public static class CDMOtherXML extends DapOtherXML {
public CDMOtherXML(String name) {
super(name);
}
}
}
Loading

0 comments on commit 65b9065

Please sign in to comment.