graphdb-workbench 2.0.0-TR8 → 2.0.0-TR9

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 (155) hide show
  1. package/README.md +6 -1
  2. package/dist/114.282a327015f8ae87918b.bundle.js +1 -1
  3. package/dist/114.282a327015f8ae87918b.bundle.js.map +1 -1
  4. package/dist/{12.60db051e76264d3f95b2.bundle.js → 12.5d4da897bdd91e8808fa.bundle.js} +2 -2
  5. package/dist/12.5d4da897bdd91e8808fa.bundle.js.map +1 -0
  6. package/dist/13.f62fa8acc6e68826e07a.bundle.js +4 -0
  7. package/dist/13.f62fa8acc6e68826e07a.bundle.js.map +1 -0
  8. package/dist/{14.7e9059b5c9c57d952e47.bundle.js → 14.349458c1675f763995a5.bundle.js} +2 -2
  9. package/dist/{14.7e9059b5c9c57d952e47.bundle.js.map → 14.349458c1675f763995a5.bundle.js.map} +1 -1
  10. package/dist/{15.02ad5872995df6d6692a.bundle.js → 15.ebce70c05fd90026747b.bundle.js} +2 -2
  11. package/dist/{15.02ad5872995df6d6692a.bundle.js.map → 15.ebce70c05fd90026747b.bundle.js.map} +1 -1
  12. package/dist/{17.8bfbe7d08efa149bdb00.bundle.js → 17.f01afdf3b3892d73a3fe.bundle.js} +2 -2
  13. package/dist/{17.8bfbe7d08efa149bdb00.bundle.js.map → 17.f01afdf3b3892d73a3fe.bundle.js.map} +1 -1
  14. package/dist/{18.5514f95535bdd2a71d6e.bundle.js → 18.10f65755b64a6534289e.bundle.js} +2 -2
  15. package/dist/{18.5514f95535bdd2a71d6e.bundle.js.map → 18.10f65755b64a6534289e.bundle.js.map} +1 -1
  16. package/dist/{21.e75213686a349ae7df89.bundle.js → 21.b6bf0d54a846411501c7.bundle.js} +2 -2
  17. package/dist/{21.e75213686a349ae7df89.bundle.js.map → 21.b6bf0d54a846411501c7.bundle.js.map} +1 -1
  18. package/dist/22.e8167eba683605211409.bundle.js +2 -0
  19. package/dist/22.e8167eba683605211409.bundle.js.map +1 -0
  20. package/dist/{23.32f2701680565c5d107b.bundle.js → 23.e3ca5b7bb2cee4f9467f.bundle.js} +3 -3
  21. package/dist/{23.32f2701680565c5d107b.bundle.js.map → 23.e3ca5b7bb2cee4f9467f.bundle.js.map} +1 -1
  22. package/dist/{24.8dd957168a8be963b393.bundle.js → 24.d5ea0f435b896dc12709.bundle.js} +2 -2
  23. package/dist/{24.8dd957168a8be963b393.bundle.js.map → 24.d5ea0f435b896dc12709.bundle.js.map} +1 -1
  24. package/dist/{25.cbe8e59c80330ff6e706.bundle.js → 25.5b3feb79a7be0ca1f4ad.bundle.js} +2 -2
  25. package/dist/{25.cbe8e59c80330ff6e706.bundle.js.map → 25.5b3feb79a7be0ca1f4ad.bundle.js.map} +1 -1
  26. package/dist/26.c4983d9f3009f41beb11.bundle.js +2 -0
  27. package/dist/26.c4983d9f3009f41beb11.bundle.js.map +1 -0
  28. package/dist/{26.67154910989ca1f563ec.bundle.js → 27.04085d1d15db39ca4a36.bundle.js} +2 -2
  29. package/dist/{26.67154910989ca1f563ec.bundle.js.map → 27.04085d1d15db39ca4a36.bundle.js.map} +1 -1
  30. package/dist/{28.b1c15ce7633c501836c5.bundle.js → 28.57b84065ebe40bb45f72.bundle.js} +2 -2
  31. package/dist/{28.b1c15ce7633c501836c5.bundle.js.map → 28.57b84065ebe40bb45f72.bundle.js.map} +1 -1
  32. package/dist/{29.66259b8a21bbb5431a06.bundle.js → 29.959ae6b366d15d0ddea9.bundle.js} +2 -2
  33. package/dist/{29.66259b8a21bbb5431a06.bundle.js.map → 29.959ae6b366d15d0ddea9.bundle.js.map} +1 -1
  34. package/dist/{3.9eb2c7cced9d8b971c99.bundle.js → 3.26d967229917c7c5cdfb.bundle.js} +2 -2
  35. package/dist/{3.9eb2c7cced9d8b971c99.bundle.js.map → 3.26d967229917c7c5cdfb.bundle.js.map} +1 -1
  36. package/dist/{31.d810abed46d7c73ade7f.bundle.js → 31.c808da656c9ee6b7e84e.bundle.js} +2 -2
  37. package/dist/{31.d810abed46d7c73ade7f.bundle.js.map → 31.c808da656c9ee6b7e84e.bundle.js.map} +1 -1
  38. package/dist/{32.4f4c8e24d97a9d315335.bundle.js → 32.92b02260015995b4f777.bundle.js} +2 -2
  39. package/dist/{32.4f4c8e24d97a9d315335.bundle.js.map → 32.92b02260015995b4f777.bundle.js.map} +1 -1
  40. package/dist/{33.c670eeb3a325251e141f.bundle.js → 33.479162c943ca9a1982aa.bundle.js} +2 -2
  41. package/dist/{33.c670eeb3a325251e141f.bundle.js.map → 33.479162c943ca9a1982aa.bundle.js.map} +1 -1
  42. package/dist/{35.b9183a8ffba2bbd8daa1.bundle.js → 35.9c81c96cc1621f9468aa.bundle.js} +2 -2
  43. package/dist/{35.b9183a8ffba2bbd8daa1.bundle.js.map → 35.9c81c96cc1621f9468aa.bundle.js.map} +1 -1
  44. package/dist/{36.d444f7ad7724d126da1c.bundle.js → 36.cee947247d32cdcec00e.bundle.js} +2 -2
  45. package/dist/{36.d444f7ad7724d126da1c.bundle.js.map → 36.cee947247d32cdcec00e.bundle.js.map} +1 -1
  46. package/dist/{37.e82ed70c9f1ccac1fa36.bundle.js → 37.42e443af5752a63a28fe.bundle.js} +2 -2
  47. package/dist/{37.e82ed70c9f1ccac1fa36.bundle.js.map → 37.42e443af5752a63a28fe.bundle.js.map} +1 -1
  48. package/dist/{38.93c5a81548a3294efd9d.bundle.js → 38.5fff5c171cdd2563aad1.bundle.js} +2 -2
  49. package/dist/{38.93c5a81548a3294efd9d.bundle.js.map → 38.5fff5c171cdd2563aad1.bundle.js.map} +1 -1
  50. package/dist/{39.30dddbc6461137994eb4.bundle.js → 39.91c49550b6e2d11104fa.bundle.js} +2 -2
  51. package/dist/{39.30dddbc6461137994eb4.bundle.js.map → 39.91c49550b6e2d11104fa.bundle.js.map} +1 -1
  52. package/dist/4.786e6f1de67e5c6289a3.bundle.js +2 -0
  53. package/dist/4.786e6f1de67e5c6289a3.bundle.js.map +1 -0
  54. package/dist/{40.ae6db480b8323937451c.bundle.js → 40.a7e0220eb0c8a125abde.bundle.js} +2 -2
  55. package/dist/{40.ae6db480b8323937451c.bundle.js.map → 40.a7e0220eb0c8a125abde.bundle.js.map} +1 -1
  56. package/dist/41.1258b9502ba9383894d7.bundle.js +2 -0
  57. package/dist/{41.ba8cb2fb7f46ccb2ab28.bundle.js.map → 41.1258b9502ba9383894d7.bundle.js.map} +1 -1
  58. package/dist/{43.8d096939ee87946076e0.bundle.js → 43.86f9220f4f79feec5b27.bundle.js} +2 -2
  59. package/dist/{43.8d096939ee87946076e0.bundle.js.map → 43.86f9220f4f79feec5b27.bundle.js.map} +1 -1
  60. package/dist/{47.92a64d48c14c1ae82934.bundle.js → 47.fca0edd51becf34c06b7.bundle.js} +2 -2
  61. package/dist/{47.92a64d48c14c1ae82934.bundle.js.map → 47.fca0edd51becf34c06b7.bundle.js.map} +1 -1
  62. package/dist/{48.4b57a948edab2d3b9c55.bundle.js → 48.e495edf3c48e1b2fc052.bundle.js} +2 -2
  63. package/dist/{48.4b57a948edab2d3b9c55.bundle.js.map → 48.e495edf3c48e1b2fc052.bundle.js.map} +1 -1
  64. package/dist/{53.4b8ed1b79c1c20cdadd4.bundle.js → 53.c29678970b0cb8aa4b47.bundle.js} +2 -2
  65. package/dist/{53.4b8ed1b79c1c20cdadd4.bundle.js.map → 53.c29678970b0cb8aa4b47.bundle.js.map} +1 -1
  66. package/dist/{55.751acc0e54255fa3ace7.bundle.js → 55.427172af3ba7612f747a.bundle.js} +2 -2
  67. package/dist/{55.751acc0e54255fa3ace7.bundle.js.map → 55.427172af3ba7612f747a.bundle.js.map} +1 -1
  68. package/dist/{57.677c1eebf6a003639fff.bundle.js → 57.41b09f5fa3ee623aab83.bundle.js} +2 -2
  69. package/dist/{57.677c1eebf6a003639fff.bundle.js.map → 57.41b09f5fa3ee623aab83.bundle.js.map} +1 -1
  70. package/dist/{58.2c460e480eefb1a02aea.bundle.js → 58.ce5a29dded68f58c53b4.bundle.js} +2 -2
  71. package/dist/{58.2c460e480eefb1a02aea.bundle.js.map → 58.ce5a29dded68f58c53b4.bundle.js.map} +1 -1
  72. package/dist/{59.b8e9155530acba27a6fa.bundle.js → 59.10efdeff3a8ef9e5733d.bundle.js} +2 -2
  73. package/dist/{59.b8e9155530acba27a6fa.bundle.js.map → 59.10efdeff3a8ef9e5733d.bundle.js.map} +1 -1
  74. package/dist/{60.27e731a670680751538c.bundle.js → 60.97fb695857f6241ae612.bundle.js} +2 -2
  75. package/dist/{60.27e731a670680751538c.bundle.js.map → 60.97fb695857f6241ae612.bundle.js.map} +1 -1
  76. package/dist/{61.fce8a2436742c2e20032.bundle.js → 61.5d71ec3fe0cda230482b.bundle.js} +2 -2
  77. package/dist/{61.fce8a2436742c2e20032.bundle.js.map → 61.5d71ec3fe0cda230482b.bundle.js.map} +1 -1
  78. package/dist/{62.9e101a1894ee0f9a48be.bundle.js → 62.d53d104f74f9fbdacb35.bundle.js} +2 -2
  79. package/dist/{62.9e101a1894ee0f9a48be.bundle.js.map → 62.d53d104f74f9fbdacb35.bundle.js.map} +1 -1
  80. package/dist/{63.3ffdfd6f35fe62ea729c.bundle.js → 63.46514dd9cf756bd0e831.bundle.js} +2 -2
  81. package/dist/{63.3ffdfd6f35fe62ea729c.bundle.js.map → 63.46514dd9cf756bd0e831.bundle.js.map} +1 -1
  82. package/dist/{65.96a1f2f3c83a29e2c6c3.bundle.js → 65.401f44aaddb8aec6be1e.bundle.js} +2 -2
  83. package/dist/{65.96a1f2f3c83a29e2c6c3.bundle.js.map → 65.401f44aaddb8aec6be1e.bundle.js.map} +1 -1
  84. package/dist/{66.cf37216fb6f8e53cef2b.bundle.js → 66.7a1e4093247d23b65387.bundle.js} +2 -2
  85. package/dist/{66.cf37216fb6f8e53cef2b.bundle.js.map → 66.7a1e4093247d23b65387.bundle.js.map} +1 -1
  86. package/dist/{69.60ff11762016829be80d.bundle.js → 69.1944a1afebe9115c9262.bundle.js} +2 -2
  87. package/dist/{69.60ff11762016829be80d.bundle.js.map → 69.1944a1afebe9115c9262.bundle.js.map} +1 -1
  88. package/dist/{70.f86421bf02a9bfda5b95.bundle.js → 70.84500509fe2b0d19ab93.bundle.js} +2 -2
  89. package/dist/{70.f86421bf02a9bfda5b95.bundle.js.map → 70.84500509fe2b0d19ab93.bundle.js.map} +1 -1
  90. package/dist/{76.fa9e5d02f7e1367b9b29.bundle.js → 76.2fa18e115678c4e24682.bundle.js} +2 -2
  91. package/dist/{76.fa9e5d02f7e1367b9b29.bundle.js.map → 76.2fa18e115678c4e24682.bundle.js.map} +1 -1
  92. package/dist/{8.66013fc0c58811b51903.bundle.js → 8.7209929899c18f8a4580.bundle.js} +2 -2
  93. package/dist/{8.66013fc0c58811b51903.bundle.js.map → 8.7209929899c18f8a4580.bundle.js.map} +1 -1
  94. package/dist/{80.37504cf0c1e5ad897478.bundle.js → 80.83e56da7d7a69fc34eed.bundle.js} +2 -2
  95. package/dist/{80.37504cf0c1e5ad897478.bundle.js.map → 80.83e56da7d7a69fc34eed.bundle.js.map} +1 -1
  96. package/dist/{82.9b4d4dc326055aa47e04.bundle.js → 82.74d50036c210cb10b7f5.bundle.js} +2 -2
  97. package/dist/{82.9b4d4dc326055aa47e04.bundle.js.map → 82.74d50036c210cb10b7f5.bundle.js.map} +1 -1
  98. package/dist/{84.fab513b88806deb0981a.bundle.js → 84.7f42dd9d7dc01baaf465.bundle.js} +2 -2
  99. package/dist/{84.fab513b88806deb0981a.bundle.js.map → 84.7f42dd9d7dc01baaf465.bundle.js.map} +1 -1
  100. package/dist/{86.b319a8b9fcabecd7a6c7.bundle.js → 86.581cbc54b6c6b6ea9f19.bundle.js} +2 -2
  101. package/dist/{86.b319a8b9fcabecd7a6c7.bundle.js.map → 86.581cbc54b6c6b6ea9f19.bundle.js.map} +1 -1
  102. package/dist/{87.765567c0cbe89cbdb03c.bundle.js → 87.3606797303ead8dc2879.bundle.js} +2 -2
  103. package/dist/{87.765567c0cbe89cbdb03c.bundle.js.map → 87.3606797303ead8dc2879.bundle.js.map} +1 -1
  104. package/dist/{88.50c46652774325bffad3.bundle.js → 88.f5b8f83e57c9bea3c137.bundle.js} +2 -2
  105. package/dist/{88.50c46652774325bffad3.bundle.js.map → 88.f5b8f83e57c9bea3c137.bundle.js.map} +1 -1
  106. package/dist/{89.91c58e1902b0f444b068.bundle.js → 89.f9b4c4ddff2c0b5b70f7.bundle.js} +2 -2
  107. package/dist/{89.91c58e1902b0f444b068.bundle.js.map → 89.f9b4c4ddff2c0b5b70f7.bundle.js.map} +1 -1
  108. package/dist/{9.16a945b967e9a52bf535.bundle.js → 9.6a95a5c1eec963050422.bundle.js} +2 -2
  109. package/dist/{9.16a945b967e9a52bf535.bundle.js.map → 9.6a95a5c1eec963050422.bundle.js.map} +1 -1
  110. package/dist/{90.e12e77898d6341e59d8f.bundle.js → 90.4d42ba583fbc1d63d3d2.bundle.js} +2 -2
  111. package/dist/{90.e12e77898d6341e59d8f.bundle.js.map → 90.4d42ba583fbc1d63d3d2.bundle.js.map} +1 -1
  112. package/dist/95.1f83b03f48326a6cec45.bundle.js +2 -0
  113. package/dist/{95.decfcd3477dee353025b.bundle.js.map → 95.1f83b03f48326a6cec45.bundle.js.map} +1 -1
  114. package/dist/{bundle.e787556c9b592367c35c.bundle.js → bundle.1a982e7b3e2d9d06a802.bundle.js} +5 -5
  115. package/dist/{bundle.e787556c9b592367c35c.bundle.js.map → bundle.1a982e7b3e2d9d06a802.bundle.js.map} +1 -1
  116. package/dist/index.html +3 -3
  117. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  118. package/dist/pages/autocomplete.html +1 -1
  119. package/dist/pages/choose-repository-type.html +1 -1
  120. package/dist/pages/clusterInfo.html +1 -1
  121. package/dist/pages/create-index.html +4 -4
  122. package/dist/pages/dependencies.html +1 -1
  123. package/dist/pages/domainRangeInfo.html +2 -2
  124. package/dist/pages/edit.html +1 -1
  125. package/dist/pages/explore.html +1 -1
  126. package/dist/pages/export.html +1 -1
  127. package/dist/pages/find.html +1 -1
  128. package/dist/pages/graph-config/saveGraphConfig.html +11 -11
  129. package/dist/pages/graphs-visualizations.html +14 -8
  130. package/dist/pages/import.html +1 -1
  131. package/dist/pages/jdbc-create.html +5 -5
  132. package/dist/pages/monitor/queries.html +1 -1
  133. package/dist/pages/monitor/resources.html +2 -2
  134. package/dist/pages/namespaces.html +2 -2
  135. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  136. package/dist/pages/rdfrank.html +2 -2
  137. package/dist/pages/repositories.html +2 -2
  138. package/dist/pages/repository.html +2 -2
  139. package/dist/pages/similarity-indexes.html +1 -1
  140. package/dist/pages/sparql-template-create.html +5 -5
  141. package/dist/pages/sparql.html +3 -3
  142. package/dist/pages/webapi.html +2 -2
  143. package/dist/res/swagger/index.html +25 -25
  144. package/package.json +1 -1
  145. package/dist/12.60db051e76264d3f95b2.bundle.js.map +0 -1
  146. package/dist/13.1419a81a33174950a34c.bundle.js +0 -4
  147. package/dist/13.1419a81a33174950a34c.bundle.js.map +0 -1
  148. package/dist/22.a3b52347055f1adac9ce.bundle.js +0 -2
  149. package/dist/22.a3b52347055f1adac9ce.bundle.js.map +0 -1
  150. package/dist/27.61bd08d0e926fe471a91.bundle.js +0 -2
  151. package/dist/27.61bd08d0e926fe471a91.bundle.js.map +0 -1
  152. package/dist/4.6a8bdb4c9048dd910bfd.bundle.js +0 -2
  153. package/dist/4.6a8bdb4c9048dd910bfd.bundle.js.map +0 -1
  154. package/dist/41.ba8cb2fb7f46ccb2ab28.bundle.js +0 -2
  155. package/dist/95.decfcd3477dee353025b.bundle.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///./src/js/angular/namespaces/app.js","webpack:///./src/js/angular/core/directives/paginations.js","webpack:///./src/js/angular/namespaces/controllers.js","webpack:///./src/js/angular/namespaces/directives.js"],"names":["angular","module","run","editableOptions","theme","directive","template","namespaces","pnPrefixRe","pnCharsBase","pnChars","pnCharsU","RegExp","controller","$scope","$http","$repositories","toastr","$modal","ModalService","RepositoriesRestService","RDF4JRepositoriesRestService","deleteNamespace","namespace","prefix","deleteNamespacePrefix","getActiveRepository","success","length","shift","selectedAll","getNamespaces","searchNamespaces","haveSelected","loader","displayedNamespaces","undefined","error","data","msg","getError","validatePrefixAndNamespace","match","validatePrefix","isUndefined","pageSizeOptions","page","pageSize","results","bindings","map","e","value","sort","a","b","prefixA","toUpperCase","prefixB","matchedElements","changePagination","isDefined","slice","changePageSize","size","$","removeClass","$watch","onNamespaceSearch","deselectAll","filterResults","forEach","item","indexOf","push","saveNamespace","updateNamespacePrefix","editPrefix","oldPrefix","newPrefix","getPrefix","from","to","confirmReplace","okCallback","cancelCallback","openSimpleModal","title","message","warning","result","then","editPrefixAndNamespace","namespaceObject","prefixExist","elem","addNamespace","i","removeNamespace","checkAll","selected","deleteSelected","modalInstanceOpened","checkIfSelectedNamespace","$modalInstance","ok","close","cancel","dismiss","$timeout","scope","$last","$parent"],"mappings":"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","file":"24.8dd957168a8be963b393.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/core/services/repositories.service';\nimport 'angular/namespaces/controllers';\nimport 'angular/namespaces/directives';\nimport 'angular/core/directives/paginations';\nimport 'angular-xeditable/dist/js/xeditable.min';\n\nconst modules = [\n 'LocalStorageModule',\n 'xeditable',\n 'ngAnimate',\n 'ngRoute',\n 'toastr',\n 'graphdb.framework.namespaces.controllers',\n 'graphdb.framework.namespaces.directives',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.core.directives.paginations'\n];\n\nconst namespacesApp = angular.module('graphdb.framework.namespaces', modules);\n\nnamespacesApp.run(['editableOptions', function (editableOptions) {\n editableOptions.theme = 'bs3';\n}]);\n","angular.module('graphdb.framework.core.directives.paginations', [])\n .directive('paginations', function () {\n return {\n template: '<pagination class=\"nav navbar-right\" total-items=\"matchedElements.length\" items-per-page=\"pageSize\" ng-model=\"page\" ng-change=\"changePagination()\" direction-links=\"false\" boundary-links=\"true\" max-size=\"5\" rotate=\"true\"></pagination>',\n };\n });\n","import 'angular/core/services';\nimport 'angular/core/services/jwt-auth.service';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/rdf4j.repositories.rest.service';\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.services.jwtauth',\n 'graphdb.framework.rest.repositories.service',\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'toastr'\n];\n\nconst namespaces = angular.module('graphdb.framework.namespaces.controllers', modules);\n\n// A regular expression that validates a prefix according to the SPARQL 1.1 specification.\n// XXX: Technically this should include Unicode chars > 0xFFFF but those aren't fully supported in JavaScript\nconst pnPrefixRe = function () {\n const pnCharsBase = '[A-Z]|[a-z]|[\\u00C0-\\u00D6]|[\\u00D8-\\u00F6]|[\\u00F8-\\u02FF]|[\\u0370-\\u037D]'\n + '|[\\u037F-\\u1FFF]|[\\u200C-\\u200D]|[\\u2070-\\u218F]|[\\u2C00-\\u2FEF]|[\\u3001-\\uD7FF]'\n + '|[\\uF900-\\uFDCF]|[\\uFDF0-\\uFFFD]';\n const pnCharsU = pnCharsBase + '|_';\n const pnChars = pnCharsU + '|-|[0-9]|\\u00B7|[\\u0300-\\u036F]|[\\u203F-\\u2040]';\n\n return new RegExp('^(?:' + pnCharsBase + ')(?:(?:' + pnChars + '|\\\\.)*(?:' + pnChars + '))?$');\n}();\n\nfunction validatePrefix(prefix) {\n return prefix === '' || prefix.match(pnPrefixRe);\n}\n\nnamespaces.controller('NamespacesCtrl', ['$scope', '$http', '$repositories', 'toastr', '$modal', 'ModalService', 'RepositoriesRestService', 'RDF4JRepositoriesRestService',\n function ($scope, $http, $repositories, toastr, $modal, ModalService, RepositoriesRestService, RDF4JRepositoriesRestService) {\n $scope.namespaces = {};\n $scope.namespace = {};\n $scope.loader = false;\n $scope.haveSelected = false;\n $scope.pageSizeOptions = [10, 20, 50, 100];\n $scope.page = 1;\n $scope.pageSize = $scope.pageSizeOptions[0];\n $scope.displayedNamespaces = [];\n\n $scope.getNamespaces = function () {\n if (!$repositories.getActiveRepository()) {\n return;\n }\n\n $scope.loader = true;\n $scope.namespaces = {};\n RDF4JRepositoriesRestService.getNamespaces($repositories.getActiveRepository())\n .success(function (data) {\n $scope.namespaces = data.results.bindings.map(function (e) {\n return {\n prefix: e.prefix.value,\n namespace: e.namespace.value\n };\n });\n if ($scope.namespaces.length > 0) {\n $scope.namespaces.sort(function (a, b) {\n const prefixA = a.prefix.toUpperCase(); // ignore upper and lowercase\n const prefixB = b.prefix.toUpperCase(); // ignore upper and lowercase\n if (prefixA < prefixB) {\n return -1;\n }\n if (prefixA > prefixB) {\n return 1;\n }\n return 0;\n });\n $scope.matchedElements = $scope.namespaces;\n $scope.changePagination();\n }\n if ($scope.namespaces.length === 0) {\n // Remove the loader ourselves\n $scope.loader = false;\n } // else let the loaderPostRepeatDirective do it\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg);\n $scope.loader = false;\n });\n };\n\n $scope.changePagination = function () {\n if (angular.isDefined($scope.namespaces)) {\n $scope.displayedNamespaces = $scope.namespaces.slice($scope.pageSize * ($scope.page - 1), $scope.pageSize * $scope.page);\n }\n };\n\n $scope.changePageSize = function (size) {\n $('.ot-graph-page-size').removeClass('active');\n $scope.page = 1;\n $scope.searchNamespaces = '';\n if (size) {\n $scope.getNamespaces();\n $scope.pageSize = size;\n }\n };\n\n $scope.$watch('matchedElements', function () {\n if (angular.isDefined($scope.matchedElements)) {\n $scope.displayedNamespaces = $scope.matchedElements.slice($scope.pageSize * ($scope.page - 1), $scope.pageSize * $scope.page);\n }\n });\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function () {\n $scope.searchNamespaces = '';\n $scope.getNamespaces();\n $scope.selectedAll = false;\n });\n\n $scope.onNamespaceSearch = function() {\n $scope.haveSelected = false;\n $scope.selectedAll = false;\n $scope.matchedElements = [];\n $scope.deselectAll();\n $scope.filterResults();\n };\n\n $scope.filterResults = function() {\n angular.forEach($scope.namespaces, function (item) {\n if (item.namespace.indexOf($scope.searchNamespaces) !== -1 || item.prefix.indexOf($scope.searchNamespaces) !== -1) {\n $scope.matchedElements.push(item);\n }\n });\n };\n\n $scope.saveNamespace = function (prefix, namespace) {\n $scope.loader = true;\n return RDF4JRepositoriesRestService.updateNamespacePrefix($repositories.getActiveRepository(), namespace, prefix)\n .success(function () {\n $scope.getNamespaces();\n $scope.loader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n $scope.editPrefix = function (oldPrefix, newPrefix) {\n $scope.loader = true;\n RepositoriesRestService.getPrefix($repositories.getActiveRepository(), {from: oldPrefix, to: newPrefix})\n .success(function () {\n $scope.getNamespaces();\n $scope.loader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n $scope.confirmReplace = function (okCallback, cancelCallback) {\n ModalService.openSimpleModal({\n title: 'Confirm replace',\n message: 'This namespace prefix already exists. Do you want to replace it?',\n warning: true\n }).result.then(okCallback, cancelCallback);\n };\n\n $scope.editPrefixAndNamespace = function (prefix, namespace, namespaceObject) {\n if (angular.isUndefined(prefix)) {\n prefix = '';\n }\n\n if (!validatePrefixAndNamespace(prefix, namespace)) {\n return '';\n }\n\n let prefixExist = false;\n const oldPrefix = namespaceObject.prefix;\n angular.forEach($scope.namespaces, function (elem) {\n if (elem.prefix === prefix && oldPrefix !== prefix) {\n prefixExist = true;\n }\n });\n if (prefixExist) {\n $scope.confirmReplace(function () {\n $scope.saveNamespace(oldPrefix, namespace).then(function () {\n if (oldPrefix !== prefix) {\n $scope.editPrefix(oldPrefix, prefix);\n }\n });\n }, function () {\n $scope.getNamespaces();\n });\n } else if (angular.isDefined(prefixExist)) {\n $scope.saveNamespace(oldPrefix, namespace).then(function () {\n if (oldPrefix !== prefix) {\n $scope.editPrefix(oldPrefix, prefix);\n }\n });\n }\n };\n\n $scope.addNamespace = function () {\n if (angular.isUndefined($scope.namespace.prefix)) {\n $scope.namespace.prefix = '';\n }\n\n if (!validatePrefixAndNamespace($scope.namespace.prefix, $scope.namespace.namespace)) {\n return;\n }\n\n $scope.selectedAll = false;\n let prefixExist = false;\n for (let i = 0; i < $scope.namespaces.length; i++) {\n if ($scope.namespaces[i].prefix === $scope.namespace.prefix) {\n prefixExist = true;\n }\n }\n if (prefixExist) {\n $scope.confirmReplace(function () {\n $scope.saveNamespace($scope.namespace.prefix, $scope.namespace.namespace);\n $scope.namespace = {};\n });\n } else {\n $scope.saveNamespace($scope.namespace.prefix, $scope.namespace.namespace);\n $scope.namespace = {};\n }\n };\n\n $scope.removeNamespace = function (namespace) {\n ModalService.openSimpleModal({\n title: 'Confirm delete',\n message: 'Are you sure you want to delete the namespace \\'' + namespace.prefix + '\\'?',\n warning: true\n }).result.then(function () {\n deleteNamespace(namespace);\n });\n };\n\n $scope.checkAll = function () {\n angular.forEach($scope.displayedNamespaces, function (item) {\n item.selected = $scope.selectedAll;\n });\n };\n\n $scope.deleteSelected = function () {\n const openModalInstance = function () {\n ModalService.openSimpleModal({\n title: 'Confirm delete',\n message: 'Are you sure you want to delete the selected namespace(s)?',\n warning: true\n }).result.then(function () {\n $scope.loader = true;\n const namespaces = [];\n angular.forEach($scope.displayedNamespaces, function (namespace) {\n if (namespace.selected) {\n namespaces.push(namespace);\n }\n });\n deleteNamespace(namespaces.shift(), namespaces);\n $scope.selectedAll = false;\n }, function () {\n $scope.getNamespaces();\n $scope.selectedAll = false;\n $scope.searchNamespaces = '';\n });\n };\n\n let modalInstanceOpened = false;\n angular.forEach($scope.displayedNamespaces, function (namespace) {\n if (!modalInstanceOpened) {\n if (namespace.selected) {\n modalInstanceOpened = true;\n openModalInstance();\n }\n }\n });\n };\n\n function deleteNamespace(namespace, namespaces) {\n let prefix;\n if (typeof namespace === 'object') {\n prefix = namespace.prefix;\n } else {\n prefix = namespace;\n }\n RDF4JRepositoriesRestService.deleteNamespacePrefix($repositories.getActiveRepository(), prefix)\n .success(function () {\n if (namespaces && namespaces.length > 0) {\n namespace = namespaces.shift();\n deleteNamespace(namespace, namespaces);\n } else {\n $scope.selectedAll = false;\n $scope.namespace = {};\n $scope.getNamespaces();\n $scope.searchNamespaces = '';\n $scope.haveSelected = false;\n $scope.loader = false;\n $scope.displayedNamespaces = [];\n if (namespaces === undefined) {\n toastr.success('Namespace with prefix \\'' + prefix + '\\' was deleted successfully.', '');\n } else {\n toastr.success('Selected namespaces were deleted successfully.', '');\n }\n }\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n }\n\n $scope.checkIfSelectedNamespace = function () {\n $scope.haveSelected = false;\n angular.forEach($scope.namespaces, function (item) {\n if (item.selected) {\n $scope.haveSelected = true;\n }\n });\n };\n\n $scope.deselectAll = function () {\n angular.forEach($scope.namespaces, function (item) {\n item.selected = false;\n });\n };\n\n function validatePrefixAndNamespace(prefix, namespace) {\n if (!validatePrefix(prefix)) {\n toastr.error('Invalid prefix: ' + prefix, 'Error');\n return false;\n }\n\n if (angular.isUndefined(namespace) || namespace === '') {\n toastr.error('Please provide namespace.', 'Error');\n return false;\n }\n\n return true;\n }\n }]);\n\nnamespaces.controller('StandartModalCtrl', ['$scope', '$modalInstance', function ($scope, $modalInstance) {\n\n $scope.ok = function () {\n const result = true;\n $modalInstance.close(result);\n };\n\n $scope.cancel = function () {\n $modalInstance.dismiss('cancel');\n };\n}]);\n","const namespacesDirectives = angular.module('graphdb.framework.namespaces.directives', ['ngRoute']);\n\n// This directive will set the loader to false once the respective ngRepeat is done loading\nnamespacesDirectives.directive('loaderPostRepeatDirective', ['$timeout', function ($timeout) {\n return function (scope) {\n if (scope.$last) {\n // It's important to do this with timeout:\n // \"...since the setTimeout function gets pushed to the end of the queue of the browser,\n // its always right after everything is done in angular, usually ngRepeat which continues\n // after its parents postLinking function\"\n $timeout(function () {\n scope.$parent.loader = false;\n }, 0);\n }\n };\n}]);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///./src/js/angular/namespaces/app.js","webpack:///./src/js/angular/core/directives/paginations.js","webpack:///./src/js/angular/namespaces/controllers.js","webpack:///./src/js/angular/namespaces/directives.js"],"names":["angular","module","run","editableOptions","theme","directive","template","namespaces","pnPrefixRe","pnCharsBase","pnChars","pnCharsU","RegExp","controller","$scope","$http","$repositories","toastr","$modal","ModalService","RepositoriesRestService","RDF4JRepositoriesRestService","deleteNamespace","namespace","prefix","deleteNamespacePrefix","getActiveRepository","success","length","shift","selectedAll","getNamespaces","searchNamespaces","haveSelected","loader","displayedNamespaces","undefined","error","data","msg","getError","validatePrefixAndNamespace","match","validatePrefix","isUndefined","pageSizeOptions","page","pageSize","results","bindings","map","e","value","sort","a","b","prefixA","toUpperCase","prefixB","matchedElements","changePagination","isDefined","slice","changePageSize","size","$","removeClass","$watch","onNamespaceSearch","deselectAll","filterResults","forEach","item","indexOf","push","saveNamespace","updateNamespacePrefix","editPrefix","oldPrefix","newPrefix","getPrefix","from","to","confirmReplace","okCallback","cancelCallback","openSimpleModal","title","message","warning","result","then","editPrefixAndNamespace","namespaceObject","prefixExist","elem","addNamespace","i","removeNamespace","checkAll","selected","deleteSelected","modalInstanceOpened","checkIfSelectedNamespace","$modalInstance","ok","close","cancel","dismiss","$timeout","scope","$last","$parent"],"mappings":"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","file":"24.d5ea0f435b896dc12709.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/core/services/repositories.service';\nimport 'angular/namespaces/controllers';\nimport 'angular/namespaces/directives';\nimport 'angular/core/directives/paginations';\nimport 'angular-xeditable/dist/js/xeditable.min';\n\nconst modules = [\n 'LocalStorageModule',\n 'xeditable',\n 'ngAnimate',\n 'ngRoute',\n 'toastr',\n 'graphdb.framework.namespaces.controllers',\n 'graphdb.framework.namespaces.directives',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.core.directives.paginations'\n];\n\nconst namespacesApp = angular.module('graphdb.framework.namespaces', modules);\n\nnamespacesApp.run(['editableOptions', function (editableOptions) {\n editableOptions.theme = 'bs3';\n}]);\n","angular.module('graphdb.framework.core.directives.paginations', [])\n .directive('paginations', function () {\n return {\n template: '<pagination class=\"nav navbar-right\" total-items=\"matchedElements.length\" items-per-page=\"pageSize\" ng-model=\"page\" ng-change=\"changePagination()\" direction-links=\"false\" boundary-links=\"true\" max-size=\"5\" rotate=\"true\"></pagination>',\n };\n });\n","import 'angular/core/services';\nimport 'angular/core/services/jwt-auth.service';\nimport 'angular/core/services/repositories.service';\nimport 'angular/rest/rdf4j.repositories.rest.service';\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.services.jwtauth',\n 'graphdb.framework.rest.repositories.service',\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'toastr'\n];\n\nconst namespaces = angular.module('graphdb.framework.namespaces.controllers', modules);\n\n// A regular expression that validates a prefix according to the SPARQL 1.1 specification.\n// XXX: Technically this should include Unicode chars > 0xFFFF but those aren't fully supported in JavaScript\nconst pnPrefixRe = function () {\n const pnCharsBase = '[A-Z]|[a-z]|[\\u00C0-\\u00D6]|[\\u00D8-\\u00F6]|[\\u00F8-\\u02FF]|[\\u0370-\\u037D]'\n + '|[\\u037F-\\u1FFF]|[\\u200C-\\u200D]|[\\u2070-\\u218F]|[\\u2C00-\\u2FEF]|[\\u3001-\\uD7FF]'\n + '|[\\uF900-\\uFDCF]|[\\uFDF0-\\uFFFD]';\n const pnCharsU = pnCharsBase + '|_';\n const pnChars = pnCharsU + '|-|[0-9]|\\u00B7|[\\u0300-\\u036F]|[\\u203F-\\u2040]';\n\n return new RegExp('^(?:' + pnCharsBase + ')(?:(?:' + pnChars + '|\\\\.)*(?:' + pnChars + '))?$');\n}();\n\nfunction validatePrefix(prefix) {\n return prefix === '' || prefix.match(pnPrefixRe);\n}\n\nnamespaces.controller('NamespacesCtrl', ['$scope', '$http', '$repositories', 'toastr', '$modal', 'ModalService', 'RepositoriesRestService', 'RDF4JRepositoriesRestService',\n function ($scope, $http, $repositories, toastr, $modal, ModalService, RepositoriesRestService, RDF4JRepositoriesRestService) {\n $scope.namespaces = {};\n $scope.namespace = {};\n $scope.loader = false;\n $scope.haveSelected = false;\n $scope.pageSizeOptions = [10, 20, 50, 100];\n $scope.page = 1;\n $scope.pageSize = $scope.pageSizeOptions[0];\n $scope.displayedNamespaces = [];\n\n $scope.getNamespaces = function () {\n if (!$repositories.getActiveRepository()) {\n return;\n }\n\n $scope.loader = true;\n $scope.namespaces = {};\n RDF4JRepositoriesRestService.getNamespaces($repositories.getActiveRepository())\n .success(function (data) {\n $scope.namespaces = data.results.bindings.map(function (e) {\n return {\n prefix: e.prefix.value,\n namespace: e.namespace.value\n };\n });\n if ($scope.namespaces.length > 0) {\n $scope.namespaces.sort(function (a, b) {\n const prefixA = a.prefix.toUpperCase(); // ignore upper and lowercase\n const prefixB = b.prefix.toUpperCase(); // ignore upper and lowercase\n if (prefixA < prefixB) {\n return -1;\n }\n if (prefixA > prefixB) {\n return 1;\n }\n return 0;\n });\n $scope.matchedElements = $scope.namespaces;\n $scope.changePagination();\n }\n if ($scope.namespaces.length === 0) {\n // Remove the loader ourselves\n $scope.loader = false;\n } // else let the loaderPostRepeatDirective do it\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg);\n $scope.loader = false;\n });\n };\n\n $scope.changePagination = function () {\n if (angular.isDefined($scope.namespaces)) {\n $scope.displayedNamespaces = $scope.namespaces.slice($scope.pageSize * ($scope.page - 1), $scope.pageSize * $scope.page);\n }\n };\n\n $scope.changePageSize = function (size) {\n $('.ot-graph-page-size').removeClass('active');\n $scope.page = 1;\n $scope.searchNamespaces = '';\n if (size) {\n $scope.getNamespaces();\n $scope.pageSize = size;\n }\n };\n\n $scope.$watch('matchedElements', function () {\n if (angular.isDefined($scope.matchedElements)) {\n $scope.displayedNamespaces = $scope.matchedElements.slice($scope.pageSize * ($scope.page - 1), $scope.pageSize * $scope.page);\n }\n });\n\n $scope.$watch(function () {\n return $repositories.getActiveRepository();\n }, function () {\n $scope.searchNamespaces = '';\n $scope.getNamespaces();\n $scope.selectedAll = false;\n });\n\n $scope.onNamespaceSearch = function() {\n $scope.haveSelected = false;\n $scope.selectedAll = false;\n $scope.matchedElements = [];\n $scope.deselectAll();\n $scope.filterResults();\n };\n\n $scope.filterResults = function() {\n angular.forEach($scope.namespaces, function (item) {\n if (item.namespace.indexOf($scope.searchNamespaces) !== -1 || item.prefix.indexOf($scope.searchNamespaces) !== -1) {\n $scope.matchedElements.push(item);\n }\n });\n };\n\n $scope.saveNamespace = function (prefix, namespace) {\n $scope.loader = true;\n return RDF4JRepositoriesRestService.updateNamespacePrefix($repositories.getActiveRepository(), namespace, prefix)\n .success(function () {\n $scope.getNamespaces();\n $scope.loader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n $scope.editPrefix = function (oldPrefix, newPrefix) {\n $scope.loader = true;\n RepositoriesRestService.getPrefix($repositories.getActiveRepository(), {from: oldPrefix, to: newPrefix})\n .success(function () {\n $scope.getNamespaces();\n $scope.loader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n $scope.confirmReplace = function (okCallback, cancelCallback) {\n ModalService.openSimpleModal({\n title: 'Confirm replace',\n message: 'This namespace prefix already exists. Do you want to replace it?',\n warning: true\n }).result.then(okCallback, cancelCallback);\n };\n\n $scope.editPrefixAndNamespace = function (prefix, namespace, namespaceObject) {\n if (angular.isUndefined(prefix)) {\n prefix = '';\n }\n\n if (!validatePrefixAndNamespace(prefix, namespace)) {\n return '';\n }\n\n let prefixExist = false;\n const oldPrefix = namespaceObject.prefix;\n angular.forEach($scope.namespaces, function (elem) {\n if (elem.prefix === prefix && oldPrefix !== prefix) {\n prefixExist = true;\n }\n });\n if (prefixExist) {\n $scope.confirmReplace(function () {\n $scope.saveNamespace(oldPrefix, namespace).then(function () {\n if (oldPrefix !== prefix) {\n $scope.editPrefix(oldPrefix, prefix);\n }\n });\n }, function () {\n $scope.getNamespaces();\n });\n } else if (angular.isDefined(prefixExist)) {\n $scope.saveNamespace(oldPrefix, namespace).then(function () {\n if (oldPrefix !== prefix) {\n $scope.editPrefix(oldPrefix, prefix);\n }\n });\n }\n };\n\n $scope.addNamespace = function () {\n if (angular.isUndefined($scope.namespace.prefix)) {\n $scope.namespace.prefix = '';\n }\n\n if (!validatePrefixAndNamespace($scope.namespace.prefix, $scope.namespace.namespace)) {\n return;\n }\n\n $scope.selectedAll = false;\n let prefixExist = false;\n for (let i = 0; i < $scope.namespaces.length; i++) {\n if ($scope.namespaces[i].prefix === $scope.namespace.prefix) {\n prefixExist = true;\n }\n }\n if (prefixExist) {\n $scope.confirmReplace(function () {\n $scope.saveNamespace($scope.namespace.prefix, $scope.namespace.namespace);\n $scope.namespace = {};\n });\n } else {\n $scope.saveNamespace($scope.namespace.prefix, $scope.namespace.namespace);\n $scope.namespace = {};\n }\n };\n\n $scope.removeNamespace = function (namespace) {\n ModalService.openSimpleModal({\n title: 'Confirm delete',\n message: 'Are you sure you want to delete the namespace \\'' + namespace.prefix + '\\'?',\n warning: true\n }).result.then(function () {\n deleteNamespace(namespace);\n });\n };\n\n $scope.checkAll = function () {\n angular.forEach($scope.displayedNamespaces, function (item) {\n item.selected = $scope.selectedAll;\n });\n };\n\n $scope.deleteSelected = function () {\n const openModalInstance = function () {\n ModalService.openSimpleModal({\n title: 'Confirm delete',\n message: 'Are you sure you want to delete the selected namespace(s)?',\n warning: true\n }).result.then(function () {\n $scope.loader = true;\n const namespaces = [];\n angular.forEach($scope.displayedNamespaces, function (namespace) {\n if (namespace.selected) {\n namespaces.push(namespace);\n }\n });\n deleteNamespace(namespaces.shift(), namespaces);\n $scope.selectedAll = false;\n }, function () {\n $scope.getNamespaces();\n $scope.selectedAll = false;\n $scope.searchNamespaces = '';\n });\n };\n\n let modalInstanceOpened = false;\n angular.forEach($scope.displayedNamespaces, function (namespace) {\n if (!modalInstanceOpened) {\n if (namespace.selected) {\n modalInstanceOpened = true;\n openModalInstance();\n }\n }\n });\n };\n\n function deleteNamespace(namespace, namespaces) {\n let prefix;\n if (typeof namespace === 'object') {\n prefix = namespace.prefix;\n } else {\n prefix = namespace;\n }\n RDF4JRepositoriesRestService.deleteNamespacePrefix($repositories.getActiveRepository(), prefix)\n .success(function () {\n if (namespaces && namespaces.length > 0) {\n namespace = namespaces.shift();\n deleteNamespace(namespace, namespaces);\n } else {\n $scope.selectedAll = false;\n $scope.namespace = {};\n $scope.getNamespaces();\n $scope.searchNamespaces = '';\n $scope.haveSelected = false;\n $scope.loader = false;\n $scope.displayedNamespaces = [];\n if (namespaces === undefined) {\n toastr.success('Namespace with prefix \\'' + prefix + '\\' was deleted successfully.', '');\n } else {\n toastr.success('Selected namespaces were deleted successfully.', '');\n }\n }\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n }\n\n $scope.checkIfSelectedNamespace = function () {\n $scope.haveSelected = false;\n angular.forEach($scope.namespaces, function (item) {\n if (item.selected) {\n $scope.haveSelected = true;\n }\n });\n };\n\n $scope.deselectAll = function () {\n angular.forEach($scope.namespaces, function (item) {\n item.selected = false;\n });\n };\n\n function validatePrefixAndNamespace(prefix, namespace) {\n if (!validatePrefix(prefix)) {\n toastr.error('Invalid prefix: ' + prefix, 'Error');\n return false;\n }\n\n if (angular.isUndefined(namespace) || namespace === '') {\n toastr.error('Please provide namespace.', 'Error');\n return false;\n }\n\n return true;\n }\n }]);\n\nnamespaces.controller('StandartModalCtrl', ['$scope', '$modalInstance', function ($scope, $modalInstance) {\n\n $scope.ok = function () {\n const result = true;\n $modalInstance.close(result);\n };\n\n $scope.cancel = function () {\n $modalInstance.dismiss('cancel');\n };\n}]);\n","const namespacesDirectives = angular.module('graphdb.framework.namespaces.directives', ['ngRoute']);\n\n// This directive will set the loader to false once the respective ngRepeat is done loading\nnamespacesDirectives.directive('loaderPostRepeatDirective', ['$timeout', function ($timeout) {\n return function (scope) {\n if (scope.$last) {\n // It's important to do this with timeout:\n // \"...since the setTimeout function gets pushed to the end of the queue of the browser,\n // its always right after everything is done in angular, usually ngRepeat which continues\n // after its parents postLinking function\"\n $timeout(function () {\n scope.$parent.loader = false;\n }, 0);\n }\n };\n}]);\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[25,34,55,85],{29:function(e,n){angular.module("graphdb.framework.rest.connectors.service",[]).factory("ConnectorsRestService",o),o.$inject=["$http"];const t="rest/connectors";function o(e){return{getConnectors:function(){return e.get(t)},initConnector:function(n){return e.get(`${t}/options?prefix=${n}`)},hasConnector:function(n){return e.get(`${t}/existing?prefix=${n}`)},checkConnector:function(n){return e.post(`${t}/check`,n,{headers:{"Content-Type":"text/plain"}})}}}},32:function(e,n,t){"use strict";t.r(n);t(10),t(29);function o(e){const n=[];return Object.keys(e).forEach((function(t){n.push(encodeURIComponent(t)+"="+encodeURIComponent(e[t]))})),n.join("&")}function r(e,n){for(let o=0;o<n.length;o++){const r=n[o];if("StringArray"===r.__type)e[r.__name]||(e[r.__name]=[""]);else if("OptionArray"===r.__type)if(e[r.__name])for(let n=0;n<r.__childOptions.length;n++){const t=r.__childOptions[n];if("Boolean"===t.__type)for(let n=0;n<e[r.__name].length;n++){const o=e[r.__name][n];!o.hasOwnProperty([t.__name])&&angular.isDefined(t.__defaultValue)&&(o[t.__name]=t.__defaultValue)}}else{e[r.__name]=[];const n={};for(let e=0;e<r.__childOptions.length;e++){const t=r.__childOptions[e];"StringArray"===t.__type?n[t.__name]=[""]:n[t.__name]=angular.isUndefined(t.__defaultValue)?"":t.__defaultValue}e[r.__name].push(n)}else"Map"===r.__type?e[r.__name]?e[r.__name]=(t=e[r.__name],_.map(t,(function(e,n){return{key:n,value:e}}))):e[r.__name]=[]:"JsonString"===r.__type?!e[r.__name]||e[r.__name]instanceof String||"string"==typeof e[r.__name]||(e[r.__name]=angular.toJson(e[r.__name],2)):angular.isUndefined(e[r.__name])&&(e[r.__name]=angular.isUndefined(r.__defaultValue)?"":r.__defaultValue)}var t;return e}function i(e,n,t){return e.post("repositories/"+n,o({query:t}),{headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/sparql-results+json","X-GraphDB-Local-Consistency":"updating"}})}function a(e){return e.substring(0,e.length-1)+"/instance#"}function c(e,n,t,o,r){const i=function e(n,t){const o={};return _.each(t,(function(t){angular.isDefined(n[t.__name])&&("OptionArray"===t.__type?(o[t.__name]=[],_.each(n[t.__name],(function(n){o[t.__name].push(e(n,t.__childOptions))}))):o[t.__name]=angular.copy(n[t.__name]))})),o}(t,o);for(let e=0;e<o.length;e++)try{"Map"===o[e].__type?i[o[e].__name]=(c=i[o[e].__name],_.reduce(c,(function(e,n){if(""===n.key&&""===n.value);else{if(""===n.key)throw new Error('Key may not be empty with value "'+n.value+'"');if(e.hasOwnProperty(n.key))throw new Error("Duplicate key "+n.key);e[n.key]=n.value}return e}),{})):"JsonString"===o[e].__type&&(i[o[e].__name]=angular.fromJson(i[o[e].__name]))}catch(n){return r(o[e].__label,n.message),null}var c;!function e(n){Array.isArray(n)&&(n=_.filter(n,(function(e){return null!==e&&(!e.trim||""!==e.trim())})));return Object.keys(n).forEach((function(t){""!==n[t]&&null!=n[t]||!1===n[t]?"object"==typeof n[t]&&(n[t]=e(n[t])):delete n[t]})),n}(i);let s="";return s+="PREFIX :<"+n+">\n",s+="PREFIX inst:<"+a(n)+">\n",s+="INSERT DATA {\n",s+="\tinst:"+e+" :createConnector '''\n",s+=angular.toJson(i,2),s+="\n''' .\n}\n",s=s.replace(/\\/g,"\\\\\\"),s}function s(e,n,t,s,l,u,f,p,d){function g(n){e.beingBuiltConnector={percentDone:0,status:{processedEntities:0,estimatedEntities:0,indexedEntities:0,entitiesPerSecond:0},actionName:n?"Repairing":"Creating",waitOnRepairStartOnce:!!n,eta:"-",inline:!1,iri:null}}function m(n,t,o){return g(o),$.extend(e.beingBuiltConnector,{iri:a(n)+t,name:t,inline:!1,doneCallback:function(){e.beingBuiltConnector.modalInstance.dismiss("cancel")}}),e.beingBuiltConnector.modalInstance=s.open({templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",size:"lg",backdrop:"static",scope:e}),e.beingBuiltConnector.modalInstance}function C(n,r,i){const a=m(n.value,r.name,!1);p.addStatements(t.getActiveRepository(),o({update:r.query})).then((function(){d.getConnectors().then((function(){d.hasConnector(encodeURIComponent(n.value)).then((function(t){e.existing[n.key]=t.data}))})),l.success("Created connector "+r.name)}),(function(e){l.error(getError(e)),i()})).finally((function(){a.dismiss("cancel")}))}e.loader=!1,e.controllers=[],e.existing={},e.definitions={},e.getLoaderMessage=function(){const n=(Date.now()-e.loaderStartTime)/1e3,t=e.getHumanReadableSeconds(n);let o="";return o=e.progressMessage?e.progressMessage+"... "+t:"Running operation..."+t,e.extraMessage&&n>10&&(o+="\n"+e.extraMessage),o},e.setLoader=function(n,t,o){n?(e.loader=!0,e.loaderStartTime=Date.now(),e.progressMessage=t,e.extraMessage=o):(e.loader=!1,e.progressMessage="",e.extraMessage="")},e.initConnector=function(n){return d.initConnector(encodeURIComponent(n.value)).then((function(t){return e.definitions[n.key]=t.data,d.hasConnector(encodeURIComponent(n.value)).then((function(t){e.existing[n.key]=t.data}))}))},e.getConnectors=function(){e.isLicenseValid()&&e.canWriteActiveRepo()&&(e.setLoader(!0,"Fetching connectors","Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first."),d.getConnectors().then((function(o){e.connectors=Object.keys(o.data).map((function(e){return{key:e,value:o.data[e]}})),f.all(_.map(e.connectors,(function(n){return e.initConnector(n)}))).finally((function(){g();const o=function(e){const n=_.map(e,(function(e){return"<"+e.value+"connectorStatus>"})).join("|");return n?"SELECT ?connector ?status { ?connector "+n+" ?status }":null}(e.connectors);o?function(e){return i(n,t.getActiveRepository(),e)}(o).then((function(n){const t=function(e){if(e.bindings)for(let n=0;n<e.bindings.length;n++)try{const t=JSON.parse(e.bindings[n].status.value);if("BUILDING"===t.status)return{connector:e.bindings[n].connector.value,status:t}}catch(e){console.error(e)}return{}}(n.data.results);if(t.connector){const n=t.connector.split(/#/);n[0]=n[0].replace(/\/instance$/,"#"),o=n[0],r=n[1],g(),$.extend(e.beingBuiltConnector,{iri:a(o)+r,name:r,inline:!0,doneCallback:function(){e.beingBuiltConnector.inline=!1}})}var o,r})).finally((function(){e.setLoader(!1)})):e.setLoader(!1)}))})).catch((function(n){e.setLoader(!1),l.error(getError(n),"Could not get connectors")})),e.existing={})},e.getOptions=function(n){return e.definitions[n.key]},e.isEmpty=function(e){return angular.isObject(e)&&0===Object.keys(e).length},e.toPrettyJson=function(e){return angular.toJson(e,2)},e.$watch((function(){return t.getActiveRepository()}),e.getConnectors),e.$watch((function(){return t.getActiveLocation()}),e.getConnectors),e.copyConnector=function(n,t){let o;angular.isUndefined(t)||(o=angular.copy(t),o.name=o.name+"-copy"),s.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return n},values:function(){return angular.isUndefined(o)?{name:"",values:{}}:o},options:function(){return e.getOptions(n)}}}).result.then((function(t){C(n,t,(function(){t.skipConversion=!0,e.newConnector(n,t)}))}))},e.newConnector=function(n,t){s.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return n},values:function(){return angular.isUndefined(t)?{name:"",values:{}}:t},options:function(){return e.getOptions(n)}}}).result.then((function(t){C(n,t,(function(){t.skipConversion=!0,e.newConnector(n,t)}))}))},e.repair=function(n,r){u.openSimpleModal({title:"Confirm repair",message:"Are you sure you want to repair this connector?<br>Note that repair means delete + recreate with the same settings.",warning:!0}).result.then((function(){const i=m(r.value,n.name,!0),c=(s=n.name,"PREFIX prefix:<"+(u=r.value)+">\nINSERT DATA {\n\t<"+a(u)+s+'> prefix:repairConnector ""\n}');var s,u;p.addStatements(t.getActiveRepository(),o({update:c})).then((function(){d.getConnectors().then((function(){d.hasConnector(encodeURIComponent(r.value)).then((function(n){e.existing[r.key]=n.data}))})),l.success("Repaired connector "+n.name)}),(function(e){l.error(getError(e))})).finally((function(){i.dismiss("cancel")}))}))},e.delete=function(n,r){const i=r.key.indexOf("Elastic")>=0||r.key.indexOf("Solr")>=0;s.open({templateUrl:"js/angular/externalsync/templates/deleteConnector.html",controller:"DeleteConnectorCtrl",resolve:{type:function(){return r.key},isExternal:function(){return i}}}).result.then((function(a){e.setLoader(!0,"Deleting connector "+n.name,"This is usually a fast operation but it might take a while.");const c=function(e,n,t){const o=n.substring(0,n.length-1)+"/instance#";return"PREFIX prefix:<"+n+">\nINSERT DATA {\n\t<"+o+e+'> prefix:dropConnector "'+(t?"force":"")+'"\n}'}(n.name,r.value,a);p.addStatements(t.getActiveRepository(),o({update:c})).then((function(){d.getConnectors().then((function(){d.hasConnector(encodeURIComponent(r.value)).then((function(n){e.existing[r.key]=n.data}))})),a?(l.success("Deleted (with force) connector "+n.name),i&&l.warning("You may have to remove the index manually from "+r.key)):l.success("Deleted connector "+n.name)}),(function(e){l.error(getError(e))})).finally((function(){e.setLoader(!1)}))}))},e.viewQuery=function(n,t){s.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){const o=e.getOptions(n);return c(t.name,n.value,r(t.values,o),o)}}})}}function l(e,n,t,o){e.force=!1,e.type=t,e.isExternal=o,e.ok=function(){n.close(e.force)},e.cancel=function(){n.dismiss()}}function u(e,n,t,o,r){function i(){return c(e.name,t.value,e.values,e.options,(function(e,n){r.error(n,e)}))}e.connector=t,e.addField=function(n,t){const o=angular.copy(e.defaultValues[t][0]);e.values[t].splice(n+1,0,o)},e.addOption=function(e,n){n.splice(e+1,0,"")},e.deleteOption=function(e,n){n.splice(e,1)},e.addMapOption=function(e,n){n.splice(e+1,0,{key:"",value:""})},e.deleteMapOption=function(e,n){n.splice(e,1)},e.ok=function(){if(e.form.$valid){const t=i();t&&n.close({name:e.name,values:e.values,options:e.options,query:t})}},e.viewQuery=function(){const e=i();e&&o.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){return e}}})},e.cancel=function(){n.dismiss("cancel")}}function f(e,n,t,o,i,a,c,s){angular.extend(this,n("ExtendNewConnectorCtrl",{$scope:e,$modalInstance:o,connector:i,$modal:a})),e.values=c.values,e.options=s,e.name=c.name,c.skipConversion||(e.values=r(e.values,e.options)),e.defaultValues=angular.copy(e.values)}function p(e,n,t,o){function r(){const r=function(e){const n=e.replace(/\/instance#.+$/,"#connectorStatus");let t="";return t+="SELECT ?status {\n",t+="\t<"+e+"> <"+n+"> ?status",t+="\n}",t}(e.beingBuiltConnector.iri);e.beingBuiltConnector.iri=null,e.progressInterval=n((function(){(function(e){return i(t,o.getActiveRepository(),e)})(r).then((function(t){const o=function(e){if(e.bindings&&e.bindings.length>0)try{return JSON.parse(e.bindings[0].status.value)}catch(e){console.error(e)}return{}}(t.data.results);"BUILDING"===o.status?(e.beingBuiltConnector.status=o,e.beingBuiltConnector.percentDone=(100*o.processedEntities/o.estimatedEntities).toFixed(0),e.beingBuiltConnector.eta=e.getHumanReadableSeconds(o.etaSeconds),e.beingBuiltConnector.actionName=o.repair?"Repairing":"Creating",e.beingBuiltConnector.waitOnRepairStartOnce=!1):"BUILT"!==o.status||e.beingBuiltConnector.waitOnRepairStartOnce||(n.cancel(e.progressInterval),e.beingBuiltConnector.doneCallback&&e.beingBuiltConnector.doneCallback())}))}),1e3),e.$on("$destroy",(function(){n.cancel(e.progressInterval)}))}e.beingBuiltConnector=e.beingBuiltConnector||{},!e.beingBuiltConnector.inline&&e.beingBuiltConnector.iri&&r(),e.$watch("beingBuiltConnector.iri",(function(n){e.beingBuiltConnector.inline&&n&&r()}))}angular.module("graphdb.framework.externalsync.controllers",["graphdb.framework.rest.rdf4j.repositories.service","graphdb.framework.rest.connectors.service"]).controller("ConnectorsCtrl",s).controller("ExtendNewConnectorCtrl",u).controller("CreateConnectorCtrl",f).controller("CreateProgressCtrl",p).controller("DeleteConnectorCtrl",l).filter("ceil",(function(){return function(e){return Math.ceil(e)}})),s.$inject=["$scope","$http","$repositories","$modal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService"],l.$inject=["$scope","$modalInstance","type","isExternal"],u.$inject=["$scope","$modalInstance","connector","$modal","toastr"],f.$inject=["$scope","$controller","$http","$modalInstance","connector","$modal","values","options"],p.$inject=["$scope","$interval","$http","$repositories"]},48:function(e,n,t){"use strict";t.r(n);t(2);angular.module("graphdb.framework.externalsync.directives",[]).directive("createProgress",(function(){return{templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",restrict:"EA"}}))},94:function(e,n,t){"use strict";t.r(n);t(2),t(7),t(13),t(32),t(48);angular.module("graphdb.framework.externalsync",["graphdb.framework.core.controllers","graphdb.framework.externalsync.controllers","graphdb.framework.externalsync.directives","graphdb.framework.core.directives"]).filter("singular",(function(){return function(e){return angular.isUndefined(e)?e:e.replace(/ies$/,"y").replace(/s$/,"")}}))}}]);
2
- //# sourceMappingURL=25.cbe8e59c80330ff6e706.bundle.js.map
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[25,34,55,85],{29:function(e,n){angular.module("graphdb.framework.rest.connectors.service",[]).factory("ConnectorsRestService",o),o.$inject=["$http"];const t="rest/connectors";function o(e){return{getConnectors:function(){return e.get(t)},initConnector:function(n){return e.get(`${t}/options?prefix=${n}`)},hasConnector:function(n){return e.get(`${t}/existing?prefix=${n}`)},checkConnector:function(n){return e.post(`${t}/check`,n,{headers:{"Content-Type":"text/plain"}})}}}},32:function(e,n,t){"use strict";t.r(n);t(10),t(29);function o(e){const n=[];return Object.keys(e).forEach((function(t){n.push(encodeURIComponent(t)+"="+encodeURIComponent(e[t]))})),n.join("&")}function r(e,n){for(let o=0;o<n.length;o++){const r=n[o];if("StringArray"===r.__type)e[r.__name]||(e[r.__name]=[""]);else if("OptionArray"===r.__type)if(e[r.__name])for(let n=0;n<r.__childOptions.length;n++){const t=r.__childOptions[n];if("Boolean"===t.__type)for(let n=0;n<e[r.__name].length;n++){const o=e[r.__name][n];!o.hasOwnProperty([t.__name])&&angular.isDefined(t.__defaultValue)&&(o[t.__name]=t.__defaultValue)}}else{e[r.__name]=[];const n={};for(let e=0;e<r.__childOptions.length;e++){const t=r.__childOptions[e];"StringArray"===t.__type?n[t.__name]=[""]:n[t.__name]=angular.isUndefined(t.__defaultValue)?"":t.__defaultValue}e[r.__name].push(n)}else"Map"===r.__type?e[r.__name]?e[r.__name]=(t=e[r.__name],_.map(t,(function(e,n){return{key:n,value:e}}))):e[r.__name]=[]:"JsonString"===r.__type?!e[r.__name]||e[r.__name]instanceof String||"string"==typeof e[r.__name]||(e[r.__name]=angular.toJson(e[r.__name],2)):angular.isUndefined(e[r.__name])&&(e[r.__name]=angular.isUndefined(r.__defaultValue)?"":r.__defaultValue)}var t;return e}function i(e,n,t){return e.post("repositories/"+n,o({query:t}),{headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/sparql-results+json","X-GraphDB-Local-Consistency":"updating"}})}function a(e){return e.substring(0,e.length-1)+"/instance#"}function c(e,n,t,o,r){const i=function e(n,t){const o={};return _.each(t,(function(t){angular.isDefined(n[t.__name])&&("OptionArray"===t.__type?(o[t.__name]=[],_.each(n[t.__name],(function(n){o[t.__name].push(e(n,t.__childOptions))}))):o[t.__name]=angular.copy(n[t.__name]))})),o}(t,o);for(let e=0;e<o.length;e++)try{"Map"===o[e].__type?i[o[e].__name]=(c=i[o[e].__name],_.reduce(c,(function(e,n){if(""===n.key&&""===n.value);else{if(""===n.key)throw new Error('Key may not be empty with value "'+n.value+'"');if(e.hasOwnProperty(n.key))throw new Error("Duplicate key "+n.key);e[n.key]=n.value}return e}),{})):"JsonString"===o[e].__type&&(i[o[e].__name]=angular.fromJson(i[o[e].__name]))}catch(n){return r(o[e].__label,n.message),null}var c;!function e(n){Array.isArray(n)&&(n=_.filter(n,(function(e){return null!==e&&(!e.trim||""!==e.trim())})));return Object.keys(n).forEach((function(t){""!==n[t]&&null!=n[t]||!1===n[t]?"object"==typeof n[t]&&(n[t]=e(n[t])):delete n[t]})),n}(i);let s="";return s+="PREFIX :<"+n+">\n",s+="PREFIX inst:<"+a(n)+">\n",s+="INSERT DATA {\n",s+="\tinst:"+e+" :createConnector '''\n",s+=angular.toJson(i,2),s+="\n''' .\n}\n",s=s.replace(/\\/g,"\\\\\\"),s}function s(e,n,t,s,l,u,f,p,d){function g(n){e.beingBuiltConnector={percentDone:0,status:{processedEntities:0,estimatedEntities:0,indexedEntities:0,entitiesPerSecond:0},actionName:n?"Repairing":"Creating",waitOnRepairStartOnce:!!n,eta:"-",inline:!1,iri:null}}function m(n,t,o){return g(o),$.extend(e.beingBuiltConnector,{iri:a(n)+t,name:t,inline:!1,doneCallback:function(){e.beingBuiltConnector.modalInstance.dismiss("cancel")}}),e.beingBuiltConnector.modalInstance=s.open({templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",size:"lg",backdrop:"static",scope:e}),e.beingBuiltConnector.modalInstance}function C(n,r,i){const a=m(n.value,r.name,!1);p.addStatements(t.getActiveRepository(),o({update:r.query})).then((function(){d.getConnectors().then((function(){d.hasConnector(encodeURIComponent(n.value)).then((function(t){e.existing[n.key]=t.data}))})),l.success("Created connector "+r.name)}),(function(e){l.error(getError(e)),i()})).finally((function(){a.dismiss("cancel")}))}e.loader=!1,e.controllers=[],e.existing={},e.definitions={},e.getLoaderMessage=function(){const n=(Date.now()-e.loaderStartTime)/1e3,t=e.getHumanReadableSeconds(n);let o="";return o=e.progressMessage?e.progressMessage+"... "+t:"Running operation..."+t,e.extraMessage&&n>10&&(o+="\n"+e.extraMessage),o},e.setLoader=function(n,t,o){n?(e.loader=!0,e.loaderStartTime=Date.now(),e.progressMessage=t,e.extraMessage=o):(e.loader=!1,e.progressMessage="",e.extraMessage="")},e.initConnector=function(n){return d.initConnector(encodeURIComponent(n.value)).then((function(t){return e.definitions[n.key]=t.data,d.hasConnector(encodeURIComponent(n.value)).then((function(t){e.existing[n.key]=t.data}))}))},e.getConnectors=function(){e.isLicenseValid()&&e.canWriteActiveRepo()&&(e.setLoader(!0,"Fetching connectors","Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first."),d.getConnectors().then((function(o){e.connectors=Object.keys(o.data).map((function(e){return{key:e,value:o.data[e]}})),f.all(_.map(e.connectors,(function(n){return e.initConnector(n)}))).finally((function(){g();const o=function(e){const n=_.map(e,(function(e){return"<"+e.value+"connectorStatus>"})).join("|");return n?"SELECT ?connector ?status { ?connector "+n+" ?status }":null}(e.connectors);o?function(e){return i(n,t.getActiveRepository(),e)}(o).then((function(n){const t=function(e){if(e.bindings)for(let n=0;n<e.bindings.length;n++)try{const t=JSON.parse(e.bindings[n].status.value);if("BUILDING"===t.status)return{connector:e.bindings[n].connector.value,status:t}}catch(e){console.error(e)}return{}}(n.data.results);if(t.connector){const n=t.connector.split(/#/);n[0]=n[0].replace(/\/instance$/,"#"),o=n[0],r=n[1],g(),$.extend(e.beingBuiltConnector,{iri:a(o)+r,name:r,inline:!0,doneCallback:function(){e.beingBuiltConnector.inline=!1}})}var o,r})).finally((function(){e.setLoader(!1)})):e.setLoader(!1)}))})).catch((function(n){e.setLoader(!1),l.error(getError(n),"Could not get connectors")})),e.existing={})},e.getOptions=function(n){return e.definitions[n.key]},e.isEmpty=function(e){return angular.isObject(e)&&0===Object.keys(e).length},e.toPrettyJson=function(e){return angular.toJson(e,2)},e.$watch((function(){return t.getActiveRepository()}),e.getConnectors),e.$watch((function(){return t.getActiveLocation()}),e.getConnectors),e.copyConnector=function(n,t){let o;angular.isUndefined(t)||(o=angular.copy(t),o.name=o.name+"-copy"),s.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return n},values:function(){return angular.isUndefined(o)?{name:"",values:{}}:o},options:function(){return e.getOptions(n)}}}).result.then((function(t){C(n,t,(function(){t.skipConversion=!0,e.newConnector(n,t)}))}))},e.newConnector=function(n,t){s.open({templateUrl:"pages/createConnector.html",controller:"CreateConnectorCtrl",size:"lg",backdrop:"static",resolve:{connector:function(){return n},values:function(){return angular.isUndefined(t)?{name:"",values:{}}:t},options:function(){return e.getOptions(n)}}}).result.then((function(t){C(n,t,(function(){t.skipConversion=!0,e.newConnector(n,t)}))}))},e.repair=function(n,r){u.openSimpleModal({title:"Confirm repair",message:"Are you sure you want to repair this connector?<br>Note that repair means delete + recreate with the same settings.",warning:!0}).result.then((function(){const i=m(r.value,n.name,!0),c=(s=n.name,"PREFIX prefix:<"+(u=r.value)+">\nINSERT DATA {\n\t<"+a(u)+s+'> prefix:repairConnector ""\n}');var s,u;p.addStatements(t.getActiveRepository(),o({update:c})).then((function(){d.getConnectors().then((function(){d.hasConnector(encodeURIComponent(r.value)).then((function(n){e.existing[r.key]=n.data}))})),l.success("Repaired connector "+n.name)}),(function(e){l.error(getError(e))})).finally((function(){i.dismiss("cancel")}))}))},e.delete=function(n,r){const i=r.key.indexOf("Elastic")>=0||r.key.indexOf("Solr")>=0;s.open({templateUrl:"js/angular/externalsync/templates/deleteConnector.html",controller:"DeleteConnectorCtrl",resolve:{type:function(){return r.key},isExternal:function(){return i}}}).result.then((function(a){e.setLoader(!0,"Deleting connector "+n.name,"This is usually a fast operation but it might take a while.");const c=function(e,n,t){const o=n.substring(0,n.length-1)+"/instance#";return"PREFIX prefix:<"+n+">\nINSERT DATA {\n\t<"+o+e+'> prefix:dropConnector "'+(t?"force":"")+'"\n}'}(n.name,r.value,a);p.addStatements(t.getActiveRepository(),o({update:c})).then((function(){d.getConnectors().then((function(){d.hasConnector(encodeURIComponent(r.value)).then((function(n){e.existing[r.key]=n.data}))})),a?(l.success("Deleted (with force) connector "+n.name),i&&l.warning("You may have to remove the index manually from "+r.key)):l.success("Deleted connector "+n.name)}),(function(e){l.error(getError(e))})).finally((function(){e.setLoader(!1)}))}))},e.viewQuery=function(n,t){s.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){const o=e.getOptions(n);return c(t.name,n.value,r(t.values,o),o)}}})}}function l(e,n,t,o){e.force=!1,e.type=t,e.isExternal=o,e.ok=function(){n.close(e.force)},e.cancel=function(){n.dismiss()}}function u(e,n,t,o,r){function i(){return c(e.name,t.value,e.values,e.options,(function(e,n){r.error(n,e)}))}e.connector=t,e.addField=function(n,t){const o=angular.copy(e.defaultValues[t][0]);e.values[t].splice(n+1,0,o)},e.addOption=function(e,n){n.splice(e+1,0,"")},e.deleteOption=function(e,n){n.splice(e,1)},e.addMapOption=function(e,n){n.splice(e+1,0,{key:"",value:""})},e.deleteMapOption=function(e,n){n.splice(e,1)},e.ok=function(){if(e.form.$valid){const t=i();t&&n.close({name:e.name,values:e.values,options:e.options,query:t})}},e.viewQuery=function(){const e=i();e&&o.open({templateUrl:"pages/viewQuery.html",controller:"ViewQueryCtrl",resolve:{query:function(){return e}}})},e.cancel=function(){n.dismiss("cancel")}}function f(e,n,t,o,i,a,c,s){angular.extend(this,n("ExtendNewConnectorCtrl",{$scope:e,$modalInstance:o,connector:i,$modal:a})),e.values=c.values,e.options=s,e.name=c.name,c.skipConversion||(e.values=r(e.values,e.options)),e.defaultValues=angular.copy(e.values)}function p(e,n,t,o){function r(){const r=function(e){const n=e.replace(/\/instance#.+$/,"#connectorStatus");let t="";return t+="SELECT ?status {\n",t+="\t<"+e+"> <"+n+"> ?status",t+="\n}",t}(e.beingBuiltConnector.iri);e.beingBuiltConnector.iri=null,e.progressInterval=n((function(){(function(e){return i(t,o.getActiveRepository(),e)})(r).then((function(t){const o=function(e){if(e.bindings&&e.bindings.length>0)try{return JSON.parse(e.bindings[0].status.value)}catch(e){console.error(e)}return{}}(t.data.results);"BUILDING"===o.status?(e.beingBuiltConnector.status=o,e.beingBuiltConnector.percentDone=(100*o.processedEntities/o.estimatedEntities).toFixed(0),e.beingBuiltConnector.eta=e.getHumanReadableSeconds(o.etaSeconds),e.beingBuiltConnector.actionName=o.repair?"Repairing":"Creating",e.beingBuiltConnector.waitOnRepairStartOnce=!1):"BUILT"!==o.status||e.beingBuiltConnector.waitOnRepairStartOnce||(n.cancel(e.progressInterval),e.beingBuiltConnector.doneCallback&&e.beingBuiltConnector.doneCallback())}))}),1e3),e.$on("$destroy",(function(){n.cancel(e.progressInterval)}))}e.beingBuiltConnector=e.beingBuiltConnector||{},!e.beingBuiltConnector.inline&&e.beingBuiltConnector.iri&&r(),e.$watch("beingBuiltConnector.iri",(function(n){e.beingBuiltConnector.inline&&n&&r()}))}angular.module("graphdb.framework.externalsync.controllers",["graphdb.framework.rest.rdf4j.repositories.service","graphdb.framework.rest.connectors.service"]).controller("ConnectorsCtrl",s).controller("ExtendNewConnectorCtrl",u).controller("CreateConnectorCtrl",f).controller("CreateProgressCtrl",p).controller("DeleteConnectorCtrl",l).filter("ceil",(function(){return function(e){return Math.ceil(e)}})),s.$inject=["$scope","$http","$repositories","$modal","toastr","ModalService","$q","RDF4JRepositoriesRestService","ConnectorsRestService"],l.$inject=["$scope","$modalInstance","type","isExternal"],u.$inject=["$scope","$modalInstance","connector","$modal","toastr"],f.$inject=["$scope","$controller","$http","$modalInstance","connector","$modal","values","options"],p.$inject=["$scope","$interval","$http","$repositories"]},49:function(e,n,t){"use strict";t.r(n);t(2);angular.module("graphdb.framework.externalsync.directives",[]).directive("createProgress",(function(){return{templateUrl:"pages/connectorProgress.html",controller:"CreateProgressCtrl",restrict:"EA"}}))},94:function(e,n,t){"use strict";t.r(n);t(2),t(7),t(13),t(32),t(49);angular.module("graphdb.framework.externalsync",["graphdb.framework.core.controllers","graphdb.framework.externalsync.controllers","graphdb.framework.externalsync.directives","graphdb.framework.core.directives"]).filter("singular",(function(){return function(e){return angular.isUndefined(e)?e:e.replace(/ies$/,"y").replace(/s$/,"")}}))}}]);
2
+ //# sourceMappingURL=25.5b3feb79a7be0ca1f4ad.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///./src/js/angular/rest/connectors.rest.service.js","webpack:///./src/js/angular/externalsync/controllers.js","webpack:///./src/js/angular/externalsync/directives.js","webpack:///./src/js/angular/externalsync/app.js"],"names":["angular","module","factory","ConnectorsRestService","$inject","CONNECTORS_ENDPOINT","$http","getConnectors","get","initConnector","prefix","hasConnector","checkConnector","data","post","headers","jsonToFormData","str","Object","keys","forEach","key","push","encodeURIComponent","join","mapCreateValuesToUiValues","values","options","i","length","option","__type","__name","j","__childOptions","child","k","valueK","hasOwnProperty","isDefined","__defaultValue","optionEl","isUndefined","map","_","value","String","toJson","_evaluateSparqlQuery","http","repository","query","buildNamePrefix","substring","createConnectorQuery","name","fields","reportError","fcopy","sortObject","obj","newObject","each","childOption","copy","arrayMap","reduce","acc","Error","fromJson","e","__label","message","removeEmptyValues","Array","isArray","filter","item","trim","finalString","replace","ConnectorsCtrl","$scope","$repositories","$modal","toastr","ModalService","$q","RDF4JRepositoriesRestService","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","res","existing","success","err","error","getError","finally","loader","controllers","definitions","getLoaderMessage","timeSeconds","Date","now","loaderStartTime","timeHuman","getHumanReadableSeconds","progressMessage","extraMessage","setLoader","isRunning","isLicenseValid","canWriteActiveRepo","connectors","all","connectorIris","createStatusQueryForAny","evaluateSparqlQuery","results","bindings","statusObject","JSON","parse","console","parseFirstBuildingResult","d","split","catch","getOptions","isEmpty","isObject","toPrettyJson","$watch","getActiveLocation","copyConnector","newValues","resolve","result","skipConversion","newConnector","inst","type","openSimpleModal","title","warning","delete","isExternal","indexOf","force","namePrefix","deleteConnectorQuery","viewQuery","DeleteConnectorCtrl","$modalInstance","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","input","Math","ceil","directive","restrict","noun"],"mappings":"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","file":"25.cbe8e59c80330ff6e706.bundle.js","sourcesContent":["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 function getConnectors() {\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n function hasConnector(prefix) {\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","import 'angular/rest/rdf4j.repositories.rest.service';\nimport 'angular/rest/connectors.rest.service';\n\nconst modules = [\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'graphdb.framework.rest.connectors.service'\n];\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) {\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('Key may not be empty with value \"' + value.value + '\"');\n } else if (acc.hasOwnProperty(value.key)) {\n throw new Error('Duplicate 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] = angular.copy(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]);\n } else if (options[i].__type === 'JsonString') {\n fcopy[options[i].__name] = angular.fromJson(fcopy[options[i].__name]);\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\"; // eslint-disable-line quotes\n finalString += angular.toJson(fcopy, 2);\n finalString += \"\\n''' .\\n}\\n\"; // eslint-disable-line quotes\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] !== 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 console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n return {};\n}\n\nConnectorsCtrl.$inject = ['$scope', '$http', '$repositories', '$modal', 'toastr', 'ModalService', '$q', 'RDF4JRepositoriesRestService', 'ConnectorsRestService'];\n\nfunction ConnectorsCtrl($scope, $http, $repositories, $modal, toastr, ModalService, $q, RDF4JRepositoriesRestService, ConnectorsRestService) {\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 = 'Running operation...' + 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\n $scope.getConnectors = function () {\n if (!$scope.isLicenseValid()) {\n return;\n }\n if (!$scope.canWriteActiveRepo()) {\n return;\n }\n\n $scope.setLoader(true, 'Fetching connectors', 'Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first.');\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), 'Could not get connectors');\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 ? 'Repairing' : '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 = $modal.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('Created connector ' + 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 = angular.copy(values);\n newValues.name = newValues.name + '-copy';\n }\n const modal = $modal.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 = $modal.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: 'Confirm repair',\n message: 'Are you sure you want to repair this connector?<br>Note that repair means delete + recreate with the same settings.',\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('Repaired connector ' + 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 $modal.open({\n templateUrl: 'js/angular/externalsync/templates/deleteConnector.html',\n controller: 'DeleteConnectorCtrl',\n resolve: {\n type: function () {\n return type.key;\n },\n isExternal: function () {\n return isExternal;\n }\n }\n }).result\n .then(function(force) {\n $scope.setLoader(true, 'Deleting connector ' + inst.name, 'This is usually a fast operation but it might take a while.');\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(\"Deleted (with force) connector \" + inst.name);\n if (isExternal) {\n toastr.warning(\"You may have to remove the index manually from \" + type.key);\n }\n } else {\n toastr.success(\"Deleted connector \" + 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 $modal.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', '$modalInstance', 'type', 'isExternal'];\nfunction DeleteConnectorCtrl($scope, $modalInstance, type, isExternal) {\n $scope.force = false;\n $scope.type = type;\n $scope.isExternal = isExternal;\n\n $scope.ok = function () {\n $modalInstance.close($scope.force);\n };\n\n $scope.cancel = function () {\n $modalInstance.dismiss();\n };\n}\n\nExtendNewConnectorCtrl.$inject = ['$scope', '$modalInstance', 'connector', '$modal', 'toastr'];\nfunction ExtendNewConnectorCtrl($scope, $modalInstance, connector, $modal, toastr) {\n\n $scope.connector = connector;\n\n $scope.addField = function (index, optionName) {\n const newField = angular.copy($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 $modalInstance.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 $modal.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 $modalInstance.dismiss('cancel');\n };\n}\n\nCreateConnectorCtrl.$inject = ['$scope', '$controller', '$http', '$modalInstance', 'connector', '$modal', 'values', 'options'];\n\nfunction CreateConnectorCtrl($scope, $controller, $http, $modalInstance, connector, $modal, values, options) {\n angular.extend(this, $controller('ExtendNewConnectorCtrl', {\n $scope: $scope,\n $modalInstance: $modalInstance,\n connector: connector,\n $modal: $modal\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 = angular.copy($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'];\n\nfunction CreateProgressCtrl($scope, $interval, $http, $repositories) {\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 console.error(e); // eslint-disable-line no-console\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 ? 'Repairing' : '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","import 'angular/core/services';\n\nangular.module('graphdb.framework.externalsync.directives', [])\n .directive('createProgress', function () {\n return {\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n restrict: 'EA'\n };\n });\n","import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/core/controllers';\nimport 'angular/externalsync/controllers';\nimport 'angular/externalsync/directives';\n\nconst modules = [\n 'graphdb.framework.core.controllers',\n 'graphdb.framework.externalsync.controllers',\n 'graphdb.framework.externalsync.directives',\n 'graphdb.framework.core.directives'\n];\n\nconst externalsync = angular.module('graphdb.framework.externalsync', modules);\n\nexternalsync.filter('singular', function () {\n return function (noun) {\n if (angular.isUndefined(noun)) {\n return noun;\n } else {\n return noun.replace(/ies$/, 'y').replace(/s$/, '');\n }\n };\n});\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///./src/js/angular/rest/connectors.rest.service.js","webpack:///./src/js/angular/externalsync/controllers.js","webpack:///./src/js/angular/externalsync/directives.js","webpack:///./src/js/angular/externalsync/app.js"],"names":["angular","module","factory","ConnectorsRestService","$inject","CONNECTORS_ENDPOINT","$http","getConnectors","get","initConnector","prefix","hasConnector","checkConnector","data","post","headers","jsonToFormData","str","Object","keys","forEach","key","push","encodeURIComponent","join","mapCreateValuesToUiValues","values","options","i","length","option","__type","__name","j","__childOptions","child","k","valueK","hasOwnProperty","isDefined","__defaultValue","optionEl","isUndefined","map","_","value","String","toJson","_evaluateSparqlQuery","http","repository","query","buildNamePrefix","substring","createConnectorQuery","name","fields","reportError","fcopy","sortObject","obj","newObject","each","childOption","copy","arrayMap","reduce","acc","Error","fromJson","e","__label","message","removeEmptyValues","Array","isArray","filter","item","trim","finalString","replace","ConnectorsCtrl","$scope","$repositories","$modal","toastr","ModalService","$q","RDF4JRepositoriesRestService","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","res","existing","success","err","error","getError","finally","loader","controllers","definitions","getLoaderMessage","timeSeconds","Date","now","loaderStartTime","timeHuman","getHumanReadableSeconds","progressMessage","extraMessage","setLoader","isRunning","isLicenseValid","canWriteActiveRepo","connectors","all","connectorIris","createStatusQueryForAny","evaluateSparqlQuery","results","bindings","statusObject","JSON","parse","console","parseFirstBuildingResult","d","split","catch","getOptions","isEmpty","isObject","toPrettyJson","$watch","getActiveLocation","copyConnector","newValues","resolve","result","skipConversion","newConnector","inst","type","openSimpleModal","title","warning","delete","isExternal","indexOf","force","namePrefix","deleteConnectorQuery","viewQuery","DeleteConnectorCtrl","$modalInstance","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","input","Math","ceil","directive","restrict","noun"],"mappings":"oFAAAA,QACKC,OAAO,4CAA6C,IACpDC,QAAQ,wBAAyBC,GAEtCA,EAAsBC,QAAU,CAAC,SAEjC,MAAMC,EAAsB,kBAE5B,SAASF,EAAsBG,GAE3B,MAAO,CACHC,cAMJ,WACI,OAAOD,EAAME,IAAIH,IANjBI,cASJ,SAAuBC,GACnB,OAAOJ,EAAME,IAAI,GAAGH,oBAAsCK,MAT1DC,aAYJ,SAAsBD,GAClB,OAAOJ,EAAME,IAAI,GAAGH,qBAAuCK,MAZ3DE,eAeJ,SAAwBC,GACpB,OAAOP,EAAMQ,KAAK,GAAGT,UAA6BQ,EAAM,CACpDE,QAAS,CACL,eAAgB,oB,gCChChC,mBAiBA,SAASC,EAAeH,GACpB,MAAMI,EAAM,GAIZ,OAHAC,OAAOC,KAAKN,GAAMO,SAAQ,SAAUC,GAChCJ,EAAIK,KAAKC,mBAAmBF,GAAO,IAAME,mBAAmBV,EAAKQ,QAE9DJ,EAAIO,KAAK,KAwBpB,SAASC,EAA0BC,EAAQC,GACvC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAQE,OAAQD,IAAK,CACrC,MAAME,EAASH,EAAQC,GACvB,GAAsB,gBAAlBE,EAAOC,OACFL,EAAOI,EAAOE,UACfN,EAAOI,EAAOE,QAAU,CAAC,UAE1B,GAAsB,gBAAlBF,EAAOC,OACd,GAAKL,EAAOI,EAAOE,QAcf,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAOI,eAAeL,OAAQI,IAAK,CACnD,MAAME,EAAQL,EAAOI,eAAeD,GACpC,GAAqB,YAAjBE,EAAMJ,OACN,IAAK,IAAIK,EAAI,EAAGA,EAAIV,EAAOI,EAAOE,QAAQH,OAAQO,IAAK,CACnD,MAAMC,EAASX,EAAOI,EAAOE,QAAQI,IAChCC,EAAOC,eAAe,CAACH,EAAMH,UAAYhC,QAAQuC,UAAUJ,EAAMK,kBAClEH,EAAOF,EAAMH,QAAUG,EAAMK,qBApBrB,CACxBd,EAAOI,EAAOE,QAAU,GACxB,MAAMS,EAAW,GACjB,IAAK,IAAIR,EAAI,EAAGA,EAAIH,EAAOI,eAAeL,OAAQI,IAAK,CACnD,MAAME,EAAQL,EAAOI,eAAeD,GACf,gBAAjBE,EAAMJ,OACNU,EAASN,EAAMH,QAAU,CAAC,IAE1BS,EAASN,EAAMH,QAAYhC,QAAQ0C,YAAYP,EAAMK,gBAAyC,GAAvBL,EAAMK,eAGrFd,EAAOI,EAAOE,QAAQV,KAAKmB,OAeN,QAAlBX,EAAOC,OACTL,EAAOI,EAAOE,QAGfN,EAAOI,EAAOE,SA3DVW,EA2D+BjB,EAAOI,EAAOE,QA1DtDY,EAAED,IAAIA,GAAK,SAAUE,EAAOxB,GAC/B,MAAO,CAACA,IAAKA,EAAKwB,MAAOA,OAuDjBnB,EAAOI,EAAOE,QAAU,GAIH,eAAlBF,EAAOC,QACVL,EAAOI,EAAOE,SAAaN,EAAOI,EAAOE,kBAAmBc,QAA4C,iBAA1BpB,EAAOI,EAAOE,UAC5FN,EAAOI,EAAOE,QAAUhC,QAAQ+C,OAAOrB,EAAOI,EAAOE,QAAS,IAG9DhC,QAAQ0C,YAAYhB,EAAOI,EAAOE,WAClCN,EAAOI,EAAOE,QAAYhC,QAAQ0C,YAAYZ,EAAOU,gBAA0C,GAAxBV,EAAOU,gBAnE9F,IAAoBG,EAwEhB,OAAOjB,EAGX,SAASsB,EAAqBC,EAAMC,EAAYC,GAC5C,OAAOF,EAAKnC,KAAK,gBAAkBoC,EAAYlC,EAAe,CAACmC,MAAOA,IAClE,CACIpC,QAAS,CACL,eAAgB,oCAChB,OAAU,kCACV,8BAA+B,cAK/C,SAASqC,EAAgB1C,GACrB,OAAOA,EAAO2C,UAAU,EAAG3C,EAAOmB,OAAS,GAAK,aAGpD,SAASyB,EAAqBC,EAAM7C,EAAQ8C,EAAQ7B,EAAS8B,GAmBzD,MAAMC,EAjBN,SAASC,EAAWC,EAAKjC,GACrB,MAAMkC,EAAY,GAalB,OAZAjB,EAAEkB,KAAKnC,GAAS,SAAUG,GAClB9B,QAAQuC,UAAUqB,EAAI9B,EAAOE,WACP,gBAAlBF,EAAOC,QACP8B,EAAU/B,EAAOE,QAAU,GAC3BY,EAAEkB,KAAKF,EAAI9B,EAAOE,SAAS,SAAU+B,GACjCF,EAAU/B,EAAOE,QAAQV,KAAKqC,EAAWI,EAAajC,EAAOI,qBAGjE2B,EAAU/B,EAAOE,QAAUhC,QAAQgE,KAAKJ,EAAI9B,EAAOE,aAIxD6B,EAGGF,CAAWH,EAAQ7B,GAEjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAQE,OAAQD,IAChC,IAC8B,QAAtBD,EAAQC,GAAGG,OACX2B,EAAM/B,EAAQC,GAAGI,SA5GXiC,EA4GkCP,EAAM/B,EAAQC,GAAGI,QA3G9DY,EAAEsB,OAAOD,GAAU,SAAUE,EAAKtB,GACrC,GAAkB,KAAdA,EAAMxB,KAA8B,KAAhBwB,EAAMA,WAEvB,IAAkB,KAAdA,EAAMxB,IACb,MAAM,IAAI+C,MAAM,oCAAsCvB,EAAMA,MAAQ,KACjE,GAAIsB,EAAI7B,eAAeO,EAAMxB,KAChC,MAAM,IAAI+C,MAAM,iBAAmBvB,EAAMxB,KAEzC8C,EAAItB,EAAMxB,KAAOwB,EAAMA,MAE3B,OAAOsB,IACR,KAiGsC,eAAtBxC,EAAQC,GAAGG,SAClB2B,EAAM/B,EAAQC,GAAGI,QAAUhC,QAAQqE,SAASX,EAAM/B,EAAQC,GAAGI,UAEnE,MAAOsC,GAEL,OADAb,EAAY9B,EAAQC,GAAG2C,QAASD,EAAEE,SAC3B,KAlHnB,IAAsBP,GA0KtB,SAASQ,EAAkB5D,GAEnB6D,MAAMC,QAAQ9D,KACdA,EAAO+B,EAAEgC,OAAO/D,GAAM,SAAUgE,GAC5B,OAAgB,OAATA,KAAmBA,EAAKC,MAAwB,KAAhBD,EAAKC,YAWpD,OAPA5D,OAAOC,KAAKN,GAAMO,SAAQ,SAAUC,GACb,KAAdR,EAAKQ,IAA4B,MAAbR,EAAKQ,KAA+B,IAAdR,EAAKQ,GAEpB,iBAAdR,EAAKQ,KACnBR,EAAKQ,GAAOoD,EAAkB5D,EAAKQ,YAF5BR,EAAKQ,MAKbR,EAnEP4D,CAAkBf,GAElB,IAAIqB,EAAc,GASlB,OARAA,GAAe,YAAcrE,EAAS,MAEtCqE,GAAe,gBADI3B,EAAgB1C,GACW,MAC9CqE,GAAe,kBACfA,GAAe,UAAYxB,EAAO,0BAClCwB,GAAe/E,QAAQ+C,OAAOW,EAAO,GACrCqB,GAAe,eACfA,EAAcA,EAAYC,QAAQ,MAAO,UAClCD,EAiFX,SAASE,EAAeC,EAAQ5E,EAAO6E,EAAeC,EAAQC,EAAQC,EAAcC,EAAIC,EAA8BrF,GA4HlH,SAASsF,EAAcC,GACnBR,EAAOS,oBAAsB,CACzBC,YAAa,EACbC,OAAQ,CACJC,kBAAmB,EACnBC,kBAAmB,EACnBC,gBAAiB,EACjBC,kBAAmB,GAEvBC,WAAYR,EAAS,YAAc,WACnCS,wBAAyBT,EACzBU,IAAK,IACLC,QAAQ,EACRC,IAAK,MAIb,SAASC,EAAkB7F,EAAQ6C,EAAMmC,GAoBrC,OAnBAD,EAAcC,GAEdc,EAAEC,OAAOvB,EAAOS,oBAAqB,CACjCW,IAAKlD,EAAgB1C,GAAU6C,EAC/BA,KAAMA,EACN8C,QAAQ,EACRK,aAAc,WACVxB,EAAOS,oBAAoBgB,cAAcC,QAAQ,aAIzD1B,EAAOS,oBAAoBgB,cAAgBvB,EAAOyB,KAAK,CACnDC,YAAa,+BACbC,WAAY,qBACZC,KAAM,KACNC,SAAU,SACVC,MAAOhC,IAGJA,EAAOS,oBAAoBgB,cAgBtC,SAASQ,EAAcC,EAAWxD,EAAKyD,GACnC,MAAMC,EAAQf,EAAkBa,EAAUvE,MAAOe,EAAIL,MAAM,GAC3DiC,EAA6B+B,cAAcpC,EAAcqC,sBAAuBxG,EAAe,CAACyG,OAAQ7D,EAAIT,SACvGuE,MAAK,WACFvH,EAAsBI,gBAAgBmH,MAAK,WACvCvH,EAAsBQ,aAAaY,mBAAmB6F,EAAUvE,QAAQ6E,MAAK,SAAUC,GACnFzC,EAAO0C,SAASR,EAAU/F,KAAOsG,EAAI9G,WAG7CwE,EAAOwC,QAAQ,qBAAuBjE,EAAIL,SAC3C,SAAUuE,GACTzC,EAAO0C,MAAMC,SAASF,IACtBT,OACDY,SAAQ,WACPX,EAAMV,QAAQ,aA9L1B1B,EAAOgD,QAAS,EAEhBhD,EAAOiD,YAAc,GAErBjD,EAAO0C,SAAW,GAElB1C,EAAOkD,YAAc,GAErBlD,EAAOmD,iBAAmB,WACtB,MAAMC,GAAeC,KAAKC,MAAQtD,EAAOuD,iBAAmB,IACtDC,EAAYxD,EAAOyD,wBAAwBL,GACjD,IAAI9D,EAAU,GAUd,OARIA,EADAU,EAAO0D,gBACG1D,EAAO0D,gBAAkB,OAASF,EAElC,uBAAyBA,EAEnCxD,EAAO2D,cAAgBP,EAAc,KACrC9D,GAAW,KAAOU,EAAO2D,cAGtBrE,GAGXU,EAAO4D,UAAY,SAAUC,EAAWH,EAAiBC,GACjDE,GACA7D,EAAOgD,QAAS,EAChBhD,EAAOuD,gBAAkBF,KAAKC,MAC9BtD,EAAO0D,gBAAkBA,EACzB1D,EAAO2D,aAAeA,IAEtB3D,EAAOgD,QAAS,EAChBhD,EAAO0D,gBAAkB,GACzB1D,EAAO2D,aAAe,KAI9B3D,EAAOzE,cAAgB,SAAU2G,GAC7B,OAAOjH,EAAsBM,cAAcc,mBAAmB6F,EAAUvE,QACnE6E,MAAK,SAAUC,GAGZ,OAFAzC,EAAOkD,YAAYhB,EAAU/F,KAAOsG,EAAI9G,KAEjCV,EAAsBQ,aAAaY,mBAAmB6F,EAAUvE,QAClE6E,MAAK,SAAUC,GACZzC,EAAO0C,SAASR,EAAU/F,KAAOsG,EAAI9G,YAMzDqE,EAAO3E,cAAgB,WACd2E,EAAO8D,kBAGP9D,EAAO+D,uBAIZ/D,EAAO4D,WAAU,EAAM,sBAAuB,kHAE9C3I,EAAsBI,gBACjBmH,MAAK,SAAUC,GACZzC,EAAOgE,WAAahI,OAAOC,KAAKwG,EAAI9G,MAAM8B,KAAI,SAAUtB,GACpD,MAAO,CAACA,IAAKA,EAAKwB,MAAO8E,EAAI9G,KAAKQ,OAGtCkE,EAAG4D,IAAIvG,EAAED,IAAIuC,EAAOgE,YAAY,SAAU9B,GACtC,OAAOlC,EAAOzE,cAAc2G,OAC5Ba,SAAQ,WACRxC,IAEA,MAAMtC,EA7I1B,SAAiC+F,GAC7B,MAAME,EAAgBxG,EAAED,IAAIuG,GACxB,SAAU9G,GACN,MAAO,IAAMA,EAAES,MAAQ,sBACxBrB,KAAK,KAEZ,OAAI4H,EACO,0CAA4CA,EAAgB,aAGhE,KAmIuBC,CAAwBnE,EAAOgE,YAEzC/F,EA8CpB,SAA6BA,GACzB,OAAOH,EAAqB1C,EAAO6E,EAAcqC,sBAAuBrE,GA9CxDmG,CAAoBnG,GACfuE,MAAK,SAAUC,GACZ,MAAM9B,EAnGtC,SAAkC0D,GAC9B,GAAIA,EAAQC,SACR,IAAK,IAAI5H,EAAI,EAAGA,EAAI2H,EAAQC,SAAS3H,OAAQD,IACzC,IACI,MAAM6H,EAAeC,KAAKC,MAAMJ,EAAQC,SAAS5H,GAAGiE,OAAOhD,OAC3D,GAA4B,aAAxB4G,EAAa5D,OACb,MAAO,CACHuB,UAAWmC,EAAQC,SAAS5H,GAAGwF,UAAUvE,MACzCgD,OAAQ4D,GAGlB,MAAOnF,GACLsF,QAAQ7B,MAAMzD,GAK1B,MAAO,GAkFoCuF,CAAyBlC,EAAI9G,KAAK0I,SACjD,GAAI1D,EAAOuB,UAAW,CAElB,MAAM0C,EAAIjE,EAAOuB,UAAU2C,MAAM,KACjCD,EAAE,GAAKA,EAAE,GAAG9E,QAAQ,cAAe,KAmF7CtE,EAlFuBoJ,EAAE,GAkFjBvG,EAlFqBuG,EAAE,GAmFjDrE,IAEAe,EAAEC,OAAOvB,EAAOS,oBAAqB,CACjCW,IAAKlD,EAAgB1C,GAAU6C,EAC/BA,KAAMA,EACN8C,QAAQ,EACRK,aAAc,WACVxB,EAAOS,oBAAoBU,QAAS,KARhD,IAAsB3F,EAAQ6C,KA/EL0E,SAAQ,WACL/C,EAAO4D,WAAU,MAGzB5D,EAAO4D,WAAU,SAG1BkB,OAAM,SAAU1F,GACfY,EAAO4D,WAAU,GACjBzD,EAAO0C,MAAMC,SAAS1D,GAAI,+BAGlCY,EAAO0C,SAAW,KAGtB1C,EAAO+E,WAAa,SAAU7C,GAC1B,OAAOlC,EAAOkD,YAAYhB,EAAU/F,MAGxC6D,EAAOgF,QAAU,SAAUrH,GACvB,OAAO7C,QAAQmK,SAAStH,IAAwC,IAA9B3B,OAAOC,KAAK0B,GAAOhB,QAGzDqD,EAAOkF,aAAe,SAAUvH,GAC5B,OAAO7C,QAAQ+C,OAAOF,EAAO,IAGjCqC,EAAOmF,QAAO,WACV,OAAOlF,EAAcqC,wBACtBtC,EAAO3E,eAEV2E,EAAOmF,QAAO,WACV,OAAOlF,EAAcmF,sBACtBpF,EAAO3E,eA6EV2E,EAAOqF,cAAgB,SAAUnD,EAAW1F,GACxC,IAAI8I,EACCxK,QAAQ0C,YAAYhB,KACrB8I,EAAYxK,QAAQgE,KAAKtC,GACzB8I,EAAUjH,KAAOiH,EAAUjH,KAAO,SAExB6B,EAAOyB,KAAK,CACtBC,YAAa,6BACbC,WAAY,sBACZC,KAAM,KACNC,SAAU,SACVwD,QAAS,CACLrD,UAAW,WACP,OAAOA,GAEX1F,OAAQ,WACJ,OAAO1B,QAAQ0C,YAAY8H,GAAa,CAACjH,KAAM,GAAI7B,OAAQ,IAAM8I,GAErE7I,QAAS,WACL,OAAOuD,EAAO+E,WAAW7C,OAK/BsD,OAAOhD,MAAK,SAAU9D,GACxBuD,EAAcC,EAAWxD,GAAK,WAC1BA,EAAI+G,gBAAiB,EACrBzF,EAAO0F,aAAaxD,EAAWxD,UAK3CsB,EAAO0F,aAAe,SAAUxD,EAAW1F,GACzB0D,EAAOyB,KAAK,CACtBC,YAAa,6BACbC,WAAY,sBACZC,KAAM,KACNC,SAAU,SACVwD,QAAS,CACLrD,UAAW,WACP,OAAOA,GAEX1F,OAAQ,WACJ,OAAO1B,QAAQ0C,YAAYhB,GAAU,CAAC6B,KAAM,GAAI7B,OAAQ,IAAMA,GAElEC,QAAS,WACL,OAAOuD,EAAO+E,WAAW7C,OAK/BsD,OAAOhD,MAAK,SAAU9D,GACxBuD,EAAcC,EAAWxD,GAAK,WAC1BA,EAAI+G,gBAAiB,EACrBzF,EAAO0F,aAAaxD,EAAWxD,UAK3CsB,EAAOQ,OAAS,SAAUmF,EAAMC,GAC5BxF,EAAayF,gBAAgB,CACzBC,MAAO,iBACPxG,QAAS,sHACTyG,SAAS,IACVP,OACEhD,MAAK,WACF,MAAMJ,EAAQf,EAAkBuE,EAAKjI,MAAOgI,EAAKtH,MAAM,GAEjDJ,GA/TQI,EA+TqBsH,EAAKtH,KA7T7C,mBAFyB7C,EA+T0BoK,EAAKjI,OA7T3B,wBADjBO,EAAgB1C,GAGV6C,EAAO,kCAJpC,IAA8BA,EAAM7C,EAiUpB8E,EAA6B+B,cAAcpC,EAAcqC,sBAAuBxG,EAAe,CAACyG,OAAQtE,KACnGuE,MAAK,WACFvH,EAAsBI,gBAAgBmH,MAAK,WACvCvH,EAAsBQ,aAAaY,mBAAmBuJ,EAAKjI,QAAQ6E,MAAK,SAAUC,GAC9EzC,EAAO0C,SAASkD,EAAKzJ,KAAOsG,EAAI9G,WAGxCwE,EAAOwC,QAAQ,sBAAwBgD,EAAKtH,SAC7C,SAAUuE,GACTzC,EAAO0C,MAAMC,SAASF,OACvBG,SAAQ,WACPX,EAAMV,QAAQ,iBAKlC1B,EAAOgG,OAAS,SAAUL,EAAMC,GAC5B,MAAMK,EAAaL,EAAKzJ,IAAI+J,QAAQ,YAAc,GAAKN,EAAKzJ,IAAI+J,QAAQ,SAAW,EAEnFhG,EAAOyB,KAAK,CACRC,YAAa,yDACbC,WAAY,sBACZ0D,QAAS,CACLK,KAAM,WACF,OAAOA,EAAKzJ,KAEhB8J,WAAY,WACR,OAAOA,MAGhBT,OACEhD,MAAK,SAAS2D,GACXnG,EAAO4D,WAAU,EAAM,sBAAwB+B,EAAKtH,KAAM,+DAE1D,MAAMJ,EA3VtB,SAA8BI,EAAM7C,EAAQ2K,GACxC,MAAMC,EAAa5K,EAAO2C,UAAU,EAAG3C,EAAOmB,OAAS,GAAK,aAC5D,MAAO,kBAAoBnB,EAAS,wBAExB4K,EAAa/H,EAAO,4BAA8B8H,EAAQ,QAAU,IAAM,OAuV5DE,CAAqBV,EAAKtH,KAAMuH,EAAKjI,MAAOwI,GAC1D7F,EAA6B+B,cAAcpC,EAAcqC,sBAAuBxG,EAAe,CAACyG,OAAQtE,KACnGuE,MAAK,WACFvH,EAAsBI,gBAAgBmH,MAAK,WACvCvH,EAAsBQ,aAAaY,mBAAmBuJ,EAAKjI,QAAQ6E,MAAK,SAAUC,GAC9EzC,EAAO0C,SAASkD,EAAKzJ,KAAOsG,EAAI9G,WAGpCwK,GACAhG,EAAOwC,QAAQ,kCAAoCgD,EAAKtH,MACpD4H,GACA9F,EAAO4F,QAAQ,kDAAoDH,EAAKzJ,MAG5EgE,EAAOwC,QAAQ,qBAAuBgD,EAAKtH,SAEhD,SAAUuE,GACTzC,EAAO0C,MAAMC,SAASF,OACvBG,SAAQ,WACP/C,EAAO4D,WAAU,UAKrC5D,EAAOsG,UAAY,SAAUpE,EAAWyD,GACpCzF,EAAOyB,KAAK,CACRC,YAAa,uBACbC,WAAY,gBACZ0D,QAAS,CACLtH,MAAO,WACH,MAAMxB,EAAUuD,EAAO+E,WAAW7C,GAClC,OAAO9D,EAAqBuH,EAAKtH,KAAM6D,EAAUvE,MAC7CpB,EAA0BoJ,EAAKnJ,OAAQC,GAAUA,QAQzE,SAAS8J,EAAoBvG,EAAQwG,EAAgBZ,EAAMK,GACvDjG,EAAOmG,OAAQ,EACfnG,EAAO4F,KAAOA,EACd5F,EAAOiG,WAAaA,EAEpBjG,EAAOyG,GAAK,WACRD,EAAeE,MAAM1G,EAAOmG,QAGhCnG,EAAO2G,OAAS,WACZH,EAAe9E,WAKvB,SAASkF,EAAuB5G,EAAQwG,EAAgBtE,EAAWhC,EAAQC,GAyBvE,SAAS0G,IACL,OAAOzI,EAAqB4B,EAAO3B,KAAM6D,EAAUvE,MAAOqC,EAAOxD,OAAQwD,EAAOvD,SAC5E,SAAUqK,EAAOjE,GACb1C,EAAO0C,MAAMA,EAAOiE,MA1BhC9G,EAAOkC,UAAYA,EAEnBlC,EAAO+G,SAAW,SAAUC,EAAOC,GAC/B,MAAMC,EAAWpM,QAAQgE,KAAKkB,EAAOmH,cAAcF,GAAY,IAC/DjH,EAAOxD,OAAOyK,GAAYG,OAAOJ,EAAQ,EAAG,EAAGE,IAGnDlH,EAAOqH,UAAY,SAAUL,EAAOM,GAChCA,EAAMF,OAAOJ,EAAQ,EAAG,EAAG,KAG/BhH,EAAOuH,aAAe,SAAUP,EAAOM,GACnCA,EAAMF,OAAOJ,EAAO,IAGxBhH,EAAOwH,aAAe,SAAUR,EAAOM,GACnCA,EAAMF,OAAOJ,EAAQ,EAAG,EAAG,CAAC7K,IAAK,GAAIwB,MAAO,MAGhDqC,EAAOyH,gBAAkB,SAAUT,EAAOM,GACtCA,EAAMF,OAAOJ,EAAO,IAUxBhH,EAAOyG,GAAK,WACR,GAAIzG,EAAO0H,KAAKC,OAAQ,CACpB,MAAM1J,EAAQ4I,IAEV5I,GACAuI,EAAeE,MAAM,CAACrI,KAAM2B,EAAO3B,KAAM7B,OAAQwD,EAAOxD,OAAQC,QAASuD,EAAOvD,QAASwB,MAAOA,MAK5G+B,EAAOsG,UAAY,WACf,MAAMrI,EAAQ4I,IAEV5I,GACAiC,EAAOyB,KAAK,CACRC,YAAa,uBACbC,WAAY,gBACZ0D,QAAS,CACLtH,MAAO,WACH,OAAOA,OAO3B+B,EAAO2G,OAAS,WACZH,EAAe9E,QAAQ,WAM/B,SAASkG,EAAoB5H,EAAQ6H,EAAazM,EAAOoL,EAAgBtE,EAAWhC,EAAQ1D,EAAQC,GAChG3B,QAAQyG,OAAOuG,KAAMD,EAAY,yBAA0B,CACvD7H,OAAQA,EACRwG,eAAgBA,EAChBtE,UAAWA,EACXhC,OAAQA,KAEZF,EAAOxD,OAASA,EAAOA,OACvBwD,EAAOvD,QAAUA,EACjBuD,EAAO3B,KAAO7B,EAAO6B,KAChB7B,EAAOiJ,iBACRzF,EAAOxD,OAASD,EAA0ByD,EAAOxD,OAAQwD,EAAOvD,UAEpEuD,EAAOmH,cAAgBrM,QAAQgE,KAAKkB,EAAOxD,QAQ/C,SAASuL,EAAmB/H,EAAQgI,EAAW5M,EAAO6E,GAKlD,SAASgI,IACL,MAAMhK,EA5gBd,SAAiCmD,GAC7B,MAAM8G,EAAY9G,EAAItB,QAAQ,iBAAkB,oBAChD,IAAID,EAAc,GAIlB,OAHAA,GAAe,qBACfA,GAAe,MAAQuB,EAAM,MAAQ8G,EAAY,YACjDrI,GAAe,MACRA,EAsgBWsI,CAAwBnI,EAAOS,oBAAoBW,KAGjEpB,EAAOS,oBAAoBW,IAAM,KAEjCpB,EAAOoI,iBAAmBJ,GAAU,YAVxC,SAA6B/J,GACzB,OAAOH,EAAqB1C,EAAO6E,EAAcqC,sBAAuBrE,IAwBpEmG,CAAoBnG,GACfuE,MAAK,SAAUC,GACZ,MAAM9B,EAhBd,SAAkC0D,GAC9B,GAAIA,EAAQC,UACJD,EAAQC,SAAS3H,OAAS,EAC1B,IACI,OAAO6H,KAAKC,MAAMJ,EAAQC,SAAS,GAAG3D,OAAOhD,OAC/C,MAAOyB,GACLsF,QAAQ7B,MAAMzD,GAK1B,MAAO,GAKYiJ,CAAyB5F,EAAI9G,KAAK0I,SAC3B,aAAlB1D,EAAOA,QACPX,EAAOS,oBAAoBE,OAASA,EACpCX,EAAOS,oBAAoBC,aAAe,IAAMC,EAAOC,kBAAoBD,EAAOE,mBAAmByH,QAAQ,GAC7GtI,EAAOS,oBAAoBS,IAAMlB,EAAOyD,wBAAwB9C,EAAO4H,YACvEvI,EAAOS,oBAAoBO,WAAaL,EAAOH,OAAS,YAAc,WACtER,EAAOS,oBAAoBQ,uBAAwB,GAC1B,UAAlBN,EAAOA,QAAuBX,EAAOS,oBAAoBQ,wBAEhE+G,EAAUrB,OAAO3G,EAAOoI,kBACpBpI,EAAOS,oBAAoBe,cAC3BxB,EAAOS,oBAAoBe,qBAI5C,KAEHxB,EAAOwI,IAAI,YAAY,WACnBR,EAAUrB,OAAO3G,EAAOoI,qBAIhCpI,EAAOS,oBAAsBT,EAAOS,qBAAuB,IAGtDT,EAAOS,oBAAoBU,QAAUnB,EAAOS,oBAAoBW,KACjE6G,IAIJjI,EAAOmF,OAAO,2BAA2B,SAAUxH,GAC3CqC,EAAOS,oBAAoBU,QAAUxD,GACrCsK,OA7tBZnN,QACKC,OAAO,6CANI,CACZ,oDACA,8CAKC8G,WAAW,iBAAkB9B,GAC7B8B,WAAW,yBAA0B+E,GACrC/E,WAAW,sBAAuB+F,GAClC/F,WAAW,qBAAsBkG,GACjClG,WAAW,sBAAuB0E,GAClC7G,OAAO,QA2tBZ,WACI,OAAO,SAAU+I,GACb,OAAOC,KAAKC,KAAKF,OA7fzB1I,EAAe7E,QAAU,CAAC,SAAU,QAAS,gBAAiB,SAAU,SAAU,eAAgB,KAAM,+BAAgC,yBAoVxIqL,EAAoBrL,QAAU,CAAC,SAAU,iBAAkB,OAAQ,cAenE0L,EAAuB1L,QAAU,CAAC,SAAU,iBAAkB,YAAa,SAAU,UAgErF0M,EAAoB1M,QAAU,CAAC,SAAU,cAAe,QAAS,iBAAkB,YAAa,SAAU,SAAU,WAqBpH6M,EAAmB7M,QAAU,CAAC,SAAU,YAAa,QAAS,kB,gCCvqB9D,YAEAJ,QAAQC,OAAO,4CAA6C,IACvD6N,UAAU,kBAAkB,WACzB,MAAO,CACHhH,YAAa,+BACbC,WAAY,qBACZgH,SAAU,U,gCCPtB,mCAaqB/N,QAAQC,OAAO,iCAPpB,CACZ,qCACA,6CACA,4CACA,sCAKS2E,OAAO,YAAY,WAC5B,OAAO,SAAUoJ,GACb,OAAIhO,QAAQ0C,YAAYsL,GACbA,EAEAA,EAAKhJ,QAAQ,OAAQ,KAAKA,QAAQ,KAAM","file":"25.5b3feb79a7be0ca1f4ad.bundle.js","sourcesContent":["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 function getConnectors() {\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n function hasConnector(prefix) {\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","import 'angular/rest/rdf4j.repositories.rest.service';\nimport 'angular/rest/connectors.rest.service';\n\nconst modules = [\n 'graphdb.framework.rest.rdf4j.repositories.service',\n 'graphdb.framework.rest.connectors.service'\n];\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) {\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('Key may not be empty with value \"' + value.value + '\"');\n } else if (acc.hasOwnProperty(value.key)) {\n throw new Error('Duplicate 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] = angular.copy(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]);\n } else if (options[i].__type === 'JsonString') {\n fcopy[options[i].__name] = angular.fromJson(fcopy[options[i].__name]);\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\"; // eslint-disable-line quotes\n finalString += angular.toJson(fcopy, 2);\n finalString += \"\\n''' .\\n}\\n\"; // eslint-disable-line quotes\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] !== 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 console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n return {};\n}\n\nConnectorsCtrl.$inject = ['$scope', '$http', '$repositories', '$modal', 'toastr', 'ModalService', '$q', 'RDF4JRepositoriesRestService', 'ConnectorsRestService'];\n\nfunction ConnectorsCtrl($scope, $http, $repositories, $modal, toastr, ModalService, $q, RDF4JRepositoriesRestService, ConnectorsRestService) {\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 = 'Running operation...' + 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\n $scope.getConnectors = function () {\n if (!$scope.isLicenseValid()) {\n return;\n }\n if (!$scope.canWriteActiveRepo()) {\n return;\n }\n\n $scope.setLoader(true, 'Fetching connectors', 'Normally this is a fast operation but it may take longer if a bigger repository needs to be initialised first.');\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), 'Could not get connectors');\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 ? 'Repairing' : '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 = $modal.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('Created connector ' + 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 = angular.copy(values);\n newValues.name = newValues.name + '-copy';\n }\n const modal = $modal.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 = $modal.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: 'Confirm repair',\n message: 'Are you sure you want to repair this connector?<br>Note that repair means delete + recreate with the same settings.',\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('Repaired connector ' + 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 $modal.open({\n templateUrl: 'js/angular/externalsync/templates/deleteConnector.html',\n controller: 'DeleteConnectorCtrl',\n resolve: {\n type: function () {\n return type.key;\n },\n isExternal: function () {\n return isExternal;\n }\n }\n }).result\n .then(function(force) {\n $scope.setLoader(true, 'Deleting connector ' + inst.name, 'This is usually a fast operation but it might take a while.');\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(\"Deleted (with force) connector \" + inst.name);\n if (isExternal) {\n toastr.warning(\"You may have to remove the index manually from \" + type.key);\n }\n } else {\n toastr.success(\"Deleted connector \" + 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 $modal.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', '$modalInstance', 'type', 'isExternal'];\nfunction DeleteConnectorCtrl($scope, $modalInstance, type, isExternal) {\n $scope.force = false;\n $scope.type = type;\n $scope.isExternal = isExternal;\n\n $scope.ok = function () {\n $modalInstance.close($scope.force);\n };\n\n $scope.cancel = function () {\n $modalInstance.dismiss();\n };\n}\n\nExtendNewConnectorCtrl.$inject = ['$scope', '$modalInstance', 'connector', '$modal', 'toastr'];\nfunction ExtendNewConnectorCtrl($scope, $modalInstance, connector, $modal, toastr) {\n\n $scope.connector = connector;\n\n $scope.addField = function (index, optionName) {\n const newField = angular.copy($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 $modalInstance.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 $modal.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 $modalInstance.dismiss('cancel');\n };\n}\n\nCreateConnectorCtrl.$inject = ['$scope', '$controller', '$http', '$modalInstance', 'connector', '$modal', 'values', 'options'];\n\nfunction CreateConnectorCtrl($scope, $controller, $http, $modalInstance, connector, $modal, values, options) {\n angular.extend(this, $controller('ExtendNewConnectorCtrl', {\n $scope: $scope,\n $modalInstance: $modalInstance,\n connector: connector,\n $modal: $modal\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 = angular.copy($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'];\n\nfunction CreateProgressCtrl($scope, $interval, $http, $repositories) {\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 console.error(e); // eslint-disable-line no-console\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 ? 'Repairing' : '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","import 'angular/core/services';\n\nangular.module('graphdb.framework.externalsync.directives', [])\n .directive('createProgress', function () {\n return {\n templateUrl: 'pages/connectorProgress.html',\n controller: 'CreateProgressCtrl',\n restrict: 'EA'\n };\n });\n","import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/core/controllers';\nimport 'angular/externalsync/controllers';\nimport 'angular/externalsync/directives';\n\nconst modules = [\n 'graphdb.framework.core.controllers',\n 'graphdb.framework.externalsync.controllers',\n 'graphdb.framework.externalsync.directives',\n 'graphdb.framework.core.directives'\n];\n\nconst externalsync = angular.module('graphdb.framework.externalsync', modules);\n\nexternalsync.filter('singular', function () {\n return function (noun) {\n if (angular.isUndefined(noun)) {\n return noun;\n } else {\n return noun.replace(/ies$/, 'y').replace(/s$/, '');\n }\n };\n});\n"],"sourceRoot":""}