This is an automated email from the ASF dual-hosted git repository.

kinow pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 17c9205835dd1b94f07ec26dfa26fad7b1d779a8
Author: Simon Bin <s...@informatik.uni-leipzig.de>
AuthorDate: Fri Dec 16 00:42:49 2022 +0100

    GH-1679: edit not working on non root g-sp
---
 .../jena-fuseki-ui/src/services/fuseki.service.js  | 40 +++++++++++++++++++---
 .../jena-fuseki-ui/src/views/dataset/Edit.vue      | 12 +++++--
 .../tests/unit/services/fuseki.service.spec.js     |  9 +++--
 3 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js 
b/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js
index 4183991deb..a090ec17f4 100644
--- a/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js
+++ b/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js
@@ -181,9 +181,31 @@ class FusekiService {
     return results
   }
 
-  async fetchGraph (datasetName, graphName) {
+  /**
+   * Get the data endpoint out of a list of server endpoints.
+   *
+   * For now we are simply returning the first non-empty, but that
+   * may change at some point.
+   *
+   * @private
+   * @param {string[]} serverEndpoints - list of server endpoints in the 
dataset (can be an empty list).
+   */
+  getDataEndpoint(serverEndpoints) {
+    return serverEndpoints.find(endpoint => endpoint !== '') || ''
+  }
+
+  /**
+   * Fetch a graph.
+   * @param {string} datasetName - Jena dataset name.
+   * @param {string[]} serverEndpoints - list of server endpoints in the 
dataset (can be an empty list).
+   * @param {string} graphName - name of the graph being accessed.
+   * @return {Promise<AxiosResponse<any>>}
+   */
+  async fetchGraph (datasetName, serverEndpoints, graphName) {
+    const dataEndpoint = this.getDataEndpoint(serverEndpoints)
+    const urlPart = `${datasetName}/${dataEndpoint}`
     return await axios
-      .get(this.getFusekiUrl(`/${datasetName}`), {
+      .get(this.getFusekiUrl(urlPart), {
         params: {
           graph: graphName
         },
@@ -193,9 +215,19 @@ class FusekiService {
       })
   }
 
-  async saveGraph (datasetName, graphName, code) {
+  /**
+   * Save a graph.
+   * @param {string} datasetName - Jena dataset name.
+   * @param {string[]} serverEndpoints - list of server endpoints in the 
dataset (can be an empty list).
+   * @param {string} graphName - name of the graph being accessed.
+   * @param {string} code - graph content.
+   * @return {Promise<AxiosResponse<any>>}
+   */
+  async saveGraph (datasetName, serverEndpoints, graphName, code) {
+    const dataEndpoint = this.getDataEndpoint(serverEndpoints)
+    const urlPart = `${datasetName}/${dataEndpoint}`
     return await axios
-      .put(this.getFusekiUrl(`/${datasetName}`), code, {
+      .put(this.getFusekiUrl(urlPart), code, {
         params: {
           graph: graphName
         },
diff --git a/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue 
b/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue
index e5458e1515..8dde59f7af 100644
--- a/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue
+++ b/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Edit.vue
@@ -261,7 +261,11 @@ export default {
       this.loadingGraph = true
       this.selectedGraph = graphName
       try {
-        const result = await this.$fusekiService.fetchGraph(this.datasetName, 
graphName)
+        const dataEndpoint = 
this.services['gsp-rw']['srv.endpoints'].find(endpoint => endpoint !== '') || ''
+        const result = await this.$fusekiService.fetchGraph(
+          this.datasetName,
+          this.services['gsp-rw']['srv.endpoints'],
+          graphName)
         this.code = result.data
       } catch (error) {
         displayError(this, error)
@@ -277,7 +281,11 @@ export default {
       if (!this.saveGraphDisabled) {
         this.loadingGraph = true
         try {
-          await this.$fusekiService.saveGraph(this.datasetName, 
this.selectedGraph, this.content)
+          await this.$fusekiService.saveGraph(
+            this.datasetName,
+            this.services['gsp-rw']['srv.endpoints'],
+            this.selectedGraph,
+            this.content)
           displayNotification(this, `Graph updated for dataset 
"${this.datasetName}"`)
         } catch (error) {
           displayError(this, error)
diff --git 
a/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js 
b/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js
index 87db72cd7c..6c392bd8ab 100644
--- a/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js
+++ b/jena-fuseki2/jena-fuseki-ui/tests/unit/services/fuseki.service.spec.js
@@ -283,8 +283,11 @@ describe('FusekiService', () => {
     stub.resolves(Promise.resolve({
       data: 42
     }))
-    const graph = await fusekiService.fetchGraph('jena', 'default')
+    const graph = await fusekiService.fetchGraph('jena', ['dataEndpoint'], 
'default')
     expect(stub.called).to.equal(true)
+    const getArgs = stub.getCall(0).args
+    // See https://github.com/apache/jena/pull/1679
+    expect(getArgs[0]).to.equal('/jena/dataEndpoint')
     expect(graph).to.deep.equal({ data: 42 })
     stub.restore()
   })
@@ -293,7 +296,7 @@ describe('FusekiService', () => {
     stub.resolves(Promise.resolve({
       data: 42
     }))
-    const graph = await fusekiService.saveGraph('jena', 'default', 'abc')
+    const graph = await fusekiService.saveGraph('jena', [], 'default', 'abc')
     expect(stub.called).to.equal(true)
     expect(graph).to.deep.equal({ data: 42 })
     stub.restore()
@@ -306,7 +309,7 @@ describe('FusekiService', () => {
     }
     stub.resolves(Promise.reject(error))
     try {
-      await fusekiService.saveGraph('jena', 'default', 'abc')
+      await fusekiService.saveGraph('jena', [], 'default', 'abc')
       expect.fail('Not supposed to get here')
     } catch (error) {
       expect(error.message).to.be.equal('42')

Reply via email to