This is an automated email from the ASF dual-hosted git repository.
nchung pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-sdap-nexus.git
The following commit(s) were added to refs/heads/master by this push:
new 864e2bb SDAP-363: Update SwaggerUI to display list of available
datasets dynamically (#149)
864e2bb is described below
commit 864e2bb786e20ca08f313073b53e56375ceb6bae
Author: joshgarde <[email protected]>
AuthorDate: Tue Jan 18 10:38:00 2022 -0800
SDAP-363: Update SwaggerUI to display list of available datasets
dynamically (#149)
* Initial work
* Switch JsonSchema_string to original JsonSchemaForm
* Populate insitu fields
* Fix unpopulated dsMap issue
* Fix /subsubset spec
* Fix totaling
---
analysis/webservice/apidocs/dataset-populate.js | 99 +++++++++++++++++++++++++
analysis/webservice/apidocs/index.html | 6 +-
analysis/webservice/apidocs/openapi.yml | 16 ++++
3 files changed, 119 insertions(+), 2 deletions(-)
diff --git a/analysis/webservice/apidocs/dataset-populate.js
b/analysis/webservice/apidocs/dataset-populate.js
new file mode 100644
index 0000000..6dbbe17
--- /dev/null
+++ b/analysis/webservice/apidocs/dataset-populate.js
@@ -0,0 +1,99 @@
+function DatasetPopulatePlugin(system) {
+ const DS_PATH = '/domslist'
+ const ACTION_UPDATE_DATASETS = 'UPDATE_DATASETS'
+ const ACTION_UPDATE_ERROR = 'UPDATE_ERROR'
+
+ async function loadDatasets() {
+ try {
+ let response = await fetch(DS_PATH)
+ if (!response.ok) {
+ system.dsPopulateActions.updateError(true)
+ console.error(`[DatasetPopulate] Unable to load dataset list from:
${DS_PATH}; Status: ${response.status}`)
+ }
+
+ let results = await response.json()
+ let satellite = results.data.satellite
+ let insitu = results.data.insitu
+
+ let total = 0
+ let datasets = {
+ satellite: [],
+ insitu: []
+ }
+
+ for (const ds of satellite) {
+ datasets['satellite'].push(ds.shortName)
+ total++
+ }
+
+ for (const ds of insitu) {
+ datasets['insitu'].push(ds.name)
+ total++
+ }
+
+ datasets['satellite'].sort()
+ datasets['insitu'].sort()
+
+ system.dsPopulateActions.updateDatasets(datasets)
+ console.debug(`[DatasetPopulate] Lists populated; count: ${total}`)
+ } catch (err) {
+ system.dsPopulateActions.updateError(true)
+ console.error(`[DatasetPopulate] Error retreiving dataset list:
${err.message}`);
+ }
+ }
+
+ return {
+ statePlugins: {
+ dsPopulate: {
+ actions: {
+ updateDatasets: (list) => {
+ return {
+ type: ACTION_UPDATE_DATASETS,
+ payload: list
+ }
+ },
+ updateError: (error) => {
+ return {
+ type: ACTION_UPDATE_ERROR,
+ payload: error
+ }
+ }
+ },
+ reducers: {
+ [ACTION_UPDATE_DATASETS]: (state, action) => state.set('datasets',
action.payload),
+ [ACTION_UPDATE_ERROR]: (state, action) => state.set('error',
action.payload)
+ },
+ selectors: {
+ datasets: (state) => state.get('datasets'),
+ hasError: (state) => state.get('error')
+ }
+ }
+ },
+ wrapComponents: {
+ JsonSchemaForm: (Original, system) => (props) => {
+ let dsPopulate = props.schema.get('x-dspopulate') ?
props.schema.get('x-dspopulate') : false
+
+ if (!dsPopulate || system.dsPopulateSelectors.hasError())
+ return system.React.createElement(Original, props)
+
+ let datasetMap = system.dsPopulateSelectors.datasets()
+ if (!datasetMap)
+ return system.React.createElement(Original, props)
+
+ let datasets = []
+ for (const datasetName of dsPopulate.toArray()) {
+ datasets.push(...datasetMap[datasetName])
+ }
+
+ datasets.sort()
+
+ props.schema = props.schema.set('enum', datasets)
+ return system.React.createElement(Original, props)
+ }
+ },
+ afterLoad: (system) => {
+ system.dsPopulateActions.updateError(false)
+ loadDatasets()
+ }
+ }
+}
\ No newline at end of file
diff --git a/analysis/webservice/apidocs/index.html
b/analysis/webservice/apidocs/index.html
index f899b84..82ce1f0 100644
--- a/analysis/webservice/apidocs/index.html
+++ b/analysis/webservice/apidocs/index.html
@@ -31,8 +31,9 @@
<body>
<div id="swagger-ui"></div>
- <script
src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.52.0/swagger-ui-bundle.min.js"
integrity="sha512-5Om3SqdVpHoZ1gYajhWvokmdj4Qr3YnMtCkgxOxraWo5tU4L40tyMHG+ZDmOS8AB+oEtF/0mA3FymbkYCOdZ7Q=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+ <script
src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/4.1.3/swagger-ui-bundle.min.js"
integrity="sha512-yNSFkZpMlHmyfyHN1cNSq7+jguocLrAndVKs0bWHvBiH6gJNmJ89E1x270xH6Or3aXtgBgs+IJ8HvBMIPpPIzw=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.52.0/swagger-ui-standalone-preset.min.js"
integrity="sha512-Pa5TWsES4T1o6gHBRqi9I5+quIPpDBjThcQLO7rvvaNYquPvAntd0Gtm7nOWGMQKY5ds6PeqccVBC6KAHqN+fQ=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+ <script src="dataset-populate.js"></script>
<script>
window.onload = function() {
// Begin Swagger UI call region
@@ -45,7 +46,8 @@
SwaggerUIStandalonePreset
],
plugins: [
- SwaggerUIBundle.plugins.DownloadUrl
+ SwaggerUIBundle.plugins.DownloadUrl,
+ DatasetPopulatePlugin
],
syntaxHighlight: {
activated: false
diff --git a/analysis/webservice/apidocs/openapi.yml
b/analysis/webservice/apidocs/openapi.yml
index f68f1c2..8a7392b 100644
--- a/analysis/webservice/apidocs/openapi.yml
+++ b/analysis/webservice/apidocs/openapi.yml
@@ -29,6 +29,8 @@ paths:
required: true
schema:
type: string
+ x-dspopulate:
+ - satellite
example:
avhrr-l4-glob-v2-daily-ncei-ghrsst-sstblend-avhrr-oi-glob-v020-fv020
- in: query
name: secondary
@@ -40,6 +42,9 @@ paths:
required: true
schema:
type: string
+ x-dspopulate:
+ - satellite
+ - insitu
example: icoads
- in: query
name: startTime
@@ -184,6 +189,8 @@ paths:
required: false
schema:
type: string
+ x-dspopulate:
+ - satellite
example: MAVHRR_OI_L4_GHRSST_NCEI
- in: query
name: insitu
@@ -193,6 +200,8 @@ paths:
required: false
schema:
type: string
+ x-dspopulate:
+ - insitu
example: icoads,samos,spurs,spurs2
- in: query
name: startTime
@@ -302,6 +311,8 @@ paths:
required: true
schema:
type: string
+ x-dspopulate:
+ - satellite
example:
avhrr-l4-glob-v2-daily-ncei-ghrsst-sstblend-avhrr-oi-glob-v020-fv020
- in: query
name: startTime
@@ -425,6 +436,8 @@ paths:
required: true
schema:
type: string
+ x-dspopulate:
+ - insitu
example: samos
- in: query
name: startTime
@@ -531,6 +544,9 @@ paths:
required: true
schema:
type: string
+ x-dspopulate:
+ - satellite
+ - insitu
example: MUR25-JPL-L4-GLOB-v04.2
- in: query
name: minLat