graphdb-workbench 3.5.1-RC1 → 3.5.1-RC2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/{64709.1c394e9d967b7883a14f.bundle.js → 64709.2adc31363ca2b2475476.bundle.js} +2 -2
  2. package/dist/{64709.1c394e9d967b7883a14f.bundle.js.map → 64709.2adc31363ca2b2475476.bundle.js.map} +1 -1
  3. package/dist/{65677.5114a3c7a59d95ca6393.bundle.js → 65677.18df5c2d9a605f6db5fc.bundle.js} +2 -2
  4. package/dist/{65677.5114a3c7a59d95ca6393.bundle.js.map → 65677.18df5c2d9a605f6db5fc.bundle.js.map} +1 -1
  5. package/dist/73334.1487d58b7e885510d107.bundle.js +2 -0
  6. package/dist/73334.1487d58b7e885510d107.bundle.js.map +1 -0
  7. package/dist/{80933.3bb78afbe19f4f42c191.bundle.js → 80933.25b785e67f467a70cf8e.bundle.js} +2 -2
  8. package/dist/{80933.3bb78afbe19f4f42c191.bundle.js.map → 80933.25b785e67f467a70cf8e.bundle.js.map} +1 -1
  9. package/dist/{82917.ed203b019f3b90fb8637.bundle.js → 82917.14ea95fa663b724a3ac5.bundle.js} +2 -2
  10. package/dist/{82917.ed203b019f3b90fb8637.bundle.js.map → 82917.14ea95fa663b724a3ac5.bundle.js.map} +1 -1
  11. package/dist/{86099.d89902f81893523e85e0.bundle.js → 86099.545332ac6dbc48ce4fb7.bundle.js} +2 -2
  12. package/dist/{86099.d89902f81893523e85e0.bundle.js.map → 86099.545332ac6dbc48ce4fb7.bundle.js.map} +1 -1
  13. package/dist/assets/i18n/language-config.json +1 -1
  14. package/dist/index.html +8 -8
  15. package/dist/js/angular/clustermanagement/templates/cluster-configuration/cluster-configuration.html +1 -1
  16. package/dist/js/angular/clustermanagement/templates/cluster-configuration/multi-region.html +1 -1
  17. package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
  18. package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
  19. package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
  20. package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
  21. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  22. package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
  23. package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +2 -2
  24. package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
  25. package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
  26. package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
  27. package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
  28. package/dist/js/angular/core/templates/search-resource-input.html +1 -1
  29. package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
  30. package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
  31. package/dist/js/angular/graphql/templates/graphql-playground.html +2 -2
  32. package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
  33. package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
  34. package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
  35. package/dist/js/angular/security/templates/user.html +2 -2
  36. package/dist/js/angular/security/templates/users.html +1 -1
  37. package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
  38. package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
  39. package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
  40. package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
  41. package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
  42. package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
  43. package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +3 -3
  44. package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
  45. package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
  46. package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
  47. package/dist/{legacyWorkbench.bb36cbc6775ac1378482.js → legacyWorkbench.c8d906e4ff52c680ac0b.js} +3 -3
  48. package/dist/{legacyWorkbench.bb36cbc6775ac1378482.js.map → legacyWorkbench.c8d906e4ff52c680ac0b.js.map} +1 -1
  49. package/dist/pages/aclmanagement.html +1 -1
  50. package/dist/pages/autocomplete.html +1 -1
  51. package/dist/pages/choose-repository-type.html +1 -1
  52. package/dist/pages/cluster-management/clusterInfo.html +2 -2
  53. package/dist/pages/create-index.html +1 -1
  54. package/dist/pages/dependencies.html +1 -1
  55. package/dist/pages/domainRangeInfo.html +2 -2
  56. package/dist/pages/edit.html +1 -1
  57. package/dist/pages/explore.html +1 -1
  58. package/dist/pages/export.html +1 -1
  59. package/dist/pages/find.html +1 -1
  60. package/dist/pages/graph-config/saveGraphConfig.html +8 -8
  61. package/dist/pages/graphs-visualizations.html +7 -7
  62. package/dist/pages/guides.html +1 -1
  63. package/dist/pages/home.html +1 -1
  64. package/dist/pages/import.html +2 -2
  65. package/dist/pages/jdbc-create.html +1 -1
  66. package/dist/pages/jdbc.html +1 -1
  67. package/dist/pages/monitor/backup-and-restore.html +1 -1
  68. package/dist/pages/monitor/queries.html +1 -1
  69. package/dist/pages/monitor/resources.html +1 -1
  70. package/dist/pages/namespaces.html +2 -2
  71. package/dist/pages/plugins.html +1 -1
  72. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  73. package/dist/pages/rdfrank.html +2 -2
  74. package/dist/pages/repositories.html +1 -1
  75. package/dist/pages/repository.html +1 -1
  76. package/dist/pages/similarity-indexes.html +1 -1
  77. package/dist/pages/sparql-editor.html +1 -1
  78. package/dist/pages/sparql-template-create.html +1 -1
  79. package/dist/pages/sparql-templates.html +1 -1
  80. package/dist/pages/ux-test1.html +2 -2
  81. package/dist/pages/webapi.html +2 -2
  82. package/dist/res/swagger5/index.html +11 -11
  83. package/package.json +1 -1
  84. package/dist/73334.b9c87ecb49eff4f5195d.bundle.js +0 -2
  85. package/dist/73334.b9c87ecb49eff4f5195d.bundle.js.map +0 -1
  86. /package/dist/{legacyWorkbench.bb36cbc6775ac1378482.js.LICENSE.txt → legacyWorkbench.c8d906e4ff52c680ac0b.js.LICENSE.txt} +0 -0
@@ -1,4 +1,4 @@
1
- <link href="css/aclmanagement.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/aclmanagement.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
  <div class="acl-management-view">
4
4
  <h1 id="acl-management-view-title">
@@ -1,4 +1,4 @@
1
- <link href="css/autocomplete.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/autocomplete.css?v=3.5.1-RC2" rel="stylesheet">
2
2
  <div id="autocomplete" class="page" data-test="autocomplete-page">
3
3
  <h1>
4
4
  {{title}}
@@ -1,4 +1,4 @@
1
- <link href="css/repository.create.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/repository.create.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div>
4
4
  <h1 class="mb-3">{{pageTitle}}</h1>
@@ -1,5 +1,5 @@
1
- <link href="css/clustermanagement.css?v=3.5.1-RC1" rel="stylesheet"/>
2
- <link href="js/lib/d3-tip/d3-tip.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/clustermanagement.css?v=3.5.1-RC2" rel="stylesheet"/>
2
+ <link href="js/lib/d3-tip/d3-tip.css?v=3.5.1-RC2" rel="stylesheet"/>
3
3
 
4
4
  <title>{{'view.clusterManagement.title' | translate}}</title>
5
5
 
@@ -1,4 +1,4 @@
1
- <link href="css/create-similarity-index.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/create-similarity-index.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div class="container-fluid">
4
4
 
@@ -1,4 +1,4 @@
1
- <link href="css/dependencies.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/dependencies.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
 
4
4
  <title>Explore Class Dependencies</title>
@@ -1,5 +1,5 @@
1
- <link href="css/domain-range-graph.css?v=3.5.1-RC1" rel="stylesheet"/>
2
- <link href="css/rdf-details-side-panel.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/domain-range-graph.css?v=3.5.1-RC2" rel="stylesheet"/>
2
+ <link href="css/rdf-details-side-panel.css?v=3.5.1-RC2" rel="stylesheet"/>
3
3
 
4
4
  <title>Explore Data Graph</title>
5
5
 
@@ -1,4 +1,4 @@
1
- <link href="css/lib/angular-xeditable/xeditable.min.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/lib/angular-xeditable/xeditable.min.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div core-errors></div>
4
4
  <div class="page" ng-show="getActiveRepository()">
@@ -1,4 +1,4 @@
1
- <link href="css/explore.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/explore.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
  <div core-errors></div>
4
4
  <div class="explore-resource page fit-content-on-mobile">
@@ -1,4 +1,4 @@
1
- <link href="css/export.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/export.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div id="wb-export">
4
4
 
@@ -1,4 +1,4 @@
1
- <link href="css/find.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/find.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
  <div class="page">
4
4
  <h1>
@@ -1,4 +1,4 @@
1
- <link href="css/graphs-config.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/graphs-config.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
  <h1>
4
4
  {{title}}
@@ -79,7 +79,7 @@
79
79
  <label class="start-mode search image-label d-flex" guide-selector="start-with-search-box" ng-class="{'active': newConfig.startMode === 'search'}">
80
80
  <input type="radio" class="form-check-input" id="checkboxSuccessSearch"
81
81
  ng-model="newConfig.startMode" value="search">
82
- <img class="image-label-image" src="css/images/search.png?v=3.5.1-RC1" alt="search image"
82
+ <img class="image-label-image" src="css/images/search.png?v=3.5.1-RC2" alt="search image"
83
83
  width="100%">
84
84
  <div class="image-label-content">
85
85
  <h5>{{'start.with.search.box' | translate}}</h5>
@@ -90,7 +90,7 @@
90
90
  <label class="start-mode node image-label d-flex" guide-selector="start-with-a-fixed-node" ng-class="{'active': newConfig.startMode === 'node'}">
91
91
  <input type="radio" class="form-check-input" id="checkboxSuccessNode" ng-model="newConfig.startMode"
92
92
  value="node">
93
- <img class="image-label-image" src="css/images/node.png?v=3.5.1-RC1" alt="node image"
93
+ <img class="image-label-image" src="css/images/node.png?v=3.5.1-RC2" alt="node image"
94
94
  width="100%">
95
95
  <div class="image-label-content">
96
96
  <h5>{{'start.with.fixed.node' | translate}}</h5>
@@ -101,7 +101,7 @@
101
101
  <label class="start-mode query image-label d-flex" guide-selector="start-with-graph-query-result" ng-class="{'active': newConfig.startMode === 'query'}">
102
102
  <input type="radio" class="form-check-input" data-cy="graph-config-by-graph-query-checkbox"
103
103
  ng-model="newConfig.startMode" value="query">
104
- <img class="image-label-image" src="css/images/query.png?v=3.5.1-RC1" alt="query image"
104
+ <img class="image-label-image" src="css/images/query.png?v=3.5.1-RC2" alt="query image"
105
105
  width="100%">
106
106
  <div class="image-label-content">
107
107
  <h5>{{'query.results.start' | translate}}</h5>
@@ -148,7 +148,7 @@
148
148
  {{'sample.query.used' | translate}}</p>
149
149
  </div>
150
150
  <div>
151
- <img src="css/images/expand.png?v=3.5.1-RC1" class="info-box-img" height="220"
151
+ <img src="css/images/expand.png?v=3.5.1-RC2" class="info-box-img" height="220"
152
152
  alt="expand image">
153
153
  </div>
154
154
  </div>
@@ -176,7 +176,7 @@
176
176
  {{'sample.query.used' | translate}}</p>
177
177
  </div>
178
178
  <div>
179
- <img src="css/images/labels-size.png?v=3.5.1-RC1" class="info-box-img" height="220"
179
+ <img src="css/images/labels-size.png?v=3.5.1-RC2" class="info-box-img" height="220"
180
180
  alt="labels size image">
181
181
  </div>
182
182
  </div>
@@ -199,7 +199,7 @@
199
199
  <p>{{'query.is.optional.local.name' | translate}}</p>
200
200
  </div>
201
201
  <div>
202
- <img src="css/images/predicates.png?v=3.5.1-RC1" class="info-box-img" height="220"
202
+ <img src="css/images/predicates.png?v=3.5.1-RC2" class="info-box-img" height="220"
203
203
  alt="predicates image">
204
204
  </div>
205
205
  </div>
@@ -231,7 +231,7 @@
231
231
  {{'sample.query.used' | translate}}</p>
232
232
  </div>
233
233
  <div>
234
- <img src="css/images/side-panel.png?v=3.5.1-RC1" class="info-box-img" height="220"
234
+ <img src="css/images/side-panel.png?v=3.5.1-RC2" class="info-box-img" height="220"
235
235
  alt="side panel image">
236
236
  </div>
237
237
  </div>
@@ -1,7 +1,7 @@
1
- <link href="css/graphs-vizualizations.css?v=3.5.1-RC1" rel="stylesheet"/>
2
- <link href="css/rdf-details-side-panel.css?v=3.5.1-RC1" rel="stylesheet"/>
3
- <link href="css/lib/ng-tags-input/ng-tags-input.min.css?v=3.5.1-RC1" rel="stylesheet"/>
4
- <link href="js/lib/d3-tip/d3-tip.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/graphs-vizualizations.css?v=3.5.1-RC2" rel="stylesheet"/>
2
+ <link href="css/rdf-details-side-panel.css?v=3.5.1-RC2" rel="stylesheet"/>
3
+ <link href="css/lib/ng-tags-input/ng-tags-input.min.css?v=3.5.1-RC2" rel="stylesheet"/>
4
+ <link href="js/lib/d3-tip/d3-tip.css?v=3.5.1-RC2" rel="stylesheet"/>
5
5
 
6
6
  <div class="visual-graph-view">
7
7
 
@@ -160,9 +160,9 @@
160
160
  <tr ng-repeat="config in graphConfigs">
161
161
  <td width="20">
162
162
  <a href ng-click="goToGraphConfig(config)">
163
- <img ng-if="config.startMode == 'search'" src="css/images/search.png?v=3.5.1-RC1" alt="" width="64" uib-popover="{{'visual.config.search.box.starting.point' | translate}}" popover-trigger="mouseenter">
164
- <img ng-if="config.startMode == 'node'" src="css/images/node.png?v=3.5.1-RC1" alt="" width="64" uib-popover="{{'visual.config.fixed.resource.starting.point' | translate}}" popover-trigger="mouseenter">
165
- <img ng-if="config.startMode == 'query'" src="css/images/query.png?v=3.5.1-RC1" alt="" data-cy="graph-config-starting-point-query-results" width="64" uib-popover="{{'visual.config.query.results.starting.point' | translate}}" popover-trigger="mouseenter">
163
+ <img ng-if="config.startMode == 'search'" src="css/images/search.png?v=3.5.1-RC2" alt="" width="64" uib-popover="{{'visual.config.search.box.starting.point' | translate}}" popover-trigger="mouseenter">
164
+ <img ng-if="config.startMode == 'node'" src="css/images/node.png?v=3.5.1-RC2" alt="" width="64" uib-popover="{{'visual.config.fixed.resource.starting.point' | translate}}" popover-trigger="mouseenter">
165
+ <img ng-if="config.startMode == 'query'" src="css/images/query.png?v=3.5.1-RC2" alt="" data-cy="graph-config-starting-point-query-results" width="64" uib-popover="{{'visual.config.query.results.starting.point' | translate}}" popover-trigger="mouseenter">
166
166
  </a>
167
167
  </td>
168
168
  <td>
@@ -1,4 +1,4 @@
1
- <link href="css/guides.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/guides.css?v=3.5.1-RC2" rel="stylesheet">
2
2
  <h1>
3
3
  {{title}}
4
4
  <page-info-tooltip></page-info-tooltip>
@@ -1,4 +1,4 @@
1
- <link href="css/home.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/home.css?v=3.5.1-RC2" rel="stylesheet">
2
2
  <div class="ot-loader ot-loader-home" onto-loader size="100" auto-font-size="false" message-text="{{'common.loading' | translate}}" ng-show="isLoadingLocation()"></div>
3
3
  <div id="wb-home" class="content-wrapper" ng-hide="isLoadingLocation()" ng-cloak>
4
4
  <div class="alert alert-danger" role="alert" ng-hide="isLicenseValid()">
@@ -1,5 +1,5 @@
1
- <link rel="stylesheet" type="text/css" href="css/import.css?v=3.5.1-RC1">
2
- <link rel="stylesheet" type="text/css" href="css/import-resource-tree.css?v=3.5.1-RC1">
1
+ <link rel="stylesheet" type="text/css" href="css/import.css?v=3.5.1-RC2">
2
+ <link rel="stylesheet" type="text/css" href="css/import-resource-tree.css?v=3.5.1-RC2">
3
3
 
4
4
  <div id="wb-import">
5
5
  <h1>
@@ -1,4 +1,4 @@
1
- <link href="css/jdbc-create.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/jdbc-create.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div class="container-fluid fit-content-on-mobile" ng-if="!isLoading">
4
4
  <h1>
@@ -1,4 +1,4 @@
1
- <link href="css/jdbc-create.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/jdbc-create.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div class="container-fluid" data-test="jdbc-page">
4
4
  <h1>
@@ -1,4 +1,4 @@
1
- <link href="css/backup-and-restore.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/backup-and-restore.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
  <div data-test="backup-and-restore-page">
3
3
  <title>${messages.app.title} : ${messages.jmx.QueryMonitoringPage.title}</title>
4
4
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  <title>${messages.app.title} : ${messages.jmx.QueryMonitoringPage.title}</title>
5
5
 
6
- <link href="css/jmx.css?v=3.5.1-RC1" rel="stylesheet" />
6
+ <link href="css/jmx.css?v=3.5.1-RC2" rel="stylesheet" />
7
7
 
8
8
  <h1>
9
9
  {{title}}
@@ -1,4 +1,4 @@
1
- <link href="css/jmx.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/jmx.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
 
4
4
  <div class="hiddenVariables" style="display: none;">
@@ -1,5 +1,5 @@
1
- <link href="css/lib/angular-xeditable/xeditable.min.css?v=3.5.1-RC1" rel="stylesheet">
2
- <link href="css/export.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/lib/angular-xeditable/xeditable.min.css?v=3.5.1-RC2" rel="stylesheet">
2
+ <link href="css/export.css?v=3.5.1-RC2" rel="stylesheet">
3
3
 
4
4
  <title>Namespaces</title>
5
5
 
@@ -1,4 +1,4 @@
1
- <link href="css/plugins.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/plugins.css?v=3.5.1-RC2" rel="stylesheet">
2
2
  <div id="plugins" class="page">
3
3
  <h1>
4
4
  {{title}} {{'for.repository' | translate}} {{getActiveRepository()}}
@@ -1,10 +1,10 @@
1
- <link href="css/rdf-class-hierarchy.css?v=3.5.1-RC1" rel="stylesheet"/>
2
- <link href="css/rdf-class-hierarchy-labels.css?v=3.5.1-RC1" rel="stylesheet"/>
3
- <link href="css/rdf-details-side-panel.css?v=3.5.1-RC1" rel="stylesheet"/>
4
- <link href="js/lib/rzslider/rzslider.min.css?v=3.5.1-RC1" rel="stylesheet"/>
5
- <link href="js/lib/angucomplete-alt/angucomplete-alt.css?v=3.5.1-RC1" rel="stylesheet"/>
6
- <link href="js/lib/d3-tip/d3-tip.css?v=3.5.1-RC1" rel="stylesheet"/>
7
- <link href="css/lib/animate/3.2.0/animate.min.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/rdf-class-hierarchy.css?v=3.5.1-RC2" rel="stylesheet"/>
2
+ <link href="css/rdf-class-hierarchy-labels.css?v=3.5.1-RC2" rel="stylesheet"/>
3
+ <link href="css/rdf-details-side-panel.css?v=3.5.1-RC2" rel="stylesheet"/>
4
+ <link href="js/lib/rzslider/rzslider.min.css?v=3.5.1-RC2" rel="stylesheet"/>
5
+ <link href="js/lib/angucomplete-alt/angucomplete-alt.css?v=3.5.1-RC2" rel="stylesheet"/>
6
+ <link href="js/lib/d3-tip/d3-tip.css?v=3.5.1-RC2" rel="stylesheet"/>
7
+ <link href="css/lib/animate/3.2.0/animate.min.css?v=3.5.1-RC2" rel="stylesheet"/>
8
8
 
9
9
  <title>Explore Data Graph</title>
10
10
 
@@ -1,5 +1,5 @@
1
- <link href="css/rdfrank.css?v=3.5.1-RC1" rel="stylesheet">
2
- <link href="css/lib/ng-tags-input/ng-tags-input.min.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/rdfrank.css?v=3.5.1-RC2" rel="stylesheet">
2
+ <link href="css/lib/ng-tags-input/ng-tags-input.min.css?v=3.5.1-RC2" rel="stylesheet"/>
3
3
 
4
4
  <div id="rdfRank" class="page" data-test="rdf-rank-page">
5
5
  <h1>
@@ -1,4 +1,4 @@
1
- <link href="css/repositories.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/repositories.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <h1>
4
4
  {{title}}
@@ -1,4 +1,4 @@
1
- <link href="css/repositories.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/repositories.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div id="wb-repository">
4
4
  <h1>{{pageTitle}}</h1>
@@ -1,4 +1,4 @@
1
- <link href="css/similarity.css?v=3.5.1-RC1" rel='stylesheet' type='text/css'/>
1
+ <link href="css/similarity.css?v=3.5.1-RC2" rel='stylesheet' type='text/css'/>
2
2
 
3
3
  <div class="container-fluid">
4
4
 
@@ -1,4 +1,4 @@
1
- <link href="css/sparql-editor.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/sparql-editor.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
  <div class="sparql-editor-view">
4
4
  <h1 id="title-container" ng-if="!embedded">
@@ -1,4 +1,4 @@
1
- <link href="css/sparql-templates.css?v=3.5.1-RC1" rel="stylesheet"/>
1
+ <link href="css/sparql-templates.css?v=3.5.1-RC2" rel="stylesheet"/>
2
2
 
3
3
  <div class="container-fluid fit-content-on-mobile" ng-if="!queryIsRunning">
4
4
  <h1>
@@ -1,4 +1,4 @@
1
- <link href="css/sparql-templates.css?v=3.5.1-RC1" rel="stylesheet">
1
+ <link href="css/sparql-templates.css?v=3.5.1-RC2" rel="stylesheet">
2
2
 
3
3
  <div class="container-fluid" data-test="sparql-templates-page">
4
4
  <h1>
@@ -1,7 +1,7 @@
1
1
  <link rel="stylesheet" type="text/css" href="css/ux-test1.css">
2
2
  <link rel="stylesheet" type="text/css" href="css/user.css">
3
3
  <link rel="stylesheet" type="text/css" href="css/rdf-details-side-panel.css">
4
- <link href="js/lib/rzslider/rzslider.min.css?v=3.5.1-RC1" rel="stylesheet"/>
4
+ <link href="js/lib/rzslider/rzslider.min.css?v=3.5.1-RC2" rel="stylesheet"/>
5
5
 
6
6
  <div class="content-wrapper">
7
7
  <div core-errors></div>
@@ -521,7 +521,7 @@
521
521
  {{'sample.query.used' | translate}}</p>
522
522
  </div>
523
523
  <div>
524
- <img src="css/images/expand.png?v=3.5.1-RC1" class="info-box-img" height="220"
524
+ <img src="css/images/expand.png?v=3.5.1-RC2" class="info-box-img" height="220"
525
525
  alt="expand image">
526
526
  </div>
527
527
  </div>
@@ -1,5 +1,5 @@
1
- <link href='css/lib/swagger-ui.min.css?v=3.5.1-RC1' rel='stylesheet' type='text/css'/>
2
- <link href='css/swagger.custom.css?v=3.5.1-RC1' rel='stylesheet' type='text/css'/>
1
+ <link href='css/lib/swagger-ui.min.css?v=3.5.1-RC2' rel='stylesheet' type='text/css'/>
2
+ <link href='css/swagger.custom.css?v=3.5.1-RC2' rel='stylesheet' type='text/css'/>
3
3
 
4
4
  <h1>
5
5
  {{title}}
@@ -4,14 +4,14 @@
4
4
  <head>
5
5
  <meta charset="UTF-8">
6
6
  <title>Swagger UI</title>
7
- <link rel="stylesheet" type="text/css" href="./swagger-ui.css?v=3.5.1-RC1" />
8
- <link rel="stylesheet" type="text/css" href="./index.css?v=3.5.1-RC1" />
9
- <link rel="icon" type="image/png" href="./favicon-32x32.png?v=3.5.1-RC1" sizes="32x32" />
10
- <link rel="icon" type="image/png" href="./favicon-16x16.png?v=3.5.1-RC1" sizes="16x16" />
11
- <link href='css/reset.css?v=3.5.1-RC1' media='screen' rel='stylesheet' type='text/css'/>
12
- <link href='css/screen.css?v=3.5.1-RC1' media='screen' rel='stylesheet' type='text/css'/>
13
- <link href='css/onto-theme.css?v=3.5.1-RC1' media='screen' rel='stylesheet' type='text/css'/>
14
- <link href='css/print.css?v=3.5.1-RC1' media='print' rel='stylesheet' type='text/css'/>
7
+ <link rel="stylesheet" type="text/css" href="./swagger-ui.css?v=3.5.1-RC2" />
8
+ <link rel="stylesheet" type="text/css" href="./index.css?v=3.5.1-RC2" />
9
+ <link rel="icon" type="image/png" href="./favicon-32x32.png?v=3.5.1-RC2" sizes="32x32" />
10
+ <link rel="icon" type="image/png" href="./favicon-16x16.png?v=3.5.1-RC2" sizes="16x16" />
11
+ <link href='css/reset.css?v=3.5.1-RC2' media='screen' rel='stylesheet' type='text/css'/>
12
+ <link href='css/screen.css?v=3.5.1-RC2' media='screen' rel='stylesheet' type='text/css'/>
13
+ <link href='css/onto-theme.css?v=3.5.1-RC2' media='screen' rel='stylesheet' type='text/css'/>
14
+ <link href='css/print.css?v=3.5.1-RC2' media='print' rel='stylesheet' type='text/css'/>
15
15
  </head>
16
16
 
17
17
  <body class="swagger-section">
@@ -20,8 +20,8 @@
20
20
  <br>
21
21
  <br>
22
22
  <div id="swagger-ui-container-rdf4j" class="swagger-ui-wrap"></div>
23
- <script src="./swagger-ui-bundle.js?v=3.5.1-RC1" charset="UTF-8"> </script>
24
- <script src="./swagger-ui-standalone-preset.js?v=3.5.1-RC1" charset="UTF-8"> </script>
25
- <script src="./swagger-initializer.js?v=3.5.1-RC1" charset="UTF-8"> </script>
23
+ <script src="./swagger-ui-bundle.js?v=3.5.1-RC2" charset="UTF-8"> </script>
24
+ <script src="./swagger-ui-standalone-preset.js?v=3.5.1-RC2" charset="UTF-8"> </script>
25
+ <script src="./swagger-initializer.js?v=3.5.1-RC2" charset="UTF-8"> </script>
26
26
  </body>
27
27
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graphdb-workbench",
3
- "version": "3.5.1-RC1",
3
+ "version": "3.5.1-RC2",
4
4
  "description": "The web application for GraphDB APIs",
5
5
  "engines": {
6
6
  "node": ">=22.17"
@@ -1,2 +0,0 @@
1
- export const __webpack_esm_id__=73334;export const __webpack_esm_ids__=[73334,85256];export const __webpack_esm_modules__={73334(n,e,t){t(10500),t(85256);const o=t(71315).I.logger,r="MASKED_SENSITIVE_FIELD";function i(n){const e=[];return Object.keys(n).forEach(function(t){e.push(encodeURIComponent(t)+"="+encodeURIComponent(n[t]))}),e.join("&")}function a(n){return _.map(n,function(n,e){return{key:e,value:n}})}function c(n,e){return _.reduce(n,function(n,t){if(""===t.key&&""===t.value);else{if(""===t.key)throw new Error(e.instant("externalsync.empty.value.key.error",{value:t.value}));if(n.hasOwnProperty(t.key))throw new Error(e.instant("externalsync.duplicate.key.error",{key:t.key}));n[t.key]=t.value}return n},{})}function s(n,e){for(let t=0;t<e.length;t++){const o=e[t];if("StringArray"===o.__type)n[o.__name]||(n[o.__name]=[""]);else if("OptionArray"===o.__type)if(n[o.__name])for(let e=0;e<o.__childOptions.length;e++){const t=o.__childOptions[e];if("Boolean"===t.__type)for(let e=0;e<n[o.__name].length;e++){const r=n[o.__name][e];!r.hasOwnProperty([t.__name])&&angular.isDefined(t.__defaultValue)&&(r[t.__name]=t.__defaultValue)}}else{n[o.__name]=[];const e={};for(let n=0;n<o.__childOptions.length;n++){const t=o.__childOptions[n];"StringArray"===t.__type?e[t.__name]=[""]:e[t.__name]=angular.isUndefined(t.__defaultValue)?"":t.__defaultValue}n[o.__name].push(e)}else"Map"===o.__type?n[o.__name]?n[o.__name]=a(n[o.__name]):n[o.__name]=[]:"JsonString"===o.__type?!n[o.__name]||n[o.__name]instanceof String||"string"==typeof n[o.__name]||(n[o.__name]=angular.toJson(n[o.__name],2)):angular.isUndefined(n[o.__name])&&(n[o.__name]=angular.isUndefined(o.__defaultValue)?"":o.__defaultValue)}return n}function l(n,e,t){return n.post("repositories/"+e,i({query:t}),{headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/sparql-results+json","X-GraphDB-Local-Consistency":"updating"}})}function u(n){return n.substring(0,n.length-1)+"/instance#"}function p(n,e,t,o,i){const a=function n(e,t){const o={};return _.each(t,function(t){angular.isDefined(e[t.__name])&&("OptionArray"===t.__type?(o[t.__name]=[],_.each(e[t.__name],function(e){o[t.__name].push(n(e,t.__childOptions))})):o[t.__name]=_.cloneDeep(e[t.__name]))}),o}(t,o);for(let n=0;n<o.length;n++)try{"Map"===o[n].__type?a[o[n].__name]=c(a[o[n].__name],$translate):"JsonString"===o[n].__type?a[o[n].__name]=angular.fromJson(a[o[n].__name]):!0===o[n].__sensitive&&a[o[n].__name]&&(a[o[n].__name]=r)}catch(e){return i(o[n].__label,e.message),null}f(a);let s="";return s+="PREFIX :<"+e+">\n",s+="PREFIX inst:<"+u(e)+">\n",s+="INSERT DATA {\n",s+="\tinst:"+n+" :createConnector '''\n",s+=angular.toJson(a,2),s=s.replaceAll(`"${r}"`,r),s+="\n''' .\n}\n",s=s.replace(/\\/g,"\\\\\\"),s}function f(n){return Array.isArray(n)&&(n=_.filter(n,function(n){return null!==n&&(!n.trim||""!==n.trim())})),Object.keys(n).forEach(function(e){""!==n[e]&&null!==n[e]&&void 0!==n[e]||!1===n[e]?"object"==typeof n[e]&&(n[e]=f(n[e])):delete n[e]}),n}function d(n,e,t,r,a,c,f,d,g,m){function y(e){n.beingBuiltConnector={percentDone:0,status:{processedEntities:0,estimatedEntities:0,indexedEntities:0,entitiesPerSecond:0},actionName:e?m.instant("externalsync.repairing"):m.instant("externalsync.creating"),waitOnRepairStartOnce:!!e,eta:"-",inline:!1,iri:null}}function C(e,t,o){return y(o),$.extend(n.beingBuiltConnector,{iri:u(e)+t,name:t,inline:!1,doneCallback:function(){n.beingBuiltConnector.modalInstance.dismiss("cancel")}}),n.beingBuiltConnector.modalInstance=r.open({templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",size:"lg",backdrop:"static",scope:n}),n.beingBuiltConnector.modalInstance}function h(e,o,r){const c=C(e.value,o.name,!1);d.addStatements(t.getActiveRepository(),i({update:o.query})).then(function(){g.getConnectors().then(function(){g.hasConnector(encodeURIComponent(e.value)).then(function(t){n.existing[e.key]=t.data})}),a.success(m.instant("created.connector",{name:o.name}))},function(n){a.error(getError(n)),r()}).finally(function(){c.dismiss("cancel")})}n.loader=!1,n.controllers=[],n.existing={},n.definitions={},n.getLoaderMessage=function(){const e=(Date.now()-n.loaderStartTime)/1e3,t=n.getHumanReadableSeconds(e);let o="";return o=n.progressMessage?n.progressMessage+"... "+t:m.instant("common.running.operation",{timeHuman:t}),n.extraMessage&&e>10&&(o+="\n"+n.extraMessage),o},n.setLoader=function(e,t,o){e?(n.loader=!0,n.loaderStartTime=Date.now(),n.progressMessage=t,n.extraMessage=o):(n.loader=!1,n.progressMessage="",n.extraMessage="")},n.initConnector=function(e){return g.initConnector(encodeURIComponent(e.value)).then(function(t){return n.definitions[e.key]=t.data,g.hasConnector(encodeURIComponent(e.value)).then(function(t){n.existing[e.key]=t.data})})},n.getConnectors=function(){n.isLicenseValid()&&n.canWriteActiveRepo()&&(n.setLoader(!0,m.instant("externalsync.fetching.connectors"),m.instant("common.extra.message")),g.getConnectors().then(function(r){n.connectors=Object.keys(r.data).map(function(n){return{key:n,value:r.data[n]}}),f.all(_.map(n.connectors,function(e){return n.initConnector(e)})).finally(function(){y();const r=function(n){const e=_.map(n,function(n){return"<"+n.value+"connectorStatus>"}).join("|");return e?"SELECT ?connector ?status { ?connector "+e+" ?status }":null}(n.connectors);r?function(n){return l(e,t.getActiveRepository(),n)}(r).then(function(e){const t=function(n){if(n.bindings)for(let e=0;e<n.bindings.length;e++)try{const t=JSON.parse(n.bindings[e].status.value);if("BUILDING"===t.status)return{connector:n.bindings[e].connector.value,status:t}}catch(n){o.error(n)}return{}}(e.data.results);if(t.connector){const e=t.connector.split(/#/);e[0]=e[0].replace(/\/instance$/,"#"),r=e[0],i=e[1],y(),$.extend(n.beingBuiltConnector,{iri:u(r)+i,name:i,inline:!0,doneCallback:function(){n.beingBuiltConnector.inline=!1}})}var r,i}).finally(function(){n.setLoader(!1)}):n.setLoader(!1)})}).catch(function(e){n.setLoader(!1),a.error(getError(e),m.instant("externalsync.could.not.get.connectors.error"))}),n.existing={})},n.getOptions=function(e){return n.definitions[e.key]},n.isEmpty=function(n){return angular.isObject(n)&&0===Object.keys(n).length},n.toPrettyJson=function(n){return angular.toJson(n,2)},n.$watch(function(){return t.getActiveRepository()},n.getConnectors),n.$watch(function(){return t.getActiveLocation()},n.getConnectors),n.copyConnector=function(e,t){let o;angular.isUndefined(t)||(o=_.cloneDeep(t),o.name=o.name+"-copy"),r.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return e},values:function(){return angular.isUndefined(o)?{name:"",values:{}}:o},options:function(){return n.getOptions(e)}}}).result.then(function(t){h(e,t,function(){t.skipConversion=!0,n.newConnector(e,t)})})},n.newConnector=function(e,t){r.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return e},values:function(){return angular.isUndefined(t)?{name:"",values:{}}:t},options:function(){return n.getOptions(e)}}}).result.then(function(t){h(e,t,function(){t.skipConversion=!0,n.newConnector(e,t)})})},n.repair=function(e,o){c.openSimpleModal({title:m.instant("externalsync.confirm.repair"),message:m.instant("externalsync.repair.warning.msg"),warning:!0}).result.then(function(){const r=C(o.value,e.name,!0),c=(s=e.name,"PREFIX prefix:<"+(l=o.value)+">\nINSERT DATA {\n\t<"+u(l)+s+'> prefix:repairConnector ""\n}');var s,l;d.addStatements(t.getActiveRepository(),i({update:c})).then(function(){g.getConnectors().then(function(){g.hasConnector(encodeURIComponent(o.value)).then(function(e){n.existing[o.key]=e.data})}),a.success(m.instant("externalsync.repair.success.msg",{name:e.name}))},function(n){a.error(getError(n))}).finally(function(){r.dismiss("cancel")})})},n.delete=function(e,o){const c=o.key.indexOf("Elastic")>=0||o.key.indexOf("Solr")>=0;r.open({templateUrl:"js/angular/externalsync/templates/deleteConnector.html",controller:"DeleteConnectorCtrl",resolve:{popoverMsg:function(){return c?m.instant("delete.connector.conditional",{type:o.key}):""}}}).result.then(function(r){n.setLoader(!0,m.instant("externalsync.delete.progress.msg",{name:e.name}),m.instant("externalsync.extra.message.warning"));const s=function(n,e,t){const o=e.substring(0,e.length-1)+"/instance#";return"PREFIX prefix:<"+e+">\nINSERT DATA {\n\t<"+o+n+'> prefix:dropConnector "'+(t?"force":"")+'"\n}'}(e.name,o.value,r);d.addStatements(t.getActiveRepository(),i({update:s})).then(function(){g.getConnectors().then(function(){g.hasConnector(encodeURIComponent(o.value)).then(function(e){n.existing[o.key]=e.data})}),r?(a.success(m.instant("externalsync.delete.force.success.msg",{name:e.name})),c&&a.warning(m.instant("externalsync.delete.remote.warning",{key:o.key}))):a.success(m.instant("externalsync.delete.success.msg",{name:e.name}))},function(n){a.error(getError(n))}).finally(function(){n.setLoader(!1)})})},n.viewQuery=function(e,t){r.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){const o=n.getOptions(e);return p(t.name,e.value,s(t.values,o),o)}}})}}function g(n,e,t){n.force=!1,n.popoverMsg=t,n.ok=function(){e.close(n.force)},n.cancel=function(){e.dismiss()}}function m(n,e,t,o,r){function i(){return p(n.name,t.value,n.values,n.options,function(n,e){r.error(e,n)})}n.connector=t,n.addField=function(e,t){const o=_.cloneDeep(n.defaultValues[t][0]);n.values[t].splice(e+1,0,o)},n.addOption=function(n,e){e.splice(n+1,0,"")},n.deleteOption=function(n,e){e.splice(n,1)},n.addMapOption=function(n,e){e.splice(n+1,0,{key:"",value:""})},n.deleteMapOption=function(n,e){e.splice(n,1)},n.ok=function(){if(n.form.$valid){const t=i();t&&e.close({name:n.name,values:n.values,options:n.options,query:t})}},n.viewQuery=function(){const n=i();n&&o.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){return n}}})},n.cancel=function(){e.dismiss("cancel")}}function y(n,e,t,o,r,i,a,c){angular.extend(this,e("ExtendNewConnectorCtrl",{$scope:n,$uibModalInstance:o,connector:r,$uibModal:i})),n.values=a.values,n.options=c,n.name=a.name,a.skipConversion||(n.values=s(n.values,n.options)),n.defaultValues=_.cloneDeep(n.values)}function C(n,e,t,r,i){function a(){const a=function(n){const e=n.replace(/\/instance#.+$/,"#connectorStatus");let t="";return t+="SELECT ?status {\n",t+="\t<"+n+"> <"+e+"> ?status",t+="\n}",t}(n.beingBuiltConnector.iri);n.beingBuiltConnector.iri=null,n.progressInterval=e(function(){(function(n){return l(t,r.getActiveRepository(),n)})(a).then(function(t){const r=function(n){if(n.bindings&&n.bindings.length>0)try{return JSON.parse(n.bindings[0].status.value)}catch(n){o.error(n)}return{}}(t.data.results);"BUILDING"===r.status?(n.beingBuiltConnector.status=r,n.beingBuiltConnector.percentDone=(100*r.processedEntities/r.estimatedEntities).toFixed(0),n.beingBuiltConnector.eta=n.getHumanReadableSeconds(r.etaSeconds),n.beingBuiltConnector.actionName=r.repair?i.instant("externalsync.repairing"):i.instant("externalsync.creating"),n.beingBuiltConnector.waitOnRepairStartOnce=!1):"BUILT"!==r.status||n.beingBuiltConnector.waitOnRepairStartOnce||(e.cancel(n.progressInterval),n.beingBuiltConnector.doneCallback&&n.beingBuiltConnector.doneCallback())})},1e3),n.$on("$destroy",function(){e.cancel(n.progressInterval)})}n.beingBuiltConnector=n.beingBuiltConnector||{},!n.beingBuiltConnector.inline&&n.beingBuiltConnector.iri&&a(),n.$watch("beingBuiltConnector.iri",function(e){n.beingBuiltConnector.inline&&e&&a()})}angular.module("graphdb.framework.externalsync.controllers",["graphdb.framework.rest.rdf4j.repositories.service","graphdb.framework.rest.connectors.service"]).controller("ConnectorsCtrl",d).controller("ExtendNewConnectorCtrl",m).controller("CreateConnectorCtrl",y).controller("CreateProgressCtrl",C).controller("DeleteConnectorCtrl",g).filter("ceil",function(){return function(n){return Math.ceil(n)}}),d.$inject=["$scope","$http","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService","$translate"],g.$inject=["$scope","$uibModalInstance","popoverMsg"],m.$inject=["$scope","$uibModalInstance","connector","$uibModal","toastr"],y.$inject=["$scope","$controller","$http","$uibModalInstance","connector","$uibModal","values","options"],C.$inject=["$scope","$interval","$http","$repositories","$translate"]},85256(){angular.module("graphdb.framework.rest.connectors.service",[]).factory("ConnectorsRestService",e),e.$inject=["$http"];const n="rest/connectors";function e(e){return{getConnectors:function(t,o){return t?e.get(n,{headers:{"X-GraphDB-Repository":t,"X-GraphDB-Repository-Location":o}}):e.get(n)},initConnector:function(t){return e.get(`${n}/options?prefix=${t}`)},hasConnector:function(t,o,r){return o?e.get(`${n}/existing?prefix=${t}`,{headers:{"X-GraphDB-Repository":o,"X-GraphDB-Repository-Location":r}}):e.get(`${n}/existing?prefix=${t}`)},checkConnector:function(t){return e.post(`${n}/check`,t,{headers:{"Content-Type":"text/plain"}})}}}}};
2
- //# sourceMappingURL=73334.b9c87ecb49eff4f5195d.bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"73334.b9c87ecb49eff4f5195d.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/externalsync/controllers.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/connectors.rest.service.js"],"sourcesContent":["import 'angular/rest/rdf4j.repositories.rest.service';\nimport 'angular/rest/connectors.rest.service';\nimport {LoggerProvider} from \"../core/services/logger-provider\";\n\nconst modules = [\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'graphdb.framework.rest.connectors.service',\n];\n\nconst logger = LoggerProvider.logger;\nconst SENSITIVE_FIELD_MASK = 'MASKED_SENSITIVE_FIELD';\n\nangular\n .module('graphdb.framework.externalsync.controllers', modules)\n .controller('ConnectorsCtrl', ConnectorsCtrl)\n .controller('ExtendNewConnectorCtrl', ExtendNewConnectorCtrl)\n .controller('CreateConnectorCtrl', CreateConnectorCtrl)\n .controller('CreateProgressCtrl', CreateProgressCtrl)\n .controller('DeleteConnectorCtrl', DeleteConnectorCtrl)\n .filter('ceil', ceil);\n\nfunction jsonToFormData(data) {\n const str = [];\n Object.keys(data).forEach(function(key) {\n str.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n });\n return str.join('&');\n}\n\nfunction toArrayMap(map) {\n return _.map(map, function(value, key) {\n return {key: key, value: value};\n });\n}\n\nfunction fromArrayMap(arrayMap, $translate) {\n return _.reduce(arrayMap, function(acc, value) {\n if (value.key === '' && value.value === '') {\n // empty pair, skip it\n } else if (value.key === '') {\n throw new Error($translate.instant('externalsync.empty.value.key.error', {value: value.value}));\n } else if (acc.hasOwnProperty(value.key)) {\n throw new Error($translate.instant('externalsync.duplicate.key.error', {key: value.key}));\n } else {\n acc[value.key] = value.value;\n }\n return acc;\n }, {});\n}\n\nfunction mapCreateValuesToUiValues(values, options) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n if (option.__type === 'StringArray') {\n if (!values[option.__name]) {\n values[option.__name] = [''];\n }\n } else if (option.__type === 'OptionArray') {\n if (!values[option.__name]) { // values has no entry for this option\n values[option.__name] = [];\n const optionEl = {};\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'StringArray') {\n optionEl[child.__name] = [''];\n } else {\n optionEl[child.__name] = (!angular.isUndefined(child.__defaultValue) ? child.__defaultValue : '');\n }\n }\n values[option.__name].push(optionEl);\n } else { // values already has en entry for this option\n // Copies the default value for Boolean child options if no explicit value is set\n for (let j = 0; j < option.__childOptions.length; j++) {\n const child = option.__childOptions[j];\n if (child.__type === 'Boolean') {\n for (let k = 0; k < values[option.__name].length; k++) {\n const valueK = values[option.__name][k];\n if (!valueK.hasOwnProperty([child.__name]) && angular.isDefined(child.__defaultValue)) {\n valueK[child.__name] = child.__defaultValue;\n }\n }\n }\n }\n }\n } else if (option.__type === 'Map') {\n if (!values[option.__name]) {\n values[option.__name] = [];\n } else {\n values[option.__name] = toArrayMap(values[option.__name]);\n }\n } else if (option.__type === 'JsonString') {\n if (values[option.__name] && !(values[option.__name] instanceof String) && typeof values[option.__name] !== 'string') {\n values[option.__name] = angular.toJson(values[option.__name], 2);\n }\n } else {\n if (angular.isUndefined(values[option.__name])) {\n values[option.__name] = (!angular.isUndefined(option.__defaultValue) ? option.__defaultValue : '');\n }\n }\n }\n\n return values;\n}\n\nfunction _evaluateSparqlQuery(http, repository, query) {\n return http.post('repositories/' + repository, jsonToFormData({query: query}),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/sparql-results+json',\n 'X-GraphDB-Local-Consistency': 'updating',\n },\n });\n}\n\nfunction buildNamePrefix(prefix) {\n return prefix.substring(0, prefix.length - 1) + '/instance#';\n}\n\nfunction createConnectorQuery(name, prefix, fields, options, reportError) {\n // Returns a copy of the parameter obj sorted according to the order in options\n function sortObject(obj, options) {\n const newObject = {};\n _.each(options, function(option) {\n if (angular.isDefined(obj[option.__name])) {\n if (option.__type === 'OptionArray') {\n newObject[option.__name] = [];\n _.each(obj[option.__name], function(childOption) {\n newObject[option.__name].push(sortObject(childOption, option.__childOptions));\n });\n } else {\n newObject[option.__name] = _.cloneDeep(obj[option.__name]);\n }\n }\n });\n return newObject;\n }\n\n const fcopy = sortObject(fields, options);\n\n for (let i = 0; i < options.length; i++) {\n try {\n if (options[i].__type === 'Map') {\n fcopy[options[i].__name] = fromArrayMap(fcopy[options[i].__name], $translate);\n } else if (options[i].__type === 'JsonString') {\n fcopy[options[i].__name] = angular.fromJson(fcopy[options[i].__name]);\n } else if (options[i].__sensitive === true && fcopy[options[i].__name]) {\n fcopy[options[i].__name] = SENSITIVE_FIELD_MASK;\n }\n } catch (e) {\n reportError(options[i].__label, e.message);\n return null;\n }\n }\n\n removeEmptyValues(fcopy);\n //escapeValues(fields);\n let finalString = '';\n finalString += 'PREFIX :<' + prefix + '>\\n';\n const namePrefix = buildNamePrefix(prefix);\n finalString += 'PREFIX inst:<' + namePrefix + '>\\n';\n finalString += 'INSERT DATA {\\n';\n finalString += \"\\tinst:\" + name + \" :createConnector '''\\n\";\n finalString += angular.toJson(fcopy, 2);\n finalString = finalString.replaceAll(`\"${SENSITIVE_FIELD_MASK}\"`, SENSITIVE_FIELD_MASK);\n finalString += \"\\n''' .\\n}\\n\";\n finalString = finalString.replace(/\\\\/g, '\\\\\\\\\\\\');\n return finalString;\n}\n\nfunction createStatusQueryForIri(iri) {\n const statusIri = iri.replace(/\\/instance#.+$/, '#connectorStatus');\n let finalString = '';\n finalString += 'SELECT ?status {\\n';\n finalString += '\\t<' + iri + '> <' + statusIri + '> ?status';\n finalString += '\\n}';\n return finalString;\n}\n\nfunction createStatusQueryForAny(connectors) {\n const connectorIris = _.map(connectors,\n function(k) {\n return '<' + k.value + 'connectorStatus' + '>';\n }).join('|');\n\n if (connectorIris) {\n return 'SELECT ?connector ?status { ?connector ' + connectorIris + ' ?status }';\n }\n\n return null;\n}\n\nfunction repairConnectorQuery(name, prefix) {\n const namePrefix = buildNamePrefix(prefix);\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:repairConnector \"\"\\n' +\n '}';\n}\n\nfunction deleteConnectorQuery(name, prefix, force) {\n const namePrefix = prefix.substring(0, prefix.length - 1) + \"/instance#\";\n return 'PREFIX prefix:<' + prefix + '>\\n' +\n 'INSERT DATA {\\n' +\n '\\t<' + namePrefix + name + '> prefix:dropConnector \"' + (force ? \"force\" : \"\") + '\"\\n' +\n '}';\n}\n\nfunction removeEmptyValues(data) {\n // remove empty values from array\n if (Array.isArray(data)) {\n data = _.filter(data, function(item) {\n return item !== null && (!item.trim || item.trim() !== '');\n });\n }\n // remove empty values from object values\n Object.keys(data).forEach(function(key) {\n if ((data[key] === '' || data[key] === null || data[key] === undefined) && data[key] !== false) {\n delete data[key];\n } else if (typeof data[key] === 'object') {\n data[key] = removeEmptyValues(data[key]);\n }\n });\n return data;\n}\n\nfunction parseFirstBuildingResult(results) {\n if (results.bindings) {\n for (let i = 0; i < results.bindings.length; i++) {\n try {\n const statusObject = JSON.parse(results.bindings[i].status.value);\n if (statusObject.status === 'BUILDING') {\n return {\n connector: results.bindings[i].connector.value,\n status: statusObject,\n };\n }\n } catch (e) {\n logger.error(e);\n }\n }\n }\n\n return {};\n}\n\nConnectorsCtrl.$inject = ['$scope', '$http', '$repositories', '$uibModal', 'toastr', 'ModalService', '$q', 'RDF4JRepositoriesRestService', 'ConnectorsRestService', '$translate'];\n\nfunction ConnectorsCtrl($scope, $http, $repositories, $uibModal, toastr, ModalService, $q, RDF4JRepositoriesRestService, ConnectorsRestService, $translate) {\n $scope.loader = false;\n\n $scope.controllers = [];\n\n $scope.existing = {};\n\n $scope.definitions = {};\n\n $scope.getLoaderMessage = function() {\n const timeSeconds = (Date.now() - $scope.loaderStartTime) / 1000;\n const timeHuman = $scope.getHumanReadableSeconds(timeSeconds);\n let message = '';\n if ($scope.progressMessage) {\n message = $scope.progressMessage + '... ' + timeHuman;\n } else {\n message = $translate.instant('common.running.operation', {timeHuman: timeHuman});\n }\n if ($scope.extraMessage && timeSeconds > 10) {\n message += '\\n' + $scope.extraMessage;\n }\n\n return message;\n };\n\n $scope.setLoader = function(isRunning, progressMessage, extraMessage) {\n if (isRunning) {\n $scope.loader = true;\n $scope.loaderStartTime = Date.now();\n $scope.progressMessage = progressMessage;\n $scope.extraMessage = extraMessage;\n } else {\n $scope.loader = false;\n $scope.progressMessage = '';\n $scope.extraMessage = '';\n }\n };\n\n $scope.initConnector = function(connector) {\n return ConnectorsRestService.initConnector(encodeURIComponent(connector.value))\n .then(function(res) {\n $scope.definitions[connector.key] = res.data;\n\n return ConnectorsRestService.hasConnector(encodeURIComponent(connector.value))\n .then(function(res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n };\n\n $scope.getConnectors = function() {\n if (!$scope.isLicenseValid()) {\n return;\n }\n if (!$scope.canWriteActiveRepo()) {\n return;\n }\n\n $scope.setLoader(true, $translate.instant('externalsync.fetching.connectors'), $translate.instant('common.extra.message'));\n\n ConnectorsRestService.getConnectors()\n .then(function(res) {\n $scope.connectors = Object.keys(res.data).map(function(key) {\n return {key: key, value: res.data[key]};\n });\n\n $q.all(_.map($scope.connectors, function(connector) {\n return $scope.initConnector(connector);\n })).finally(function() {\n resetProgress();\n\n const query = createStatusQueryForAny($scope.connectors);\n\n if (query) {\n evaluateSparqlQuery(query)\n .then(function(res) {\n const status = parseFirstBuildingResult(res.data.results);\n if (status.connector) {\n // has a building connector, open progress indicator\n const d = status.connector.split(/#/);\n d[0] = d[0].replace(/\\/instance$/, '#');\n showProgress(d[0], d[1]);\n }\n })\n .finally(function() {\n $scope.setLoader(false);\n });\n } else {\n $scope.setLoader(false);\n }\n });\n }).catch(function(e) {\n $scope.setLoader(false);\n toastr.error(getError(e), $translate.instant('externalsync.could.not.get.connectors.error'));\n });\n\n $scope.existing = {};\n };\n\n $scope.getOptions = function(connector) {\n return $scope.definitions[connector.key];\n };\n\n $scope.isEmpty = function(value) {\n return angular.isObject(value) && Object.keys(value).length === 0;\n };\n\n $scope.toPrettyJson = function(value) {\n return angular.toJson(value, 2);\n };\n\n $scope.$watch(function() {\n return $repositories.getActiveRepository();\n }, $scope.getConnectors);\n\n $scope.$watch(function() {\n return $repositories.getActiveLocation();\n }, $scope.getConnectors);\n\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function resetProgress(repair) {\n $scope.beingBuiltConnector = {\n percentDone: 0,\n status: {\n processedEntities: 0,\n estimatedEntities: 0,\n indexedEntities: 0,\n entitiesPerSecond: 0,\n },\n actionName: repair ? $translate.instant('externalsync.repairing') : $translate.instant('externalsync.creating'),\n waitOnRepairStartOnce: !!repair,\n eta: '-',\n inline: false,\n iri: null,\n };\n }\n\n function openProgressModal(prefix, name, repair) {\n resetProgress(repair);\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: false,\n doneCallback: function() {\n $scope.beingBuiltConnector.modalInstance.dismiss('cancel');\n },\n });\n\n $scope.beingBuiltConnector.modalInstance = $uibModal.open({\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n size: 'lg',\n backdrop: 'static',\n scope: $scope,\n });\n\n return $scope.beingBuiltConnector.modalInstance;\n }\n\n function showProgress(prefix, name) {\n resetProgress();\n\n $.extend($scope.beingBuiltConnector, {\n iri: buildNamePrefix(prefix) + name,\n name: name,\n inline: true,\n doneCallback: function() {\n $scope.beingBuiltConnector.inline = false;\n },\n });\n }\n\n function executeCreate(connector, obj, errorCallback) {\n const modal = openProgressModal(connector.value, obj.name, false);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: obj.query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(connector.value)).then(function(res) {\n $scope.existing[connector.key] = res.data;\n });\n });\n toastr.success($translate.instant('created.connector', {name: obj.name}));\n }, function(err) {\n toastr.error(getError(err));\n errorCallback();\n }).finally(function() {\n modal.dismiss('cancel');\n });\n }\n\n $scope.copyConnector = function(connector, values) {\n let newValues;\n if (!angular.isUndefined(values)) {\n newValues = _.cloneDeep(values);\n newValues.name = newValues.name + '-copy';\n }\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function() {\n return connector;\n },\n values: function() {\n return angular.isUndefined(newValues) ? {name: '', values: {}} : newValues;\n },\n options: function() {\n return $scope.getOptions(connector);\n },\n },\n });\n\n modal.result.then(function(obj) {\n executeCreate(connector, obj, function() {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.newConnector = function(connector, values) {\n const modal = $uibModal.open({\n templateUrl: 'pages/createConnector.html',\n controller: 'CreateConnectorCtrl',\n size: 'lg',\n backdrop: 'static',\n resolve: {\n connector: function() {\n return connector;\n },\n values: function() {\n return angular.isUndefined(values) ? {name: '', values: {}} : values;\n },\n options: function() {\n return $scope.getOptions(connector);\n },\n },\n });\n\n modal.result.then(function(obj) {\n executeCreate(connector, obj, function() {\n obj.skipConversion = true;\n $scope.newConnector(connector, obj);\n });\n });\n };\n\n $scope.repair = function(inst, type) {\n ModalService.openSimpleModal({\n title: $translate.instant('externalsync.confirm.repair'),\n message: $translate.instant('externalsync.repair.warning.msg'),\n warning: true,\n }).result\n .then(function() {\n const modal = openProgressModal(type.value, inst.name, true);\n\n const query = repairConnectorQuery(inst.name, type.value);\n\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function(res) {\n $scope.existing[type.key] = res.data;\n });\n });\n toastr.success($translate.instant('externalsync.repair.success.msg', {name: inst.name}));\n }, function(err) {\n toastr.error(getError(err));\n }).finally(function() {\n modal.dismiss('cancel');\n });\n });\n };\n\n $scope.delete = function(inst, type) {\n const isExternal = type.key.indexOf(\"Elastic\") >= 0 || type.key.indexOf(\"Solr\") >= 0;\n\n $uibModal.open({\n templateUrl: 'js/angular/externalsync/templates/deleteConnector.html',\n controller: 'DeleteConnectorCtrl',\n resolve: {\n popoverMsg: function() {\n return isExternal ? $translate.instant('delete.connector.conditional', {type: type.key}) : '';\n },\n },\n }).result\n .then(function(force) {\n $scope.setLoader(true, $translate.instant('externalsync.delete.progress.msg', {name: inst.name}),\n $translate.instant('externalsync.extra.message.warning'));\n\n const query = deleteConnectorQuery(inst.name, type.value, force);\n RDF4JRepositoriesRestService.addStatements($repositories.getActiveRepository(), jsonToFormData({update: query}))\n .then(function() {\n ConnectorsRestService.getConnectors().then(function() {\n ConnectorsRestService.hasConnector(encodeURIComponent(type.value)).then(function(res) {\n $scope.existing[type.key] = res.data;\n });\n });\n if (force) {\n toastr.success($translate.instant('externalsync.delete.force.success.msg', {name: inst.name}));\n if (isExternal) {\n toastr.warning($translate.instant('externalsync.delete.remote.warning', {key: type.key}));\n }\n } else {\n toastr.success($translate.instant('externalsync.delete.success.msg', {name: inst.name}));\n }\n }, function(err) {\n toastr.error(getError(err));\n }).finally(function() {\n $scope.setLoader(false);\n });\n });\n };\n\n $scope.viewQuery = function(connector, inst) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function() {\n const options = $scope.getOptions(connector);\n return createConnectorQuery(inst.name, connector.value,\n mapCreateValuesToUiValues(inst.values, options), options);\n },\n },\n });\n };\n}\n\nDeleteConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'popoverMsg'];\nfunction DeleteConnectorCtrl($scope, $uibModalInstance, popoverMsg) {\n $scope.force = false;\n $scope.popoverMsg = popoverMsg;\n\n $scope.ok = function() {\n $uibModalInstance.close($scope.force);\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss();\n };\n}\n\nExtendNewConnectorCtrl.$inject = ['$scope', '$uibModalInstance', 'connector', '$uibModal', 'toastr'];\nfunction ExtendNewConnectorCtrl($scope, $uibModalInstance, connector, $uibModal, toastr) {\n $scope.connector = connector;\n\n $scope.addField = function(index, optionName) {\n const newField = _.cloneDeep($scope.defaultValues[optionName][0]);\n $scope.values[optionName].splice(index + 1, 0, newField);\n };\n\n $scope.addOption = function(index, array) {\n array.splice(index + 1, 0, '');\n };\n\n $scope.deleteOption = function(index, array) {\n array.splice(index, 1);\n };\n\n $scope.addMapOption = function(index, array) {\n array.splice(index + 1, 0, {key: '', value: ''});\n };\n\n $scope.deleteMapOption = function(index, array) {\n array.splice(index, 1);\n };\n\n function toQuery() {\n return createConnectorQuery($scope.name, connector.value, $scope.values, $scope.options,\n function(label, error) {\n toastr.error(error, label);\n });\n }\n\n $scope.ok = function() {\n if ($scope.form.$valid) {\n const query = toQuery();\n\n if (query) {\n $uibModalInstance.close({name: $scope.name, values: $scope.values, options: $scope.options, query: query});\n }\n }\n };\n\n $scope.viewQuery = function() {\n const query = toQuery();\n\n if (query) {\n $uibModal.open({\n templateUrl: 'pages/viewQuery.html',\n controller: 'ViewQueryCtrl',\n resolve: {\n query: function() {\n return query;\n },\n },\n });\n }\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nCreateConnectorCtrl.$inject = ['$scope', '$controller', '$http', '$uibModalInstance', 'connector', '$uibModal', 'values', 'options'];\n\nfunction CreateConnectorCtrl($scope, $controller, $http, $uibModalInstance, connector, $uibModal, values, options) {\n angular.extend(this, $controller('ExtendNewConnectorCtrl', {\n $scope: $scope,\n $uibModalInstance: $uibModalInstance,\n connector: connector,\n $uibModal: $uibModal,\n }));\n $scope.values = values.values;\n $scope.options = options;\n $scope.name = values.name;\n if (!values.skipConversion) {\n $scope.values = mapCreateValuesToUiValues($scope.values, $scope.options);\n }\n $scope.defaultValues = _.cloneDeep($scope.values);\n}\n\n// Note that this is a fancy controller: it's used both for a modal and for a directive.\n// This means you can't rely on custom injection through resolve in the modal and the scope\n// must be shared with the main connectors controller.\nCreateProgressCtrl.$inject = ['$scope', '$interval', '$http', '$repositories', '$translate'];\n\nfunction CreateProgressCtrl($scope, $interval, $http, $repositories, $translate) {\n function evaluateSparqlQuery(query) {\n return _evaluateSparqlQuery($http, $repositories.getActiveRepository(), query);\n }\n\n function initProgress() {\n const query = createStatusQueryForIri($scope.beingBuiltConnector.iri);\n\n // reset iri value so that watch will fire again when we do something with the same connector\n $scope.beingBuiltConnector.iri = null;\n\n $scope.progressInterval = $interval(function() {\n function getFirstStatusFromResult(results) {\n if (results.bindings) {\n if (results.bindings.length > 0) {\n try {\n return JSON.parse(results.bindings[0].status.value);\n } catch (e) {\n logger.error(e);\n }\n }\n }\n\n return {};\n }\n\n evaluateSparqlQuery(query)\n .then(function(res) {\n const status = getFirstStatusFromResult(res.data.results);\n if (status.status === 'BUILDING') {\n $scope.beingBuiltConnector.status = status;\n $scope.beingBuiltConnector.percentDone = (100 * status.processedEntities / status.estimatedEntities).toFixed(0);\n $scope.beingBuiltConnector.eta = $scope.getHumanReadableSeconds(status.etaSeconds);\n $scope.beingBuiltConnector.actionName = status.repair ? $translate.instant('externalsync.repairing') : $translate.instant('externalsync.creating');\n $scope.beingBuiltConnector.waitOnRepairStartOnce = false;\n } else if (status.status === 'BUILT' && !$scope.beingBuiltConnector.waitOnRepairStartOnce) {\n // done\n $interval.cancel($scope.progressInterval);\n if ($scope.beingBuiltConnector.doneCallback) {\n $scope.beingBuiltConnector.doneCallback();\n }\n }\n });\n }, 1000);\n\n $scope.$on('$destroy', function() {\n $interval.cancel($scope.progressInterval);\n });\n }\n\n $scope.beingBuiltConnector = $scope.beingBuiltConnector || {};\n\n // for modal instance we get the iri before hand and can start progress now\n if (!$scope.beingBuiltConnector.inline && $scope.beingBuiltConnector.iri) {\n initProgress();\n }\n\n // for inline progress we need to watch for the iri value\n $scope.$watch('beingBuiltConnector.iri', function(value) {\n if ($scope.beingBuiltConnector.inline && value) {\n initProgress();\n }\n });\n}\n\nfunction ceil() {\n return function(input) {\n return Math.ceil(input);\n };\n}\n","angular\n .module('graphdb.framework.rest.connectors.service', [])\n .factory('ConnectorsRestService', ConnectorsRestService);\n\nConnectorsRestService.$inject = ['$http'];\n\nconst CONNECTORS_ENDPOINT = 'rest/connectors';\n\nfunction ConnectorsRestService($http) {\n\n return {\n getConnectors,\n initConnector,\n hasConnector,\n checkConnector\n };\n\n /**\n * Fetches all connectors for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the values persisted in local storage will be used {@see authentication.interceptor.js}.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {*} The similarity indexes for the specified repository.\n */\n function getConnectors(repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(CONNECTORS_ENDPOINT, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n /**\n * Fetches all connectors of a specific type defined by the prefix for the repository with id <code>repositoryId</code>\n * and location <code>repositoryLocation</code>. If the repository ID and repository location are not provided, the currently selected repository will be used.\n * @param {string} prefix\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<ConnectorListModel>}\n */\n function hasConnector(prefix, repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`);\n }\n\n function checkConnector(data) {\n return $http.post(`${CONNECTORS_ENDPOINT}/check`, data, {\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n}\n"],"names":["logger","LoggerProvider","SENSITIVE_FIELD_MASK","jsonToFormData","data","str","Object","keys","forEach","key","push","encodeURIComponent","join","toArrayMap","map","_","value","fromArrayMap","arrayMap","$translate","reduce","acc","Error","instant","hasOwnProperty","mapCreateValuesToUiValues","values","options","i","length","option","__type","__name","j","__childOptions","child","k","valueK","angular","isDefined","__defaultValue","optionEl","isUndefined","String","toJson","_evaluateSparqlQuery","http","repository","query","post","headers","buildNamePrefix","prefix","substring","createConnectorQuery","name","fields","reportError","fcopy","sortObject","obj","newObject","each","childOption","cloneDeep","fromJson","__sensitive","e","__label","message","removeEmptyValues","finalString","replaceAll","replace","Array","isArray","filter","item","trim","undefined","ConnectorsCtrl","$scope","$http","$repositories","$uibModal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService","resetProgress","repair","beingBuiltConnector","percentDone","status","processedEntities","estimatedEntities","indexedEntities","entitiesPerSecond","actionName","waitOnRepairStartOnce","eta","inline","iri","openProgressModal","$","extend","doneCallback","modalInstance","dismiss","open","templateUrl","controller","size","backdrop","scope","executeCreate","connector","errorCallback","modal","addStatements","getActiveRepository","update","then","getConnectors","hasConnector","res","existing","success","err","error","getError","finally","loader","controllers","definitions","getLoaderMessage","timeSeconds","Date","now","loaderStartTime","timeHuman","getHumanReadableSeconds","progressMessage","extraMessage","setLoader","isRunning","initConnector","isLicenseValid","canWriteActiveRepo","connectors","all","connectorIris","createStatusQueryForAny","evaluateSparqlQuery","results","bindings","statusObject","JSON","parse","parseFirstBuildingResult","d","split","catch","getOptions","isEmpty","isObject","toPrettyJson","$watch","getActiveLocation","copyConnector","newValues","resolve","result","skipConversion","newConnector","inst","type","openSimpleModal","title","warning","delete","isExternal","indexOf","popoverMsg","force","namePrefix","deleteConnectorQuery","viewQuery","DeleteConnectorCtrl","$uibModalInstance","ok","close","cancel","ExtendNewConnectorCtrl","toQuery","label","addField","index","optionName","newField","defaultValues","splice","addOption","array","deleteOption","addMapOption","deleteMapOption","form","$valid","CreateConnectorCtrl","$controller","this","CreateProgressCtrl","$interval","initProgress","statusIri","createStatusQueryForIri","progressInterval","getFirstStatusFromResult","toFixed","etaSeconds","$on","module","input","Math","ceil","$inject","factory","CONNECTORS_ENDPOINT","repositoryId","repositoryLocation","get","checkConnector"],"sourceRoot":""}