graphdb-workbench 1.11.2 → 1.11.3-TR1

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 (273) hide show
  1. package/dist/10.94e753e068396d6b6ec9.bundle.js +2 -0
  2. package/dist/10.94e753e068396d6b6ec9.bundle.js.map +1 -0
  3. package/dist/11.043e8d20764e39c10e31.bundle.js +2 -0
  4. package/dist/11.043e8d20764e39c10e31.bundle.js.map +1 -0
  5. package/dist/111.73819c3722ceee587ce7.bundle.js +2 -0
  6. package/dist/111.73819c3722ceee587ce7.bundle.js.map +1 -0
  7. package/dist/112.b48a6ea437c1c3ddd7b5.bundle.js +2 -0
  8. package/dist/112.b48a6ea437c1c3ddd7b5.bundle.js.map +1 -0
  9. package/dist/113.09a0a17c31bfc387c352.bundle.js +2 -0
  10. package/dist/113.09a0a17c31bfc387c352.bundle.js.map +1 -0
  11. package/dist/{114.edebb3161ce52d4ca2e1.bundle.js → 114.dcc909bf7059e08fad2a.bundle.js} +2 -2
  12. package/dist/{114.edebb3161ce52d4ca2e1.bundle.js.map → 114.dcc909bf7059e08fad2a.bundle.js.map} +1 -1
  13. package/dist/119.08aed6d34851afdefac5.bundle.js +2 -0
  14. package/dist/119.08aed6d34851afdefac5.bundle.js.map +1 -0
  15. package/dist/12.bb55709d82da219afedf.bundle.js +2 -0
  16. package/dist/12.bb55709d82da219afedf.bundle.js.map +1 -0
  17. package/dist/121.574db48a413271cafc2e.bundle.js +2 -0
  18. package/dist/121.574db48a413271cafc2e.bundle.js.map +1 -0
  19. package/dist/123.9ba8fea15f3fcddc734d.bundle.js +2 -0
  20. package/dist/123.9ba8fea15f3fcddc734d.bundle.js.map +1 -0
  21. package/dist/125.4ffda62ed511df3132f6.bundle.js +2 -0
  22. package/dist/125.4ffda62ed511df3132f6.bundle.js.map +1 -0
  23. package/dist/126.c5fd3ba65878ffcc3c03.bundle.js +2 -0
  24. package/dist/126.c5fd3ba65878ffcc3c03.bundle.js.map +1 -0
  25. package/dist/129.5d023d0fbbb2c517932c.bundle.js +2 -0
  26. package/dist/129.5d023d0fbbb2c517932c.bundle.js.map +1 -0
  27. package/dist/131.e7a34e7f2b2e5898249d.bundle.js +2 -0
  28. package/dist/131.e7a34e7f2b2e5898249d.bundle.js.map +1 -0
  29. package/dist/132.b98cc245bf2c668b2ffd.bundle.js +2 -0
  30. package/dist/132.b98cc245bf2c668b2ffd.bundle.js.map +1 -0
  31. package/dist/134.72b76429fe72a9fc5119.bundle.js +2 -0
  32. package/dist/134.72b76429fe72a9fc5119.bundle.js.map +1 -0
  33. package/dist/136.991f41ef4565f68c31a7.bundle.js +2 -0
  34. package/dist/136.991f41ef4565f68c31a7.bundle.js.map +1 -0
  35. package/dist/137.b62f0afcb15c29764c04.bundle.js +2 -0
  36. package/dist/137.b62f0afcb15c29764c04.bundle.js.map +1 -0
  37. package/dist/138.fba22be7b3b98750e0c3.bundle.js +2 -0
  38. package/dist/138.fba22be7b3b98750e0c3.bundle.js.map +1 -0
  39. package/dist/{14.0c709b039159410b0b91.bundle.js → 14.6f8b993e972dee32e159.bundle.js} +2 -2
  40. package/dist/14.6f8b993e972dee32e159.bundle.js.map +1 -0
  41. package/dist/140.b4777706146b1ac867ed.bundle.js +2 -0
  42. package/dist/140.b4777706146b1ac867ed.bundle.js.map +1 -0
  43. package/dist/141.4464fb26b1893e0dbc7a.bundle.js +2 -0
  44. package/dist/141.4464fb26b1893e0dbc7a.bundle.js.map +1 -0
  45. package/dist/142.4d4fdae663dbeb2df310.bundle.js +2 -0
  46. package/dist/142.4d4fdae663dbeb2df310.bundle.js.map +1 -0
  47. package/dist/145.c9ab7d2a56005326406c.bundle.js +2 -0
  48. package/dist/145.c9ab7d2a56005326406c.bundle.js.map +1 -0
  49. package/dist/146.f5efcb8ef74bf52d3daf.bundle.js +2 -0
  50. package/dist/146.f5efcb8ef74bf52d3daf.bundle.js.map +1 -0
  51. package/dist/{147.0798c61ee5472e70b552.bundle.js → 147.fa44265c07ea2c3c5615.bundle.js} +2 -2
  52. package/dist/{147.0798c61ee5472e70b552.bundle.js.map → 147.fa44265c07ea2c3c5615.bundle.js.map} +1 -1
  53. package/dist/148.8b1e910543c6c25b2f0b.bundle.js +2 -0
  54. package/dist/148.8b1e910543c6c25b2f0b.bundle.js.map +1 -0
  55. package/dist/15.eb562ad073aa0fcd725f.bundle.js +2 -0
  56. package/dist/15.eb562ad073aa0fcd725f.bundle.js.map +1 -0
  57. package/dist/16.0a3c03f05a4bbdfe83ef.bundle.js +2 -0
  58. package/dist/16.0a3c03f05a4bbdfe83ef.bundle.js.map +1 -0
  59. package/dist/18.c3e44ed00a2532402729.bundle.js +3 -0
  60. package/dist/18.c3e44ed00a2532402729.bundle.js.map +1 -0
  61. package/dist/20.264daf29beccbf7de84a.bundle.js +2 -0
  62. package/dist/20.264daf29beccbf7de84a.bundle.js.map +1 -0
  63. package/dist/22.e85ffde858c596437b7a.bundle.js +1 -1
  64. package/dist/22.e85ffde858c596437b7a.bundle.js.map +1 -1
  65. package/dist/23.c58eff831306fad29d42.bundle.js +2 -0
  66. package/dist/23.c58eff831306fad29d42.bundle.js.map +1 -0
  67. package/dist/25.8c10d875bf32c8648157.bundle.js +2 -0
  68. package/dist/25.8c10d875bf32c8648157.bundle.js.map +1 -0
  69. package/dist/{26.57526f30f6b3c581334d.bundle.js → 26.c59631eb4bc0bf8d26b2.bundle.js} +2 -2
  70. package/dist/26.c59631eb4bc0bf8d26b2.bundle.js.map +1 -0
  71. package/dist/27.ed9e0cc8aaa3a12c1fa2.bundle.js +2 -0
  72. package/dist/27.ed9e0cc8aaa3a12c1fa2.bundle.js.map +1 -0
  73. package/dist/28.8f5d9fc8ee46db2a6357.bundle.js +2 -0
  74. package/dist/28.8f5d9fc8ee46db2a6357.bundle.js.map +1 -0
  75. package/dist/30.d341c7532759bc79f41a.bundle.js +1 -1
  76. package/dist/30.d341c7532759bc79f41a.bundle.js.map +1 -1
  77. package/dist/{32.ba5b5ca3e4b7dcf5bd15.bundle.js → 32.1059e272ed99ba3db699.bundle.js} +2 -2
  78. package/dist/32.1059e272ed99ba3db699.bundle.js.map +1 -0
  79. package/dist/{35.b8c8d16a8707c20a1fcb.bundle.js → 35.1f53c71368afc468cc10.bundle.js} +2 -2
  80. package/dist/35.1f53c71368afc468cc10.bundle.js.map +1 -0
  81. package/dist/{36.d96e6ee811e8340ae320.bundle.js → 36.aced0c9768c16e4d29ef.bundle.js} +2 -2
  82. package/dist/36.aced0c9768c16e4d29ef.bundle.js.map +1 -0
  83. package/dist/37.dcbe2e4e1f86ca2da209.bundle.js +1 -1
  84. package/dist/37.dcbe2e4e1f86ca2da209.bundle.js.map +1 -1
  85. package/dist/38.171aa543e807777b4f29.bundle.js +1 -1
  86. package/dist/38.171aa543e807777b4f29.bundle.js.map +1 -1
  87. package/dist/40.f660048c67e9b6d478dc.bundle.js +2 -0
  88. package/dist/40.f660048c67e9b6d478dc.bundle.js.map +1 -0
  89. package/dist/{42.190f8880ee8f3a97a042.bundle.js → 42.9bbccd6cb2c263d7b873.bundle.js} +2 -2
  90. package/dist/42.9bbccd6cb2c263d7b873.bundle.js.map +1 -0
  91. package/dist/{43.899bf21ce1de203ace21.bundle.js → 43.6f609ec150488009b166.bundle.js} +2 -2
  92. package/dist/43.6f609ec150488009b166.bundle.js.map +1 -0
  93. package/dist/{44.c649782fa0755b53a62c.bundle.js → 44.8be8b582a97146d3ad6f.bundle.js} +2 -2
  94. package/dist/44.8be8b582a97146d3ad6f.bundle.js.map +1 -0
  95. package/dist/47.b94dca10f70c70009f46.bundle.js +2 -0
  96. package/dist/47.b94dca10f70c70009f46.bundle.js.map +1 -0
  97. package/dist/{48.52c5b13ab244c45a8c43.bundle.js → 48.10699147cdbee9af3c2b.bundle.js} +2 -2
  98. package/dist/48.10699147cdbee9af3c2b.bundle.js.map +1 -0
  99. package/dist/{5.21d2da4b4bc2b26e2534.bundle.js → 5.275d1f74283aff0821f2.bundle.js} +2 -2
  100. package/dist/5.275d1f74283aff0821f2.bundle.js.map +1 -0
  101. package/dist/{56.ce399f5788c0f5fe937b.bundle.js → 56.dae3cb719fcb013d7a06.bundle.js} +2 -2
  102. package/dist/56.dae3cb719fcb013d7a06.bundle.js.map +1 -0
  103. package/dist/68.5fa639981e7ce624fb73.bundle.js +2 -0
  104. package/dist/68.5fa639981e7ce624fb73.bundle.js.map +1 -0
  105. package/dist/{7.a0f5ec224bebd08058f4.bundle.js → 7.9946929545b7635857ac.bundle.js} +2 -2
  106. package/dist/7.9946929545b7635857ac.bundle.js.map +1 -0
  107. package/dist/75.3dd1e0c0ad0cf40ed6a1.bundle.js +2 -0
  108. package/dist/75.3dd1e0c0ad0cf40ed6a1.bundle.js.map +1 -0
  109. package/dist/78.6caec59329b53bb098ee.bundle.js +2 -0
  110. package/dist/78.6caec59329b53bb098ee.bundle.js.map +1 -0
  111. package/dist/{79.f4a2c3ec71bed08d61b9.bundle.js → 79.0f7567cb18c210d45806.bundle.js} +2 -2
  112. package/dist/79.0f7567cb18c210d45806.bundle.js.map +1 -0
  113. package/dist/{9.c9fc88a79b7990e29e04.bundle.js → 9.c4b55fc1e3fc858be626.bundle.js} +2 -2
  114. package/dist/9.c4b55fc1e3fc858be626.bundle.js.map +1 -0
  115. package/dist/{94.3efcd047d4d4e506cbd7.bundle.js → 94.afe4c166f07dbf1bc30f.bundle.js} +2 -2
  116. package/dist/94.afe4c166f07dbf1bc30f.bundle.js.map +1 -0
  117. package/dist/{96.754454264340bc9d9a70.bundle.js → 96.f7d3f181e8860ce2bd8b.bundle.js} +2 -2
  118. package/dist/96.f7d3f181e8860ce2bd8b.bundle.js.map +1 -0
  119. package/dist/bundle.48ae48a008439cff2323.bundle.js +79 -0
  120. package/dist/bundle.48ae48a008439cff2323.bundle.js.map +1 -0
  121. package/dist/index.html +7 -7
  122. package/dist/js/angular/core/directives/queryeditor/templates/query-editor.html +18 -18
  123. package/dist/js/angular/core/directives/queryeditor/templates/query-sample.html +1 -1
  124. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +3 -3
  125. package/dist/js/angular/core/templates/core-errors.html +1 -1
  126. package/dist/js/angular/core/templates/search-resource-input.html +3 -3
  127. package/dist/js/angular/externalsync/templates/deleteConnector.html +1 -1
  128. package/dist/js/angular/graphexplore/templates/modal/save-graph.html +1 -1
  129. package/dist/js/angular/graphexplore/templates/rdfsCommentLabelTemplate.html +3 -3
  130. package/dist/js/angular/graphexplore/templates/searchIconInputTemplate.html +3 -3
  131. package/dist/js/angular/import/templates/filesTable.html +12 -12
  132. package/dist/js/angular/import/templates/settingsModal.html +19 -19
  133. package/dist/js/angular/import/templates/textSnippet.html +4 -4
  134. package/dist/js/angular/import/templates/urlImport.html +4 -4
  135. package/dist/js/angular/repositories/templates/fedx-repo.html +28 -19
  136. package/dist/js/angular/repositories/templates/ontop-repo.html +8 -8
  137. package/dist/js/angular/security/templates/modal/default-authorities.html +3 -3
  138. package/dist/js/angular/security/templates/user.html +12 -12
  139. package/dist/js/angular/security/templates/users.html +11 -11
  140. package/dist/js/angular/settings/modal/location-settings.html +5 -5
  141. package/dist/js/angular/templates/modal/add-location.html +3 -3
  142. package/dist/js/angular/templates/modal/edit-location.html +3 -3
  143. package/dist/js/angular/templates/modal/editRepoFile.html +1 -1
  144. package/dist/js/angular/templates/modal/upload-repository-config.html +2 -2
  145. package/dist/pages/autocomplete.html +8 -8
  146. package/dist/pages/choose-repository-type.html +1 -1
  147. package/dist/pages/clusterInfo.html +2 -2
  148. package/dist/pages/connectorsInfo.html +5 -5
  149. package/dist/pages/create-index.html +16 -16
  150. package/dist/pages/createConnector.html +22 -22
  151. package/dist/pages/dependencies.html +12 -12
  152. package/dist/pages/domainRangeInfo.html +4 -4
  153. package/dist/pages/edit.html +7 -7
  154. package/dist/pages/explore.html +10 -10
  155. package/dist/pages/export.html +14 -14
  156. package/dist/pages/find.html +2 -2
  157. package/dist/pages/graph-config/saveGraphConfig.html +28 -40
  158. package/dist/pages/graphs-visualizations.html +46 -46
  159. package/dist/pages/home.html +10 -10
  160. package/dist/pages/import.html +7 -7
  161. package/dist/pages/info.html +16 -16
  162. package/dist/pages/jdbc-create.html +20 -20
  163. package/dist/pages/jdbc.html +3 -3
  164. package/dist/pages/licenseInfo.html +1 -1
  165. package/dist/pages/login.html +2 -2
  166. package/dist/pages/monitor/queries.html +6 -6
  167. package/dist/pages/monitor/resources.html +3 -3
  168. package/dist/pages/namespaces.html +14 -14
  169. package/dist/pages/ontorefine.html +1 -1
  170. package/dist/pages/rdfClassHierarchyInfo.html +16 -16
  171. package/dist/pages/rdfrank.html +17 -17
  172. package/dist/pages/registerLicenseInfo.html +3 -3
  173. package/dist/pages/repositories.html +22 -22
  174. package/dist/pages/repository.html +28 -28
  175. package/dist/pages/similarity-indexes.html +15 -15
  176. package/dist/pages/sparql-template-create.html +9 -9
  177. package/dist/pages/sparql-templates.html +3 -3
  178. package/dist/pages/sparql.html +8 -8
  179. package/dist/pages/webapi.html +3 -3
  180. package/dist/res/swagger/index.html +25 -25
  181. package/package.json +5 -4
  182. package/dist/10.f0277e5092cea150b5a8.bundle.js +0 -2
  183. package/dist/10.f0277e5092cea150b5a8.bundle.js.map +0 -1
  184. package/dist/11.bdd794940dcfd5daa9a1.bundle.js +0 -2
  185. package/dist/11.bdd794940dcfd5daa9a1.bundle.js.map +0 -1
  186. package/dist/111.056eb71072bfd8f6551b.bundle.js +0 -2
  187. package/dist/111.056eb71072bfd8f6551b.bundle.js.map +0 -1
  188. package/dist/112.50fd62c66c6594e055a3.bundle.js +0 -2
  189. package/dist/112.50fd62c66c6594e055a3.bundle.js.map +0 -1
  190. package/dist/113.2c059fa7d06fd04149eb.bundle.js +0 -2
  191. package/dist/113.2c059fa7d06fd04149eb.bundle.js.map +0 -1
  192. package/dist/119.dfdf8b9afa2c31b90232.bundle.js +0 -2
  193. package/dist/119.dfdf8b9afa2c31b90232.bundle.js.map +0 -1
  194. package/dist/12.a3762f9fba854a28c1cb.bundle.js +0 -2
  195. package/dist/12.a3762f9fba854a28c1cb.bundle.js.map +0 -1
  196. package/dist/121.aa10886f87136602a6cf.bundle.js +0 -2
  197. package/dist/121.aa10886f87136602a6cf.bundle.js.map +0 -1
  198. package/dist/123.318a247a0939300080aa.bundle.js +0 -2
  199. package/dist/123.318a247a0939300080aa.bundle.js.map +0 -1
  200. package/dist/125.4978d60a14b65499a047.bundle.js +0 -2
  201. package/dist/125.4978d60a14b65499a047.bundle.js.map +0 -1
  202. package/dist/126.4a830f0d18f079b1dca7.bundle.js +0 -2
  203. package/dist/126.4a830f0d18f079b1dca7.bundle.js.map +0 -1
  204. package/dist/129.7ca4a0a32cacb6feb225.bundle.js +0 -2
  205. package/dist/129.7ca4a0a32cacb6feb225.bundle.js.map +0 -1
  206. package/dist/131.087611adf6562e7e1b00.bundle.js +0 -2
  207. package/dist/131.087611adf6562e7e1b00.bundle.js.map +0 -1
  208. package/dist/132.b1ed3e4c9238c5b6303b.bundle.js +0 -2
  209. package/dist/132.b1ed3e4c9238c5b6303b.bundle.js.map +0 -1
  210. package/dist/134.653804476f9803033cbe.bundle.js +0 -2
  211. package/dist/134.653804476f9803033cbe.bundle.js.map +0 -1
  212. package/dist/136.5d60eb9d8d66581003ce.bundle.js +0 -2
  213. package/dist/136.5d60eb9d8d66581003ce.bundle.js.map +0 -1
  214. package/dist/137.0cfdd5934c6a400ab990.bundle.js +0 -2
  215. package/dist/137.0cfdd5934c6a400ab990.bundle.js.map +0 -1
  216. package/dist/138.611df35cbfdfec860909.bundle.js +0 -2
  217. package/dist/138.611df35cbfdfec860909.bundle.js.map +0 -1
  218. package/dist/14.0c709b039159410b0b91.bundle.js.map +0 -1
  219. package/dist/140.b0310ba39e9c3237f48a.bundle.js +0 -2
  220. package/dist/140.b0310ba39e9c3237f48a.bundle.js.map +0 -1
  221. package/dist/141.5d76be84a3151e69fc9d.bundle.js +0 -2
  222. package/dist/141.5d76be84a3151e69fc9d.bundle.js.map +0 -1
  223. package/dist/142.a4094b510036aaf72b0b.bundle.js +0 -2
  224. package/dist/142.a4094b510036aaf72b0b.bundle.js.map +0 -1
  225. package/dist/145.6536295098a4f2e030e3.bundle.js +0 -2
  226. package/dist/145.6536295098a4f2e030e3.bundle.js.map +0 -1
  227. package/dist/146.ee9db0da29c25ec7fbf9.bundle.js +0 -2
  228. package/dist/146.ee9db0da29c25ec7fbf9.bundle.js.map +0 -1
  229. package/dist/148.0ce4968734a80e71b2b9.bundle.js +0 -2
  230. package/dist/148.0ce4968734a80e71b2b9.bundle.js.map +0 -1
  231. package/dist/15.fc7c799455b5aec64393.bundle.js +0 -2
  232. package/dist/15.fc7c799455b5aec64393.bundle.js.map +0 -1
  233. package/dist/16.005766c64d76f95231b1.bundle.js +0 -2
  234. package/dist/16.005766c64d76f95231b1.bundle.js.map +0 -1
  235. package/dist/18.2ddbba81e5b663db1894.bundle.js +0 -3
  236. package/dist/18.2ddbba81e5b663db1894.bundle.js.map +0 -1
  237. package/dist/20.a35d80fb5e80ae3874ce.bundle.js +0 -2
  238. package/dist/20.a35d80fb5e80ae3874ce.bundle.js.map +0 -1
  239. package/dist/23.102a20601f717ba91551.bundle.js +0 -2
  240. package/dist/23.102a20601f717ba91551.bundle.js.map +0 -1
  241. package/dist/25.bd69d5c4040e1547800b.bundle.js +0 -2
  242. package/dist/25.bd69d5c4040e1547800b.bundle.js.map +0 -1
  243. package/dist/26.57526f30f6b3c581334d.bundle.js.map +0 -1
  244. package/dist/27.ab75434b1389b977291c.bundle.js +0 -2
  245. package/dist/27.ab75434b1389b977291c.bundle.js.map +0 -1
  246. package/dist/28.b2180a7cba95d9328e1a.bundle.js +0 -2
  247. package/dist/28.b2180a7cba95d9328e1a.bundle.js.map +0 -1
  248. package/dist/32.ba5b5ca3e4b7dcf5bd15.bundle.js.map +0 -1
  249. package/dist/35.b8c8d16a8707c20a1fcb.bundle.js.map +0 -1
  250. package/dist/36.d96e6ee811e8340ae320.bundle.js.map +0 -1
  251. package/dist/40.c754ab2b3b35c2acb854.bundle.js +0 -2
  252. package/dist/40.c754ab2b3b35c2acb854.bundle.js.map +0 -1
  253. package/dist/42.190f8880ee8f3a97a042.bundle.js.map +0 -1
  254. package/dist/43.899bf21ce1de203ace21.bundle.js.map +0 -1
  255. package/dist/44.c649782fa0755b53a62c.bundle.js.map +0 -1
  256. package/dist/47.421938875d2461427ae3.bundle.js +0 -2
  257. package/dist/47.421938875d2461427ae3.bundle.js.map +0 -1
  258. package/dist/48.52c5b13ab244c45a8c43.bundle.js.map +0 -1
  259. package/dist/5.21d2da4b4bc2b26e2534.bundle.js.map +0 -1
  260. package/dist/56.ce399f5788c0f5fe937b.bundle.js.map +0 -1
  261. package/dist/68.6b887fe6160e5bd8742b.bundle.js +0 -2
  262. package/dist/68.6b887fe6160e5bd8742b.bundle.js.map +0 -1
  263. package/dist/7.a0f5ec224bebd08058f4.bundle.js.map +0 -1
  264. package/dist/75.dbd9915663de96056138.bundle.js +0 -2
  265. package/dist/75.dbd9915663de96056138.bundle.js.map +0 -1
  266. package/dist/78.608f8074bef29a89d68b.bundle.js +0 -2
  267. package/dist/78.608f8074bef29a89d68b.bundle.js.map +0 -1
  268. package/dist/79.f4a2c3ec71bed08d61b9.bundle.js.map +0 -1
  269. package/dist/9.c9fc88a79b7990e29e04.bundle.js.map +0 -1
  270. package/dist/94.3efcd047d4d4e506cbd7.bundle.js.map +0 -1
  271. package/dist/96.754454264340bc9d9a70.bundle.js.map +0 -1
  272. package/dist/bundle.ac70985c70f7da448f2d.bundle.js +0 -79
  273. package/dist/bundle.ac70985c70f7da448f2d.bundle.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/repositories/repository.constants.js","webpack:///./src/js/angular/repositories/controllers.js"],"names":["STATIC_RULESETS","id","name","REPOSITORY_TYPES","free","eeWorker","eeMaster","ontop","se","fedx","FILENAME_PATTERN","RegExp","NUMBER_PATTERN","REPO_TOOLTIPS","title","readOnly","ruleset","rulesetWarnings","needsSameAs","doesntNeedSameAs","customRuleset","disableSameAs","checkForInconsistencies","isShacl","shaclOptions","cacheSelectNodes","undefinedTargetValidatesAllSubjects","logValidationPlans","logValidationViolations","parallelValidation","globalLogValidationExecution","performanceLogging","eclipseRdf4jShaclExtensions","dashDataShapes","entityIdSize","enableContextIndex","enablePredicateList","queryTimeout","throwQueryEvaluationExceptionOnTimeout","queryLimitResults","nonInterpretablePredicates","driverType","propertiesFile","hostName","port","portIfRequired","databaseName","userName","password","driverClass","driverClassWarning","url","obdaFile","owlFile","constraintFile","dbMetadataFile","testConn","repositoryNotExistWarning","localReposInstructions","withLogQueries","withDebugQueryPlan","enforceMaxQueryTime","withIncludeInferredDefault","withBoundJoinBlockSize","withJoinWorkerThreads","withLeftJoinWorkerThreads","unionWorkerThreads","withLogQueryPlan","withEnableServiceAsBoundJoin","withSourceSelectionCacheSpec","removeMember","editRepository","setAsWritable","getFileName","path","lastIdx","lastIndexOf","substring","parseNumberParamsIfNeeded","params","value","parseInt","validationResultsLimitTotal","validationResultsLimitPerConstraint","leftJoinWorkerThreads","boundJoinBlockSize","joinWorkerThreads","parseMemberParamIfNeeded","param","member","getShaclOptionsClass","optionsModule","document","getElementById","isAriaExpanded","getAttribute","validateNumberFields","invalidValues","isInvalidQueryTimeout","test","isInvalidValidationResultsLimitTotal","isInvalidValidationResultsLimitPerConstraint","isInvalidQueryLimit","isInvalidLeftJoinWorkerThreads","isInvalidBoundJoinBlockSize","isInvalidJoinWorkerThreads","isInvalidUnionWorkerThreads","checkInvalidValues","invalidValuesKeys","Object","keys","invalidValuesVal","values","i","length","getDocBase","productInfo","productShortVersion","productType","LocationsAndRepositoriesCtrl","$scope","$uibModal","toastr","$repositories","ModalService","$jwtAuth","LocationsRestService","LocalStorageAdapter","$interval","loader","isLocationInactive","location","active","hasActiveLocation","getLocations","getActiveLocation","getLocationError","getDegradedReason","getRepositories","deleteLocation","uri","openSimpleModal","message","warning","result","then","addLocationHttp","dataAddLocation","addLocation","success","data","locations","init","error","msg","getError","open","templateUrl","windowClass","controller","editLocationHttp","dataEditLocation","editLocation","resolve","activateLocationRequest","enableLocation","setRepository","$$hashKey","checked","activateLocation","deleteRepository","repositoryId","repoId","cashedDependenciesGraphPrefix","cashedClassHierarchyGraphPrefix","angular","forEach","key","startsWith","remove","removeCachedGraphsOnDelete","restartRepository","toggleDefaultRepository","getDefaultRepository","setDefaultRepository","getRepositoryDownloadLink","repository","type","token","getAuthToken","encodeURIComponent","copyToClipboard","openCopyToClipboardModal","fromFile","openActiveLocationSettings","timer","initQuick","$on","cancel","UploadRepositoryConfigCtrl","$uibModalInstance","Upload","upload","files","uploadFile","ok","uploadFileLoader","method","config","close","dismiss","AddLocationCtrl","newLocation","docBase","isValidLocation","indexOf","EditLocationCtrl","editedLocation","copy","ChooseRepositoryCtrl","$location","isEnterprise","isFreeEdition","pageTitle","repositoryTypes","chooseRepositoryType","repoType","AddRepositoryCtrl","$timeout","$routeParams","RepositoriesRestService","repositoryType","rulesets","slice","repoTooltips","enable","repositoryInfo","getConfig","getRepositoryConfiguration","element","find","focus","isValidEERepository","isValidSERepository","isValidFRRepository","isValidOntopRepository","isValidFedXRepository","setPageTitle","activeLocation","isInvalidPieFile","uploadRuleset","progress","evt","fileName","newValue","fileLocation","rulesetPie","unshift","rulesetPieFile","errorMessage","noMembersError","goBackToPreviousLocation","isDefined","previous","$$search","createRepoHttp","createRepository","createRepo","isInvalidRepoName","rulesetWarning","pp","undefined","validateNumberInput","autofocusId","EditRepositoryFileCtrl","file","getRepositoryFileContent","fileContent","content","EditRepositoryCtrl","editRepoPage","canEditRepoId","restartRequested","saveRepoId","$watch","getRepository","ifRulesetExists","item","setRepositoryType","saveId","status","allowHtml","editRepoHttp","modalMsg","editRepositoryId","module","$inject"],"mappings":"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","file":"5.275d1f74283aff0821f2.bundle.js","sourcesContent":["export const STATIC_RULESETS = [\n {id: 'empty', name: 'No inference'},\n {id: 'rdfs-optimized', name: 'RDFS (Optimized)'},\n {id: 'rdfs', name: 'RDFS'},\n {id: 'rdfsplus-optimized', name: 'RDFS-Plus (Optimized)'},\n {id: 'owl-horst-optimized', name: 'OWL-Horst (Optimized)'},\n {id: 'owl-horst', name: 'OWL-Horst'},\n {id: 'owl2-ql-optimized', name: 'OWL2-QL (Optimized)'},\n {id: 'owl2-ql', name: 'OWL2-QL'},\n {id: 'owl-max-optimized', name: 'OWL-Max (Optimized)'},\n {id: 'owl-max', name: 'OWL-Max'},\n {id: 'owl2-rl-optimized', name: 'OWL2-RL (Optimized)'},\n {id: 'owl2-rl', name: 'OWL2-RL'},\n\n];\n\nexport const REPOSITORY_TYPES = {free: 'free', eeWorker: 'worker', eeMaster: 'master', ontop: 'ontop', se: 'se', fedx: 'fedx'};\nexport const FILENAME_PATTERN = new RegExp('^[a-zA-Z0-9-_]+$');\nexport const NUMBER_PATTERN = new RegExp('^[0-9]+$');\n\nexport const REPO_TOOLTIPS = {\n id: \"Unique identifier for the repository. The ID must contain only letters (a-z, A-Z), numbers (0-9), '-' and '_'.\",\n title: \"Human readable description of the repository.\",\n readOnly: \"Protects the repository against any changes.\",\n ruleset: \"Sets of axiomatic triples, consistency checks and entailment rules, \" +\n \"which determine the applied semantics with a PIE file.\",\n rulesetWarnings: {\n needsSameAs: \"Disabling owl:sameAs for this ruleset may cause incomplete inference with owl:sameAs statements.\",\n doesntNeedSameAs: \"This ruleset does not need owl:sameAs, consider disabling it.\",\n customRuleset: \"If the custom ruleset does not use owl:sameAs, consider disabling it. <br>\" +\n \"If the ruleset uses owl:sameAs, disabling it may cause incomplete inference with owl:sameAs statements.\"\n },\n disableSameAs: \"GraphDB uses a non-rule implementation of owl:sameAs, \" +\n \"which can be enabled or disabled independently of the ruleset.\",\n checkForInconsistencies: \"Enables the consistency checks from the ruleset.\",\n isShacl: \"Enables support for SHACL validation.\",\n shaclOptions: {\n cacheSelectNodes: \"The SHACL implementation retrieves a lot of its relevant data through running \" +\n \"SPARQL Select queries against the repository and against the changes in the transaction. \" +\n \"This is usually good for performance, but while validating large amounts of data disabling this cache will use less memory.\",\n undefinedTargetValidatesAllSubjects: \"If no target is defined for a NodeShape, that NodeShape will be ignored. \" +\n \"Enabling this will make such NodeShapes wildcard shapes and validate all subjects. \" +\n \"Equivalent to setting sh:targetClass to owl:Thing or rdfs:Resource in an environment with a reasoner.\",\n logValidationPlans: \"Log (INFO) the executed validation plans as GraphViz DOT. \" +\n \"It is recommended to disable parallel validation when this is enabled.\",\n logValidationViolations: \"Log (INFO) a list of violations and the triples that caused the violations. \" +\n \"It is recommended to disable parallel validation when this is enabled.\",\n parallelValidation: \"Run SHACL validation in parallel.\",\n globalLogValidationExecution: \"Log (INFO) every execution step of the SHACL validation. \" +\n \"This is fairly costly and should not be used in production. \" +\n \"It is recommended to disable parallel validation when this is enabled.\",\n performanceLogging: \"Log (INFO) the execution time per shape. \" +\n \"It is recommended to disable parallel validation and caching of select nodes when this is enabled.\",\n eclipseRdf4jShaclExtensions: \"Activates RDF4J's SHACL extensions that provide additional functionality (experimental).\",\n dashDataShapes: \"Activates DASH Data Shapes extensions that provide additional functionality (experimental).\"\n },\n entityIdSize: \"Defines the bit size of internal IDs used to index entities (URIs, blank nodes, literals, and RDF* embedded triples).\" +\n \"<br>Use 40 bit ID only if you expect more than 2 billion unique RDF values.\",\n enableContextIndex: \"Builds an additional Context-Predicate-Subject-Object index to boost the \" +\n \"SPARQL query performance of queries with GRAPH/FROM/FROM NAMED clauses.\",\n enablePredicateList: \"Enables the mappings from an entity (subject or object) to its predicates; \" +\n \"enabling it can significantly speed up queries that use wildcard predicate patterns.\",\n queryTimeout: \"Sets the number of seconds after which the evaluation of a query will be terminated; \" +\n \"values less than or equal to zero mean no limit.\",\n throwQueryEvaluationExceptionOnTimeout: \"Repository throws QueryEvaluationException when the duration of a query execution \" +\n \"exceeds the timeout parameter.\",\n queryLimitResults: \"Sets the maximum number of results returned from a query after which the evaluation of \" +\n \"a query will be terminated; values less than or equal to zero mean no limit.\",\n nonInterpretablePredicates: \"Semicolon-delimited list of predicates (full URIs) that GraphDB will not try to process \" +\n \"with the registered GraphDB plugins.\",\n ontop: {\n driverType: \"Determines the type of SQL database to connect to.\",\n propertiesFile: \"Describes the JDBC configuration such as hostname and database name to connect to.\",\n hostName: 'The JDBC hostname to connect to.',\n port: \"The JDBC port to connect to if different from the default for the chosen JDBC driver.\",\n portIfRequired: \"The JDBC port to connect to.\",\n databaseName: 'The database name to connect to.',\n userName: 'The username to use for the JDBC connection.',\n password: 'The password to use for the JDBC connection.',\n driverClass: 'Classname of the chosen JDBC driver. It must be on the classpath (in the lib directory).',\n driverClassWarning: \"JDBC driver not found in the classpath, please save it in the lib directory and restart GraphDB\",\n url: 'The JDBC URL that will be used. It is constructed using the supplied hostname, port and database name.',\n obdaFile: \"Describes the mapping from SQL to RDF in either the OBDA or the R2RML format.\",\n owlFile: \"Specifies relations between the classes and properties in the cosntructed RDF graph. \" +\n \"It can be in any supported RDF format.\",\n constraintFile: \"Specifies override of SQL primary and foreign keys.\",\n dbMetadataFile: \"Specifies metadata for the SQL database.\",\n testConn: \"Attempts to establish a connection to the SQL database to test if the supplied configuration is correct.\"\n },\n fedx: {\n repositoryNotExistWarning: 'The repository member has been removed from the local repositories',\n localReposInstructions: 'Click on a repo to add a local repository as a member',\n withLogQueries: 'Set whether to log queries',\n withDebugQueryPlan: 'Whether to print the optimized query execution plan to stdout',\n enforceMaxQueryTime: 'Max query time in seconds, 0 to disable',\n withIncludeInferredDefault: 'Set whether to include inferred statements or not',\n withBoundJoinBlockSize: 'Set the block size for bound joins',\n withJoinWorkerThreads: 'Set the number of join worker threads for parallelization',\n withLeftJoinWorkerThreads: 'Set the number of left join worker threads',\n unionWorkerThreads: 'Set the number of union worker threads for parallelization',\n withLogQueryPlan: 'Whether to log the query plan',\n withEnableServiceAsBoundJoin: 'Whether external SERVICE clauses are evaluated using bound join',\n withSourceSelectionCacheSpec: 'The cache specification for the SourceSelectionMemoryCache',\n removeMember: 'Remove repository as a FedX member',\n editRepository: 'Edit repository',\n setAsWritable: 'Set repository as writable'\n }\n};\n","import {\n FILENAME_PATTERN,\n NUMBER_PATTERN,\n REPO_TOOLTIPS,\n REPOSITORY_TYPES,\n STATIC_RULESETS\n} from \"./repository.constants\";\n\nexport const getFileName = function(path) {\n let lastIdx = path.lastIndexOf('/');\n if (lastIdx === -1) {\n lastIdx = path.lastIndexOf('\\\\');\n }\n let name = path;\n if (lastIdx !== -1) {\n name = name.substring(lastIdx + 1);\n }\n return name;\n};\n\nconst parseNumberParamsIfNeeded = function (params) {\n if (params) {\n if (params.queryTimeout) {\n params.queryTimeout.value = parseInt(params.queryTimeout.value);\n }\n if (params.queryLimitResults && params.validationResultsLimitTotal && params.validationResultsLimitPerConstraint) {\n // Parse parameters properly to number\n params.queryLimitResults.value = parseInt(params.queryLimitResults.value);\n params.validationResultsLimitTotal.value = parseInt(params.validationResultsLimitTotal.value);\n params.validationResultsLimitPerConstraint.value = parseInt(params.validationResultsLimitPerConstraint.value);\n } else if (params.leftJoinWorkerThreads && params.boundJoinBlockSize && params.joinWorkerThreads && params.unionWorkerThreads) {\n params.leftJoinWorkerThreads.value = parseInt(params.leftJoinWorkerThreads.value);\n params.boundJoinBlockSize.value = parseInt(params.boundJoinBlockSize.value);\n params.joinWorkerThreads.value = parseInt(params.joinWorkerThreads.value);\n params.unionWorkerThreads.value = parseInt(params.unionWorkerThreads.value);\n }\n }\n}\n\nconst parseMemberParamIfNeeded = function(param) {\n if (param && param.member) {\n param.member.value = [];\n }\n}\n\nconst getShaclOptionsClass = function () {\n const optionsModule = document.getElementById('shaclOptions');\n\n if (optionsModule) {\n const isAriaExpanded = optionsModule.getAttribute('aria-expanded');\n if (isAriaExpanded && isAriaExpanded === 'true') {\n return 'fa fa-angle-down';\n }\n }\n return 'fa fa-angle-right';\n}\n\nconst validateNumberFields = function (params, invalidValues) {\n if (params.queryTimeout) {\n invalidValues.isInvalidQueryTimeout = !NUMBER_PATTERN.test(params.queryTimeout.value);\n }\n if (params.validationResultsLimitTotal && params.validationResultsLimitPerConstraint && params.queryLimitResults) {\n invalidValues.isInvalidValidationResultsLimitTotal = !NUMBER_PATTERN.test(params.validationResultsLimitTotal.value);\n invalidValues.isInvalidValidationResultsLimitPerConstraint = !NUMBER_PATTERN.test(params.validationResultsLimitPerConstraint.value);\n invalidValues.isInvalidQueryLimit = !NUMBER_PATTERN.test(params.queryLimitResults.value);\n }\n else if (params.leftJoinWorkerThreads && params.boundJoinBlockSize && params.joinWorkerThreads\n && params.unionWorkerThreads) {\n invalidValues.isInvalidLeftJoinWorkerThreads = !NUMBER_PATTERN.test(params.leftJoinWorkerThreads.value);\n invalidValues.isInvalidBoundJoinBlockSize = !NUMBER_PATTERN.test(params.boundJoinBlockSize.value);\n invalidValues.isInvalidJoinWorkerThreads = !NUMBER_PATTERN.test(params.joinWorkerThreads.value);\n invalidValues.isInvalidUnionWorkerThreads = !NUMBER_PATTERN.test(params.unionWorkerThreads.value);\n }\n}\n\nconst getInvalidParameterErrorMessage = function(param) {\n if(param === \"isInvalidQueryLimit\") {\n return 'Invalid parameter query limit';\n } else if (param === \"isInvalidQueryTimeout\") {\n return 'Invalid parameter query timeout';\n } else if (param === \"isInvalidValidationResultsLimitTotal\") {\n return 'Invalid parameter validation results limit total';\n } else if (param === \"isInvalidValidationResultsLimitPerConstraint\") {\n return 'Invalid parameter validation results limit per constraint';\n } else if (param === \"isInvalidJoinWorkerThreads\") {\n return 'Invalid parameter join worker threads';\n } else if (param === \"isInvalidLeftJoinWorkerThreads\") {\n return 'Invalid parameter left join worker threads';\n } else if (param === \"isInvalidUnionWorkerThreads\") {\n return 'Invalid parameter union worker threads';\n } else if (param === \"isInvalidBoundJoinBlockSize\") {\n return 'Invalid parameter bound join block size';\n }\n}\n\nconst checkInvalidValues = function(invalidValues) {\n let invalidValuesKeys = Object.keys(invalidValues);\n let invalidValuesVal = Object.values(invalidValues);\n\n for (let i = 0; i < invalidValuesKeys.length; i++) {\n if (invalidValuesVal[i]) {\n return getInvalidParameterErrorMessage(invalidValuesKeys[i]);\n }\n }\n return '';\n}\n\nconst getDocBase = function (productInfo) {\n return `https://graphdb.ontotext.com/documentation/${productInfo.productShortVersion}/${productInfo.productType}`;\n}\n\nconst modules = [\n 'ngCookies',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.utils.localstorageadapter',\n 'toastr',\n 'ngFileUpload'\n];\n\nangular.module('graphdb.framework.repositories.controllers', modules)\n .controller('LocationsAndRepositoriesCtrl', LocationsAndRepositoriesCtrl)\n .controller('AddLocationCtrl', AddLocationCtrl)\n .controller('EditLocationCtrl', EditLocationCtrl)\n .controller('ChooseRepositoryCtrl', ChooseRepositoryCtrl)\n .controller('AddRepositoryCtrl', AddRepositoryCtrl)\n .controller('EditRepositoryCtrl', EditRepositoryCtrl)\n .controller('EditRepositoryFileCtrl', EditRepositoryFileCtrl)\n .controller('UploadRepositoryConfigCtrl', UploadRepositoryConfigCtrl);\n\nLocationsAndRepositoriesCtrl.$inject = ['$scope', '$uibModal', 'toastr', '$repositories', 'ModalService', '$jwtAuth', 'LocationsRestService', 'LocalStorageAdapter', '$interval'];\nfunction LocationsAndRepositoriesCtrl($scope, $uibModal, toastr, $repositories, ModalService, $jwtAuth, LocationsRestService, LocalStorageAdapter, $interval) {\n $scope.loader = true;\n\n $scope.isLocationInactive = function (location) {\n return !location.active || !$scope.hasActiveLocation();\n };\n\n //Get locations //TODO\n $scope.getLocations = function () {\n return $repositories.getLocations();\n };\n\n $scope.hasActiveLocation = function () {\n return $repositories.hasActiveLocation();\n };\n\n $scope.getActiveLocation = function () {\n return $repositories.getActiveLocation();\n };\n\n $scope.getLocationError = function () {\n return $repositories.getLocationError();\n };\n\n $scope.getDegradedReason = function () {\n return $repositories.getDegradedReason();\n };\n\n $scope.getRepositories = function () {\n return $repositories.getRepositories();\n };\n\n //Delete location\n $scope.deleteLocation = function (uri) {\n ModalService.openSimpleModal({\n title: 'Confirm detach',\n message: 'Are you sure you want to detach the location \\'' + uri + '\\'?',\n warning: true\n }).result\n .then(function () {\n $scope.loader = true;\n $repositories.deleteLocation(uri);\n });\n };\n\n //Add new location\n\n $scope.addLocationHttp = function (dataAddLocation) {\n $scope.loader = true;\n LocationsRestService.addLocation(dataAddLocation)\n .success(function (data) {\n $scope.locations = data;\n //Reload locations and repositories\n $repositories.init();\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n\n $scope.loader = false;\n });\n };\n\n $scope.addLocation = function () {\n $uibModal.open({\n templateUrl: 'js/angular/templates/modal/add-location.html',\n windowClass: 'addLocationDialog',\n controller: 'AddLocationCtrl'\n }).result\n .then(function (dataAddLocation) {\n $scope.addLocationHttp(dataAddLocation);\n });\n };\n\n //Edit location\n $scope.editLocationHttp = function (dataEditLocation) {\n $scope.loader = true;\n LocationsRestService.editLocation(dataEditLocation)\n .success(function (data) {\n $scope.locations = data;\n //Reload locations and repositories\n $repositories.init();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n\n $scope.loader = false;\n });\n };\n\n $scope.editLocation = function (location) {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/edit-location.html',\n controller: 'EditLocationCtrl',\n resolve: {\n location: function () {\n return location;\n }\n }\n });\n\n modalInstance.result.then(function (dataEditLocation) {\n $scope.editLocationHttp(dataEditLocation);\n }, function () {\n });\n };\n\n $scope.activateLocationRequest = function (location) {\n $scope.loader = true;\n const data = {\n 'uri': location.uri\n };\n LocationsRestService.enableLocation(data)\n .success(function () {\n $repositories.setRepository('');\n $repositories.init();\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n document.getElementById('switch-' + location.$$hashKey).checked = false;\n });\n };\n\n //Activate location\n $scope.activateLocation = function (location) {\n //This has to be fixed\n // if (document.getElementById('switch-' + location.$$hashKey).checked == true) {\n // return;\n // }\n if ($scope.hasActiveLocation()) {\n ModalService.openSimpleModal({\n title: 'Confirm location change',\n message: 'Are you sure you want to change the location?',\n warning: true\n }).result\n .then(function () {\n $scope.activateLocationRequest(location);\n }, function () {\n document.getElementById('switch-' + location.$$hashKey).checked = false;\n });\n } else {\n $scope.activateLocationRequest(location);\n }\n };\n\n //Change repository\n $scope.setRepository = function (id) {\n $repositories.setRepository(id);\n };\n\n //Delete repository\n $scope.deleteRepository = function (repositoryId) {\n ModalService.openSimpleModal({\n title: 'Confirm delete',\n message: `<p>Are you sure you want to delete the repository <strong>${repositoryId}</strong>?</p>\n <p><span class=\"icon-2x icon-warning\" style=\"color: #d54a33\"/>\n All data in the repository will be lost.</p>`,\n warning: true\n }).result\n .then(function () {\n $scope.loader = true;\n $repositories.deleteRepository(repositoryId);\n removeCachedGraphsOnDelete(repositoryId);\n });\n };\n\n $scope.restartRepository = function (repositoryId) {\n ModalService.openSimpleModal({\n title: 'Confirm restart',\n message: `<p>Are you sure you want to restart the repository <strong>${repositoryId}</strong>?</p>\n <p><span class=\"icon-2x icon-warning\" style=\"color: #d54a33\"/>\n The repository will be shut down immediately and all running queries\n and updates will be cancelled.</p>`,\n warning: true\n }).result\n .then(function () {\n $scope.loader = true;\n $repositories.restartRepository(repositoryId);\n });\n }\n\n $scope.toggleDefaultRepository = function (repositoryId) {\n if ($scope.getDefaultRepository() === repositoryId) {\n // unset\n $repositories.setDefaultRepository(null);\n } else {\n // set\n $repositories.setDefaultRepository(repositoryId);\n }\n };\n\n $scope.getDefaultRepository = function () {\n return $repositories.getDefaultRepository();\n };\n\n /* Unused, data urls don't behave well in all browsers, avoid them when possible\n $scope.getRepoTurtleConfig = function (repository) {\n function downloadRepoConfig(repoTurtleConfig, repository) {\n $('.download-turtle-config')\n .mouseup(function () {\n $(this)\n .attr('href', repoTurtleConfig)\n .attr('download', repository.id + '-config.ttl')\n });\n }\n\n $repositories.getRepositoryTurtleConfig(repository)\n .success(function (response) {\n var repoTurtleConfigDownload = 'data:application/octet-stream;charset=utf-8;base64,'\n + btoa(unescape(encodeURIComponent(response)));\n downloadRepoConfig(repoTurtleConfigDownload, repository);\n })\n .error(function () {\n toastr.error('Error getting repository configuration for '' + repository.id + ''');\n });\n };\n */\n\n $scope.getRepositoryDownloadLink = function (repository) {\n let url = `rest/repositories/${repository.id}${(repository.type === REPOSITORY_TYPES.ontop ? '/downloadZip': '/download')}`;\n const token = $jwtAuth.getAuthToken();\n if (token) {\n url = `${url}?authToken=${encodeURIComponent(token)}`;\n }\n return url;\n };\n\n ///Copy to clipboard popover options\n $scope.copyToClipboard = function (uri) {\n ModalService.openCopyToClipboardModal(uri);\n };\n\n $scope.fromFile = function () {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/upload-repository-config.html',\n controller: 'UploadRepositoryConfigCtrl'\n });\n modalInstance.result.then(function () {\n $repositories.init();\n });\n };\n\n //Delete repository\n $scope.openActiveLocationSettings = function () {\n $uibModal.open({\n templateUrl: 'js/angular/settings/modal/location-settings.html',\n controller: 'ActiveLocationSettingsCtrl'\n });\n };\n\n const timer = $interval(function () {\n // Update repositories state\n $repositories.initQuick();\n }, 5000);\n\n $scope.$on('$destroy', function () {\n $interval.cancel(timer);\n });\n\n function removeCachedGraphsOnDelete(repoId) {\n const cashedDependenciesGraphPrefix = `dependencies-selectedGraph-${repoId}`;\n const cashedClassHierarchyGraphPrefix = `classHierarchy-selectedGraph-${repoId}`;\n angular.forEach(LocalStorageAdapter.keys(), function (key) {\n // remove everything but the hide prefixes setting, it should always persist\n if (key.startsWith(cashedClassHierarchyGraphPrefix) || key.startsWith(cashedDependenciesGraphPrefix)) {\n LocalStorageAdapter.remove(key);\n }\n });\n }\n\n}\n\nUploadRepositoryConfigCtrl.$inject = ['$scope', '$uibModalInstance', 'Upload', 'toastr'];\n\nfunction UploadRepositoryConfigCtrl($scope, $uibModalInstance, Upload, toastr) {\n $scope.upload = function (files) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n }\n };\n $scope.ok = function () {\n if ($scope.uploadFile) {\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories',\n method: 'POST',\n data: {config: $scope.uploadFile}\n })\n .success(function () {\n $scope.uploadFileLoader = false;\n $uibModalInstance.close();\n })\n .error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.uploadFileLoader = false;\n });\n }\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nAddLocationCtrl.$inject = ['$scope', '$uibModalInstance', 'toastr', 'productInfo'];\n\nfunction AddLocationCtrl($scope, $uibModalInstance, toastr, productInfo) {\n\n $scope.newLocation = {\n 'uri': '',\n 'authType': 'none',\n 'username': '',\n 'password': '',\n 'active': false\n };\n $scope.docBase = getDocBase(productInfo);\n\n $scope.isValidLocation = function () {\n return ($scope.newLocation.uri.length < 6 ||\n $scope.newLocation.uri.indexOf('http:') === 0 || $scope.newLocation.uri.indexOf('https:') === 0)\n && $scope.newLocation.uri.indexOf('/repositories') <= -1;\n };\n\n $scope.ok = function () {\n if (!$scope.newLocation) {\n toastr.error('Location cannot be empty');\n return;\n }\n $uibModalInstance.close($scope.newLocation);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditLocationCtrl.$inject = ['$scope', '$uibModalInstance', 'location', 'productInfo'];\n\nfunction EditLocationCtrl($scope, $uibModalInstance, location, productInfo) {\n\n $scope.editedLocation = angular.copy(location);\n $scope.docBase = getDocBase(productInfo);\n\n $scope.ok = function () {\n $uibModalInstance.close($scope.editedLocation);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nChooseRepositoryCtrl.$inject = ['$scope', '$location', 'isEnterprise', 'isFreeEdition'];\nfunction ChooseRepositoryCtrl($scope, $location, isEnterprise, isFreeEdition) {\n $scope.pageTitle = 'Select repository type';\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.isEnterprise = isEnterprise;\n $scope.isFreeEdition = isFreeEdition;\n $scope.chooseRepositoryType = function (repoType) {\n $location.path(`${$location.path()}/${repoType}`);\n };\n}\n\nAddRepositoryCtrl.$inject = ['$scope', 'toastr', '$repositories', '$location', '$timeout', 'Upload', 'isEnterprise', 'isFreeEdition', '$routeParams', 'RepositoriesRestService'];\n\nfunction AddRepositoryCtrl($scope, toastr, $repositories, $location, $timeout, Upload, isEnterprise, isFreeEdition, $routeParams, RepositoriesRestService) {\n $scope.rulesets = STATIC_RULESETS.slice();\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.repoTooltips = REPO_TOOLTIPS;\n $scope.params = $routeParams;\n $scope.repositoryType = $routeParams.repositoryType;\n $scope.enable = true;\n\n $scope.loader = true;\n $scope.pageTitle = 'Create Repository';\n $scope.repositoryInfo = {\n id: '',\n params: {},\n title: '',\n type: ''\n };\n\n $scope.isEnterprise = isEnterprise;\n $scope.isFreeEdition = isFreeEdition;\n $scope.invalidValues = {\n isInvalidQueryTimeout: false,\n isInvalidQueryLimit: false,\n isInvalidLeftJoinWorkerThreads: false,\n isInvalidBoundJoinBlockSize: false,\n isInvalidJoinWorkerThreads : false,\n isInvalidUnionWorkerThreads : false,\n isInvalidValidationResultsLimitPerConstraint : false,\n isInvalidValidationResultsLimitTotal : false\n };\n\n function isValidEERepository(repositoryType) {\n return $scope.isEnterprise && (repositoryType === REPOSITORY_TYPES.eeMaster\n || repositoryType === REPOSITORY_TYPES.eeWorker);\n }\n\n function isValidSERepository(repositoryType) {\n return !$scope.isFreeEdition && !$scope.isEnterprise && repositoryType === REPOSITORY_TYPES.se;\n }\n\n function isValidFRRepository(repositoryType) {\n return $scope.isFreeEdition && repositoryType === REPOSITORY_TYPES.free;\n }\n function isValidOntopRepository(repositoryType) {\n return repositoryType === REPOSITORY_TYPES.ontop;\n }\n\n function isValidFedXRepository(repositoryType) {\n return repositoryType === REPOSITORY_TYPES.fedx;\n }\n\n function isRepositoryTypeValid(repositoryType) {\n return isValidEERepository(repositoryType) || isValidSERepository(repositoryType)\n || isValidFRRepository(repositoryType) || isValidOntopRepository(repositoryType)\n || isValidFedXRepository(repositoryType);\n }\n\n function setPageTitle(repositoryType) {\n switch (repositoryType) {\n case REPOSITORY_TYPES.free:\n $scope.pageTitle = 'Create GraphDB Free repository';\n break;\n case REPOSITORY_TYPES.eeWorker:\n $scope.pageTitle = 'Create GraphDB EE Worker repository';\n break;\n case REPOSITORY_TYPES.eeMaster:\n $scope.pageTitle = 'Create GraphDB EE Master repository';\n break;\n case REPOSITORY_TYPES.se:\n $scope.pageTitle = 'Create GraphDB SE repository';\n break;\n case REPOSITORY_TYPES.ontop:\n $scope.pageTitle = 'Create Ontop Virtual SPARQL repository';\n break;\n case REPOSITORY_TYPES.fedx:\n $scope.pageTitle = 'Create FedX Virtual SPARQL repository';\n break;\n }\n }\n\n $scope.getConfig = function (repoType) {\n RepositoriesRestService.getRepositoryConfiguration(repoType).success(function (data) {\n $scope.repositoryInfo.params = data.params;\n $scope.repositoryInfo.type = data.type;\n parseNumberParamsIfNeeded($scope.repositoryInfo.params);\n parseMemberParamIfNeeded($scope.repositoryInfo.params);\n $scope.loader = false;\n // The clean way is the \"autofocus\" attribute and we use it but it doesn't seem to\n // work in all browsers because of the way dynamic content is handled so give it another\n // try here.\n $timeout(function() {\n // Focus the ID field\n angular.element(document).find('#id').focus();\n }, 50);\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n if ($scope.repositoryType && isRepositoryTypeValid($scope.repositoryType)) {\n $scope.repositoryInfo.type = $scope.repositoryType;\n $scope.getConfig($scope.repositoryType);\n setPageTitle($scope.repositoryType);\n } else {\n $location.path('/repository/create');\n }\n\n $scope.hasActiveLocation = function () {\n return $repositories.hasActiveLocation();\n };\n\n $scope.activeLocation = function () {\n return $repositories.getActiveLocation();\n };\n\n let isInvalidPieFile = false;\n $scope.uploadRuleset = function (files) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories/uploadRuleSet',\n data: {ruleset: $scope.uploadFile}\n }).progress(function (evt) {\n /*\t\t\t\t\t\tvar progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);*/\n }).success(function (data) {\n if (!data.success) {\n toastr.error(data.errorMessage);\n isInvalidPieFile = true;\n } else {\n const fileName = $scope.uploadFile.name;\n const newValue = {id: data.fileLocation, name: 'Custom: ' + fileName};\n if ($scope.rulesetPie) {\n // file was previously uploaded\n $scope.rulesets[0] = newValue;\n } else {\n // file uploaded for the first time\n $scope.rulesets.unshift(newValue);\n }\n $scope.rulesetPie = data.fileLocation;\n $scope.rulesetPieFile = fileName;\n $scope.repositoryInfo.params.ruleset.value = $scope.rulesetPie;\n }\n $scope.uploadFileLoader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.uploadFile = '';\n $scope.uploadFileLoader = false;\n });\n }\n };\n\n $scope.noMembersError = function () {\n toastr.error('FedX repository should be created with at least one member!');\n };\n\n $scope.goBackToPreviousLocation = function () {\n if (angular.isDefined($routeParams.previous)) {\n delete $location.$$search.previous;\n $location.path('/');\n } else {\n $location.path('/repository');\n }\n };\n\n $scope.createRepoHttp = function () {\n $scope.loader = true;\n RepositoriesRestService.createRepository($scope.repositoryInfo).success(function () {\n toastr.success('The repository ' + $scope.repositoryInfo.id + ' has been created.');\n $repositories.init($scope.goBackToPreviousLocation);\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n $scope.createRepo = function () {\n if (!$scope.repositoryInfo.id) {\n toastr.error('Repository ID cannot be empty');\n return;\n }\n\n $scope.isInvalidRepoName = !FILENAME_PATTERN.test($scope.repositoryInfo.id);\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n const invalidValues = checkInvalidValues($scope.invalidValues);\n\n if (isInvalidPieFile) {\n toastr.error('Invalid rule-set file. Please upload a valid one.');\n } else if ($scope.isInvalidRepoName) {\n toastr.error('Wrong repo name');\n } else if ($scope.repositoryType === \"fedx\" && $scope.repositoryInfo.params.member.value.length === 0) {\n $scope.noMembersError();\n } else if (invalidValues) {\n toastr.error(invalidValues);\n } else {\n $scope.createRepoHttp();\n }\n };\n\n $scope.rulesetWarning = function () {\n const pp = $scope.repositoryInfo.params;\n if (pp === undefined || pp.ruleset === undefined || pp.disableSameAs === undefined) {\n return '';\n }\n\n if (pp.ruleset.value.indexOf('owl') === 0 && pp.disableSameAs.value === 'true') {\n return REPO_TOOLTIPS.rulesetWarnings.needsSameAs;\n } else if (pp.ruleset.value.indexOf('rdfs') === 0 && pp.disableSameAs.value === 'false') {\n return REPO_TOOLTIPS.rulesetWarnings.doesntNeedSameAs;\n } else if (pp.ruleset.value === $scope.rulesetPie) {\n return REPO_TOOLTIPS.rulesetWarnings.customRuleset;\n } else {\n return '';\n }\n };\n\n $scope.validateNumberInput = function () {\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n }\n\n $scope.getShaclOptionsClass = function () {\n return getShaclOptionsClass();\n }\n //TODO - check if repositoryID exist\n\n // Request auto-focus of the ID input when creating a repo (but not when editing)\n $scope.autofocusId = 'autofocus';\n}\n\nEditRepositoryFileCtrl.$inject = ['$scope', '$uibModalInstance', 'RepositoriesRestService', 'file', 'toastr'];\n\nfunction EditRepositoryFileCtrl($scope, $uibModalInstance, RepositoriesRestService, file, toastr) {\n\n if (file) {\n RepositoriesRestService.getRepositoryFileContent(file).success(function (data) {\n $scope.fileContent = data;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n });\n }\n\n $scope.ok = function () {\n $uibModalInstance.close({\n content: $scope.fileContent,\n fileLocation: file\n });\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditRepositoryCtrl.$inject = ['$scope', '$routeParams', 'toastr', '$repositories', '$location', 'ModalService', 'isEnterprise', 'isFreeEdition', 'RepositoriesRestService'];\n\nfunction EditRepositoryCtrl($scope, $routeParams, toastr, $repositories, $location, ModalService, isEnterprise, isFreeEdition, RepositoriesRestService) {\n\n $scope.rulesets = STATIC_RULESETS.slice();\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.repoTooltips = REPO_TOOLTIPS;\n\n //TODO\n $scope.editRepoPage = true;\n $scope.canEditRepoId = false;\n $scope.params = $routeParams;\n $scope.loader = true;\n $scope.isEnterprise = isEnterprise;\n $scope.isFreeEdition = isFreeEdition;\n $scope.repositoryInfo = {};\n $scope.repositoryInfo.id = $scope.params.repositoryId;\n $scope.repositoryInfo.restartRequested = false;\n $scope.repositoryType = '';\n $scope.saveRepoId = $scope.params.repositoryId;\n $scope.pageTitle = 'Edit Repository: ' + $scope.params.repositoryId;\n $scope.invalidValues = {\n isInvalidQueryTimeout: false,\n isInvalidQueryLimit: false,\n isInvalidLeftJoinWorkerThreads: false,\n isInvalidBoundJoinBlockSize: false,\n isInvalidJoinWorkerThreads : false,\n isInvalidUnionWorkerThreads : false,\n isInvalidValidationResultsLimitPerConstraint : false,\n isInvalidValidationResultsLimitTotal : false\n };\n $scope.hasActiveLocation = function () {\n return $repositories.hasActiveLocation();\n };\n\n $scope.$watch($scope.hasActiveLocation, function () {\n if ($scope.hasActiveLocation) {\n RepositoriesRestService.getRepository($scope.repositoryInfo.id)\n .success(function (data) {\n if (angular.isDefined(data.params.ruleset)) {\n let ifRulesetExists = false;\n angular.forEach($scope.rulesets, function (item) {\n if (item.id === data.params.ruleset.value) {\n ifRulesetExists = true;\n }\n });\n if (data.params.ruleset && !ifRulesetExists) {\n let name = getFileName(data.params.ruleset.value);\n $scope.rulesets.unshift({id: data.params.ruleset.value, name: 'Custom: ' + name});\n }\n }\n $scope.repositoryInfo = data;\n $scope.setRepositoryType(data.type);\n parseNumberParamsIfNeeded($scope.repositoryInfo.params);\n $scope.repositoryInfo.saveId = $scope.saveRepoId;\n $scope.loader = false;\n })\n .error(function (data, status) {\n if (status === 404 && $routeParams.repositoryId !== 'system') {\n toastr.error('Repo with name ' + '<b>' + $routeParams.repositoryId + '</b>' + ' doesn\\'t exists', 'Error', {allowHtml: true});\n $scope.loader = false;\n $location.path('repository');\n } else if (status === 404 && $routeParams.repositoryId === 'system') {\n toastr.error('<b>System</b> repository can\\'t be edited', 'Error', {allowHtml: true});\n $scope.loader = false;\n $location.path('repository');\n } else {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n }\n });\n }\n });\n\n $scope.setRepositoryType = function (type) {\n $scope.repositoryType = type;\n };\n\n $scope.noMembersError = function () {\n toastr.error('FedX repository should be created with at least one member!');\n };\n\n $scope.editRepoHttp = function () {\n $scope.loader = true;\n RepositoriesRestService.editRepository($scope.repositoryInfo.saveId, $scope.repositoryInfo)\n .success(function () {\n toastr.success('The repository ' + $scope.repositoryInfo.saveId + ' has been edited.');\n $repositories.init($scope.goBackToPreviousLocation);\n if ($scope.repositoryInfo.saveId === $scope.repositoryInfo.id && $scope.repositoryInfo.restartRequested) {\n $repositories.restartRepository($scope.repositoryInfo.id);\n }\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n $scope.loader = false;\n });\n };\n\n $scope.editRepository = function () {\n $scope.isInvalidRepoName = !FILENAME_PATTERN.test($scope.repositoryInfo.id);\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n const invalidValues = checkInvalidValues($scope.invalidValues);\n let modalMsg = `Save changes to repository <strong>${$scope.repositoryInfo.id}</strong>?<br><br>`;\n if ($scope.repositoryInfo.saveId !== $scope.repositoryInfo.id) {\n modalMsg += `<span class=\"icon-2x icon-warning\" style=\"color: #d54a33\"/>\n The repository will be stopped and renamed.`;\n } else if ($scope.repositoryInfo.restartRequested) {\n modalMsg += `<span class=\"icon-2x icon-warning\" style=\"color: #d54a33\"/>\n The repository will be restarted.`;\n } else {\n modalMsg += `<span class=\"icon-2x icon-warning\" style=\"color: #d54a33\"/>\n Repository restart required for changes to take effect.`;\n }\n if ($scope.isInvalidRepoName) {\n toastr.error('Wrong repo name');\n } else if ($scope.repositoryType === \"fedx\" && $scope.repositoryInfo.params.member.value.length === 0) {\n $scope.noMembersError();\n } else if(invalidValues) {\n toastr.error(invalidValues);\n } else {\n ModalService.openSimpleModal({\n title: 'Confirm save',\n message: modalMsg,\n warning: true\n }).result\n .then(function () {\n $scope.editRepoHttp();\n });\n }\n }\n\n $scope.editRepositoryId = function () {\n let msg = '<p>Changing the repository ID is a dangerous operation since it renames the repository folder and enforces repository shutdown.</p>';\n if ($scope.isEnterprise) {\n msg += '<p>If your repository is in a cluster, it is your responsibility to update the cluster after renaming.</p>';\n }\n ModalService.openSimpleModal({\n title: 'Confirm enable edit',\n message: msg,\n warning: true\n }).result.then(function () {\n $scope.canEditRepoId = true;\n });\n };\n\n $scope.goBackToPreviousLocation = function () {\n if (angular.isDefined($routeParams.previous)) {\n delete $location.$$search.previous;\n $location.path('/');\n } else {\n $location.path('/repository');\n }\n };\n\n $scope.validateNumberInput = function () {\n validateNumberFields($scope.repositoryInfo.params, $scope.invalidValues);\n }\n\n $scope.getShaclOptionsClass = function () {\n return getShaclOptionsClass();\n }\n}\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[56],{56:function(e,t,s){(function(e){const t={WAIT:"WAIT",NO_REPO:"NO_REPO",READY:"READY",IN_PROGRESS:"IN_PROGRESS",ERROR:"ERROR"},s={contextID:{type:"all",value:"All graphs",uri:""}};function n(e){if(e<1e3)return e;const t=Math.floor(Math.log(e)/Math.log(1e3));let s=e/Math.pow(1e3,t);return s=s%1>1/Math.pow(1e3,t-1)?s.toFixed(2):s.toFixed(0),s+["K","M","G","T","P","H"][t-1]}function r(e,n,r,o,i,a,l,c,u,d){let p=null;e.status=r.getActiveRepository()?t.WAIT:t.NO_REPO;let f=s;const R=function(){d.resolveGraphs().success((function(t){e.graphsInRepo=t.results.bindings,h(),e.isSystemRepository()?"READY"!==e.status&&m():(e.status="WAIT",m(!0))})).error((function(t){e.repositoryError=getError(t),o.error(getError(t),"Error getting graphs")}))},h=function(){const t=u.get(`dependencies-selectedGraph-${r.getActiveRepository()}`);null!==t&&e.graphsInRepo.some(e=>e.contextID.uri===t.contextID.uri)?f=t:u.set(`dependencies-selectedGraph-${r.getActiveRepository()}`,f)},g=function(s){d3.select("#dependencies-chord").html(""),e.status=t.WAIT,a.getRelationshipsData(s,e.direction,f.contextID.uri).success((function(s){e.dependenciesData={matrix:s.right,nodes:s.left,hasLinks:_.sum(_.map(s.right,(function(e){return _.sum(e)})))>0,direction:e.direction},e.status=t.READY})).error((function(s){e.status=t.READY,o.error(getError(s),"Could not get dependencies count")}))},m=function(s){(e.status!==t.READY||s)&&(e.status=t.WAIT,a.getRelationshipsStatus(f.contextID.uri).success((function(s){if(e.status=s,e.status===t.IN_PROGRESS){if(null!==p)return;p=i(m,2e3)}e.status===t.READY&&(null!==p&&(i.cancel(p),p=null),a.getRelationshipsClasses(e.direction,f.contextID.uri).success((function(t,s){e.allClasses.items=_.filter(t,v),e.allNotFilteredClasses=t,e.selectedClasses=void 0,angular.isUndefined(e.selectedClasses)&&(e.selectedClasses=t.slice(0,10)),g(e.selectedClasses),207===s&&o.warning("You can update the diagram by pressing the reload button.","Repository data has changed")}))),0===e.status.indexOf("ERROR;")&&(e.status=t.ERROR,o.error("There was an error while calculating dependencies: "+e.status.substring("ERROR;".length)))})).error((function(s){e.status=t.ERROR,o.error(getError(s),"Could not get dependencies count status!")})))};e.allClasses={},e.allClasses.items=[],e.allNotFilteredClasses=[],e.direction="all";const C={};let y=0,E=0;function v(t){return-1!==t.name.toLowerCase().indexOf(e.classQuery.query.toLowerCase())}n.key="",C.get=function(t,s,n){return l.initLazyList(t,s,n,y,e.allClasses.items)},n.$watch((function(){return n.key}),(function(){y=0,_.each(e.allClasses.items,(function(e){n.key>e&&y++})),E++})),C.revision=function(){return E},e.datasource=C,e.adapterContainer={adapter:{remain:!0}},e.classQuery={},e.classQuery.query="",e.classFilterFunc=v,e.$watch("allClasses.items",(function(){e.allClasses.items.length>0&&i((function(){e.adapterContainer.adapter.reload()}),30)})),e.$watch("direction",(function(){!r.getActiveRepository()||e.isSystemRepository()||r.isActiveRepoFedXType()||R()})),e.$on("$destroy",(function(){i.cancel(p)})),e.isLoading=function(){return e.status===t.IN_PROGRESS||e.status===t.WAIT},e.confirmCalculateDependencies=function(){c.openSimpleModal({title:"Confirm operation",message:"Calculating relationships data may take some time. Are you sure?",warning:!0}).result.then((function(){e.calculateDependencies()}))},e.calculateDependencies=function(){e.status=t.WAIT,e.selectedClasses=void 0,a.calculateRelationships(f.contextID.uri).success((function(e){0===e.indexOf("ERROR;")?o.error("There was an error while calculating dependencies: "+e.substring("ERROR;".length)):m()})).error((function(e){o.error("Could not force dependencies count"+getError(e))}))},e.addClass=function(t){e.selectedClasses.push(t),g(e.selectedClasses)},e.removeClass=function(t){_.remove(e.selectedClasses,(function(e){return e.name===t.name})),g(e.selectedClasses)},e.showClass=function(t){e.classToShow=t},e.isClassByNameShown=function(t){return void 0!==_.find(e.selectedClasses,{name:t})},e.addClassByName=function(t){e.selectedClasses.push(_.find(e.allClasses.items,{name:t})),g(e.selectedClasses)},e.removeClassByName=function(t){_.remove(e.selectedClasses,(function(e){return e.name===t})),g(e.selectedClasses)},e.removeAllClasses=function(){e.selectedClasses=[],g(e.selectedClasses)},e.isSystemRepository=function(){return"SYSTEM"===r.getActiveRepository()};const A=e.$on("repositoryIsSet",(function(){e.classQuery={},e.classQuery.query="",e.repositoryError=null,f=s,r.getActiveRepository()&&!r.isActiveRepoFedXType()?R():e.status=t.NO_REPO}));window.addEventListener("beforeunload",(function e(){A(),window.removeEventListener("beforeunload",e)})),e.selectGraph=function(e){f=e,m(!0),u.set(`dependencies-selectedGraph-${r.getActiveRepository()}`,f)},e.getSelectedGraphValue=function(){return f.contextID.value},e.isAllGraphsSelected=function(){return"All graphs"===e.getSelectedGraphValue()}}Object.defineProperty(e,"allGraphs",{get:()=>s}),angular.module("graphdb.framework.graphexplore.controllers.dependencies",["ui.scroll.jqlite","ui.scroll","toastr","ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.utils.localstorageadapter"]).controller("DependenciesChordCtrl",r).config(["$tooltipProvider",function(e){e.options({appendToBody:!0})}]).filter("humanize",(function(){return n})),r.$inject=["$scope","$rootScope","$repositories","toastr","$timeout","GraphDataRestService","UiScrollService","ModalService","LocalStorageAdapter","RDF4JRepositoriesRestService"]}).call(this,s(3))}}]);
2
- //# sourceMappingURL=56.ce399f5788c0f5fe937b.bundle.js.map
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[56],{56:function(e,t,s){(function(e){const t={WAIT:"WAIT",NO_REPO:"NO_REPO",READY:"READY",IN_PROGRESS:"IN_PROGRESS",ERROR:"ERROR"},s={contextID:{type:"all",value:"All graphs",uri:""}};function n(e){if(e<1e3)return e;const t=Math.floor(Math.log(e)/Math.log(1e3));let s=e/Math.pow(1e3,t);return s=s%1>1/Math.pow(1e3,t-1)?s.toFixed(2):s.toFixed(0),s+["K","M","G","T","P","H"][t-1]}function r(e,n,r,o,i,a,l,c,u,d){let p=null;e.status=r.getActiveRepository()?t.WAIT:t.NO_REPO;let f=s;const R=function(){d.resolveGraphs().success((function(t){e.graphsInRepo=t.results.bindings,h(),e.isSystemRepository()?"READY"!==e.status&&m():(e.status="WAIT",m(!0))})).error((function(t){e.repositoryError=getError(t),o.error(getError(t),"Error getting graphs")}))},h=function(){const t=u.get(`dependencies-selectedGraph-${r.getActiveRepository()}`);null!==t&&e.graphsInRepo.some(e=>e.contextID.uri===t.contextID.uri)?f=t:u.set(`dependencies-selectedGraph-${r.getActiveRepository()}`,f)},g=function(s){d3.select("#dependencies-chord").html(""),e.status=t.WAIT,a.getRelationshipsData(s,e.direction,f.contextID.uri).success((function(s){e.dependenciesData={matrix:s.right,nodes:s.left,hasLinks:_.sum(_.map(s.right,(function(e){return _.sum(e)})))>0,direction:e.direction},e.status=t.READY})).error((function(s){e.status=t.READY,o.error(getError(s),"Could not get dependencies count")}))},m=function(s){(e.status!==t.READY||s)&&(e.status=t.WAIT,a.getRelationshipsStatus(f.contextID.uri).success((function(s){if(e.status=s,e.status===t.IN_PROGRESS){if(null!==p)return;p=i(m,2e3)}e.status===t.READY&&(null!==p&&(i.cancel(p),p=null),a.getRelationshipsClasses(e.direction,f.contextID.uri).success((function(t,s){e.allClasses.items=_.filter(t,v),e.allNotFilteredClasses=t,e.selectedClasses=void 0,angular.isUndefined(e.selectedClasses)&&(e.selectedClasses=t.slice(0,10)),g(e.selectedClasses),207===s&&o.warning("You can update the diagram by pressing the reload button.","Repository data has changed")}))),0===e.status.indexOf("ERROR;")&&(e.status=t.ERROR,o.error("There was an error while calculating dependencies: "+e.status.substring("ERROR;".length)))})).error((function(s){e.status=t.ERROR,o.error(getError(s),"Could not get dependencies count status!")})))};e.allClasses={},e.allClasses.items=[],e.allNotFilteredClasses=[],e.direction="all";const C={};let y=0,E=0;function v(t){return-1!==t.name.toLowerCase().indexOf(e.classQuery.query.toLowerCase())}n.key="",C.get=function(t,s,n){return l.initLazyList(t,s,n,y,e.allClasses.items)},n.$watch((function(){return n.key}),(function(){y=0,_.each(e.allClasses.items,(function(e){n.key>e&&y++})),E++})),C.revision=function(){return E},e.datasource=C,e.adapterContainer={adapter:{remain:!0}},e.classQuery={},e.classQuery.query="",e.classFilterFunc=v,e.$watch("allClasses.items",(function(){e.allClasses.items.length>0&&i((function(){e.adapterContainer.adapter.reload()}),30)})),e.$watch("direction",(function(){!r.getActiveRepository()||e.isSystemRepository()||r.isActiveRepoFedXType()||R()})),e.$on("$destroy",(function(){i.cancel(p)})),e.isLoading=function(){return e.status===t.IN_PROGRESS||e.status===t.WAIT},e.confirmCalculateDependencies=function(){c.openSimpleModal({title:"Confirm operation",message:"Calculating relationships data may take some time. Are you sure?",warning:!0}).result.then((function(){e.calculateDependencies()}))},e.calculateDependencies=function(){e.status=t.WAIT,e.selectedClasses=void 0,a.calculateRelationships(f.contextID.uri).success((function(e){0===e.indexOf("ERROR;")?o.error("There was an error while calculating dependencies: "+e.substring("ERROR;".length)):m()})).error((function(e){o.error("Could not force dependencies count"+getError(e))}))},e.addClass=function(t){e.selectedClasses.push(t),g(e.selectedClasses)},e.removeClass=function(t){_.remove(e.selectedClasses,(function(e){return e.name===t.name})),g(e.selectedClasses)},e.showClass=function(t){e.classToShow=t},e.isClassByNameShown=function(t){return void 0!==_.find(e.selectedClasses,{name:t})},e.addClassByName=function(t){e.selectedClasses.push(_.find(e.allClasses.items,{name:t})),g(e.selectedClasses)},e.removeClassByName=function(t){_.remove(e.selectedClasses,(function(e){return e.name===t})),g(e.selectedClasses)},e.removeAllClasses=function(){e.selectedClasses=[],g(e.selectedClasses)},e.isSystemRepository=function(){return"SYSTEM"===r.getActiveRepository()};const A=e.$on("repositoryIsSet",(function(){e.classQuery={},e.classQuery.query="",e.repositoryError=null,f=s,r.getActiveRepository()&&!r.isActiveRepoFedXType()?R():e.status=t.NO_REPO}));window.addEventListener("beforeunload",(function e(){A(),window.removeEventListener("beforeunload",e)})),e.selectGraph=function(e){f=e,m(!0),u.set(`dependencies-selectedGraph-${r.getActiveRepository()}`,f)},e.getSelectedGraphValue=function(){return f.contextID.value},e.isAllGraphsSelected=function(){return"All graphs"===e.getSelectedGraphValue()}}Object.defineProperty(e,"allGraphs",{get:()=>s}),angular.module("graphdb.framework.graphexplore.controllers.dependencies",["ui.scroll.jqlite","ui.scroll","toastr","ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.utils.localstorageadapter"]).controller("DependenciesChordCtrl",r).config(["$uibTooltipProvider",function(e){e.options({appendToBody:!0})}]).filter("humanize",(function(){return n})),r.$inject=["$scope","$rootScope","$repositories","toastr","$timeout","GraphDataRestService","UiScrollService","ModalService","LocalStorageAdapter","RDF4JRepositoriesRestService"]}).call(this,s(3))}}]);
2
+ //# sourceMappingURL=56.dae3cb719fcb013d7a06.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/graphexplore/controllers/dependencies-chord.controller.js"],"names":["allGraphs","contextID","type","value","uri","humanize","number","exp","Math","floor","log","result","pow","toFixed","DependenciesChordCtrl","$scope","$rootScope","$repositories","toastr","$timeout","GraphDataRestService","UiScrollService","ModalService","LocalStorageAdapter","RDF4JRepositoriesRestService","timer","status","getActiveRepository","STATUS","WAIT","NO_REPO","selectedGraph","initView","resolveGraphs","success","graphsInRepo","results","bindings","setSelectedGraphFromCache","isSystemRepository","getRelationshipsStatus","error","data","repositoryError","getError","selGraphFromCache","get","some","graph","set","getRelationshipsData","selectedClasses","d3","select","html","direction","matrixData","dependenciesData","matrix","right","nodes","left","hasLinks","_","sum","map","arr","READY","force","IN_PROGRESS","cancel","getRelationshipsClasses","classesData","allClasses","items","filter","classFilterFunc","allNotFilteredClasses","undefined","angular","isUndefined","slice","warning","indexOf","ERROR","substring","length","datasource","position","current","c","name","toLowerCase","classQuery","query","key","index","count","initLazyList","$watch","each","item","revision","adapterContainer","adapter","remain","reload","isActiveRepoFedXType","$on","isLoading","confirmCalculateDependencies","openSimpleModal","title","message","then","calculateDependencies","calculateRelationships","addClass","clazz","push","removeClass","remove","showClass","classToShow","isClassByNameShown","find","addClassByName","removeClassByName","removeAllClasses","repoIsSetListener","window","addEventListener","removeRepoIsSetListener","removeEventListener","selectGraph","getSelectedGraphValue","isAllGraphsSelected","Object","defineProperty","global","module","controller","config","$uibTooltipProvider","options","appendToBody","$inject"],"mappings":"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","file":"56.dae3cb719fcb013d7a06.bundle.js","sourcesContent":["const STATUS = {\n 'WAIT': 'WAIT',\n 'NO_REPO': 'NO_REPO',\n 'READY': 'READY',\n 'IN_PROGRESS': 'IN_PROGRESS',\n 'ERROR': 'ERROR'\n};\n\nconst modules = [\n 'ui.scroll.jqlite',\n 'ui.scroll',\n 'toastr',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.utils.localstorageadapter'\n];\nconst allGraphs = {\n contextID: {\n type: \"all\",\n value: \"All graphs\",\n uri: \"\"\n }\n};\nObject.defineProperty(global, 'allGraphs', {\n get: () => {return allGraphs;}\n});\n\nangular\n .module('graphdb.framework.graphexplore.controllers.dependencies', modules)\n .controller('DependenciesChordCtrl', DependenciesChordCtrl)\n .config(['$uibTooltipProvider', function ($uibTooltipProvider) {\n $uibTooltipProvider.options({appendToBody: true});\n }])\n .filter('humanize', function () {\n return humanize;\n });\n\nfunction humanize(number) {\n if (number < 1000) {\n return number;\n }\n const si = ['K', 'M', 'G', 'T', 'P', 'H'];\n const exp = Math.floor(Math.log(number) / Math.log(1000));\n let result = number / Math.pow(1000, exp);\n result = (result % 1 > (1 / Math.pow(1000, exp - 1))) ? result.toFixed(2) : result.toFixed(0);\n return result + si[exp - 1];\n}\n\nDependenciesChordCtrl.$inject = ['$scope', '$rootScope', '$repositories', 'toastr', '$timeout', 'GraphDataRestService', 'UiScrollService', 'ModalService', 'LocalStorageAdapter', 'RDF4JRepositoriesRestService'];\n\nfunction DependenciesChordCtrl($scope, $rootScope, $repositories, toastr, $timeout, GraphDataRestService, UiScrollService, ModalService, LocalStorageAdapter, RDF4JRepositoriesRestService) {\n\n let timer = null;\n\n $scope.status = !$repositories.getActiveRepository() ? STATUS.NO_REPO : STATUS.WAIT;\n\n let selectedGraph = allGraphs;\n\n const initView = function () {\n RDF4JRepositoriesRestService.resolveGraphs()\n .success(function (graphsInRepo) {\n $scope.graphsInRepo = graphsInRepo.results.bindings;\n setSelectedGraphFromCache();\n if (!$scope.isSystemRepository()) {\n $scope.status = 'WAIT';\n getRelationshipsStatus(true);\n } else if ($scope.status !== \"READY\") {\n getRelationshipsStatus();\n }\n }).error(function (data) {\n $scope.repositoryError = getError(data);\n toastr.error(getError(data), 'Error getting graphs');\n });\n };\n\n const setSelectedGraphFromCache = function () {\n const selGraphFromCache = LocalStorageAdapter.get(`dependencies-selectedGraph-${$repositories.getActiveRepository()}`);\n if (selGraphFromCache !== null && $scope.graphsInRepo.some(graph => graph.contextID.uri === selGraphFromCache.contextID.uri)) {\n selectedGraph = selGraphFromCache;\n } else {\n LocalStorageAdapter.set(`dependencies-selectedGraph-${$repositories.getActiveRepository()}`, selectedGraph);\n }\n };\n\n const getRelationshipsData = function (selectedClasses) {\n d3.select('#dependencies-chord').html('');\n\n $scope.status = STATUS.WAIT;\n\n GraphDataRestService.getRelationshipsData(selectedClasses, $scope.direction, selectedGraph.contextID.uri)\n .success(function (matrixData) {\n // Check classes empty\n $scope.dependenciesData = {\n matrix: matrixData.right,\n nodes: matrixData.left,\n hasLinks: _.sum(_.map(matrixData.right, function (arr) {\n return _.sum(arr);\n })) > 0,\n direction: $scope.direction\n };\n $scope.status = STATUS.READY;\n }).error(function (data) {\n $scope.status = STATUS.READY;\n toastr.error(getError(data), 'Could not get dependencies count');\n });\n };\n\n const getRelationshipsClasses = function () {\n GraphDataRestService.getRelationshipsClasses($scope.direction, selectedGraph.contextID.uri)\n .success(function (classesData, status) {\n $scope.allClasses.items = _.filter(classesData, classFilterFunc);\n $scope.allNotFilteredClasses = classesData;\n $scope.selectedClasses = undefined;\n if (angular.isUndefined($scope.selectedClasses)) {\n $scope.selectedClasses = classesData.slice(0, 10);\n }\n getRelationshipsData($scope.selectedClasses);\n if (status === 207) {\n toastr.warning('You can update the diagram by pressing the reload button.', 'Repository data has changed');\n }\n });\n };\n\n const getRelationshipsStatus = function (force) {\n if ($scope.status === STATUS.READY && !force) {\n return;\n }\n $scope.status = STATUS.WAIT;\n GraphDataRestService.getRelationshipsStatus(selectedGraph.contextID.uri)\n .success(function (data) {\n $scope.status = data;\n if ($scope.status === STATUS.IN_PROGRESS) {\n if (timer !== null) {\n return;\n } else {\n timer = $timeout(getRelationshipsStatus, 2000);\n }\n }\n if ($scope.status === STATUS.READY) {\n if (timer !== null) {\n $timeout.cancel(timer);\n timer = null;\n }\n getRelationshipsClasses();\n }\n if ($scope.status.indexOf('ERROR;') === 0) {\n $scope.status = STATUS.ERROR;\n toastr.error('There was an error while calculating dependencies: ' + $scope.status.substring('ERROR;'.length));\n }\n })\n .error(function (data) {\n $scope.status = STATUS.ERROR;\n toastr.error(getError(data), 'Could not get dependencies count status!');\n });\n };\n\n $scope.allClasses = {};\n $scope.allClasses.items = [];\n $scope.allNotFilteredClasses = [];\n $scope.direction = 'all';\n\n const datasource = {};\n let position = 0;\n let current = 0;\n $rootScope.key = '';\n\n datasource.get = function (index, count, success) {\n return UiScrollService.initLazyList(index, count, success, position, $scope.allClasses.items);\n };\n\n $rootScope.$watch(function () {\n return $rootScope.key;\n }, function () {\n position = 0;\n _.each($scope.allClasses.items, function (item) {\n if ($rootScope.key > item) position++;\n });\n current++;\n });\n\n datasource.revision = function () {\n return current;\n };\n\n $scope.datasource = datasource;\n\n // adapter implementation for ui-scroll directive\n // reload\n $scope.adapterContainer = {adapter: {remain: true}};\n\n $scope.classQuery = {};\n $scope.classQuery.query = '';\n $scope.classFilterFunc = classFilterFunc;\n\n function classFilterFunc(c) {\n return c.name\n .toLowerCase()\n .indexOf($scope.classQuery.query.toLowerCase()) !== -1;\n }\n\n $scope.$watch('allClasses.items', function () {\n if ($scope.allClasses.items.length > 0) {\n $timeout(function () {\n $scope.adapterContainer.adapter.reload();\n }, 30);\n }\n });\n\n $scope.$watch('direction', function () {\n if (!$repositories.getActiveRepository() ||\n $scope.isSystemRepository() || $repositories.isActiveRepoFedXType()) {\n return;\n }\n initView();\n });\n\n $scope.$on('$destroy', function () {\n $timeout.cancel(timer);\n });\n\n $scope.isLoading = function () {\n return $scope.status === STATUS.IN_PROGRESS || $scope.status === STATUS.WAIT;\n };\n\n $scope.confirmCalculateDependencies = function () {\n ModalService.openSimpleModal({\n title: 'Confirm operation',\n message: 'Calculating relationships data may take some time. Are you sure?',\n warning: true\n }).result\n .then(function () {\n $scope.calculateDependencies();\n });\n };\n\n $scope.calculateDependencies = function () {\n $scope.status = STATUS.WAIT;\n $scope.selectedClasses = undefined;\n GraphDataRestService.calculateRelationships(selectedGraph.contextID.uri)\n .success(function (data) {\n if (data.indexOf('ERROR;') === 0) {\n toastr.error('There was an error while calculating dependencies: ' + data.substring('ERROR;'.length));\n } else {\n getRelationshipsStatus();\n }\n })\n .error(function (data) {\n toastr.error('Could not force dependencies count' + getError(data));\n });\n };\n\n $scope.addClass = function (clazz) {\n $scope.selectedClasses.push(clazz);\n getRelationshipsData($scope.selectedClasses);\n };\n\n $scope.removeClass = function (clazz) {\n _.remove($scope.selectedClasses, function (c) {\n return c.name === clazz.name;\n });\n getRelationshipsData($scope.selectedClasses);\n };\n\n $scope.showClass = function (clazz) {\n $scope.classToShow = clazz;\n };\n\n $scope.isClassByNameShown = function (name) {\n return _.find($scope.selectedClasses, {name: name}) !== undefined;\n };\n\n $scope.addClassByName = function (name) {\n $scope.selectedClasses.push(_.find($scope.allClasses.items, {name: name}));\n getRelationshipsData($scope.selectedClasses);\n };\n\n $scope.removeClassByName = function (name) {\n _.remove($scope.selectedClasses, function (c) {\n return c.name === name;\n });\n getRelationshipsData($scope.selectedClasses);\n };\n\n\n $scope.removeAllClasses = function () {\n $scope.selectedClasses = [];\n getRelationshipsData($scope.selectedClasses);\n };\n\n $scope.isSystemRepository = function () {\n return $repositories.getActiveRepository() === 'SYSTEM';\n };\n\n function onRepositoryIsSet() {\n // clear class search on changing the repository\n $scope.classQuery = {};\n $scope.classQuery.query = '';\n $scope.repositoryError = null;\n selectedGraph = allGraphs;\n if (!$repositories.getActiveRepository() || $repositories.isActiveRepoFedXType()) {\n $scope.status = STATUS.NO_REPO;\n return;\n }\n initView();\n }\n\n const repoIsSetListener = $scope.$on('repositoryIsSet', onRepositoryIsSet);\n\n window.addEventListener('beforeunload', removeRepoIsSetListener);\n\n function removeRepoIsSetListener() {\n repoIsSetListener();\n window.removeEventListener('beforeunload', removeRepoIsSetListener);\n }\n\n $scope.selectGraph = function (graph) {\n selectedGraph = graph;\n getRelationshipsStatus(true);\n LocalStorageAdapter.set(`dependencies-selectedGraph-${$repositories.getActiveRepository()}`, selectedGraph);\n };\n\n $scope.getSelectedGraphValue = function () {\n return selectedGraph.contextID.value;\n };\n\n $scope.isAllGraphsSelected = function () {\n return $scope.getSelectedGraphValue() === 'All graphs'\n }\n}\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[68],{69:function(e,a,s){"use strict";s.r(a);s(2),s(9),s(8),s(10);const c=angular.module("graphdb.framework.namespaces.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.core.services.jwtauth","graphdb.framework.rest.repositories.service","graphdb.framework.rest.rdf4j.repositories.service","toastr"]),n=function(){const e="[A-Z]|[a-z]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-῿]|[‌-‍]|[⁰-↏]|[Ⰰ-⿯]|[、-퟿]|[豈-﷏]|[ﷰ-�]",a="[A-Z]|[a-z]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-῿]|[‌-‍]|[⁰-↏]|[Ⰰ-⿯]|[、-퟿]|[豈-﷏]|[ﷰ-�]|_|-|[0-9]|·|[̀-ͯ]|[‿-⁀]";return new RegExp("^(?:"+e+")(?:(?:"+a+"|\\.)*(?:"+a+"))?$")}();c.controller("NamespacesCtrl",["$scope","$http","$repositories","toastr","$uibModal","ModalService","RepositoriesRestService","RDF4JRepositoriesRestService",function(e,a,s,c,t,r,o,i){function p(a,n){let t;t="object"==typeof a?a.prefix:a,i.deleteNamespacePrefix(s.getActiveRepository(),t).success((function(){n&&n.length>0?p(a=n.shift(),n):(e.selectedAll=!1,e.namespace={},e.getNamespaces(),e.searchNamespaces="",e.haveSelected=!1,e.loader=!1,e.displayedNamespaces=[],void 0===n?c.success("Namespace with prefix '"+t+"' was deleted successfully.",""):c.success("Selected namespaces were deleted successfully.",""))})).error((function(a){const s=getError(a);c.error(s,"Error"),e.loader=!1}))}function l(e,a){return function(e){return""===e||e.match(n)}(e)?!angular.isUndefined(a)&&""!==a||(c.error("Please provide namespace.","Error"),!1):(c.error("Invalid prefix: "+e,"Error"),!1)}e.namespaces={},e.namespace={},e.loader=!1,e.haveSelected=!1,e.pageSizeOptions=[10,20,50,100],e.page=1,e.pageSize=e.pageSizeOptions[0],e.displayedNamespaces=[],e.getNamespaces=function(){s.getActiveRepository()&&(e.loader=!0,e.namespaces={},i.getNamespaces(s.getActiveRepository()).success((function(a){e.namespaces=a.results.bindings.map((function(e){return{prefix:e.prefix.value,namespace:e.namespace.value}})),e.namespaces.length>0&&(e.namespaces.sort((function(e,a){const s=e.prefix.toUpperCase(),c=a.prefix.toUpperCase();return s<c?-1:s>c?1:0})),e.matchedElements=e.namespaces,e.changePagination()),0===e.namespaces.length&&(e.loader=!1)})).error((function(a){const s=getError(a);c.error(s),e.loader=!1})))},e.changePagination=function(){angular.isDefined(e.namespaces)&&(e.displayedNamespaces=e.namespaces.slice(e.pageSize*(e.page-1),e.pageSize*e.page))},e.changePageSize=function(a){$(".ot-graph-page-size").removeClass("active"),e.page=1,e.searchNamespaces="",a&&(e.getNamespaces(),e.pageSize=a)},e.$watch("matchedElements",(function(){angular.isDefined(e.matchedElements)&&(e.displayedNamespaces=e.matchedElements.slice(e.pageSize*(e.page-1),e.pageSize*e.page))})),e.$watch((function(){return s.getActiveRepository()}),(function(){e.searchNamespaces="",e.getNamespaces(),e.selectedAll=!1})),e.onNamespaceSearch=function(){e.haveSelected=!1,e.selectedAll=!1,e.matchedElements=[],e.deselectAll(),e.filterResults()},e.filterResults=function(){angular.forEach(e.namespaces,(function(a){-1===a.namespace.indexOf(e.searchNamespaces)&&-1===a.prefix.indexOf(e.searchNamespaces)||e.matchedElements.push(a)}))},e.saveNamespace=function(a,n){return e.loader=!0,i.updateNamespacePrefix(s.getActiveRepository(),n,a).success((function(){e.getNamespaces(),e.loader=!1})).error((function(a){const s=getError(a);c.error(s,"Error"),e.loader=!1}))},e.editPrefix=function(a,n){e.loader=!0,o.getPrefix(s.getActiveRepository(),{from:a,to:n}).success((function(){e.getNamespaces(),e.loader=!1})).error((function(a){const s=getError(a);c.error(s,"Error"),e.loader=!1}))},e.confirmReplace=function(e,a){r.openSimpleModal({title:"Confirm replace",message:"This namespace prefix already exists. Do you want to replace it?",warning:!0}).result.then(e,a)},e.editPrefixAndNamespace=function(a,s,c){if(angular.isUndefined(a)&&(a=""),!l(a,s))return"";let n=!1;const t=c.prefix;angular.forEach(e.namespaces,(function(e){e.prefix===a&&t!==a&&(n=!0)})),n?e.confirmReplace((function(){e.saveNamespace(t,s).then((function(){t!==a&&e.editPrefix(t,a)}))}),(function(){e.getNamespaces()})):angular.isDefined(n)&&e.saveNamespace(t,s).then((function(){t!==a&&e.editPrefix(t,a)}))},e.addNamespace=function(){if(angular.isUndefined(e.namespace.prefix)&&(e.namespace.prefix=""),!l(e.namespace.prefix,e.namespace.namespace))return;e.selectedAll=!1;let a=!1;for(let s=0;s<e.namespaces.length;s++)e.namespaces[s].prefix===e.namespace.prefix&&(a=!0);a?e.confirmReplace((function(){e.saveNamespace(e.namespace.prefix,e.namespace.namespace),e.namespace={}})):(e.saveNamespace(e.namespace.prefix,e.namespace.namespace),e.namespace={})},e.removeNamespace=function(e){r.openSimpleModal({title:"Confirm delete",message:"Are you sure you want to delete the namespace '"+e.prefix+"'?",warning:!0}).result.then((function(){p(e)}))},e.checkAll=function(){angular.forEach(e.displayedNamespaces,(function(a){a.selected=e.selectedAll}))},e.deleteSelected=function(){let a=!1;angular.forEach(e.displayedNamespaces,(function(s){a||s.selected&&(a=!0,r.openSimpleModal({title:"Confirm delete",message:"Are you sure you want to delete the selected namespace(s)?",warning:!0}).result.then((function(){e.loader=!0;const a=[];angular.forEach(e.displayedNamespaces,(function(e){e.selected&&a.push(e)})),p(a.shift(),a),e.selectedAll=!1}),(function(){e.getNamespaces(),e.selectedAll=!1,e.searchNamespaces=""})))}))},e.checkIfSelectedNamespace=function(){e.haveSelected=!1,angular.forEach(e.namespaces,(function(a){a.selected&&(e.haveSelected=!0)}))},e.deselectAll=function(){angular.forEach(e.namespaces,(function(e){e.selected=!1}))}}]),c.controller("StandartModalCtrl",["$scope","$uibModalInstance",function(e,a){e.ok=function(){a.close(!0)},e.cancel=function(){a.dismiss("cancel")}}])}}]);
2
+ //# sourceMappingURL=68.5fa639981e7ce624fb73.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/namespaces/controllers.js"],"names":["namespaces","angular","module","pnPrefixRe","pnCharsBase","pnChars","pnCharsU","RegExp","controller","$scope","$http","$repositories","toastr","$uibModal","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","$uibModalInstance","ok","close","cancel","dismiss"],"mappings":"0FAAA,4BAKA,MASMA,EAAaC,QAAQC,OAAO,2CATlB,CACZ,eACA,+CACA,0CACA,8CACA,oDACA,WAOEC,EAAa,WACf,MAAMC,EAAc,gFAIdC,EAAUC,wGAEhB,OAAO,IAAIC,OAAO,OAASH,EAAc,UAAYC,EAAU,YAAcA,EAAU,QAPxE,GAcnBL,EAAWQ,WAAW,iBAAkB,CAAC,SAAU,QAAS,gBAAiB,SAAU,YAAa,eAAgB,0BAA2B,+BAC3I,SAAUC,EAAQC,EAAOC,EAAeC,EAAQC,EAAWC,EAAcC,EAAyBC,GAmP9F,SAASC,EAAgBC,EAAWlB,GAChC,IAAImB,EAEAA,EADqB,iBAAdD,EACEA,EAAUC,OAEVD,EAEbF,EAA6BI,sBAAsBT,EAAcU,sBAAuBF,GACnFG,SAAQ,WACDtB,GAAcA,EAAWuB,OAAS,EAElCN,EADAC,EAAYlB,EAAWwB,QACIxB,IAE3BS,EAAOgB,aAAc,EACrBhB,EAAOS,UAAY,GACnBT,EAAOiB,gBACPjB,EAAOkB,iBAAmB,GAC1BlB,EAAOmB,cAAe,EACtBnB,EAAOoB,QAAS,EAChBpB,EAAOqB,oBAAsB,QACVC,IAAf/B,EACAY,EAAOU,QAAQ,0BAA6BH,EAAS,8BAAgC,IAErFP,EAAOU,QAAQ,iDAAkD,QAG1EU,OAAM,SAAUC,GACf,MAAMC,EAAMC,SAASF,GACrBrB,EAAOoB,MAAME,EAAK,SAClBzB,EAAOoB,QAAS,KAmB5B,SAASO,EAA2BjB,EAAQD,GACxC,OAzSZ,SAAwBC,GACpB,MAAkB,KAAXA,GAAiBA,EAAOkB,MAAMlC,GAwSxBmC,CAAenB,IAKhBlB,QAAQsC,YAAYrB,IAA4B,KAAdA,IAClCN,EAAOoB,MAAM,4BAA6B,UACnC,IANPpB,EAAOoB,MAAM,mBAAqBb,EAAQ,UACnC,GArSfV,EAAOT,WAAa,GACpBS,EAAOS,UAAY,GACnBT,EAAOoB,QAAS,EAChBpB,EAAOmB,cAAe,EACtBnB,EAAO+B,gBAAkB,CAAC,GAAI,GAAI,GAAI,KACtC/B,EAAOgC,KAAO,EACdhC,EAAOiC,SAAWjC,EAAO+B,gBAAgB,GACzC/B,EAAOqB,oBAAsB,GAE7BrB,EAAOiB,cAAgB,WACdf,EAAcU,wBAInBZ,EAAOoB,QAAS,EAChBpB,EAAOT,WAAa,GACpBgB,EAA6BU,cAAcf,EAAcU,uBACpDC,SAAQ,SAAUW,GACfxB,EAAOT,WAAaiC,EAAKU,QAAQC,SAASC,KAAI,SAAUC,GACpD,MAAO,CACH3B,OAAQ2B,EAAE3B,OAAO4B,MACjB7B,UAAW4B,EAAE5B,UAAU6B,UAG3BtC,EAAOT,WAAWuB,OAAS,IAC3Bd,EAAOT,WAAWgD,MAAK,SAAUC,EAAGC,GAChC,MAAMC,EAAUF,EAAE9B,OAAOiC,cACnBC,EAAUH,EAAE/B,OAAOiC,cACzB,OAAID,EAAUE,GACF,EAERF,EAAUE,EACH,EAEJ,KAEX5C,EAAO6C,gBAAkB7C,EAAOT,WAChCS,EAAO8C,oBAEsB,IAA7B9C,EAAOT,WAAWuB,SAElBd,EAAOoB,QAAS,MAErBG,OAAM,SAAUC,GACf,MAAMC,EAAMC,SAASF,GACrBrB,EAAOoB,MAAME,GACbzB,EAAOoB,QAAS,OAI5BpB,EAAO8C,iBAAmB,WAClBtD,QAAQuD,UAAU/C,EAAOT,cACzBS,EAAOqB,oBAAsBrB,EAAOT,WAAWyD,MAAMhD,EAAOiC,UAAYjC,EAAOgC,KAAO,GAAIhC,EAAOiC,SAAWjC,EAAOgC,QAI3HhC,EAAOiD,eAAiB,SAAUC,GAC9BC,EAAE,uBAAuBC,YAAY,UACrCpD,EAAOgC,KAAO,EACdhC,EAAOkB,iBAAmB,GACtBgC,IACAlD,EAAOiB,gBACPjB,EAAOiC,SAAWiB,IAI1BlD,EAAOqD,OAAO,mBAAmB,WACzB7D,QAAQuD,UAAU/C,EAAO6C,mBACzB7C,EAAOqB,oBAAsBrB,EAAO6C,gBAAgBG,MAAMhD,EAAOiC,UAAYjC,EAAOgC,KAAO,GAAIhC,EAAOiC,SAAWjC,EAAOgC,UAIhIhC,EAAOqD,QAAO,WACV,OAAOnD,EAAcU,yBACtB,WACCZ,EAAOkB,iBAAmB,GAC1BlB,EAAOiB,gBACPjB,EAAOgB,aAAc,KAGzBhB,EAAOsD,kBAAoB,WACvBtD,EAAOmB,cAAe,EACtBnB,EAAOgB,aAAc,EACrBhB,EAAO6C,gBAAkB,GACzB7C,EAAOuD,cACPvD,EAAOwD,iBAGXxD,EAAOwD,cAAgB,WACnBhE,QAAQiE,QAAQzD,EAAOT,YAAY,SAAUmE,IACgB,IAArDA,EAAKjD,UAAUkD,QAAQ3D,EAAOkB,oBAA8E,IAAlDwC,EAAKhD,OAAOiD,QAAQ3D,EAAOkB,mBACrFlB,EAAO6C,gBAAgBe,KAAKF,OAKxC1D,EAAO6D,cAAgB,SAAUnD,EAAQD,GAErC,OADAT,EAAOoB,QAAS,EACTb,EAA6BuD,sBAAsB5D,EAAcU,sBAAuBH,EAAWC,GACrGG,SAAQ,WACLb,EAAOiB,gBACPjB,EAAOoB,QAAS,KACjBG,OAAM,SAAUC,GACf,MAAMC,EAAMC,SAASF,GACrBrB,EAAOoB,MAAME,EAAK,SAClBzB,EAAOoB,QAAS,MAI5BpB,EAAO+D,WAAa,SAAUC,EAAWC,GACrCjE,EAAOoB,QAAS,EAChBd,EAAwB4D,UAAUhE,EAAcU,sBAAuB,CAACuD,KAAMH,EAAWI,GAAIH,IACxFpD,SAAQ,WACLb,EAAOiB,gBACPjB,EAAOoB,QAAS,KACjBG,OAAM,SAAUC,GACf,MAAMC,EAAMC,SAASF,GACrBrB,EAAOoB,MAAME,EAAK,SAClBzB,EAAOoB,QAAS,MAI5BpB,EAAOqE,eAAiB,SAAUC,EAAYC,GAC1ClE,EAAamE,gBAAgB,CACzBC,MAAO,kBACPC,QAAS,mEACTC,SAAS,IACVC,OAAOC,KAAKP,EAAYC,IAG/BvE,EAAO8E,uBAAyB,SAAUpE,EAAQD,EAAWsE,GAKzD,GAJIvF,QAAQsC,YAAYpB,KACpBA,EAAS,KAGRiB,EAA2BjB,EAAQD,GACpC,MAAO,GAGX,IAAIuE,GAAc,EAClB,MAAMhB,EAAYe,EAAgBrE,OAClClB,QAAQiE,QAAQzD,EAAOT,YAAY,SAAU0F,GACrCA,EAAKvE,SAAWA,GAAUsD,IAActD,IACxCsE,GAAc,MAGlBA,EACAhF,EAAOqE,gBAAe,WAClBrE,EAAO6D,cAAcG,EAAWvD,GAAWoE,MAAK,WACxCb,IAActD,GACdV,EAAO+D,WAAWC,EAAWtD,SAGtC,WACCV,EAAOiB,mBAEJzB,QAAQuD,UAAUiC,IACzBhF,EAAO6D,cAAcG,EAAWvD,GAAWoE,MAAK,WACxCb,IAActD,GACdV,EAAO+D,WAAWC,EAAWtD,OAM7CV,EAAOkF,aAAe,WAKlB,GAJI1F,QAAQsC,YAAY9B,EAAOS,UAAUC,UACrCV,EAAOS,UAAUC,OAAS,KAGzBiB,EAA2B3B,EAAOS,UAAUC,OAAQV,EAAOS,UAAUA,WACtE,OAGJT,EAAOgB,aAAc,EACrB,IAAIgE,GAAc,EAClB,IAAK,IAAIG,EAAI,EAAGA,EAAInF,EAAOT,WAAWuB,OAAQqE,IACtCnF,EAAOT,WAAW4F,GAAGzE,SAAWV,EAAOS,UAAUC,SACjDsE,GAAc,GAGlBA,EACAhF,EAAOqE,gBAAe,WAClBrE,EAAO6D,cAAc7D,EAAOS,UAAUC,OAAQV,EAAOS,UAAUA,WAC/DT,EAAOS,UAAY,OAGvBT,EAAO6D,cAAc7D,EAAOS,UAAUC,OAAQV,EAAOS,UAAUA,WAC/DT,EAAOS,UAAY,KAI3BT,EAAOoF,gBAAkB,SAAU3E,GAC/BJ,EAAamE,gBAAgB,CACzBC,MAAO,iBACPC,QAAS,kDAAqDjE,EAAUC,OAAS,KACjFiE,SAAS,IACVC,OAAOC,MAAK,WACXrE,EAAgBC,OAIxBT,EAAOqF,SAAW,WACd7F,QAAQiE,QAAQzD,EAAOqB,qBAAqB,SAAUqC,GAClDA,EAAK4B,SAAWtF,EAAOgB,gBAI/BhB,EAAOuF,eAAiB,WAuBpB,IAAIC,GAAsB,EAC1BhG,QAAQiE,QAAQzD,EAAOqB,qBAAqB,SAAUZ,GAC7C+E,GACG/E,EAAU6E,WACVE,GAAsB,EAzB9BnF,EAAamE,gBAAgB,CACzBC,MAAO,iBACPC,QAAS,6DACTC,SAAS,IACVC,OAAOC,MAAK,WACX7E,EAAOoB,QAAS,EAChB,MAAM7B,EAAa,GACnBC,QAAQiE,QAAQzD,EAAOqB,qBAAqB,SAAUZ,GAC9CA,EAAU6E,UACV/F,EAAWqE,KAAKnD,MAGxBD,EAAgBjB,EAAWwB,QAASxB,GACpCS,EAAOgB,aAAc,KACtB,WACChB,EAAOiB,gBACPjB,EAAOgB,aAAc,EACrBhB,EAAOkB,iBAAmB,WAgDtClB,EAAOyF,yBAA2B,WAC9BzF,EAAOmB,cAAe,EACtB3B,QAAQiE,QAAQzD,EAAOT,YAAY,SAAUmE,GACrCA,EAAK4B,WACLtF,EAAOmB,cAAe,OAKlCnB,EAAOuD,YAAc,WACjB/D,QAAQiE,QAAQzD,EAAOT,YAAY,SAAUmE,GACzCA,EAAK4B,UAAW,SAmBhC/F,EAAWQ,WAAW,oBAAqB,CAAC,SAAU,oBAAqB,SAAUC,EAAQ0F,GAEzF1F,EAAO2F,GAAK,WAERD,EAAkBE,OADH,IAInB5F,EAAO6F,OAAS,WACZH,EAAkBI,QAAQ","file":"68.5fa639981e7ce624fb73.bundle.js","sourcesContent":["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', '$uibModal', 'ModalService', 'RepositoriesRestService', 'RDF4JRepositoriesRestService',\n function ($scope, $http, $repositories, toastr, $uibModal, 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', '$uibModalInstance', function ($scope, $uibModalInstance) {\n\n $scope.ok = function () {\n const result = true;\n $uibModalInstance.close(result);\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}]);\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[7,83],{43:function(e,o){angular.module("graphdb.framework.rest.cluster.service",[]).factory("ClusterRestService",r),r.$inject=["$http"];const t="rest/cluster/masters";function r(e){return{getMaster:function(o,r={}){return e.get(`${t}/${o}`,r)},configureMaster:function(o,r,n){return e({url:`${t}/${o}?masterLocation=${encodeURIComponent(r)}`,method:"POST",data:n})},cloneRepository:function(o){return e.post("rest/cluster/nodes/clone",{cloningNodeLocation:o.currentNodeLocation,cloningNodeRepositoryID:o.selectedNodeName,newNodeRepositoryID:o.repositoryID,newNodeLocation:o.locationUri,newNodeTitle:o.repositoryTitle})},connectWorker:function(o,r,n){return e({url:`${t}/${o}/workers/`,method:"POST",data:{workerURL:n,masterLocation:r}})},disconnectWorker:function(o,r){return e({url:`${t}/${o}/workers?${r}`,method:"DELETE",dataType:"text"})},disconnectNodes:function(o,r){return e({url:`${t}/${o}/peers?${r}`,method:"DELETE",dataType:"text"})},connectNodes:function(o,r){return e({url:`${t}/${o}/peers`,method:"POST",data:r})}}}},81:function(e,o,t){"use strict";t.r(o);t(2),t(43);function r(e){return e.local?"local":e.location.split("/repositories/")[0]}function n(e,o,t,n,s,i,a,c,l,d,u,p,f){e.setLoader=function(o,t){u.cancel(e.loaderTimeout),o?e.loaderTimeout=u((function(){e.loader=o,e.loaderMessage=t}),300):e.loader=!1},e.getLoaderMessage=function(){return e.loaderMessage||"Loading..."},e.getMaster=function(o){p.getMaster(o).success((function(o){e.masterInformation=o}))},e.setMasterAttribute=function(o,t,s){const i={};i[t]=s,e.setLoader(!0,"Setting attribute..."),p.configureMaster(e.getLabel(o.location),r(o),i).success((function(){return e.attributeChange=!1,n.success("Set "+t+" to "+s+".",""),e.refreshMastersIcons(),!0})).error((function(o){return e.attributeChange=!1,n.error(getError(o),"Error setting attribute "+t),!0})).finally((function(){e.setLoader(!1)}))},e.hasInfo=function(o){return null==o||(e.isWorker(o)?"fingerprint"in o:"failedReads"in o)},e.locations=function(){return s.getLocations()},e.showCloneModal=function(){e.clone.locations=e.locations(),e.clone.repositoryID=e.selectedNode.name,i.open({templateUrl:"js/angular/clustermanagement/templates/modal/clone-modal.html",controller:"CloneRepositoryCtrl",resolve:{clone:function(){return e.clone}}}).result.then((function(o){e.clone=o,e.cloneCurrentRepository()}),(function(){e.selectedNode=null}))},e.cloneCurrentRepository=function(){const o=r(e.selectedNode);e.setLoader(!0,"Cloning worker..."),p.cloneRepository({currentNodeLocation:o,selectedNodeName:e.selectedNode.name,repositoryID:e.clone.repositoryID,locationUri:e.clone.location.uri,repositoryTitle:e.clone.repositoryTitle}).success((function(){n.success("Cloned node into "+e.clone.location),e.getNodes()})).error((function(e){n.error(getError(e),"Error cloning node")})).finally((function(){e.setLoader(!1)}))},e.getLabel=function(e){return 0!==e.indexOf("http")?name:e.substring(e.indexOf("/repositories")+14)},e.connectNodes=function(o,t,s){let i,a;if("disabledReason"in o)n.error(o.disabledReason,"Error");else if("disabledReason"in t)n.error(t.disabledReason,"Error");else if("master"!==o.repositoryType||"master"!==t.repositoryType){if("master"===o.repositoryType)i=o,a=t;else{if("master"!==t.repositoryType)return void n.error("You cannot connect two workers","Error");i=t,a=o}a.location in i.workers?n.error("Worker already connected to that master","Error"):(e.setLoader(!0,"Connecting nodes..."),p.connectWorker(e.getLabel(i.location),r(i),a.location).success((function(){const o=Date.now();a.cluster=a.cluster||[],a.cluster.push(i.cluster),e.addOrUpdateLink(i,a,"",o),i.workers[a.location]=1,s(),n.success("Connected worker to master.","")})).error((function(e){n.error(getError(e),"Error connecting worker")})).finally((function(){e.setLoader(!1)})))}else o.location in t.peers&&t.location in o.peers?n.error("Masters already connected","Error"):o.location in t.peers?e.connectMasters(o,t,!1,s):t.location in o.peers?e.connectMasters(t,o,!1,s):e.connectMasters(o,t,!0,s)},e.disconnectLinkConfirm=function(o,t){d.openSimpleModal({title:"Confirm disconnect",message:"Are you sure you want to disconnect the nodes?",warning:!0}).result.then((function(){e.disconnectLink(o,t)}))},e.disconnectLink=function(o,t,s){let i={},a={};"master"===o.source.repositoryType?(i=o.source,a=o.target):"master"===o.target.repositoryType&&(i=o.target,a=o.source),s||!("disabledReason"in i||"master"===a.repositoryType&&"disabledReason"in a)?(e.setLoader(!0,"Disconnecting nodes..."),"worker"===a.repositoryType?function(o,t,s,i){p.disconnectWorker(e.getLabel(t.location),$.param({workerURL:s.location,masterLocation:r(t)})).success((function(){e.deleteLink(o),s.cluster=s.cluster.filter((function(e){return e!==t.cluster})),delete t.workers[s.location],i(),n.success("Disconnected worker from master.","")})).error((function(e){n.error(getError(e),"Error disconnecting worker")})).finally((function(){e.setLoader(!1)}))}(o,i,a,t):function(o,t,s,i){p.disconnectNodes(e.getLabel(t.location),$.param({masterLocation:r(t),masterNodeID:t.nodeID,peerLocation:r(s),peerRepositoryID:e.getLabel(s.location),peerNodeID:s.nodeID})).success((function(r){e.deleteLink(o,!0),delete s.peers[t.location],delete t.peers[s.location],i(),n.success(r,"")})).error((function(e){n.error(getError(e),"Error disconnecting masters")})).finally((function(){e.setLoader(!1)}))}(o,i,a,t)):d.openSimpleModal({title:"Confirm disconnect",message:"One of the masters is currently unreachable and will be disconnected only at the reachable master.<br><br>Proceed only if you know what you are doing.",warning:!0}).result.then((function(){e.disconnectLink(o,t,!0)}))},e.selectNode=function(o){e.selectedNode!==o?e.selectedNode=o:e.selectedNode=null,e.$apply()},e.isWorker=function(e){return null!=e&&"worker"===e.repositoryType},e.connectMasters=function(o,t,r,s){const i=o.location.split("/repositories/"),a=t.location.split("/repositories/");e.setLoader(!0,"Connecting nodes..."),p.connectNodes(i[1],{masterLocation:o.local?"local":i[0],masterNodeID:o.nodeID,peerLocation:t.local?"local":a[0],peerRepositoryID:a[1],peerNodeID:t.nodeID,bidirectional:r}).success((function(i){const a=Date.now();e.addOrUpdateLink(o,t,"ON",a),o.peers[t.location]=1,r&&(t.peers[o.location]=1,e.addOrUpdateLink(t,o,"ON",a)),s(),n.success(i,"")})).error((function(e){n.error(getError(e),"Error connecting masters")})).finally((function(){e.setLoader(!1)}))},e.addOrUpdateLink=function(o,t,r,n){const s=o.location+"|"+t.location;let i=e.linksHash[s];const a=t.location+"|"+o.location,c=e.linksHash[a];return i||(i={},e.linksHash[s]=i,e.links.push(i),i.source=o,i.target=t,e.needsToRestart=!0),i.status=r,i.timestamp=n,i.reversePeerMissing="master"===o.repositoryType&&"master"===t.repositoryType&&!c,c&&c.reversePeerMissing&&(c.reversePeerMissing=!1),e.linksHash[s]=i,e.updateWarnings&&e.updateWarnings(),i},e.deleteLink=function(o,t){e.links.splice(e.links.indexOf(o),1);const r=o.source.location+"|"+o.target.location;if(delete e.linksHash[r],(o.source.disabledReason||o.target.disabledReason)&&(console.log("link to funky node removed, refresh"),e.needsToRefresh=!0),t){const t=o.target.location+"|"+o.source.location,r=e.linksHash[t];r&&e.deleteLink(r,!1)}},e.updateMasterNode=function(o,t,s,i){return p.getMaster(o.name,{params:{masterLocation:r(o)}}).error((function(e){return"The location is unreachable."!==o.disabledReason&&(n.error(getError(e),"Error accessing master "+o.name),o.disabledReason="The location is unreachable.",o.peers={},o.workers={},o.hasWorkers=!1),o.timestamp=t,!0})).success((function(r){o.averageReadTime=r.averageReadTime,o.completedReads=r.completedReads,o.completedWrites=r.completedWrites,o.failedReads=r.failedReads,o.failedWrites=r.failedWrites,o.pendingWrites=r.pendingWrites,o.runningReads=r.runningReads,o.runningWrites=r.runningWrites,o.readonly=r.readonly,o.mode=r.mode,o.nodeID=r.nodeID,o.peers={},o.workers={},o.timestamp=t,o.hasWorkers=r.workers.length>0,r.peers.forEach((function(r){o.peers[r.location]=1,r.location in e.urlToNode||(s?(console.log("master disappeared, refreshing"),e.needsToRefresh=!0):e.urlToNode[r.location]={name:e.getLabel(r.location),disabledReason:"You are not connected to this master's location or the master was deleted",location:r.location,nodeID:r.nodeID,repositoryType:"master",artificiallyAdded:!0}),e.addOrUpdateLink(o,e.urlToNode[r.location],"ON",t)})),r.workers.forEach((function(r){o.workers[r.location]=1;let n={};if(r.location in e.urlToNode)n=e.urlToNode[r.location];else{if(s)return console.log("worker disappeared, refreshing"),void(e.needsToRefresh=!0);n=e.urlToNode[r.location]={name:e.getLabel(r.location),location:r.location,repositoryType:"worker",artificiallyAdded:!0}}n.fingerprint=r.fingerprint,n.averageTaskTime=r.averageTaskTime,n.failedTasks=r.failedTasks,n.completedTasks=r.completedTasks,n.runningTasks=r.runningTasks,n.timestamp=t,n.artificiallyAdded?(n.disabledReason="You are not connected to this worker's location.",r.lastError&&(n.disabledReason+="<br>"+r.lastError)):r.lastError?n.disabledReason=r.lastError:delete n.disabledReason,n.disabledReason&&(n.disabledReason=a.trustAsHtml(n.disabledReason)),n.cluster=n.cluster||[],-1===n.cluster.indexOf(o.cluster)&&n.cluster.push(o.cluster);let c=r.status;i&&(c=["UNINITIALIZED","ON","OFF","REPLICATION_SERVER","REPLICATION_CLIENT","OUT_OF_SYNC","OUT_OF_SYNC_FORCED","WAITING_WRITE","WRITING"][Math.floor(9*Math.random())]),e.addOrUpdateLink(o,e.urlToNode[r.location],c,t)}))})).catch((function(){return!0}))},e.getNodes=function(){return e.nodes=[],e.links=[],e.linksHash={},e.clone={},e.selectedNode=null,e.clusters=[],e.setLoader(!0),f.getCluster().success((function(o){e.hasNodes=o.length>0,e.links=[],e.linksHash={},e.clusters=[];const r=Date.now();e.urlToNode=o.reduce((function(o,t){return"master"!==t.type&&"worker"!==t.type||(o[t.uri]={name:e.getLabel(t.uri),local:t.local,location:t.uri,repositoryType:t.type,timestamp:r}),o}),{});let n=0;const s=Object.keys(e.urlToNode).filter((function(o){return"master"===e.urlToNode[o].repositoryType})).sort((function(e,o){return e<o?-1:e>o?1:0})).map((function(o){const t=e.urlToNode[o];return t.cluster=n,e.clusters.push(t),n++,e.updateMasterNode(t,r)}));return t.all(s).finally((function(){e.nodes=_.sortBy(Object.keys(e.urlToNode).map((function(o){return e.urlToNode[o]})),["name"]),e.render(),e.setLoader(!1)}))})).error((function(o){e.hasNodes=!1,n.error(getError(o),"Error getting nodes"),e.setLoader(!1)})).finally((function(){e.needsToRefresh=!1}))},e.trackAddedOrRemovedNodes=function(o){return f.getCluster().success((function(t){const r=t.reduce((function(e,o){return"master"!==o.type&&"worker"!==o.type||(e[o.uri]={location:o.uri,repositoryType:o.type}),e}),{});for(let t=0;t<e.nodes.length;t++){const n=e.nodes[t];if(n.location in r)n.artificiallyAdded||(n.timestamp=o,delete r[n.location]);else if(!n.artificiallyAdded)return console.log("old node disappeared, refresh"),e.needsToRefresh=!0,!0}Object.keys(r).length>0&&(console.log("new nodes appeared, refresh"),e.needsToRefresh=!0)})).error((function(e){n.error(getError(e),"Error getting nodes")}))},e.updateClusterIfNeeded=function(o){e.updating=!0;const r=Date.now(),n=function(){if(!e.needsToRefresh)for(let o=0;o<e.links.length;o++){const t=e.links[o];t.timestamp!==r&&(console.log("nodes disconnected, removing link"),e.deleteLink(t,!1))}e.needsToRefresh?(console.log("refresh requested"),e.getNodes()):e.needsToRestart?(console.log("only links changed, restarting"),e.restart()):(e.updateStatuses(),e.updateColors(),e.updateWarnings(),e.updating=!1)};if(o)e.trackAddedOrRemovedNodes(r).then((function(){if(e.needsToRefresh)n();else{const o=[];for(let t=0;t<e.nodes.length;t++){const n=e.nodes[t];"master"===n.repositoryType&&o.push(e.updateMasterNode(n,r,!0))}t.all(o).finally(n)}}));else{const o=[];for(let t=0;t<e.nodes.length;t++){const n=e.nodes[t];"master"===n.repositoryType&&o.push(e.updateMasterNode(n,r,!0))}t.all(o).finally(n)}},e.getNodes(),e.setMode=function(o){e.attributeChange=!0,e.setMasterAttribute(e.selectedNode,"Mode",o)},e.setReadonly=function(o){e.attributeChange=!0,e.selectedNode.readonly=o,e.setMasterAttribute(e.selectedNode,"ReadOnly",o)};let g=0;const m=l((function(){e.attributeChange||e.updating||(g++,e.updateClusterIfNeeded(g%3==0))}),2e3);e.$on("$destroy",(function(){l.cancel(m)})),e.attributeChange=!1,e.updating=!1;const y=angular.element(c),k=function(){e.resize()};y.bind("resize",k),e.$on("$destroy",(function(){y.unbind("resize",k)})),e.$on("onToggleNavWidth",(function(){e.resize()}))}function s(e,o,t){e.clone=angular.copy(t),e.ok=function(){const t=new RegExp("^[a-zA-Z0-9-_]+$");e.isInvalidRepoName=!t.test(e.clone.repositoryID),e.isInvalidRepoName||o.close(e.clone)},e.cancel=function(){o.dismiss("cancel")}}angular.module("graphdb.framework.clustermanagement.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.rest.repositories.service","graphdb.framework.rest.cluster.service","toastr"]).controller("ClusterManagementCtrl",n).controller("CloneRepositoryCtrl",s),n.$inject=["$scope","$http","$q","toastr","$repositories","$modal","$sce","$window","$interval","ModalService","$timeout","ClusterRestService","RepositoriesRestService"],s.$inject=["$scope","$modalInstance","clone"]}}]);
2
- //# sourceMappingURL=7.a0f5ec224bebd08058f4.bundle.js.map
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[7,83],{43:function(e,o){angular.module("graphdb.framework.rest.cluster.service",[]).factory("ClusterRestService",r),r.$inject=["$http"];const t="rest/cluster/masters";function r(e){return{getMaster:function(o,r={}){return e.get(`${t}/${o}`,r)},configureMaster:function(o,r,n){return e({url:`${t}/${o}?masterLocation=${encodeURIComponent(r)}`,method:"POST",data:n})},cloneRepository:function(o){return e.post("rest/cluster/nodes/clone",{cloningNodeLocation:o.currentNodeLocation,cloningNodeRepositoryID:o.selectedNodeName,newNodeRepositoryID:o.repositoryID,newNodeLocation:o.locationUri,newNodeTitle:o.repositoryTitle})},connectWorker:function(o,r,n){return e({url:`${t}/${o}/workers/`,method:"POST",data:{workerURL:n,masterLocation:r}})},disconnectWorker:function(o,r){return e({url:`${t}/${o}/workers?${r}`,method:"DELETE",dataType:"text"})},disconnectNodes:function(o,r){return e({url:`${t}/${o}/peers?${r}`,method:"DELETE",dataType:"text"})},connectNodes:function(o,r){return e({url:`${t}/${o}/peers`,method:"POST",data:r})}}}},81:function(e,o,t){"use strict";t.r(o);t(2),t(43);function r(e){return e.local?"local":e.location.split("/repositories/")[0]}function n(e,o,t,n,s,i,a,c,l,d,u,p,f){e.setLoader=function(o,t){u.cancel(e.loaderTimeout),o?e.loaderTimeout=u((function(){e.loader=o,e.loaderMessage=t}),300):e.loader=!1},e.getLoaderMessage=function(){return e.loaderMessage||"Loading..."},e.getMaster=function(o){p.getMaster(o).success((function(o){e.masterInformation=o}))},e.setMasterAttribute=function(o,t,s){const i={};i[t]=s,e.setLoader(!0,"Setting attribute..."),p.configureMaster(e.getLabel(o.location),r(o),i).success((function(){return e.attributeChange=!1,n.success("Set "+t+" to "+s+".",""),e.refreshMastersIcons(),!0})).error((function(o){return e.attributeChange=!1,n.error(getError(o),"Error setting attribute "+t),!0})).finally((function(){e.setLoader(!1)}))},e.hasInfo=function(o){return null==o||(e.isWorker(o)?"fingerprint"in o:"failedReads"in o)},e.locations=function(){return s.getLocations()},e.showCloneModal=function(){e.clone.locations=e.locations(),e.clone.repositoryID=e.selectedNode.name,i.open({templateUrl:"js/angular/clustermanagement/templates/modal/clone-modal.html",controller:"CloneRepositoryCtrl",resolve:{clone:function(){return e.clone}}}).result.then((function(o){e.clone=o,e.cloneCurrentRepository()}),(function(){e.selectedNode=null}))},e.cloneCurrentRepository=function(){const o=r(e.selectedNode);e.setLoader(!0,"Cloning worker..."),p.cloneRepository({currentNodeLocation:o,selectedNodeName:e.selectedNode.name,repositoryID:e.clone.repositoryID,locationUri:e.clone.location.uri,repositoryTitle:e.clone.repositoryTitle}).success((function(){n.success("Cloned node into "+e.clone.location),e.getNodes()})).error((function(e){n.error(getError(e),"Error cloning node")})).finally((function(){e.setLoader(!1)}))},e.getLabel=function(e){return 0!==e.indexOf("http")?name:e.substring(e.indexOf("/repositories")+14)},e.connectNodes=function(o,t,s){let i,a;if("disabledReason"in o)n.error(o.disabledReason,"Error");else if("disabledReason"in t)n.error(t.disabledReason,"Error");else if("master"!==o.repositoryType||"master"!==t.repositoryType){if("master"===o.repositoryType)i=o,a=t;else{if("master"!==t.repositoryType)return void n.error("You cannot connect two workers","Error");i=t,a=o}a.location in i.workers?n.error("Worker already connected to that master","Error"):(e.setLoader(!0,"Connecting nodes..."),p.connectWorker(e.getLabel(i.location),r(i),a.location).success((function(){const o=Date.now();a.cluster=a.cluster||[],a.cluster.push(i.cluster),e.addOrUpdateLink(i,a,"",o),i.workers[a.location]=1,s(),n.success("Connected worker to master.","")})).error((function(e){n.error(getError(e),"Error connecting worker")})).finally((function(){e.setLoader(!1)})))}else o.location in t.peers&&t.location in o.peers?n.error("Masters already connected","Error"):o.location in t.peers?e.connectMasters(o,t,!1,s):t.location in o.peers?e.connectMasters(t,o,!1,s):e.connectMasters(o,t,!0,s)},e.disconnectLinkConfirm=function(o,t){d.openSimpleModal({title:"Confirm disconnect",message:"Are you sure you want to disconnect the nodes?",warning:!0}).result.then((function(){e.disconnectLink(o,t)}))},e.disconnectLink=function(o,t,s){let i={},a={};"master"===o.source.repositoryType?(i=o.source,a=o.target):"master"===o.target.repositoryType&&(i=o.target,a=o.source),s||!("disabledReason"in i||"master"===a.repositoryType&&"disabledReason"in a)?(e.setLoader(!0,"Disconnecting nodes..."),"worker"===a.repositoryType?function(o,t,s,i){p.disconnectWorker(e.getLabel(t.location),$.param({workerURL:s.location,masterLocation:r(t)})).success((function(){e.deleteLink(o),s.cluster=s.cluster.filter((function(e){return e!==t.cluster})),delete t.workers[s.location],i(),n.success("Disconnected worker from master.","")})).error((function(e){n.error(getError(e),"Error disconnecting worker")})).finally((function(){e.setLoader(!1)}))}(o,i,a,t):function(o,t,s,i){p.disconnectNodes(e.getLabel(t.location),$.param({masterLocation:r(t),masterNodeID:t.nodeID,peerLocation:r(s),peerRepositoryID:e.getLabel(s.location),peerNodeID:s.nodeID})).success((function(r){e.deleteLink(o,!0),delete s.peers[t.location],delete t.peers[s.location],i(),n.success(r,"")})).error((function(e){n.error(getError(e),"Error disconnecting masters")})).finally((function(){e.setLoader(!1)}))}(o,i,a,t)):d.openSimpleModal({title:"Confirm disconnect",message:"One of the masters is currently unreachable and will be disconnected only at the reachable master.<br><br>Proceed only if you know what you are doing.",warning:!0}).result.then((function(){e.disconnectLink(o,t,!0)}))},e.selectNode=function(o){e.selectedNode!==o?e.selectedNode=o:e.selectedNode=null,e.$apply()},e.isWorker=function(e){return null!=e&&"worker"===e.repositoryType},e.connectMasters=function(o,t,r,s){const i=o.location.split("/repositories/"),a=t.location.split("/repositories/");e.setLoader(!0,"Connecting nodes..."),p.connectNodes(i[1],{masterLocation:o.local?"local":i[0],masterNodeID:o.nodeID,peerLocation:t.local?"local":a[0],peerRepositoryID:a[1],peerNodeID:t.nodeID,bidirectional:r}).success((function(i){const a=Date.now();e.addOrUpdateLink(o,t,"ON",a),o.peers[t.location]=1,r&&(t.peers[o.location]=1,e.addOrUpdateLink(t,o,"ON",a)),s(),n.success(i,"")})).error((function(e){n.error(getError(e),"Error connecting masters")})).finally((function(){e.setLoader(!1)}))},e.addOrUpdateLink=function(o,t,r,n){const s=o.location+"|"+t.location;let i=e.linksHash[s];const a=t.location+"|"+o.location,c=e.linksHash[a];return i||(i={},e.linksHash[s]=i,e.links.push(i),i.source=o,i.target=t,e.needsToRestart=!0),i.status=r,i.timestamp=n,i.reversePeerMissing="master"===o.repositoryType&&"master"===t.repositoryType&&!c,c&&c.reversePeerMissing&&(c.reversePeerMissing=!1),e.linksHash[s]=i,e.updateWarnings&&e.updateWarnings(),i},e.deleteLink=function(o,t){e.links.splice(e.links.indexOf(o),1);const r=o.source.location+"|"+o.target.location;if(delete e.linksHash[r],(o.source.disabledReason||o.target.disabledReason)&&(console.log("link to funky node removed, refresh"),e.needsToRefresh=!0),t){const t=o.target.location+"|"+o.source.location,r=e.linksHash[t];r&&e.deleteLink(r,!1)}},e.updateMasterNode=function(o,t,s,i){return p.getMaster(o.name,{params:{masterLocation:r(o)}}).error((function(e){return"The location is unreachable."!==o.disabledReason&&(n.error(getError(e),"Error accessing master "+o.name),o.disabledReason="The location is unreachable.",o.peers={},o.workers={},o.hasWorkers=!1),o.timestamp=t,!0})).success((function(r){o.averageReadTime=r.averageReadTime,o.completedReads=r.completedReads,o.completedWrites=r.completedWrites,o.failedReads=r.failedReads,o.failedWrites=r.failedWrites,o.pendingWrites=r.pendingWrites,o.runningReads=r.runningReads,o.runningWrites=r.runningWrites,o.readonly=r.readonly,o.mode=r.mode,o.nodeID=r.nodeID,o.peers={},o.workers={},o.timestamp=t,o.hasWorkers=r.workers.length>0,r.peers.forEach((function(r){o.peers[r.location]=1,r.location in e.urlToNode||(s?(console.log("master disappeared, refreshing"),e.needsToRefresh=!0):e.urlToNode[r.location]={name:e.getLabel(r.location),disabledReason:"You are not connected to this master's location or the master was deleted",location:r.location,nodeID:r.nodeID,repositoryType:"master",artificiallyAdded:!0}),e.addOrUpdateLink(o,e.urlToNode[r.location],"ON",t)})),r.workers.forEach((function(r){o.workers[r.location]=1;let n={};if(r.location in e.urlToNode)n=e.urlToNode[r.location];else{if(s)return console.log("worker disappeared, refreshing"),void(e.needsToRefresh=!0);n=e.urlToNode[r.location]={name:e.getLabel(r.location),location:r.location,repositoryType:"worker",artificiallyAdded:!0}}n.fingerprint=r.fingerprint,n.averageTaskTime=r.averageTaskTime,n.failedTasks=r.failedTasks,n.completedTasks=r.completedTasks,n.runningTasks=r.runningTasks,n.timestamp=t,n.artificiallyAdded?(n.disabledReason="You are not connected to this worker's location.",r.lastError&&(n.disabledReason+="<br>"+r.lastError)):r.lastError?n.disabledReason=r.lastError:delete n.disabledReason,n.disabledReason&&(n.disabledReason=a.trustAsHtml(n.disabledReason)),n.cluster=n.cluster||[],-1===n.cluster.indexOf(o.cluster)&&n.cluster.push(o.cluster);let c=r.status;i&&(c=["UNINITIALIZED","ON","OFF","REPLICATION_SERVER","REPLICATION_CLIENT","OUT_OF_SYNC","OUT_OF_SYNC_FORCED","WAITING_WRITE","WRITING"][Math.floor(9*Math.random())]),e.addOrUpdateLink(o,e.urlToNode[r.location],c,t)}))})).catch((function(){return!0}))},e.getNodes=function(){return e.nodes=[],e.links=[],e.linksHash={},e.clone={},e.selectedNode=null,e.clusters=[],e.setLoader(!0),f.getCluster().success((function(o){e.hasNodes=o.length>0,e.links=[],e.linksHash={},e.clusters=[];const r=Date.now();e.urlToNode=o.reduce((function(o,t){return"master"!==t.type&&"worker"!==t.type||(o[t.uri]={name:e.getLabel(t.uri),local:t.local,location:t.uri,repositoryType:t.type,timestamp:r}),o}),{});let n=0;const s=Object.keys(e.urlToNode).filter((function(o){return"master"===e.urlToNode[o].repositoryType})).sort((function(e,o){return e<o?-1:e>o?1:0})).map((function(o){const t=e.urlToNode[o];return t.cluster=n,e.clusters.push(t),n++,e.updateMasterNode(t,r)}));return t.all(s).finally((function(){e.nodes=_.sortBy(Object.keys(e.urlToNode).map((function(o){return e.urlToNode[o]})),["name"]),e.render(),e.setLoader(!1)}))})).error((function(o){e.hasNodes=!1,n.error(getError(o),"Error getting nodes"),e.setLoader(!1)})).finally((function(){e.needsToRefresh=!1}))},e.trackAddedOrRemovedNodes=function(o){return f.getCluster().success((function(t){const r=t.reduce((function(e,o){return"master"!==o.type&&"worker"!==o.type||(e[o.uri]={location:o.uri,repositoryType:o.type}),e}),{});for(let t=0;t<e.nodes.length;t++){const n=e.nodes[t];if(n.location in r)n.artificiallyAdded||(n.timestamp=o,delete r[n.location]);else if(!n.artificiallyAdded)return console.log("old node disappeared, refresh"),e.needsToRefresh=!0,!0}Object.keys(r).length>0&&(console.log("new nodes appeared, refresh"),e.needsToRefresh=!0)})).error((function(e){n.error(getError(e),"Error getting nodes")}))},e.updateClusterIfNeeded=function(o){e.updating=!0;const r=Date.now(),n=function(){if(!e.needsToRefresh)for(let o=0;o<e.links.length;o++){const t=e.links[o];t.timestamp!==r&&(console.log("nodes disconnected, removing link"),e.deleteLink(t,!1))}e.needsToRefresh?(console.log("refresh requested"),e.getNodes()):e.needsToRestart?(console.log("only links changed, restarting"),e.restart()):(e.updateStatuses(),e.updateColors(),e.updateWarnings(),e.updating=!1)};if(o)e.trackAddedOrRemovedNodes(r).then((function(){if(e.needsToRefresh)n();else{const o=[];for(let t=0;t<e.nodes.length;t++){const n=e.nodes[t];"master"===n.repositoryType&&o.push(e.updateMasterNode(n,r,!0))}t.all(o).finally(n)}}));else{const o=[];for(let t=0;t<e.nodes.length;t++){const n=e.nodes[t];"master"===n.repositoryType&&o.push(e.updateMasterNode(n,r,!0))}t.all(o).finally(n)}},e.getNodes(),e.setMode=function(o){e.attributeChange=!0,e.setMasterAttribute(e.selectedNode,"Mode",o)},e.setReadonly=function(o){e.attributeChange=!0,e.selectedNode.readonly=o,e.setMasterAttribute(e.selectedNode,"ReadOnly",o)};let g=0;const m=l((function(){e.attributeChange||e.updating||(g++,e.updateClusterIfNeeded(g%3==0))}),2e3);e.$on("$destroy",(function(){l.cancel(m)})),e.attributeChange=!1,e.updating=!1;const y=angular.element(c),k=function(){e.resize()};y.bind("resize",k),e.$on("$destroy",(function(){y.unbind("resize",k)})),e.$on("onToggleNavWidth",(function(){e.resize()}))}function s(e,o,t){e.clone=angular.copy(t),e.ok=function(){const t=new RegExp("^[a-zA-Z0-9-_]+$");e.isInvalidRepoName=!t.test(e.clone.repositoryID),e.isInvalidRepoName||o.close(e.clone)},e.cancel=function(){o.dismiss("cancel")}}angular.module("graphdb.framework.clustermanagement.controllers",["ui.bootstrap","graphdb.framework.core.services.repositories","graphdb.framework.rest.repositories.service","graphdb.framework.rest.cluster.service","toastr"]).controller("ClusterManagementCtrl",n).controller("CloneRepositoryCtrl",s),n.$inject=["$scope","$http","$q","toastr","$repositories","$uibModal","$sce","$window","$interval","ModalService","$timeout","ClusterRestService","RepositoriesRestService"],s.$inject=["$scope","$uibModalInstance","clone"]}}]);
2
+ //# sourceMappingURL=7.9946929545b7635857ac.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/rest/cluster.rest.service.js","webpack:///./src/js/angular/clustermanagement/controllers.js"],"names":["angular","module","factory","ClusterRestService","$inject","CLUSTER_MASTERS_ENDPOINT","$http","getMaster","masterRepositoryID","data","get","configureMaster","master","location","url","encodeURIComponent","method","cloneRepository","post","cloningNodeLocation","currentNodeLocation","cloningNodeRepositoryID","selectedNodeName","newNodeRepositoryID","repositoryID","newNodeLocation","locationUri","newNodeTitle","repositoryTitle","connectWorker","masterLocation","workerLocation","workerURL","disconnectWorker","params","dataType","disconnectNodes","connectNodes","getLocation","node","local","split","ClusterManagementCtrl","$scope","$q","toastr","$repositories","$uibModal","$sce","$window","$interval","ModalService","$timeout","RepositoriesRestService","setLoader","loader","message","cancel","loaderTimeout","loaderMessage","getLoaderMessage","success","masterInformation","setMasterAttribute","attribute","value","attrData","getLabel","attributeChange","refreshMastersIcons","error","getError","finally","hasInfo","isWorker","locations","getLocations","showCloneModal","clone","selectedNode","name","open","templateUrl","controller","resolve","result","then","cloneCurrentRepository","uri","getNodes","indexOf","substring","source","target","onSuccess","worker","disabledReason","repositoryType","workers","timestamp","Date","now","cluster","push","addOrUpdateLink","peers","connectMasters","disconnectLinkConfirm","d","openSimpleModal","title","warning","disconnectLink","overrideDisabled","$","param","deleteLink","filter","x","masterNodeID","nodeID","peerLocation","peerRepositoryID","peerNodeID","selectNode","$apply","first","second","bidirectional","firstConfigs","secondConfigs","status","key","link","linksHash","reverseKey","reverseLink","links","needsToRestart","updateWarnings","deleteReverse","splice","console","log","needsToRefresh","updateMasterNode","isUpdate","isRandomLink","hasWorkers","masterData","averageReadTime","completedReads","completedWrites","failedReads","failedWrites","pendingWrites","runningReads","runningWrites","readonly","mode","length","forEach","peer","urlToNode","artificiallyAdded","workerNode","fingerprint","averageTaskTime","failedTasks","completedTasks","runningTasks","lastError","trustAsHtml","Math","floor","random","catch","nodes","clusters","getCluster","hasNodes","reduce","type","clusterIdx","mastersData","Object","keys","sort","k1","k2","map","all","_","sortBy","render","trackAddedOrRemovedNodes","uri2tempNode","i","updateClusterIfNeeded","checkNodes","updating","processUpdate","restart","updateStatuses","updateColors","promises","setMode","setReadonly","timerCounter","timer","$on","w","element","resize","bind","unbind","CloneRepositoryCtrl","$uibModalInstance","copy","ok","patt","RegExp","isInvalidRepoName","test","close","dismiss"],"mappings":"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","file":"7.9946929545b7635857ac.bundle.js","sourcesContent":["angular\n .module('graphdb.framework.rest.cluster.service', [])\n .factory('ClusterRestService', ClusterRestService);\n\nClusterRestService.$inject = ['$http'];\n\nconst CLUSTER_MASTERS_ENDPOINT = 'rest/cluster/masters';\n\nfunction ClusterRestService($http) {\n return {\n getMaster,\n configureMaster,\n cloneRepository,\n connectWorker,\n disconnectWorker,\n disconnectNodes,\n connectNodes\n };\n\n function getMaster(masterRepositoryID, data = {}) {\n return $http.get(`${CLUSTER_MASTERS_ENDPOINT}/${masterRepositoryID}`, data);\n }\n\n function configureMaster(master, location, data) {\n return $http({\n url: `${CLUSTER_MASTERS_ENDPOINT}/${master}?masterLocation=${encodeURIComponent(location)}`,\n method: 'POST',\n data\n });\n }\n\n function cloneRepository(data) {\n return $http.post('rest/cluster/nodes/clone', {\n cloningNodeLocation: data.currentNodeLocation,\n cloningNodeRepositoryID: data.selectedNodeName,\n newNodeRepositoryID: data.repositoryID,\n newNodeLocation: data.locationUri,\n newNodeTitle: data.repositoryTitle\n })\n }\n\n function connectWorker(master, masterLocation, workerLocation) {\n return $http({\n url: `${CLUSTER_MASTERS_ENDPOINT}/${master}/workers/`,\n method: 'POST',\n data: {\n workerURL: workerLocation,\n masterLocation: masterLocation\n }\n })\n }\n\n function disconnectWorker(master, params) {\n return $http({\n url: `${CLUSTER_MASTERS_ENDPOINT}/${master}/workers?${params}`,\n method: 'DELETE',\n dataType: 'text'\n });\n }\n\n function disconnectNodes(master, params) {\n return $http({\n url: `${CLUSTER_MASTERS_ENDPOINT}/${master}/peers?${params}`,\n method: 'DELETE',\n dataType: 'text'\n });\n }\n\n function connectNodes(master, data) {\n return $http({\n url: `${CLUSTER_MASTERS_ENDPOINT}/${master}/peers`,\n method: 'POST',\n data\n });\n }\n}\n","import 'angular/core/services';\nimport 'angular/rest/cluster.rest.service';\n\nconst modules = [\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.rest.repositories.service',\n 'graphdb.framework.rest.cluster.service',\n 'toastr'\n];\n\nangular\n .module('graphdb.framework.clustermanagement.controllers', modules)\n .controller('ClusterManagementCtrl', ClusterManagementCtrl)\n .controller('CloneRepositoryCtrl', CloneRepositoryCtrl);\n\nfunction getLocation(node) {\n if (node.local) {\n return 'local';\n }\n return node.location.split('/repositories/')[0];\n}\n\nClusterManagementCtrl.$inject = ['$scope', '$http', '$q', 'toastr', '$repositories', '$uibModal', '$sce',\n '$window', '$interval', 'ModalService', '$timeout', 'ClusterRestService', 'RepositoriesRestService'];\n\nfunction ClusterManagementCtrl($scope, $http, $q, toastr, $repositories, $uibModal, $sce,\n $window, $interval, ModalService, $timeout, ClusterRestService,\n RepositoriesRestService) {\n // TODO: Similar function is declared multiple times in different components. Find out how to avoid it!\n $scope.setLoader = function (loader, message) {\n $timeout.cancel($scope.loaderTimeout);\n if (loader) {\n $scope.loaderTimeout = $timeout(function () {\n $scope.loader = loader;\n $scope.loaderMessage = message;\n }, 300);\n } else {\n $scope.loader = false;\n }\n };\n\n $scope.getLoaderMessage = function () {\n return $scope.loaderMessage || 'Loading...';\n };\n\n $scope.getMaster = function (masterRepositoryID) {\n ClusterRestService.getMaster(masterRepositoryID)\n .success(function (data) {\n $scope.masterInformation = data;\n });\n };\n\n $scope.setMasterAttribute = function (master, attribute, value) {\n const attrData = {};\n attrData[attribute] = value;\n\n $scope.setLoader(true, 'Setting attribute...');\n ClusterRestService.configureMaster($scope.getLabel(master.location), getLocation(master), attrData)\n .success(function () {\n $scope.attributeChange = false;\n toastr.success(\"Set \" + attribute + \" to \" + value + \".\", \"\");\n $scope.refreshMastersIcons();\n return true;\n }).error(function (data) {\n $scope.attributeChange = false;\n toastr.error(getError(data), \"Error setting attribute \" + attribute);\n return true;\n }).finally(function () {\n $scope.setLoader(false);\n });\n };\n\n $scope.hasInfo = function (node) {\n if (node == null) {\n return true;\n }\n if ($scope.isWorker(node)) {\n return 'fingerprint' in node;\n } else {\n return 'failedReads' in node;\n }\n };\n\n $scope.locations = function () {\n return $repositories.getLocations();\n };\n\n $scope.showCloneModal = function () {\n $scope.clone.locations = $scope.locations();\n $scope.clone.repositoryID = $scope.selectedNode.name;\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/clustermanagement/templates/modal/clone-modal.html',\n controller: 'CloneRepositoryCtrl',\n resolve: {\n clone: function () {\n return $scope.clone;\n }\n }\n });\n modalInstance.result.then(function (clone) {\n $scope.clone = clone;\n $scope.cloneCurrentRepository();\n }, function () {\n $scope.selectedNode = null;\n });\n };\n\n $scope.cloneCurrentRepository = function () {\n const currentNodeLocation = getLocation($scope.selectedNode);\n\n $scope.setLoader(true, 'Cloning worker...');\n\n ClusterRestService.cloneRepository({\n currentNodeLocation: currentNodeLocation,\n selectedNodeName: $scope.selectedNode.name,\n repositoryID: $scope.clone.repositoryID,\n locationUri: $scope.clone.location.uri,\n repositoryTitle: $scope.clone.repositoryTitle\n }).success(function () {\n toastr.success('Cloned node into ' + $scope.clone.location);\n $scope.getNodes();\n }).error(function (data) {\n toastr.error(getError(data), \"Error cloning node\");\n }).finally(function () {\n $scope.setLoader(false);\n });\n };\n\n $scope.getLabel = function (url) {\n if (url.indexOf(\"http\") !== 0) {\n return name;\n }\n return url.substring(url.indexOf('/repositories') + 14);\n };\n\n /**\n * Creates a link between two nodes. That this function abstracts away\n * if firstNode is a master or it's secondNode\n */\n $scope.connectNodes = function (source, target, onSuccess) {\n let master;\n let worker;\n\n if ('disabledReason' in source) {\n toastr.error(source.disabledReason, \"Error\");\n return;\n }\n\n if ('disabledReason' in target) {\n toastr.error(target.disabledReason, \"Error\");\n return;\n }\n\n if (source.repositoryType === 'master' && target.repositoryType === 'master') {\n if (source.location in target.peers && target.location in source.peers) {\n toastr.error(\"Masters already connected\", \"Error\");\n } else if (source.location in target.peers) {\n $scope.connectMasters(source, target, false, onSuccess);\n } else if (target.location in source.peers) {\n $scope.connectMasters(target, source, false, onSuccess);\n } else {\n $scope.connectMasters(source, target, true, onSuccess);\n }\n return;\n } else if (source.repositoryType === 'master') {\n master = source;\n worker = target;\n } else if (target.repositoryType === 'master') {\n master = target;\n worker = source;\n } else {\n toastr.error(\"You cannot connect two workers\", \"Error\");\n return;\n }\n\n if (worker.location in master.workers) {\n toastr.error(\"Worker already connected to that master\", \"Error\");\n return;\n }\n\n $scope.setLoader(true, 'Connecting nodes...');\n\n ClusterRestService.connectWorker($scope.getLabel(master.location), getLocation(master), worker.location)\n .success(function () {\n const timestamp = Date.now();\n\n worker.cluster = worker.cluster || [];\n worker.cluster.push(master.cluster);\n\n $scope.addOrUpdateLink(master, worker, '', timestamp);\n\n master.workers[worker.location] = 1;\n\n onSuccess();\n\n toastr.success(\"Connected worker to master.\", \"\");\n }).error(function (data) {\n toastr.error(getError(data), \"Error connecting worker\");\n }).finally(function () {\n $scope.setLoader(false);\n });\n };\n\n $scope.disconnectLinkConfirm = function (d, onSuccess) {\n ModalService.openSimpleModal({\n title: 'Confirm disconnect',\n message: 'Are you sure you want to disconnect the nodes?',\n warning: true\n }).result\n .then(function () {\n $scope.disconnectLink(d, onSuccess);\n });\n };\n\n function disconnectWorker(d, master, worker, onSuccess) {\n ClusterRestService.disconnectWorker($scope.getLabel(master.location), $.param({\n workerURL: worker.location,\n masterLocation: getLocation(master)\n })).success(function () {\n $scope.deleteLink(d);\n\n worker.cluster = worker.cluster.filter(function (x) {\n return x !== master.cluster;\n });\n\n delete master.workers[worker.location];\n\n onSuccess();\n\n toastr.success(\"Disconnected worker from master.\", \"\");\n }).error(function (data) {\n toastr.error(getError(data), \"Error disconnecting worker\");\n }).finally(function () {\n $scope.setLoader(false);\n });\n }\n\n function disconnectNodes(d, master, worker, onSuccess) {\n ClusterRestService.disconnectNodes($scope.getLabel(master.location), $.param({\n masterLocation: getLocation(master),\n masterNodeID: master.nodeID,\n peerLocation: getLocation(worker),\n peerRepositoryID: $scope.getLabel(worker.location),\n peerNodeID: worker.nodeID\n })).success(function (data) {\n $scope.deleteLink(d, true);\n\n delete worker.peers[master.location];\n delete master.peers[worker.location];\n\n onSuccess();\n\n toastr.success(data, \"\");\n }).error(function (data) {\n toastr.error(getError(data), \"Error disconnecting masters\");\n }).finally(function () {\n $scope.setLoader(false);\n });\n }\n\n $scope.disconnectLink = function (d, onSuccess, overrideDisabled) {\n let master = {};\n let worker = {};\n if (d.source.repositoryType === 'master') {\n master = d.source;\n worker = d.target;\n } else if (d.target.repositoryType === 'master') {\n master = d.target;\n worker = d.source;\n }\n\n if (!overrideDisabled && ('disabledReason' in master || worker.repositoryType === 'master' && 'disabledReason' in worker)) {\n ModalService.openSimpleModal({\n title: 'Confirm disconnect',\n message: 'One of the masters is currently unreachable and will be disconnected only at the reachable master.'\n + '<br><br>Proceed only if you know what you are doing.',\n warning: true\n }).result\n .then(function () {\n $scope.disconnectLink(d, onSuccess, true);\n });\n\n return;\n }\n\n $scope.setLoader(true, 'Disconnecting nodes...');\n\n if (worker.repositoryType === 'worker') {\n disconnectWorker(d, master, worker, onSuccess);\n } else {\n // Both are masters, despite the var name worker\n disconnectNodes(d, master, worker, onSuccess);\n }\n };\n\n // Called directives so we include scope apply here\n $scope.selectNode = function (node) {\n if ($scope.selectedNode !== node) {\n $scope.selectedNode = node;\n } else {\n $scope.selectedNode = null;\n }\n $scope.$apply();\n };\n\n $scope.isWorker = function (node) {\n return node !== undefined && node !== null && node.repositoryType === 'worker';\n };\n\n $scope.connectMasters = function (first, second, bidirectional, onSuccess) {\n const firstConfigs = first.location.split('/repositories/');\n const secondConfigs = second.location.split('/repositories/');\n\n $scope.setLoader(true, 'Connecting nodes...');\n\n ClusterRestService.connectNodes(firstConfigs[1], {\n masterLocation: first.local ? 'local' : firstConfigs[0],\n masterNodeID: first.nodeID,\n peerLocation: second.local ? 'local' : secondConfigs[0],\n peerRepositoryID: secondConfigs[1],\n peerNodeID: second.nodeID,\n bidirectional: bidirectional\n }).success(function (data) {\n // FIXME?? is there a proper connection between the masters. We don't know so we use 'ON'\n const timestamp = Date.now();\n\n $scope.addOrUpdateLink(first, second, 'ON', timestamp);\n first.peers[second.location] = 1;\n\n if (bidirectional) {\n second.peers[first.location] = 1;\n $scope.addOrUpdateLink(second, first, 'ON', timestamp);\n }\n\n onSuccess();\n\n toastr.success(data, \"\");\n }).error(function (data) {\n toastr.error(getError(data), \"Error connecting masters\");\n }).finally(function () {\n $scope.setLoader(false);\n });\n };\n\n $scope.addOrUpdateLink = function (source, target, status, timestamp) {\n const key = source.location + '|' + target.location;\n let link = $scope.linksHash[key];\n const reverseKey = target.location + '|' + source.location;\n const reverseLink = $scope.linksHash[reverseKey];\n if (!link) {\n // adding a new link\n link = {};\n $scope.linksHash[key] = link;\n $scope.links.push(link);\n link['source'] = source;\n link['target'] = target;\n $scope.needsToRestart = true;\n } else {\n // updating, check if status changed\n // no-op at the moment\n }\n link['status'] = status;\n link['timestamp'] = timestamp;\n\n link['reversePeerMissing'] = source.repositoryType === 'master' && target.repositoryType === 'master' && !reverseLink;\n if (reverseLink && reverseLink['reversePeerMissing']) {\n reverseLink['reversePeerMissing'] = false;\n }\n $scope.linksHash[key] = link;\n\n if ($scope.updateWarnings) { // function isn't defined before render() is called\n $scope.updateWarnings();\n }\n\n return link;\n };\n\n $scope.deleteLink = function (link, deleteReverse) {\n $scope.links.splice($scope.links.indexOf(link), 1);\n const key = link.source.location + '|' + link.target.location;\n delete $scope.linksHash[key];\n if (link.source.disabledReason || link.target.disabledReason) {\n // removing a link to a funky node triggers a refresh to get rid of that node\n console.log(\"link to funky node removed, refresh\");\n $scope.needsToRefresh = true;\n }\n\n if (deleteReverse) {\n const reverseKey = link.target.location + '|' + link.source.location;\n const reverseLink = $scope.linksHash[reverseKey];\n if (reverseLink) {\n $scope.deleteLink(reverseLink, false);\n }\n }\n };\n\n $scope.updateMasterNode = function (node, timestamp, isUpdate, isRandomLink) {\n return ClusterRestService.getMaster(node.name, {\n params: {\n masterLocation: getLocation(node)\n }\n })\n .error(function (data) {\n const newDisabledReason = \"The location is unreachable.\";\n\n if (node.disabledReason !== newDisabledReason) {\n // show toast only once per disabled reason\n toastr.error(getError(data), \"Error accessing master \" + node.name);\n\n node.disabledReason = newDisabledReason;\n\n // Disabled, we don't know these so reset them to sane empty defaults\n node.peers = {};\n node.workers = {};\n node.hasWorkers = false;\n }\n\n node.timestamp = timestamp;\n\n return true;\n })\n .success(function (masterData) {\n node.averageReadTime = masterData.averageReadTime;\n node.completedReads = masterData.completedReads;\n node.completedWrites = masterData.completedWrites;\n node.failedReads = masterData.failedReads;\n node.failedWrites = masterData.failedWrites;\n node.pendingWrites = masterData.pendingWrites;\n node.runningReads = masterData.runningReads;\n node.runningWrites = masterData.runningWrites;\n node.readonly = masterData.readonly;\n node.mode = masterData.mode;\n node.nodeID = masterData.nodeID;\n node.peers = {};\n node.workers = {};\n node.timestamp = timestamp;\n node.hasWorkers = masterData.workers.length > 0;\n\n masterData.peers.forEach(function (peer) {\n node.peers[peer.location] = 1;\n if (!(peer.location in $scope.urlToNode)) {\n // either someone added a repository behind our back or it's a repository we don't have in our locations\n if (isUpdate) {\n console.log('master disappeared, refreshing');\n $scope.needsToRefresh = true;\n } else {\n // TODO: Test this properly. Nodes shouldn't get events, should look disabled properly\n $scope.urlToNode[peer.location] = {\n name: $scope.getLabel(peer.location),\n disabledReason: \"You are not connected to this master's location or the master was deleted\",\n location: peer.location,\n nodeID: peer.nodeID,\n repositoryType: 'master',\n artificiallyAdded: true\n };\n }\n }\n\n // FIXME?? is there a proper connection between the masters\n $scope.addOrUpdateLink(node, $scope.urlToNode[peer.location], 'ON', timestamp);\n });\n\n masterData.workers.forEach(function (worker) {\n node.workers[worker.location] = 1;\n let workerNode = {};\n if (worker.location in $scope.urlToNode) {\n workerNode = $scope.urlToNode[worker.location];\n } else {\n // either someone added a repository behind our back or it's a repository we don't have in our locations\n if (isUpdate) {\n console.log('worker disappeared, refreshing');\n $scope.needsToRefresh = true;\n return;\n } else {\n workerNode = $scope.urlToNode[worker.location] = {\n name: $scope.getLabel(worker.location),\n location: worker.location,\n repositoryType: 'worker',\n artificiallyAdded: true\n };\n }\n }\n\n workerNode.fingerprint = worker.fingerprint;\n workerNode.averageTaskTime = worker.averageTaskTime;\n workerNode.failedTasks = worker.failedTasks;\n workerNode.completedTasks = worker.completedTasks;\n workerNode.runningTasks = worker.runningTasks;\n workerNode.timestamp = timestamp;\n\n if (workerNode.artificiallyAdded) {\n workerNode.disabledReason = \"You are not connected to this worker's location.\";\n if (worker.lastError) {\n workerNode.disabledReason += '<br>' + worker.lastError;\n }\n } else if (worker.lastError) {\n workerNode.disabledReason = worker.lastError;\n } else {\n delete workerNode.disabledReason;\n }\n\n if (workerNode.disabledReason) {\n workerNode.disabledReason = $sce.trustAsHtml(workerNode.disabledReason);\n }\n\n workerNode.cluster = workerNode.cluster || [];\n if (workerNode.cluster.indexOf(node.cluster) === -1) {\n workerNode.cluster.push(node.cluster);\n }\n\n let status = worker.status;\n\n // debug stuff\n if (isRandomLink) {\n status = ['UNINITIALIZED', 'ON', 'OFF', 'REPLICATION_SERVER', 'REPLICATION_CLIENT',\n 'OUT_OF_SYNC', 'OUT_OF_SYNC_FORCED', 'WAITING_WRITE', 'WRITING'][Math.floor(Math.random() * 9)]; // NOSONAR\n }\n // end of debug stuff\n\n $scope.addOrUpdateLink(node, $scope.urlToNode[worker.location], status, timestamp);\n });\n }).catch(function () {\n return true;\n });\n };\n\n $scope.getNodes = function () {\n // Reset all of these, just in case\n $scope.nodes = [];\n $scope.links = [];\n $scope.linksHash = {};\n $scope.clone = {};\n $scope.selectedNode = null;\n $scope.clusters = [];\n\n $scope.setLoader(true);\n\n return RepositoriesRestService.getCluster()\n .success(function (data) {\n $scope.hasNodes = data.length > 0;\n $scope.links = [];\n $scope.linksHash = {};\n $scope.clusters = [];\n\n const timestamp = Date.now();\n\n $scope.urlToNode = data.reduce(function (result, node) {\n if (node.type === \"master\" || node.type === \"worker\") {\n result[node.uri] = {\n name: $scope.getLabel(node.uri),\n local: node.local,\n location: node.uri,\n repositoryType: node.type,\n timestamp: timestamp\n };\n }\n return result;\n }, {});\n\n let clusterIdx = 0;\n\n const mastersData = Object.keys($scope.urlToNode).filter(function (key) {\n return $scope.urlToNode[key].repositoryType === 'master';\n }).sort(function (k1, k2) {\n if (k1 < k2) {\n return -1;\n } else if (k1 > k2) {\n return 1;\n }\n\n return 0;\n }).map(function (key) {\n const node = $scope.urlToNode[key];\n\n node.cluster = clusterIdx;\n $scope.clusters.push(node);\n clusterIdx++;\n return $scope.updateMasterNode(node, timestamp);\n });\n\n return $q.all(mastersData).finally(function () {\n $scope.nodes = _.sortBy(\n Object.keys($scope.urlToNode).map(function (key) {\n return $scope.urlToNode[key];\n }),\n ['name']\n );\n\n $scope.render();\n\n $scope.setLoader(false);\n });\n\n })\n .error(function (data) {\n $scope.hasNodes = false;\n toastr.error(getError(data), \"Error getting nodes\");\n $scope.setLoader(false);\n })\n .finally(function () {\n $scope.needsToRefresh = false;\n });\n };\n\n $scope.trackAddedOrRemovedNodes = function (timestamp) {\n return RepositoriesRestService.getCluster()\n .success(function (data) {\n const uri2tempNode = data.reduce(function (result, node) {\n if (node.type === \"master\" || node.type === \"worker\") {\n result[node.uri] = {\n location: node.uri,\n repositoryType: node.type\n };\n }\n return result;\n }, {});\n\n for (let i = 0; i < $scope.nodes.length; i++) {\n const node = $scope.nodes[i];\n if (node.location in uri2tempNode) {\n if (!node.artificiallyAdded) {\n // old node exists in new list, update timestamp and delete from new list\n node.timestamp = timestamp;\n delete uri2tempNode[node.location];\n }\n } else if (!node.artificiallyAdded) {\n // old node disappeared and it's not disabled, force refresh\n console.log(\"old node disappeared, refresh\");\n $scope.needsToRefresh = true;\n return true;\n }\n }\n\n if (Object.keys(uri2tempNode).length > 0) {\n // there are still nodes in the new list, which means someone added a repo, force refresh\n console.log(\"new nodes appeared, refresh\");\n $scope.needsToRefresh = true;\n }\n })\n .error(function (data) {\n toastr.error(getError(data), \"Error getting nodes\");\n });\n };\n\n $scope.updateClusterIfNeeded = function (checkNodes) {\n // raise flag to prevent calling this more than once before one invocation completes\n $scope.updating = true;\n\n const timestamp = Date.now();\n\n const processUpdate = function () {\n if (!$scope.needsToRefresh) {\n // check for nodes disconnected behind our back, or nodes entirely removed\n for (let i = 0; i < $scope.links.length; i++) {\n const link = $scope.links[i];\n if (link['timestamp'] !== timestamp) {\n console.log('nodes disconnected, removing link');\n // In reality if a user disconnects the bidirectional peer-to-peer link\n // between masters in only one direction we'd still have a single link\n // in the cluster manager. This is tricky and we can't do much about it for now.\n $scope.deleteLink(link, false);\n }\n }\n }\n\n if ($scope.needsToRefresh) {\n // major changes, we need to refresh\n console.log('refresh requested');\n $scope.getNodes();\n } else if ($scope.needsToRestart) {\n // only statuses changed, just restart the graph\n console.log('only links changed, restarting');\n $scope.restart();\n } else {\n // updates the statuses (colours of links)\n $scope.updateStatuses();\n // update colours for multimaster workers\n $scope.updateColors();\n // update warnings for missing bidi links\n $scope.updateWarnings();\n // updating done (when we refresh, restart() will do that instead)\n $scope.updating = false;\n }\n };\n\n if (checkNodes) {\n $scope.trackAddedOrRemovedNodes(timestamp).then(function () {\n if (!$scope.needsToRefresh) {\n const promises = [];\n for (let i = 0; i < $scope.nodes.length; i++) {\n const node = $scope.nodes[i];\n if (node.repositoryType === 'master') {\n promises.push($scope.updateMasterNode(node, timestamp, true));\n }\n }\n $q.all(promises).finally(processUpdate);\n } else {\n processUpdate();\n }\n });\n } else {\n const promises = [];\n for (let i = 0; i < $scope.nodes.length; i++) {\n const node = $scope.nodes[i];\n if (node.repositoryType === 'master') {\n promises.push($scope.updateMasterNode(node, timestamp, true));\n }\n }\n $q.all(promises).finally(processUpdate);\n }\n };\n\n $scope.getNodes();\n\n $scope.setMode = function (mode) {\n $scope.attributeChange = true;\n $scope.setMasterAttribute($scope.selectedNode, 'Mode', mode);\n };\n\n $scope.setReadonly = function (readonly) {\n $scope.attributeChange = true;\n $scope.selectedNode.readonly = readonly;\n $scope.setMasterAttribute($scope.selectedNode, 'ReadOnly', readonly);\n };\n\n let timerCounter = 0;\n const timer = $interval(function () {\n // check for update only if not in the middle of set attribute operation\n if (!$scope.attributeChange && !$scope.updating) {\n timerCounter++;\n // every third iteration also checks for added/removed nodes\n $scope.updateClusterIfNeeded(timerCounter % 3 === 0);\n }\n }, 2000);\n\n $scope.$on(\"$destroy\", function () {\n $interval.cancel(timer);\n });\n\n $scope.attributeChange = false;\n $scope.updating = false;\n\n // track window resizing\n const w = angular.element($window);\n const resize = function () {\n $scope.resize();\n };\n w.bind('resize', resize);\n $scope.$on('$destroy', function () {\n w.unbind('resize', resize);\n });\n\n // track collapsing the nav bar\n $scope.$on('onToggleNavWidth', function () {\n $scope.resize();\n });\n}\n\nCloneRepositoryCtrl.$inject = ['$scope', '$uibModalInstance', 'clone'];\n\nfunction CloneRepositoryCtrl($scope, $uibModalInstance, clone) {\n\n $scope.clone = angular.copy(clone);\n $scope.ok = function () {\n const patt = new RegExp('^[a-zA-Z0-9-_]+$');\n $scope.isInvalidRepoName = !patt.test($scope.clone.repositoryID);\n if (!$scope.isInvalidRepoName) {\n $uibModalInstance.close($scope.clone);\n }\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[75],{71:function(e,o,n){"use strict";n.r(o);n(2),n(11);const t=angular.module("graphdb.framework.jmx.queries.controllers",["ui.bootstrap","toastr","graphdb.framework.rest.monitoring.service"]);t.controller("QueriesCtrl",["$scope","$uibModal","toastr","$interval","$repositories","$jwtAuth","ModalService","MonitoringRestService",function(e,o,n,t,r,i,s,u){e.loader=!0,e.stringLimit=500,e.expanded={},e.jolokiaError="";const c=document.createElement("a");e.parseNode=function(e){if(null==e)return null;let o="local";if(e.indexOf("://localhost:")<0&&e.indexOf("://localhost/")<0){c.href=e;let n=c.hostname;(function(e){const o=e.split(".");for(let e=0,n=0;e<o.length;e++)if(parseInt(o[e],10)>=0&&parseInt(o[e],10)<=255?n++:n=0,4===n)return!0;return!1})(c.hostname)||(n=c.hostname.split(".")[0]),o=n+":"+c.port}const n=e.match(/\/repositories\/([^\/]+)#(\d+)/);return[n[2],o,n[1]]},e.getQueries=function(){e.getQueriesRunning||e.paused||e.jolokiaError||!r.getActiveRepository()||(e.getQueriesRunning=!0,u.monitorQuery().success((function(o){const n=o;e.noQueries=0===n.length,e.queries={};for(let o=0;o<n.length;o++)n[o].parsedNode=e.parseNode(n[o].node),e.queries[n[o].trackId]=n[o];e.noActiveRepository=!1,e.loader=!1,e.getQueriesRunning=!1})).error((function(o){e.jolokiaError=getError(o),e.loader=!1,e.getQueriesRunning=!1})))};const a=t((function(){r.isActiveRepoOntopType()||e.getQueries()}),1e3);e.$on("$destroy",(function(){t.cancel(a)})),e.deleteQueryHttp=function(o){e.loader=!0,u.deleteQuery(o).success((function(){n.success("Abort request sent."),e.loader=!1})).error((function(o){const t=getError(o);n.error(t,"Error"),e.loader=!1}))},e.abortQuery=function(o){s.openSimpleModal({title:"Confirm abort",message:"Are you sure you want to abort the query?",warning:!0}).result.then((function(){e.deleteQueryHttp(o)}))},e.downloadQuery=function(e){const o="query_"+e+".rq";let n="rest/monitor/query/download?queryId="+encodeURIComponent(e)+"&repository="+encodeURIComponent(r.getActiveRepository())+"&filename="+encodeURIComponent(o);i.isAuthenticated()&&(n=n+"&authToken="+encodeURIComponent(i.getAuthToken())),window.open(n,"_blank")},e.toggleQueryExpanded=function(o){e.expanded[o]=!e.expanded[o]}}]),t.controller("DeleteQueryCtrl",["$scope","$uibModalInstance",function(e,o){e.ok=function(){o.close()},e.cancel=function(){o.dismiss("cancel")}}])}}]);
2
+ //# sourceMappingURL=75.3dd1e0c0ad0cf40ed6a1.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/queries/controllers.js"],"names":["queriesCtrl","angular","module","controller","$scope","$uibModal","toastr","$interval","$repositories","$jwtAuth","ModalService","MonitoringRestService","loader","stringLimit","expanded","jolokiaError","parser","document","createElement","parseNode","node","shortUrl","indexOf","href","hostname","ip","blocks","split","i","sequence","length","parseInt","containsIPV4","port","match","getQueries","getQueriesRunning","paused","getActiveRepository","monitorQuery","success","data","newQueries","noQueries","queries","parsedNode","trackId","noActiveRepository","error","getError","timer","isActiveRepoOntopType","$on","cancel","deleteQueryHttp","queryId","deleteQuery","msg","abortQuery","openSimpleModal","title","message","warning","result","then","downloadQuery","filename","link","encodeURIComponent","isAuthenticated","getAuthToken","window","open","toggleQueryExpanded","$uibModalInstance","ok","close","dismiss"],"mappings":"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","file":"75.3dd1e0c0ad0cf40ed6a1.bundle.js","sourcesContent":["import 'angular/core/services';\nimport 'angular/rest/monitoring.rest.service';\n\nconst queriesCtrl = angular.module('graphdb.framework.jmx.queries.controllers', [\n 'ui.bootstrap',\n 'toastr',\n 'graphdb.framework.rest.monitoring.service'\n]);\n\nqueriesCtrl.controller('QueriesCtrl', ['$scope', '$uibModal', 'toastr', '$interval', '$repositories', '$jwtAuth', 'ModalService', 'MonitoringRestService',\n function ($scope, $uibModal, toastr, $interval, $repositories, $jwtAuth, ModalService, MonitoringRestService) {\n\n $scope.loader = true;\n $scope.stringLimit = 500;\n $scope.expanded = {};\n $scope.jolokiaError = '';\n\n function containsIPV4(ip) {\n const blocks = ip.split('.');\n for (let i = 0, sequence = 0; i < blocks.length; i++) {\n if (parseInt(blocks[i], 10) >= 0 && parseInt(blocks[i], 10) <= 255) {\n sequence++;\n } else {\n sequence = 0;\n }\n if (sequence === 4) {\n return true;\n }\n }\n return false;\n }\n\n const parser = document.createElement('a');\n\n // Parses a node of the kind http://host.example.com:7200/repositories/repo#NN,\n // where NN is the track ID into an array [NN, host:7200, repo].\n $scope.parseNode = function (node) {\n if (node == null) {\n return null;\n }\n\n let shortUrl = 'local';\n if (node.indexOf('://localhost:') < 0 && node.indexOf('://localhost/') < 0) {\n parser.href = node;\n let hostname = parser.hostname;\n if (!containsIPV4(parser.hostname)) {\n hostname = parser.hostname.split('.')[0];\n }\n shortUrl = hostname + ':' + parser.port;\n }\n const match = node.match(/\\/repositories\\/([^\\/]+)#(\\d+)/); // eslint-disable-line no-useless-escape\n\n return [match[2], shortUrl, match[1]];\n };\n\n $scope.getQueries = function () {\n // Skip execution if already getting from previous call, if paused, if jolokia returned an error,\n // or if no repository is available\n if ($scope.getQueriesRunning || $scope.paused || $scope.jolokiaError || !$repositories.getActiveRepository()) {\n return;\n }\n\n $scope.getQueriesRunning = true;\n MonitoringRestService.monitorQuery().success(function (data) {\n const newQueries = data;\n $scope.noQueries = newQueries.length === 0;\n\n // Converts array to object. Angular seems to handle updates on objects better, i.e.\n // it doesn't recreate DOM elements for queries that are already displayed.\n $scope.queries = {};\n for (let i = 0; i < newQueries.length; i++) {\n newQueries[i].parsedNode = $scope.parseNode(newQueries[i].node);\n $scope.queries[newQueries[i].trackId] = newQueries[i];\n }\n\n $scope.noActiveRepository = false;\n $scope.loader = false;\n $scope.getQueriesRunning = false;\n }).error(function (data) {\n $scope.jolokiaError = getError(data);\n $scope.loader = false;\n $scope.getQueriesRunning = false;\n });\n };\n\n const timer = $interval(function () {\n // Don't call getQueries for Ontop type repository\n if ($repositories.isActiveRepoOntopType()) {\n return;\n }\n $scope.getQueries();\n }, 1000);\n\n $scope.$on('$destroy', function () {\n $interval.cancel(timer);\n });\n\n $scope.deleteQueryHttp = function (queryId) {\n\n $scope.loader = true;\n MonitoringRestService.deleteQuery(queryId).success(function () {\n toastr.success('Abort request sent.');\n $scope.loader = false;\n }).error(function (data) {\n const msg = getError(data);\n toastr.error(msg, 'Error');\n\n $scope.loader = false;\n });\n };\n\n $scope.abortQuery = function (queryId) {\n ModalService.openSimpleModal({\n title: 'Confirm abort',\n message: 'Are you sure you want to abort the query?',\n warning: true\n }).result.then(function () {\n $scope.deleteQueryHttp(queryId);\n });\n };\n\n $scope.downloadQuery = function (queryId) {\n const filename = 'query_' + queryId + '.rq';\n let link = 'rest/monitor/query/download?queryId=' + encodeURIComponent(queryId)\n + '&repository=' + encodeURIComponent($repositories.getActiveRepository())\n + '&filename=' + encodeURIComponent(filename);\n if ($jwtAuth.isAuthenticated()) {\n link = link + '&authToken=' + encodeURIComponent($jwtAuth.getAuthToken());\n }\n\n window.open(link, '_blank');\n };\n\n $scope.toggleQueryExpanded = function (queryId) {\n $scope.expanded[queryId] = !$scope.expanded[queryId];\n };\n }]);\n\n\nqueriesCtrl.controller('DeleteQueryCtrl', ['$scope', '$uibModalInstance', function ($scope, $uibModalInstance) {\n\n $scope.ok = function () {\n $uibModalInstance.close();\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}]);\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[78],{74:function(e,r){function o(e,r,o,t){return{restrict:"E",scope:!1,templateUrl:"js/angular/repositories/templates/fedx-repo.html",link:function(s){const i="ResolvableRepository";function a(){return r.getRepositories().success((function(e){s.localRepos=e,s.allLocalRepos=s.localRepos.slice()})).error((function(e){const r=getError(e);o.error(r,"Error")}))}function n(){for(const e of s.fedxMembers)s.localRepos=s.localRepos.filter(r=>r.id!==e.repositoryName||e.store!==i)}function p(){a().then((function(){s.editRepoPage&&(s.fedxMembers=s.repositoryInfo.params.member.value.slice()),n()}))}s.fedxMembers=[],s.localRepos=[],s.allLocalRepos=[],s.setWritableRepo=function(e){let r=s.fedxMembers.find(e=>"true"===e.writable);r&&r.repositoryName!==e.repositoryName&&(r.writable="false"),e.writable=JSON.stringify("false"===e.writable)},s.getActiveClass=function(e){return"true"===e.writable?" active":""},s.checkIfRepoExist=function(e){return e.store!==i||0!==s.allLocalRepos.filter(r=>r.id===e.repositoryName).length};const l=t((function(){p()}),2e3);function d(e){s.fedxMembers.push(e),s.repositoryInfo.params.member.value=s.fedxMembers}function m(e){return"/"===e.slice(-1)?e.slice(0,-1):e}function c(){return s.editRepoPage&&!s.editRepoPage||!s.model.editMode}s.$on("$destroy",(function(){t.cancel(l)})),s.addLocalMember=function(e){let r={store:i,repositoryName:e.id,repoType:e.type,respectRights:"true",writable:"false"};s.localRepos=s.localRepos.filter(e=>e.id!==r.repositoryName),d(r)},s.removeMember=function(e){e.store&&e.store===i?(s.fedxMembers=s.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.store!==e.store),a().then((function(){n()}))):e.store&&"SPARQLEndpoint"===e.store?s.fedxMembers=s.fedxMembers.filter(r=>r.endpoint!==e.endpoint):e.store&&"NativeStore"===e.store?s.fedxMembers=s.fedxMembers.filter(r=>r.repositoryLocation!==e.repositoryLocation):e.store&&"RemoteRepository"===e.store&&(s.fedxMembers=s.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer)),s.repositoryInfo.params.member.value=s.fedxMembers},s.addRemoteMember=function(){s.mode="remote",s.model={editMode:!1,store:"RemoteRepository",repositoryName:"",repositoryServer:"",sparqlEndpoint:"",username:"",password:"",supportsASKQueries:"true",writable:"false"},s.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:s})},s.getMemberIcon=function(e){return e.repoType?"icon-repo-"+e.repoType:"NativeStore"===e.store?"icon-warning":"icon-link"},s.editFedXRepository=function(r){r.store===i?(s.mode="local",s.model={editMode:!0,store:r.store,respectRights:r.respectRights,repositoryName:r.repositoryName,repoType:r.repoType,writable:r.writable}):(s.mode="remote",s.model={editMode:!0,store:r.store,repositoryName:r.repositoryName,repositoryServer:r.repositoryServer,sparqlEndpoint:"SPARQLEndpoint"===r.store?r.endpoint:r.repositoryLocation,username:r.username,password:r.password,supportsASKQueries:r.supportsASKQueries,writable:r.writable}),s.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:s})},s.resolveName=function(e){switch(e.store){case i:return e.repositoryName;case"RemoteRepository":return e.repositoryName+"@"+e.repositoryServer;case"SPARQLEndpoint":return e.endpoint;case"NativeStore":return e.repositoryLocation;default:return""}},s.cancel=function(){s.$uibModalInstance.dismiss("cancel")},s.ok=function(){let e;if(s.model.repositoryName&&s.model.store===i)e={store:i,repositoryName:s.model.repositoryName,repoType:s.model.repoType,respectRights:s.model.respectRights,writable:s.model.writable},s.fedxMembers=s.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.store!==e.store);else if(s.model.repositoryName&&"RemoteRepository"===s.model.store){if(e={store:"RemoteRepository",repositoryName:s.model.repositoryName,repositoryServer:m(s.model.repositoryServer),username:s.model.username,password:s.model.password,writable:s.model.writable},c()&&s.fedxMembers.find(r=>r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)){let r=s.resolveName(e);return o.error(`Repository ${r} already added as a FedX member`),void s.$uibModalInstance.close()}s.fedxMembers=s.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer)}else{if(e={store:"SPARQLEndpoint",endpoint:m(s.model.sparqlEndpoint),username:s.model.username,password:s.model.password,supportsASKQueries:s.model.supportsASKQueries,writable:s.model.writable},c()&&s.fedxMembers.find(r=>r.endpoint===e.endpoint)){let r=s.resolveName(e);return o.error(`SPARQL endpoint ${r} already added as a FedX member`),void s.$uibModalInstance.close()}s.fedxMembers=s.fedxMembers.filter(r=>r.endpoint!==e.endpoint)}d(e),s.$uibModalInstance.close()},p()}}}angular.module("graphdb.framework.repositories.fedx-repo.directive",[]).directive("fedxRepo",o),o.$inject=["$uibModal","RepositoriesRestService","toastr","$timeout"]}}]);
2
+ //# sourceMappingURL=78.6caec59329b53bb098ee.bundle.js.map