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.
- package/dist/10.94e753e068396d6b6ec9.bundle.js +2 -0
- package/dist/10.94e753e068396d6b6ec9.bundle.js.map +1 -0
- package/dist/11.043e8d20764e39c10e31.bundle.js +2 -0
- package/dist/11.043e8d20764e39c10e31.bundle.js.map +1 -0
- package/dist/111.73819c3722ceee587ce7.bundle.js +2 -0
- package/dist/111.73819c3722ceee587ce7.bundle.js.map +1 -0
- package/dist/112.b48a6ea437c1c3ddd7b5.bundle.js +2 -0
- package/dist/112.b48a6ea437c1c3ddd7b5.bundle.js.map +1 -0
- package/dist/113.09a0a17c31bfc387c352.bundle.js +2 -0
- package/dist/113.09a0a17c31bfc387c352.bundle.js.map +1 -0
- package/dist/{114.edebb3161ce52d4ca2e1.bundle.js → 114.dcc909bf7059e08fad2a.bundle.js} +2 -2
- package/dist/{114.edebb3161ce52d4ca2e1.bundle.js.map → 114.dcc909bf7059e08fad2a.bundle.js.map} +1 -1
- package/dist/119.08aed6d34851afdefac5.bundle.js +2 -0
- package/dist/119.08aed6d34851afdefac5.bundle.js.map +1 -0
- package/dist/12.bb55709d82da219afedf.bundle.js +2 -0
- package/dist/12.bb55709d82da219afedf.bundle.js.map +1 -0
- package/dist/121.574db48a413271cafc2e.bundle.js +2 -0
- package/dist/121.574db48a413271cafc2e.bundle.js.map +1 -0
- package/dist/123.9ba8fea15f3fcddc734d.bundle.js +2 -0
- package/dist/123.9ba8fea15f3fcddc734d.bundle.js.map +1 -0
- package/dist/125.4ffda62ed511df3132f6.bundle.js +2 -0
- package/dist/125.4ffda62ed511df3132f6.bundle.js.map +1 -0
- package/dist/126.c5fd3ba65878ffcc3c03.bundle.js +2 -0
- package/dist/126.c5fd3ba65878ffcc3c03.bundle.js.map +1 -0
- package/dist/129.5d023d0fbbb2c517932c.bundle.js +2 -0
- package/dist/129.5d023d0fbbb2c517932c.bundle.js.map +1 -0
- package/dist/131.e7a34e7f2b2e5898249d.bundle.js +2 -0
- package/dist/131.e7a34e7f2b2e5898249d.bundle.js.map +1 -0
- package/dist/132.b98cc245bf2c668b2ffd.bundle.js +2 -0
- package/dist/132.b98cc245bf2c668b2ffd.bundle.js.map +1 -0
- package/dist/134.72b76429fe72a9fc5119.bundle.js +2 -0
- package/dist/134.72b76429fe72a9fc5119.bundle.js.map +1 -0
- package/dist/136.991f41ef4565f68c31a7.bundle.js +2 -0
- package/dist/136.991f41ef4565f68c31a7.bundle.js.map +1 -0
- package/dist/137.b62f0afcb15c29764c04.bundle.js +2 -0
- package/dist/137.b62f0afcb15c29764c04.bundle.js.map +1 -0
- package/dist/138.fba22be7b3b98750e0c3.bundle.js +2 -0
- package/dist/138.fba22be7b3b98750e0c3.bundle.js.map +1 -0
- package/dist/{14.0c709b039159410b0b91.bundle.js → 14.6f8b993e972dee32e159.bundle.js} +2 -2
- package/dist/14.6f8b993e972dee32e159.bundle.js.map +1 -0
- package/dist/140.b4777706146b1ac867ed.bundle.js +2 -0
- package/dist/140.b4777706146b1ac867ed.bundle.js.map +1 -0
- package/dist/141.4464fb26b1893e0dbc7a.bundle.js +2 -0
- package/dist/141.4464fb26b1893e0dbc7a.bundle.js.map +1 -0
- package/dist/142.4d4fdae663dbeb2df310.bundle.js +2 -0
- package/dist/142.4d4fdae663dbeb2df310.bundle.js.map +1 -0
- package/dist/145.c9ab7d2a56005326406c.bundle.js +2 -0
- package/dist/145.c9ab7d2a56005326406c.bundle.js.map +1 -0
- package/dist/146.f5efcb8ef74bf52d3daf.bundle.js +2 -0
- package/dist/146.f5efcb8ef74bf52d3daf.bundle.js.map +1 -0
- package/dist/{147.0798c61ee5472e70b552.bundle.js → 147.fa44265c07ea2c3c5615.bundle.js} +2 -2
- package/dist/{147.0798c61ee5472e70b552.bundle.js.map → 147.fa44265c07ea2c3c5615.bundle.js.map} +1 -1
- package/dist/148.8b1e910543c6c25b2f0b.bundle.js +2 -0
- package/dist/148.8b1e910543c6c25b2f0b.bundle.js.map +1 -0
- package/dist/15.eb562ad073aa0fcd725f.bundle.js +2 -0
- package/dist/15.eb562ad073aa0fcd725f.bundle.js.map +1 -0
- package/dist/16.0a3c03f05a4bbdfe83ef.bundle.js +2 -0
- package/dist/16.0a3c03f05a4bbdfe83ef.bundle.js.map +1 -0
- package/dist/18.c3e44ed00a2532402729.bundle.js +3 -0
- package/dist/18.c3e44ed00a2532402729.bundle.js.map +1 -0
- package/dist/20.264daf29beccbf7de84a.bundle.js +2 -0
- package/dist/20.264daf29beccbf7de84a.bundle.js.map +1 -0
- package/dist/22.e85ffde858c596437b7a.bundle.js +1 -1
- package/dist/22.e85ffde858c596437b7a.bundle.js.map +1 -1
- package/dist/23.c58eff831306fad29d42.bundle.js +2 -0
- package/dist/23.c58eff831306fad29d42.bundle.js.map +1 -0
- package/dist/25.8c10d875bf32c8648157.bundle.js +2 -0
- package/dist/25.8c10d875bf32c8648157.bundle.js.map +1 -0
- package/dist/{26.57526f30f6b3c581334d.bundle.js → 26.c59631eb4bc0bf8d26b2.bundle.js} +2 -2
- package/dist/26.c59631eb4bc0bf8d26b2.bundle.js.map +1 -0
- package/dist/27.ed9e0cc8aaa3a12c1fa2.bundle.js +2 -0
- package/dist/27.ed9e0cc8aaa3a12c1fa2.bundle.js.map +1 -0
- package/dist/28.8f5d9fc8ee46db2a6357.bundle.js +2 -0
- package/dist/28.8f5d9fc8ee46db2a6357.bundle.js.map +1 -0
- package/dist/30.d341c7532759bc79f41a.bundle.js +1 -1
- package/dist/30.d341c7532759bc79f41a.bundle.js.map +1 -1
- package/dist/{32.ba5b5ca3e4b7dcf5bd15.bundle.js → 32.1059e272ed99ba3db699.bundle.js} +2 -2
- package/dist/32.1059e272ed99ba3db699.bundle.js.map +1 -0
- package/dist/{35.b8c8d16a8707c20a1fcb.bundle.js → 35.1f53c71368afc468cc10.bundle.js} +2 -2
- package/dist/35.1f53c71368afc468cc10.bundle.js.map +1 -0
- package/dist/{36.d96e6ee811e8340ae320.bundle.js → 36.aced0c9768c16e4d29ef.bundle.js} +2 -2
- package/dist/36.aced0c9768c16e4d29ef.bundle.js.map +1 -0
- package/dist/37.dcbe2e4e1f86ca2da209.bundle.js +1 -1
- package/dist/37.dcbe2e4e1f86ca2da209.bundle.js.map +1 -1
- package/dist/38.171aa543e807777b4f29.bundle.js +1 -1
- package/dist/38.171aa543e807777b4f29.bundle.js.map +1 -1
- package/dist/40.f660048c67e9b6d478dc.bundle.js +2 -0
- package/dist/40.f660048c67e9b6d478dc.bundle.js.map +1 -0
- package/dist/{42.190f8880ee8f3a97a042.bundle.js → 42.9bbccd6cb2c263d7b873.bundle.js} +2 -2
- package/dist/42.9bbccd6cb2c263d7b873.bundle.js.map +1 -0
- package/dist/{43.899bf21ce1de203ace21.bundle.js → 43.6f609ec150488009b166.bundle.js} +2 -2
- package/dist/43.6f609ec150488009b166.bundle.js.map +1 -0
- package/dist/{44.c649782fa0755b53a62c.bundle.js → 44.8be8b582a97146d3ad6f.bundle.js} +2 -2
- package/dist/44.8be8b582a97146d3ad6f.bundle.js.map +1 -0
- package/dist/47.b94dca10f70c70009f46.bundle.js +2 -0
- package/dist/47.b94dca10f70c70009f46.bundle.js.map +1 -0
- package/dist/{48.52c5b13ab244c45a8c43.bundle.js → 48.10699147cdbee9af3c2b.bundle.js} +2 -2
- package/dist/48.10699147cdbee9af3c2b.bundle.js.map +1 -0
- package/dist/{5.21d2da4b4bc2b26e2534.bundle.js → 5.275d1f74283aff0821f2.bundle.js} +2 -2
- package/dist/5.275d1f74283aff0821f2.bundle.js.map +1 -0
- package/dist/{56.ce399f5788c0f5fe937b.bundle.js → 56.dae3cb719fcb013d7a06.bundle.js} +2 -2
- package/dist/56.dae3cb719fcb013d7a06.bundle.js.map +1 -0
- package/dist/68.5fa639981e7ce624fb73.bundle.js +2 -0
- package/dist/68.5fa639981e7ce624fb73.bundle.js.map +1 -0
- package/dist/{7.a0f5ec224bebd08058f4.bundle.js → 7.9946929545b7635857ac.bundle.js} +2 -2
- package/dist/7.9946929545b7635857ac.bundle.js.map +1 -0
- package/dist/75.3dd1e0c0ad0cf40ed6a1.bundle.js +2 -0
- package/dist/75.3dd1e0c0ad0cf40ed6a1.bundle.js.map +1 -0
- package/dist/78.6caec59329b53bb098ee.bundle.js +2 -0
- package/dist/78.6caec59329b53bb098ee.bundle.js.map +1 -0
- package/dist/{79.f4a2c3ec71bed08d61b9.bundle.js → 79.0f7567cb18c210d45806.bundle.js} +2 -2
- package/dist/79.0f7567cb18c210d45806.bundle.js.map +1 -0
- package/dist/{9.c9fc88a79b7990e29e04.bundle.js → 9.c4b55fc1e3fc858be626.bundle.js} +2 -2
- package/dist/9.c4b55fc1e3fc858be626.bundle.js.map +1 -0
- package/dist/{94.3efcd047d4d4e506cbd7.bundle.js → 94.afe4c166f07dbf1bc30f.bundle.js} +2 -2
- package/dist/94.afe4c166f07dbf1bc30f.bundle.js.map +1 -0
- package/dist/{96.754454264340bc9d9a70.bundle.js → 96.f7d3f181e8860ce2bd8b.bundle.js} +2 -2
- package/dist/96.f7d3f181e8860ce2bd8b.bundle.js.map +1 -0
- package/dist/bundle.48ae48a008439cff2323.bundle.js +79 -0
- package/dist/bundle.48ae48a008439cff2323.bundle.js.map +1 -0
- package/dist/index.html +7 -7
- package/dist/js/angular/core/directives/queryeditor/templates/query-editor.html +18 -18
- package/dist/js/angular/core/directives/queryeditor/templates/query-sample.html +1 -1
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +3 -3
- package/dist/js/angular/core/templates/core-errors.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +3 -3
- package/dist/js/angular/externalsync/templates/deleteConnector.html +1 -1
- package/dist/js/angular/graphexplore/templates/modal/save-graph.html +1 -1
- package/dist/js/angular/graphexplore/templates/rdfsCommentLabelTemplate.html +3 -3
- package/dist/js/angular/graphexplore/templates/searchIconInputTemplate.html +3 -3
- package/dist/js/angular/import/templates/filesTable.html +12 -12
- package/dist/js/angular/import/templates/settingsModal.html +19 -19
- package/dist/js/angular/import/templates/textSnippet.html +4 -4
- package/dist/js/angular/import/templates/urlImport.html +4 -4
- package/dist/js/angular/repositories/templates/fedx-repo.html +28 -19
- package/dist/js/angular/repositories/templates/ontop-repo.html +8 -8
- package/dist/js/angular/security/templates/modal/default-authorities.html +3 -3
- package/dist/js/angular/security/templates/user.html +12 -12
- package/dist/js/angular/security/templates/users.html +11 -11
- package/dist/js/angular/settings/modal/location-settings.html +5 -5
- package/dist/js/angular/templates/modal/add-location.html +3 -3
- package/dist/js/angular/templates/modal/edit-location.html +3 -3
- package/dist/js/angular/templates/modal/editRepoFile.html +1 -1
- package/dist/js/angular/templates/modal/upload-repository-config.html +2 -2
- package/dist/pages/autocomplete.html +8 -8
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/clusterInfo.html +2 -2
- package/dist/pages/connectorsInfo.html +5 -5
- package/dist/pages/create-index.html +16 -16
- package/dist/pages/createConnector.html +22 -22
- package/dist/pages/dependencies.html +12 -12
- package/dist/pages/domainRangeInfo.html +4 -4
- package/dist/pages/edit.html +7 -7
- package/dist/pages/explore.html +10 -10
- package/dist/pages/export.html +14 -14
- package/dist/pages/find.html +2 -2
- package/dist/pages/graph-config/saveGraphConfig.html +28 -40
- package/dist/pages/graphs-visualizations.html +46 -46
- package/dist/pages/home.html +10 -10
- package/dist/pages/import.html +7 -7
- package/dist/pages/info.html +16 -16
- package/dist/pages/jdbc-create.html +20 -20
- package/dist/pages/jdbc.html +3 -3
- package/dist/pages/licenseInfo.html +1 -1
- package/dist/pages/login.html +2 -2
- package/dist/pages/monitor/queries.html +6 -6
- package/dist/pages/monitor/resources.html +3 -3
- package/dist/pages/namespaces.html +14 -14
- package/dist/pages/ontorefine.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +16 -16
- package/dist/pages/rdfrank.html +17 -17
- package/dist/pages/registerLicenseInfo.html +3 -3
- package/dist/pages/repositories.html +22 -22
- package/dist/pages/repository.html +28 -28
- package/dist/pages/similarity-indexes.html +15 -15
- package/dist/pages/sparql-template-create.html +9 -9
- package/dist/pages/sparql-templates.html +3 -3
- package/dist/pages/sparql.html +8 -8
- package/dist/pages/webapi.html +3 -3
- package/dist/res/swagger/index.html +25 -25
- package/package.json +5 -4
- package/dist/10.f0277e5092cea150b5a8.bundle.js +0 -2
- package/dist/10.f0277e5092cea150b5a8.bundle.js.map +0 -1
- package/dist/11.bdd794940dcfd5daa9a1.bundle.js +0 -2
- package/dist/11.bdd794940dcfd5daa9a1.bundle.js.map +0 -1
- package/dist/111.056eb71072bfd8f6551b.bundle.js +0 -2
- package/dist/111.056eb71072bfd8f6551b.bundle.js.map +0 -1
- package/dist/112.50fd62c66c6594e055a3.bundle.js +0 -2
- package/dist/112.50fd62c66c6594e055a3.bundle.js.map +0 -1
- package/dist/113.2c059fa7d06fd04149eb.bundle.js +0 -2
- package/dist/113.2c059fa7d06fd04149eb.bundle.js.map +0 -1
- package/dist/119.dfdf8b9afa2c31b90232.bundle.js +0 -2
- package/dist/119.dfdf8b9afa2c31b90232.bundle.js.map +0 -1
- package/dist/12.a3762f9fba854a28c1cb.bundle.js +0 -2
- package/dist/12.a3762f9fba854a28c1cb.bundle.js.map +0 -1
- package/dist/121.aa10886f87136602a6cf.bundle.js +0 -2
- package/dist/121.aa10886f87136602a6cf.bundle.js.map +0 -1
- package/dist/123.318a247a0939300080aa.bundle.js +0 -2
- package/dist/123.318a247a0939300080aa.bundle.js.map +0 -1
- package/dist/125.4978d60a14b65499a047.bundle.js +0 -2
- package/dist/125.4978d60a14b65499a047.bundle.js.map +0 -1
- package/dist/126.4a830f0d18f079b1dca7.bundle.js +0 -2
- package/dist/126.4a830f0d18f079b1dca7.bundle.js.map +0 -1
- package/dist/129.7ca4a0a32cacb6feb225.bundle.js +0 -2
- package/dist/129.7ca4a0a32cacb6feb225.bundle.js.map +0 -1
- package/dist/131.087611adf6562e7e1b00.bundle.js +0 -2
- package/dist/131.087611adf6562e7e1b00.bundle.js.map +0 -1
- package/dist/132.b1ed3e4c9238c5b6303b.bundle.js +0 -2
- package/dist/132.b1ed3e4c9238c5b6303b.bundle.js.map +0 -1
- package/dist/134.653804476f9803033cbe.bundle.js +0 -2
- package/dist/134.653804476f9803033cbe.bundle.js.map +0 -1
- package/dist/136.5d60eb9d8d66581003ce.bundle.js +0 -2
- package/dist/136.5d60eb9d8d66581003ce.bundle.js.map +0 -1
- package/dist/137.0cfdd5934c6a400ab990.bundle.js +0 -2
- package/dist/137.0cfdd5934c6a400ab990.bundle.js.map +0 -1
- package/dist/138.611df35cbfdfec860909.bundle.js +0 -2
- package/dist/138.611df35cbfdfec860909.bundle.js.map +0 -1
- package/dist/14.0c709b039159410b0b91.bundle.js.map +0 -1
- package/dist/140.b0310ba39e9c3237f48a.bundle.js +0 -2
- package/dist/140.b0310ba39e9c3237f48a.bundle.js.map +0 -1
- package/dist/141.5d76be84a3151e69fc9d.bundle.js +0 -2
- package/dist/141.5d76be84a3151e69fc9d.bundle.js.map +0 -1
- package/dist/142.a4094b510036aaf72b0b.bundle.js +0 -2
- package/dist/142.a4094b510036aaf72b0b.bundle.js.map +0 -1
- package/dist/145.6536295098a4f2e030e3.bundle.js +0 -2
- package/dist/145.6536295098a4f2e030e3.bundle.js.map +0 -1
- package/dist/146.ee9db0da29c25ec7fbf9.bundle.js +0 -2
- package/dist/146.ee9db0da29c25ec7fbf9.bundle.js.map +0 -1
- package/dist/148.0ce4968734a80e71b2b9.bundle.js +0 -2
- package/dist/148.0ce4968734a80e71b2b9.bundle.js.map +0 -1
- package/dist/15.fc7c799455b5aec64393.bundle.js +0 -2
- package/dist/15.fc7c799455b5aec64393.bundle.js.map +0 -1
- package/dist/16.005766c64d76f95231b1.bundle.js +0 -2
- package/dist/16.005766c64d76f95231b1.bundle.js.map +0 -1
- package/dist/18.2ddbba81e5b663db1894.bundle.js +0 -3
- package/dist/18.2ddbba81e5b663db1894.bundle.js.map +0 -1
- package/dist/20.a35d80fb5e80ae3874ce.bundle.js +0 -2
- package/dist/20.a35d80fb5e80ae3874ce.bundle.js.map +0 -1
- package/dist/23.102a20601f717ba91551.bundle.js +0 -2
- package/dist/23.102a20601f717ba91551.bundle.js.map +0 -1
- package/dist/25.bd69d5c4040e1547800b.bundle.js +0 -2
- package/dist/25.bd69d5c4040e1547800b.bundle.js.map +0 -1
- package/dist/26.57526f30f6b3c581334d.bundle.js.map +0 -1
- package/dist/27.ab75434b1389b977291c.bundle.js +0 -2
- package/dist/27.ab75434b1389b977291c.bundle.js.map +0 -1
- package/dist/28.b2180a7cba95d9328e1a.bundle.js +0 -2
- package/dist/28.b2180a7cba95d9328e1a.bundle.js.map +0 -1
- package/dist/32.ba5b5ca3e4b7dcf5bd15.bundle.js.map +0 -1
- package/dist/35.b8c8d16a8707c20a1fcb.bundle.js.map +0 -1
- package/dist/36.d96e6ee811e8340ae320.bundle.js.map +0 -1
- package/dist/40.c754ab2b3b35c2acb854.bundle.js +0 -2
- package/dist/40.c754ab2b3b35c2acb854.bundle.js.map +0 -1
- package/dist/42.190f8880ee8f3a97a042.bundle.js.map +0 -1
- package/dist/43.899bf21ce1de203ace21.bundle.js.map +0 -1
- package/dist/44.c649782fa0755b53a62c.bundle.js.map +0 -1
- package/dist/47.421938875d2461427ae3.bundle.js +0 -2
- package/dist/47.421938875d2461427ae3.bundle.js.map +0 -1
- package/dist/48.52c5b13ab244c45a8c43.bundle.js.map +0 -1
- package/dist/5.21d2da4b4bc2b26e2534.bundle.js.map +0 -1
- package/dist/56.ce399f5788c0f5fe937b.bundle.js.map +0 -1
- package/dist/68.6b887fe6160e5bd8742b.bundle.js +0 -2
- package/dist/68.6b887fe6160e5bd8742b.bundle.js.map +0 -1
- package/dist/7.a0f5ec224bebd08058f4.bundle.js.map +0 -1
- package/dist/75.dbd9915663de96056138.bundle.js +0 -2
- package/dist/75.dbd9915663de96056138.bundle.js.map +0 -1
- package/dist/78.608f8074bef29a89d68b.bundle.js +0 -2
- package/dist/78.608f8074bef29a89d68b.bundle.js.map +0 -1
- package/dist/79.f4a2c3ec71bed08d61b9.bundle.js.map +0 -1
- package/dist/9.c9fc88a79b7990e29e04.bundle.js.map +0 -1
- package/dist/94.3efcd047d4d4e506cbd7.bundle.js.map +0 -1
- package/dist/96.754454264340bc9d9a70.bundle.js.map +0 -1
- package/dist/bundle.ac70985c70f7da448f2d.bundle.js +0 -79
- 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":"4FAAA,sPAAO,MAAMA,EAAkB,CAC3B,CAACC,GAAI,QAASC,KAAM,gBACpB,CAACD,GAAI,iBAAkBC,KAAM,oBAC7B,CAACD,GAAI,OAAQC,KAAM,QACnB,CAACD,GAAI,qBAAsBC,KAAM,yBACjC,CAACD,GAAI,sBAAuBC,KAAM,yBAClC,CAACD,GAAI,YAAaC,KAAM,aACxB,CAACD,GAAI,oBAAqBC,KAAM,uBAChC,CAACD,GAAI,UAAWC,KAAM,WACtB,CAACD,GAAI,oBAAqBC,KAAM,uBAChC,CAACD,GAAI,UAAWC,KAAM,WACtB,CAACD,GAAI,oBAAqBC,KAAM,uBAChC,CAACD,GAAI,UAAWC,KAAM,YAIbC,EAAmB,CAACC,KAAM,OAAQC,SAAU,SAAUC,SAAU,SAAUC,MAAO,QAASC,GAAI,KAAMC,KAAM,QAC1GC,EAAmB,IAAIC,OAAO,oBAC9BC,EAAiB,IAAID,OAAO,YAE5BE,EAAgB,CACzBZ,GAAI,iHACJa,MAAO,gDACPC,SAAU,+CACVC,QAAS,6HAETC,gBAAiB,CACbC,YAAa,mGACbC,iBAAkB,gEAClBC,cAAe,qLAGnBC,cAAe,uHAEfC,wBAAyB,mDACzBC,QAAS,wCACTC,aAAc,CACVC,iBAAkB,qSAGlBC,oCAAqC,oQAGrCC,mBAAoB,mIAEpBC,wBAAyB,qJAEzBC,mBAAoB,oCACpBC,6BAA8B,8LAG9BC,mBAAoB,8IAEpBC,4BAA6B,2FAC7BC,eAAgB,+FAEpBC,aAAc,mMAEdC,mBAAoB,mJAEpBC,oBAAqB,kKAErBC,aAAc,wIAEdC,uCAAwC,mHAExCC,kBAAmB,sKAEnBC,2BAA4B,+HAE5BjC,MAAO,CACHkC,WAAY,qDACZC,eAAgB,qFAChBC,SAAU,mCACVC,KAAM,wFACNC,eAAgB,+BAChBC,aAAc,mCACdC,SAAU,+CACVC,SAAU,+CACVC,YAAa,2FACbC,mBAAoB,kGACpBC,IAAK,yGACLC,SAAU,gFACVC,QAAS,8HAETC,eAAgB,sDAChBC,eAAgB,2CAChBC,SAAU,4GAEd/C,KAAM,CACFgD,0BAA2B,qEAC3BC,uBAAwB,wDACxBC,eAAgB,6BAChBC,mBAAoB,gEACpBC,oBAAqB,0CACrBC,2BAA4B,oDAC5BC,uBAAwB,qCACxBC,sBAAuB,4DACvBC,0BAA2B,6CAC3BC,mBAAoB,6DACpBC,iBAAkB,gCAClBC,6BAA8B,kEAC9BC,6BAA8B,6DAC9BC,aAAc,qCACdC,eAAgB,kBAChBC,cAAe,gC,gCCzGvB,+DAQO,MAAMC,EAAc,SAASC,GAChC,IAAIC,EAAUD,EAAKE,YAAY,MACd,IAAbD,IACAA,EAAUD,EAAKE,YAAY,OAE/B,IAAI1E,EAAOwE,EAIX,OAHiB,IAAbC,IACAzE,EAAOA,EAAK2E,UAAUF,EAAU,IAE7BzE,GAGL4E,EAA4B,SAAUC,GACpCA,IACIA,EAAO1C,eACP0C,EAAO1C,aAAa2C,MAAQC,SAASF,EAAO1C,aAAa2C,QAEzDD,EAAOxC,mBAAqBwC,EAAOG,6BAA+BH,EAAOI,qCAEzEJ,EAAOxC,kBAAkByC,MAAQC,SAASF,EAAOxC,kBAAkByC,OACnED,EAAOG,4BAA4BF,MAAQC,SAASF,EAAOG,4BAA4BF,OACvFD,EAAOI,oCAAoCH,MAAQC,SAASF,EAAOI,oCAAoCH,QAChGD,EAAOK,uBAAyBL,EAAOM,oBAAsBN,EAAOO,mBAAqBP,EAAOb,qBACvGa,EAAOK,sBAAsBJ,MAAQC,SAASF,EAAOK,sBAAsBJ,OAC3ED,EAAOM,mBAAmBL,MAAQC,SAASF,EAAOM,mBAAmBL,OACrED,EAAOO,kBAAkBN,MAAQC,SAASF,EAAOO,kBAAkBN,OACnED,EAAOb,mBAAmBc,MAAQC,SAASF,EAAOb,mBAAmBc,UAK3EO,EAA2B,SAASC,GAClCA,GAASA,EAAMC,SACfD,EAAMC,OAAOT,MAAQ,KAIvBU,EAAuB,WACzB,MAAMC,EAAgBC,SAASC,eAAe,gBAE9C,GAAIF,EAAe,CACf,MAAMG,EAAiBH,EAAcI,aAAa,iBAClD,GAAID,GAAqC,SAAnBA,EAClB,MAAO,mBAGf,MAAO,qBAGLE,EAAuB,SAAUjB,EAAQkB,GACvClB,EAAO1C,eACP4D,EAAcC,uBAAyB,iBAAeC,KAAKpB,EAAO1C,aAAa2C,QAE/ED,EAAOG,6BAA+BH,EAAOI,qCAAuCJ,EAAOxC,mBAC3F0D,EAAcG,sCAAwC,iBAAeD,KAAKpB,EAAOG,4BAA4BF,OAC7GiB,EAAcI,8CAAgD,iBAAeF,KAAKpB,EAAOI,oCAAoCH,OAC7HiB,EAAcK,qBAAuB,iBAAeH,KAAKpB,EAAOxC,kBAAkByC,QAE7ED,EAAOK,uBAAyBL,EAAOM,oBAAsBN,EAAOO,mBACtEP,EAAOb,qBACV+B,EAAcM,gCAAkC,iBAAeJ,KAAKpB,EAAOK,sBAAsBJ,OACjGiB,EAAcO,6BAA+B,iBAAeL,KAAKpB,EAAOM,mBAAmBL,OAC3FiB,EAAcQ,4BAA8B,iBAAeN,KAAKpB,EAAOO,kBAAkBN,OACzFiB,EAAcS,6BAA+B,iBAAeP,KAAKpB,EAAOb,mBAAmBc,SAwB7F2B,EAAqB,SAASV,GAChC,IAAIW,EAAoBC,OAAOC,KAAKb,GAChCc,EAAmBF,OAAOG,OAAOf,GAErC,IAAK,IAAIgB,EAAI,EAAGA,EAAIL,EAAkBM,OAAQD,IAC1C,GAAIF,EAAiBE,GACjB,MAzBK,yBADgCzB,EA0BEoB,EAAkBK,IAxBtD,gCACU,0BAAVzB,EACA,kCACU,yCAAVA,EACA,mDACU,iDAAVA,EACA,4DACU,+BAAVA,EACA,wCACU,mCAAVA,EACA,6CACU,gCAAVA,EACA,yCACU,gCAAVA,EACA,+CADJ,EAf6B,IAASA,EA6B7C,MAAO,IAGL2B,EAAa,SAAUC,GACzB,MAAO,8CAA8CA,EAAYC,uBAAuBD,EAAYE,eAuBxG,SAASC,EAA6BC,EAAQC,EAAWC,EAAQC,EAAeC,EAAcC,EAAUC,EAAsBC,EAAqBC,GAC/IR,EAAOS,QAAS,EAEhBT,EAAOU,mBAAqB,SAAUC,GAClC,OAAQA,EAASC,SAAWZ,EAAOa,qBAIvCb,EAAOc,aAAe,WAClB,OAAOX,EAAcW,gBAGzBd,EAAOa,kBAAoB,WACvB,OAAOV,EAAcU,qBAGzBb,EAAOe,kBAAoB,WACvB,OAAOZ,EAAcY,qBAGzBf,EAAOgB,iBAAmB,WACtB,OAAOb,EAAca,oBAGzBhB,EAAOiB,kBAAoB,WACvB,OAAOd,EAAcc,qBAGzBjB,EAAOkB,gBAAkB,WACrB,OAAOf,EAAce,mBAIzBlB,EAAOmB,eAAiB,SAAUC,GAC9BhB,EAAaiB,gBAAgB,CACzB/H,MAAO,iBACPgI,QAAS,iDAAoDF,EAAM,KACnEG,SAAS,IACVC,OACEC,MAAK,WACFzB,EAAOS,QAAS,EAChBN,EAAcgB,eAAeC,OAMzCpB,EAAO0B,gBAAkB,SAAUC,GAC/B3B,EAAOS,QAAS,EAChBH,EAAqBsB,YAAYD,GAC5BE,SAAQ,SAAUC,GACf9B,EAAO+B,UAAYD,EAEnB3B,EAAc6B,UAEjBC,OAAM,SAAUH,GACb,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAElBlC,EAAOS,QAAS,MAI5BT,EAAO4B,YAAc,WACjB3B,EAAUmC,KAAK,CACXC,YAAa,+CACbC,YAAa,oBACbC,WAAY,oBACbf,OACEC,MAAK,SAAUE,GACZ3B,EAAO0B,gBAAgBC,OAKnC3B,EAAOwC,iBAAmB,SAAUC,GAChCzC,EAAOS,QAAS,EAChBH,EAAqBoC,aAAaD,GAC7BZ,SAAQ,SAAUC,GACf9B,EAAO+B,UAAYD,EAEnB3B,EAAc6B,UACfC,OAAM,SAAUH,GACf,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAElBlC,EAAOS,QAAS,MAI5BT,EAAO0C,aAAe,SAAU/B,GACNV,EAAUmC,KAAK,CACjCC,YAAa,gDACbE,WAAY,mBACZI,QAAS,CACLhC,SAAU,WACN,OAAOA,MAKLa,OAAOC,MAAK,SAAUgB,GAChCzC,EAAOwC,iBAAiBC,MACzB,gBAIPzC,EAAO4C,wBAA0B,SAAUjC,GACvCX,EAAOS,QAAS,EAChB,MAAMqB,EAAO,CACT,IAAOnB,EAASS,KAEpBd,EAAqBuC,eAAef,GAC/BD,SAAQ,WACL1B,EAAc2C,cAAc,IAC5B3C,EAAc6B,UACfC,OAAM,SAAUH,GACf,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClB9D,SAASC,eAAe,UAAYsC,EAASoC,WAAWC,SAAU,MAK9EhD,EAAOiD,iBAAmB,SAAUtC,GAK5BX,EAAOa,oBACPT,EAAaiB,gBAAgB,CACzB/H,MAAO,0BACPgI,QAAS,gDACTC,SAAS,IACVC,OACEC,MAAK,WACFzB,EAAO4C,wBAAwBjC,MAChC,WACCvC,SAASC,eAAe,UAAYsC,EAASoC,WAAWC,SAAU,KAG1EhD,EAAO4C,wBAAwBjC,IAKvCX,EAAO8C,cAAgB,SAAUrK,GAC7B0H,EAAc2C,cAAcrK,IAIhCuH,EAAOkD,iBAAmB,SAAUC,GAChC/C,EAAaiB,gBAAgB,CACzB/H,MAAO,iBACPgI,QAAS,6DAA6D6B,kLAGtE5B,SAAS,IACVC,OACEC,MAAK,WACFzB,EAAOS,QAAS,EAChBN,EAAc+C,iBAAiBC,GAkG3C,SAAoCC,GAChC,MAAMC,EAAgC,8BAA8BD,IAC9DE,EAAkC,gCAAgCF,IACxEG,QAAQC,QAAQjD,EAAoBjB,QAAQ,SAAUmE,IAE9CA,EAAIC,WAAWJ,IAAoCG,EAAIC,WAAWL,KAClE9C,EAAoBoD,OAAOF,MAvG3BG,CAA2BT,OAIvCnD,EAAO6D,kBAAoB,SAAUV,GACjC/C,EAAaiB,gBAAgB,CACzB/H,MAAO,kBACPgI,QAAS,8DAA8D6B,4QAIvE5B,SAAS,IACVC,OACEC,MAAK,WACFzB,EAAOS,QAAS,EAChBN,EAAc0D,kBAAkBV,OAI5CnD,EAAO8D,wBAA0B,SAAUX,GACnCnD,EAAO+D,yBAA2BZ,EAElChD,EAAc6D,qBAAqB,MAGnC7D,EAAc6D,qBAAqBb,IAI3CnD,EAAO+D,qBAAuB,WAC1B,OAAO5D,EAAc4D,wBA0BzB/D,EAAOiE,0BAA4B,SAAUC,GACzC,IAAIvI,EAAM,qBAAqBuI,EAAWzL,KAAMyL,EAAWC,OAAS,mBAAiBpL,MAAQ,eAAgB,cAC7G,MAAMqL,EAAQ/D,EAASgE,eAIvB,OAHID,IACAzI,EAAM,GAAGA,eAAiB2I,mBAAmBF,MAE1CzI,GAIXqE,EAAOuE,gBAAkB,SAAUnD,GAC/BhB,EAAaoE,yBAAyBpD,IAG1CpB,EAAOyE,SAAW,WACQxE,EAAUmC,KAAK,CACjCC,YAAa,2DACbE,WAAY,+BAEFf,OAAOC,MAAK,WACtBtB,EAAc6B,WAKtBhC,EAAO0E,2BAA6B,WAChCzE,EAAUmC,KAAK,CACXC,YAAa,mDACbE,WAAY,gCAIpB,MAAMoC,EAAQnE,GAAU,WAEpBL,EAAcyE,cACf,KAEH5E,EAAO6E,IAAI,YAAY,WACnBrE,EAAUsE,OAAOH,MAkBzB,SAASI,EAA2B/E,EAAQgF,EAAmBC,EAAQ/E,GACnEF,EAAOkF,OAAS,SAAUC,GAClBA,GAASA,EAAMzF,SACfM,EAAOoF,WAAaD,EAAM,KAGlCnF,EAAOqF,GAAK,WACJrF,EAAOoF,aACPpF,EAAOsF,kBAAmB,EAC1BL,EAAOC,OAAO,CACVvJ,IAAK,oBACL4J,OAAQ,OACRzD,KAAM,CAAC0D,OAAQxF,EAAOoF,cAErBvD,SAAQ,WACL7B,EAAOsF,kBAAmB,EAC1BN,EAAkBS,WAErBxD,OAAM,SAAUH,GACb,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClBlC,EAAOsF,kBAAmB,OAI1CtF,EAAO8E,OAAS,WACZE,EAAkBU,QAAQ,WAMlC,SAASC,EAAgB3F,EAAQgF,EAAmB9E,EAAQN,GAExDI,EAAO4F,YAAc,CACjB,IAAO,GACP,SAAY,OACZ,SAAY,GACZ,SAAY,GACZ,QAAU,GAEd5F,EAAO6F,QAAUlG,EAAWC,GAE5BI,EAAO8F,gBAAkB,WACrB,OAAQ9F,EAAO4F,YAAYxE,IAAI1B,OAAS,GACQ,IAA5CM,EAAO4F,YAAYxE,IAAI2E,QAAQ,UAA+D,IAA7C/F,EAAO4F,YAAYxE,IAAI2E,QAAQ,YAC7E/F,EAAO4F,YAAYxE,IAAI2E,QAAQ,mBAAqB,GAG/D/F,EAAOqF,GAAK,WACHrF,EAAO4F,YAIZZ,EAAkBS,MAAMzF,EAAO4F,aAH3B1F,EAAO+B,MAAM,6BAMrBjC,EAAO8E,OAAS,WACZE,EAAkBU,QAAQ,WAMlC,SAASM,EAAiBhG,EAAQgF,EAAmBrE,EAAUf,GAE3DI,EAAOiG,eAAiB1C,QAAQ2C,KAAKvF,GACrCX,EAAO6F,QAAUlG,EAAWC,GAE5BI,EAAOqF,GAAK,WACRL,EAAkBS,MAAMzF,EAAOiG,iBAGnCjG,EAAO8E,OAAS,WACZE,EAAkBU,QAAQ,WAKlC,SAASS,EAAqBnG,EAAQoG,EAAWC,EAAcC,GAC3DtG,EAAOuG,UAAY,yBACnBvG,EAAOwG,gBAAkB,mBACzBxG,EAAOqG,aAAeA,EACtBrG,EAAOsG,cAAgBA,EACvBtG,EAAOyG,qBAAuB,SAAUC,GACpCN,EAAUlJ,KAAK,GAAGkJ,EAAUlJ,UAAUwJ,MAM9C,SAASC,EAAkB3G,EAAQE,EAAQC,EAAeiG,EAAWQ,EAAU3B,EAAQoB,EAAcC,EAAeO,EAAcC,GAkD9H,IAA+BC,EAjD/B/G,EAAOgH,SAAW,kBAAgBC,QAClCjH,EAAOwG,gBAAkB,mBACzBxG,EAAOkH,aAAe,gBACtBlH,EAAOzC,OAASsJ,EAChB7G,EAAO+G,eAAiBF,EAAaE,eACrC/G,EAAOmH,QAAS,EAEhBnH,EAAOS,QAAS,EAChBT,EAAOuG,UAAY,oBACnBvG,EAAOoH,eAAiB,CACpB3O,GAAI,GACJ8E,OAAQ,GACRjE,MAAO,GACP6K,KAAM,IAGVnE,EAAOqG,aAAeA,EACtBrG,EAAOsG,cAAgBA,EACvBtG,EAAOvB,cAAgB,CACnBC,uBAAuB,EACvBI,qBAAqB,EACrBC,gCAAgC,EAChCC,6BAA6B,EAC7BC,4BAA6B,EAC7BC,6BAA8B,EAC9BL,8CAA+C,EAC/CD,sCAAuC,GAoD3CoB,EAAOqH,UAAY,SAAUX,GACzBI,EAAwBQ,2BAA2BZ,GAAU7E,SAAQ,SAAUC,GAC3E9B,EAAOoH,eAAe7J,OAASuE,EAAKvE,OACpCyC,EAAOoH,eAAejD,KAAOrC,EAAKqC,KAClC7G,EAA0B0C,EAAOoH,eAAe7J,QAChDQ,EAAyBiC,EAAOoH,eAAe7J,QAC/CyC,EAAOS,QAAS,EAIhBmG,GAAS,WAELrD,QAAQgE,QAAQnJ,UAAUoJ,KAAK,OAAOC,UACvC,OACJxF,OAAM,SAAUH,GACf,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClBlC,EAAOS,QAAS,MAIpBT,EAAO+G,iBAtEX,SAA6BA,GACzB,OAAO/G,EAAOqG,eAAiBU,IAAmB,mBAAiBjO,UAC5DiO,IAAmB,mBAAiBlO,UAmBpC6O,CADoBX,EAkDoB/G,EAAO+G,iBAjE1D,SAA6BA,GACzB,OAAQ/G,EAAOsG,gBAAkBtG,EAAOqG,cAAgBU,IAAmB,mBAAiB/N,GAe9C2O,CAAoBZ,IAZtE,SAA6BA,GACzB,OAAO/G,EAAOsG,eAAiBS,IAAmB,mBAAiBnO,KAY5DgP,CAAoBb,IAV/B,SAAgCA,GAC5B,OAAOA,IAAmB,mBAAiBhO,MASG8O,CAAuBd,IANzE,SAA+BA,GAC3B,OAAOA,IAAmB,mBAAiB9N,KAMpC6O,CAAsBf,KAgD7B/G,EAAOoH,eAAejD,KAAOnE,EAAO+G,eACpC/G,EAAOqH,UAAUrH,EAAO+G,gBA9C5B,SAAsBA,GAClB,OAAQA,GACJ,KAAK,mBAAiBnO,KAClBoH,EAAOuG,UAAY,iCACnB,MACJ,KAAK,mBAAiB1N,SAClBmH,EAAOuG,UAAY,sCACnB,MACJ,KAAK,mBAAiBzN,SAClBkH,EAAOuG,UAAY,sCACnB,MACJ,KAAK,mBAAiBvN,GAClBgH,EAAOuG,UAAY,+BACnB,MACJ,KAAK,mBAAiBxN,MAClBiH,EAAOuG,UAAY,yCACnB,MACJ,KAAK,mBAAiBtN,KAClB+G,EAAOuG,UAAY,yCA6B3BwB,CAAa/H,EAAO+G,iBAEpBX,EAAUlJ,KAAK,sBAGnB8C,EAAOa,kBAAoB,WACvB,OAAOV,EAAcU,qBAGzBb,EAAOgI,eAAiB,WACpB,OAAO7H,EAAcY,qBAGzB,IAAIkH,GAAmB,EACvBjI,EAAOkI,cAAgB,SAAU/C,GACzBA,GAASA,EAAMzF,SACfM,EAAOoF,WAAaD,EAAM,GAC1BnF,EAAOsF,kBAAmB,EAC1BL,EAAOC,OAAO,CACVvJ,IAAK,kCACLmG,KAAM,CAACtI,QAASwG,EAAOoF,cACxB+C,UAAS,SAAUC,OAGnBvG,SAAQ,SAAUC,GACjB,GAAKA,EAAKD,QAGH,CACH,MAAMwG,EAAWrI,EAAOoF,WAAW1M,KAC7B4P,EAAW,CAAC7P,GAAIqJ,EAAKyG,aAAc7P,KAAM,WAAa2P,GACxDrI,EAAOwI,WAEPxI,EAAOgH,SAAS,GAAKsB,EAGrBtI,EAAOgH,SAASyB,QAAQH,GAE5BtI,EAAOwI,WAAa1G,EAAKyG,aACzBvI,EAAO0I,eAAiBL,EACxBrI,EAAOoH,eAAe7J,OAAO/D,QAAQgE,MAAQwC,EAAOwI,gBAdpDtI,EAAO+B,MAAMH,EAAK6G,cAClBV,GAAmB,EAevBjI,EAAOsF,kBAAmB,KAC3BrD,OAAM,SAAUH,GACf,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClBlC,EAAOoF,WAAa,GACpBpF,EAAOsF,kBAAmB,OAKtCtF,EAAO4I,eAAiB,WACpB1I,EAAO+B,MAAM,gEAGjBjC,EAAO6I,yBAA2B,WAC1BtF,QAAQuF,UAAUjC,EAAakC,kBACxB3C,EAAU4C,SAASD,SAC1B3C,EAAUlJ,KAAK,MAEfkJ,EAAUlJ,KAAK,gBAIvB8C,EAAOiJ,eAAiB,WACpBjJ,EAAOS,QAAS,EAChBqG,EAAwBoC,iBAAiBlJ,EAAOoH,gBAAgBvF,SAAQ,WACpE3B,EAAO2B,QAAQ,kBAAoB7B,EAAOoH,eAAe3O,GAAK,sBAC9D0H,EAAc6B,KAAKhC,EAAO6I,6BAC3B5G,OAAM,SAAUH,GACf,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClBlC,EAAOS,QAAS,MAIxBT,EAAOmJ,WAAa,WAChB,IAAKnJ,EAAOoH,eAAe3O,GAEvB,YADAyH,EAAO+B,MAAM,iCAIjBjC,EAAOoJ,mBAAqB,mBAAiBzK,KAAKqB,EAAOoH,eAAe3O,IACxE+F,EAAqBwB,EAAOoH,eAAe7J,OAAQyC,EAAOvB,eAC1D,MAAMA,EAAgBU,EAAmBa,EAAOvB,eAE5CwJ,EACA/H,EAAO+B,MAAM,qDACNjC,EAAOoJ,kBACdlJ,EAAO+B,MAAM,mBACoB,SAA1BjC,EAAO+G,gBAAkF,IAArD/G,EAAOoH,eAAe7J,OAAOU,OAAOT,MAAMkC,OACrFM,EAAO4I,iBACAnK,EACPyB,EAAO+B,MAAMxD,GAEbuB,EAAOiJ,kBAIfjJ,EAAOqJ,eAAiB,WACpB,MAAMC,EAAKtJ,EAAOoH,eAAe7J,OACjC,YAAWgM,IAAPD,QAAmCC,IAAfD,EAAG9P,cAA8C+P,IAArBD,EAAGzP,cAC5C,GAG6B,IAApCyP,EAAG9P,QAAQgE,MAAMuI,QAAQ,QAA2C,SAA3BuD,EAAGzP,cAAc2D,MACnD,gBAAc/D,gBAAgBC,YACO,IAArC4P,EAAG9P,QAAQgE,MAAMuI,QAAQ,SAA4C,UAA3BuD,EAAGzP,cAAc2D,MAC3D,gBAAc/D,gBAAgBE,iBAC9B2P,EAAG9P,QAAQgE,QAAUwC,EAAOwI,WAC5B,gBAAc/O,gBAAgBG,cAE9B,IAIfoG,EAAOwJ,oBAAsB,WACzBhL,EAAqBwB,EAAOoH,eAAe7J,OAAQyC,EAAOvB,gBAG9DuB,EAAO9B,qBAAuB,WAC1B,OAAOA,KAKX8B,EAAOyJ,YAAc,YAKzB,SAASC,EAAuB1J,EAAQgF,EAAmB8B,EAAyB6C,EAAMzJ,GAElFyJ,GACA7C,EAAwB8C,yBAAyBD,GAAM9H,SAAQ,SAAUC,GACrE9B,EAAO6J,YAAc/H,KACtBG,OAAM,SAAUH,GACf,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,YAI1BlC,EAAOqF,GAAK,WACRL,EAAkBS,MAAM,CACpBqE,QAAS9J,EAAO6J,YAChBtB,aAAcoB,KAItB3J,EAAO8E,OAAS,WACZE,EAAkBU,QAAQ,WAMlC,SAASqE,EAAmB/J,EAAQ6G,EAAc3G,EAAQC,EAAeiG,EAAWhG,EAAciG,EAAcC,EAAeQ,GAE3H9G,EAAOgH,SAAW,kBAAgBC,QAClCjH,EAAOwG,gBAAkB,mBACzBxG,EAAOkH,aAAe,gBAGtBlH,EAAOgK,cAAe,EACtBhK,EAAOiK,eAAgB,EACvBjK,EAAOzC,OAASsJ,EAChB7G,EAAOS,QAAS,EAChBT,EAAOqG,aAAeA,EACtBrG,EAAOsG,cAAgBA,EACvBtG,EAAOoH,eAAiB,GACxBpH,EAAOoH,eAAe3O,GAAKuH,EAAOzC,OAAO4F,aACzCnD,EAAOoH,eAAe8C,kBAAmB,EACzClK,EAAO+G,eAAiB,GACxB/G,EAAOmK,WAAanK,EAAOzC,OAAO4F,aAClCnD,EAAOuG,UAAY,oBAAsBvG,EAAOzC,OAAO4F,aACvDnD,EAAOvB,cAAgB,CACnBC,uBAAuB,EACvBI,qBAAqB,EACrBC,gCAAgC,EAChCC,6BAA6B,EAC7BC,4BAA6B,EAC7BC,6BAA8B,EAC9BL,8CAA+C,EAC/CD,sCAAuC,GAE3CoB,EAAOa,kBAAoB,WACvB,OAAOV,EAAcU,qBAGzBb,EAAOoK,OAAOpK,EAAOa,mBAAmB,WAChCb,EAAOa,mBACPiG,EAAwBuD,cAAcrK,EAAOoH,eAAe3O,IACvDoJ,SAAQ,SAAUC,GACf,GAAIyB,QAAQuF,UAAUhH,EAAKvE,OAAO/D,SAAU,CACxC,IAAI8Q,GAAkB,EAMtB,GALA/G,QAAQC,QAAQxD,EAAOgH,UAAU,SAAUuD,GACnCA,EAAK9R,KAAOqJ,EAAKvE,OAAO/D,QAAQgE,QAChC8M,GAAkB,MAGtBxI,EAAKvE,OAAO/D,UAAY8Q,EAAiB,CACzC,IAAI5R,EAAOuE,EAAY6E,EAAKvE,OAAO/D,QAAQgE,OAC3CwC,EAAOgH,SAASyB,QAAQ,CAAChQ,GAAIqJ,EAAKvE,OAAO/D,QAAQgE,MAAO9E,KAAM,WAAaA,KAGnFsH,EAAOoH,eAAiBtF,EACxB9B,EAAOwK,kBAAkB1I,EAAKqC,MAC9B7G,EAA0B0C,EAAOoH,eAAe7J,QAChDyC,EAAOoH,eAAeqD,OAASzK,EAAOmK,WACtCnK,EAAOS,QAAS,KAEnBwB,OAAM,SAAUH,EAAM4I,GACnB,GAAe,MAAXA,GAAgD,WAA9B7D,EAAa1D,aAC/BjD,EAAO+B,MAAM,qBAA4B4E,EAAa1D,aAAe,sBAA6B,QAAS,CAACwH,WAAW,IACvH3K,EAAOS,QAAS,EAChB2F,EAAUlJ,KAAK,mBACZ,GAAe,MAAXwN,GAAgD,WAA9B7D,EAAa1D,aACtCjD,EAAO+B,MAAM,2CAA6C,QAAS,CAAC0I,WAAW,IAC/E3K,EAAOS,QAAS,EAChB2F,EAAUlJ,KAAK,kBACZ,CACH,MAAMgF,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClBlC,EAAOS,QAAS,SAMpCT,EAAOwK,kBAAoB,SAAUrG,GACjCnE,EAAO+G,eAAiB5C,GAG5BnE,EAAO4I,eAAiB,WACpB1I,EAAO+B,MAAM,gEAGjBjC,EAAO4K,aAAe,WAClB5K,EAAOS,QAAS,EAChBqG,EAAwB/J,eAAeiD,EAAOoH,eAAeqD,OAAQzK,EAAOoH,gBACvEvF,SAAQ,WACL3B,EAAO2B,QAAQ,kBAAoB7B,EAAOoH,eAAeqD,OAAS,qBAClEtK,EAAc6B,KAAKhC,EAAO6I,0BACtB7I,EAAOoH,eAAeqD,SAAWzK,EAAOoH,eAAe3O,IAAMuH,EAAOoH,eAAe8C,kBACnF/J,EAAc0D,kBAAkB7D,EAAOoH,eAAe3O,OAE3DwJ,OAAM,SAAUH,GACnB,MAAMI,EAAMC,SAASL,GACrB5B,EAAO+B,MAAMC,EAAK,SAClBlC,EAAOS,QAAS,MAIxBT,EAAOjD,eAAiB,WACpBiD,EAAOoJ,mBAAqB,mBAAiBzK,KAAKqB,EAAOoH,eAAe3O,IACxE+F,EAAqBwB,EAAOoH,eAAe7J,OAAQyC,EAAOvB,eAC1D,MAAMA,EAAgBU,EAAmBa,EAAOvB,eAChD,IAAIoM,EAAW,sCAAsC7K,EAAOoH,eAAe3O,uBACvEuH,EAAOoH,eAAeqD,SAAWzK,EAAOoH,eAAe3O,GACvDoS,GAAY,mIAEL7K,EAAOoH,eAAe8C,iBAC7BW,GAAY,yHAGZA,GAAY,+IAGZ7K,EAAOoJ,kBACPlJ,EAAO+B,MAAM,mBACoB,SAA1BjC,EAAO+G,gBAAkF,IAArD/G,EAAOoH,eAAe7J,OAAOU,OAAOT,MAAMkC,OACrFM,EAAO4I,iBACDnK,EACNyB,EAAO+B,MAAMxD,GAEb2B,EAAaiB,gBAAgB,CACzB/H,MAAO,eACPgI,QAASuJ,EACTtJ,SAAS,IACVC,OACEC,MAAK,WACFzB,EAAO4K,mBAKvB5K,EAAO8K,iBAAmB,WACtB,IAAI5I,EAAM,sIACNlC,EAAOqG,eACPnE,GAAO,8GAEX9B,EAAaiB,gBAAgB,CACzB/H,MAAO,sBACPgI,QAASY,EACTX,SAAS,IACVC,OAAOC,MAAK,WACXzB,EAAOiK,eAAgB,MAI/BjK,EAAO6I,yBAA2B,WAC1BtF,QAAQuF,UAAUjC,EAAakC,kBACxB3C,EAAU4C,SAASD,SAC1B3C,EAAUlJ,KAAK,MAEfkJ,EAAUlJ,KAAK,gBAIvB8C,EAAOwJ,oBAAsB,WACzBhL,EAAqBwB,EAAOoH,eAAe7J,OAAQyC,EAAOvB,gBAG9DuB,EAAO9B,qBAAuB,WAC1B,OAAOA,KA1xBfqF,QAAQwH,OAAO,6CATC,CACZ,YACA,eACA,+CACA,8CACA,SACA,iBAICxI,WAAW,+BAAgCxC,GAC3CwC,WAAW,kBAAmBoD,GAC9BpD,WAAW,mBAAoByD,GAC/BzD,WAAW,uBAAwB4D,GACnC5D,WAAW,oBAAqBoE,GAChCpE,WAAW,qBAAsBwH,GACjCxH,WAAW,yBAA0BmH,GACrCnH,WAAW,6BAA8BwC,GAE9ChF,EAA6BiL,QAAU,CAAC,SAAU,YAAa,SAAU,gBAAiB,eAAgB,WAAY,uBAAwB,sBAAuB,aAiRrKjG,EAA2BiG,QAAU,CAAC,SAAU,oBAAqB,SAAU,UAgC/ErF,EAAgBqF,QAAU,CAAC,SAAU,oBAAqB,SAAU,eAgCpEhF,EAAiBgF,QAAU,CAAC,SAAU,oBAAqB,WAAY,eAgBvE7E,EAAqB6E,QAAU,CAAC,SAAU,YAAa,eAAgB,iBAWvErE,EAAkBqE,QAAU,CAAC,SAAU,SAAU,gBAAiB,YAAa,WAAY,SAAU,eAAgB,gBAAiB,eAAgB,2BA2OtJtB,EAAuBsB,QAAU,CAAC,SAAU,oBAAqB,0BAA2B,OAAQ,UAyBpGjB,EAAmBiB,QAAU,CAAC,SAAU,eAAgB,SAAU,gBAAiB,YAAa,eAAgB,eAAgB,gBAAiB","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(["$
|
|
2
|
-
//# sourceMappingURL=56.
|
|
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":"8EAAA,qBACI,KAAQ,OACR,QAAW,UACX,MAAS,QACT,YAAe,cACf,MAAS,SAWPA,EAAY,CACdC,UAAW,CACPC,KAAM,MACNC,MAAO,aACPC,IAAK,KAiBb,SAASC,EAASC,GACd,GAAIA,EAAS,IACT,OAAOA,EAEX,MACMC,EAAMC,KAAKC,MAAMD,KAAKE,IAAIJ,GAAUE,KAAKE,IAAI,MACnD,IAAIC,EAASL,EAASE,KAAKI,IAAI,IAAML,GAErC,OADAI,EAAUA,EAAS,EAAK,EAAIH,KAAKI,IAAI,IAAML,EAAM,GAAOI,EAAOE,QAAQ,GAAKF,EAAOE,QAAQ,GACpFF,EAJI,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAIlBJ,EAAM,GAK7B,SAASO,EAAsBC,EAAQC,EAAYC,EAAeC,EAAQC,EAAUC,EAAsBC,EAAiBC,EAAcC,EAAqBC,GAE1J,IAAIC,EAAQ,KAEZV,EAAOW,OAAUT,EAAcU,sBAAyCC,EAAOC,KAAxBD,EAAOE,QAE9D,IAAIC,EAAgB/B,EAEpB,MAAMgC,EAAW,WACbR,EAA6BS,gBACxBC,SAAQ,SAAUC,GACfpB,EAAOoB,aAAeA,EAAaC,QAAQC,SAC3CC,IACKvB,EAAOwB,qBAGiB,UAAlBxB,EAAOW,QACdc,KAHAzB,EAAOW,OAAS,OAChBc,GAAuB,OAI5BC,OAAM,SAAUC,GACnB3B,EAAO4B,gBAAkBC,SAASF,GAClCxB,EAAOuB,MAAMG,SAASF,GAAO,4BAI/BJ,EAA4B,WAC9B,MAAMO,EAAoBtB,EAAoBuB,IAAI,8BAA8B7B,EAAcU,yBACpE,OAAtBkB,GAA8B9B,EAAOoB,aAAaY,KAAKC,GAASA,EAAM/C,UAAUG,MAAQyC,EAAkB5C,UAAUG,KACpH2B,EAAgBc,EAEhBtB,EAAoB0B,IAAI,8BAA8BhC,EAAcU,wBAAyBI,IAI/FmB,EAAuB,SAAUC,GACnCC,GAAGC,OAAO,uBAAuBC,KAAK,IAEtCvC,EAAOW,OAASE,EAAOC,KAEvBT,EAAqB8B,qBAAqBC,EAAiBpC,EAAOwC,UAAWxB,EAAc9B,UAAUG,KAChG8B,SAAQ,SAAUsB,GAEfzC,EAAO0C,iBAAmB,CACtBC,OAAQF,EAAWG,MACnBC,MAAOJ,EAAWK,KAClBC,SAAUC,EAAEC,IAAID,EAAEE,IAAIT,EAAWG,OAAO,SAAUO,GAC9C,OAAOH,EAAEC,IAAIE,OACX,EACNX,UAAWxC,EAAOwC,WAEtBxC,EAAOW,OAASE,EAAOuC,SACxB1B,OAAM,SAAUC,GACnB3B,EAAOW,OAASE,EAAOuC,MACvBjD,EAAOuB,MAAMG,SAASF,GAAO,wCAoB/BF,EAAyB,SAAU4B,IACjCrD,EAAOW,SAAWE,EAAOuC,OAAUC,KAGvCrD,EAAOW,OAASE,EAAOC,KACvBT,EAAqBoB,uBAAuBT,EAAc9B,UAAUG,KAC/D8B,SAAQ,SAAUQ,GAEf,GADA3B,EAAOW,OAASgB,EACZ3B,EAAOW,SAAWE,EAAOyC,YAAa,CACtC,GAAc,OAAV5C,EACA,OAEAA,EAAQN,EAASqB,EAAwB,KAG7CzB,EAAOW,SAAWE,EAAOuC,QACX,OAAV1C,IACAN,EAASmD,OAAO7C,GAChBA,EAAQ,MAjCxBL,EAAqBmD,wBAAwBxD,EAAOwC,UAAWxB,EAAc9B,UAAUG,KAClF8B,SAAQ,SAAUsC,EAAa9C,GAC5BX,EAAO0D,WAAWC,MAAQX,EAAEY,OAAOH,EAAaI,GAChD7D,EAAO8D,sBAAwBL,EAC/BzD,EAAOoC,qBAAkB2B,EACrBC,QAAQC,YAAYjE,EAAOoC,mBAC3BpC,EAAOoC,gBAAkBqB,EAAYS,MAAM,EAAG,KAElD/B,EAAqBnC,EAAOoC,iBACb,MAAXzB,GACAR,EAAOgE,QAAQ,4DAA6D,mCA2BxC,IAApCnE,EAAOW,OAAOyD,QAAQ,YACtBpE,EAAOW,OAASE,EAAOwD,MACvBlE,EAAOuB,MAAM,sDAAwD1B,EAAOW,OAAO2D,UAAU,SAASC,aAG7G7C,OAAM,SAAUC,GACb3B,EAAOW,OAASE,EAAOwD,MACvBlE,EAAOuB,MAAMG,SAASF,GAAO,iDAIzC3B,EAAO0D,WAAa,GACpB1D,EAAO0D,WAAWC,MAAQ,GAC1B3D,EAAO8D,sBAAwB,GAC/B9D,EAAOwC,UAAY,MAEnB,MAAMgC,EAAa,GACnB,IAAIC,EAAW,EACXC,EAAU,EA+Bd,SAASb,EAAgBc,GACrB,OAEyD,IAFlDA,EAAEC,KACJC,cACAT,QAAQpE,EAAO8E,WAAWC,MAAMF,eAjCzC5E,EAAW+E,IAAM,GAEjBR,EAAWzC,IAAM,SAAUkD,EAAOC,EAAO/D,GACrC,OAAOb,EAAgB6E,aAAaF,EAAOC,EAAO/D,EAASsD,EAAUzE,EAAO0D,WAAWC,QAG3F1D,EAAWmF,QAAO,WACd,OAAOnF,EAAW+E,OACnB,WACCP,EAAW,EACXzB,EAAEqC,KAAKrF,EAAO0D,WAAWC,OAAO,SAAU2B,GAClCrF,EAAW+E,IAAMM,GAAMb,OAE/BC,OAGJF,EAAWe,SAAW,WAClB,OAAOb,GAGX1E,EAAOwE,WAAaA,EAIpBxE,EAAOwF,iBAAmB,CAACC,QAAS,CAACC,QAAQ,IAE7C1F,EAAO8E,WAAa,GACpB9E,EAAO8E,WAAWC,MAAQ,GAC1B/E,EAAO6D,gBAAkBA,EAQzB7D,EAAOoF,OAAO,oBAAoB,WAC1BpF,EAAO0D,WAAWC,MAAMY,OAAS,GACjCnE,GAAS,WACLJ,EAAOwF,iBAAiBC,QAAQE,WACjC,OAIX3F,EAAOoF,OAAO,aAAa,YAClBlF,EAAcU,uBACXZ,EAAOwB,sBAAwBtB,EAAc0F,wBAGrD3E,OAGJjB,EAAO6F,IAAI,YAAY,WACnBzF,EAASmD,OAAO7C,MAGpBV,EAAO8F,UAAY,WACf,OAAO9F,EAAOW,SAAWE,EAAOyC,aAAetD,EAAOW,SAAWE,EAAOC,MAG5Ed,EAAO+F,6BAA+B,WAClCxF,EAAayF,gBAAgB,CACzBC,MAAO,oBACPC,QAAS,mEACT/B,SAAS,IACVvE,OACEuG,MAAK,WACFnG,EAAOoG,4BAInBpG,EAAOoG,sBAAwB,WAC3BpG,EAAOW,OAASE,EAAOC,KACvBd,EAAOoC,qBAAkB2B,EACzB1D,EAAqBgG,uBAAuBrF,EAAc9B,UAAUG,KAC/D8B,SAAQ,SAAUQ,GACgB,IAA3BA,EAAKyC,QAAQ,UACbjE,EAAOuB,MAAM,sDAAwDC,EAAK2C,UAAU,SAASC,SAE7F9C,OAGPC,OAAM,SAAUC,GACbxB,EAAOuB,MAAM,qCAAuCG,SAASF,QAIzE3B,EAAOsG,SAAW,SAAUC,GACxBvG,EAAOoC,gBAAgBoE,KAAKD,GAC5BpE,EAAqBnC,EAAOoC,kBAGhCpC,EAAOyG,YAAc,SAAUF,GAC3BvD,EAAE0D,OAAO1G,EAAOoC,iBAAiB,SAAUuC,GACvC,OAAOA,EAAEC,OAAS2B,EAAM3B,QAE5BzC,EAAqBnC,EAAOoC,kBAGhCpC,EAAO2G,UAAY,SAAUJ,GACzBvG,EAAO4G,YAAcL,GAGzBvG,EAAO6G,mBAAqB,SAAUjC,GAClC,YAAwDb,IAAjDf,EAAE8D,KAAK9G,EAAOoC,gBAAiB,CAACwC,KAAMA,KAGjD5E,EAAO+G,eAAiB,SAAUnC,GAC9B5E,EAAOoC,gBAAgBoE,KAAKxD,EAAE8D,KAAK9G,EAAO0D,WAAWC,MAAO,CAACiB,KAAMA,KACnEzC,EAAqBnC,EAAOoC,kBAGhCpC,EAAOgH,kBAAoB,SAAUpC,GACjC5B,EAAE0D,OAAO1G,EAAOoC,iBAAiB,SAAUuC,GACvC,OAAOA,EAAEC,OAASA,KAEtBzC,EAAqBnC,EAAOoC,kBAIhCpC,EAAOiH,iBAAmB,WACtBjH,EAAOoC,gBAAkB,GACzBD,EAAqBnC,EAAOoC,kBAGhCpC,EAAOwB,mBAAqB,WACxB,MAA+C,WAAxCtB,EAAcU,uBAgBzB,MAAMsG,EAAoBlH,EAAO6F,IAAI,mBAbrC,WAEI7F,EAAO8E,WAAa,GACpB9E,EAAO8E,WAAWC,MAAQ,GAC1B/E,EAAO4B,gBAAkB,KACzBZ,EAAgB/B,EACXiB,EAAcU,wBAAyBV,EAAc0F,uBAI1D3E,IAHIjB,EAAOW,OAASE,EAAOE,WAQ/BoG,OAAOC,iBAAiB,gBAExB,SAASC,IACLH,IACAC,OAAOG,oBAAoB,eAAgBD,MAG/CrH,EAAOuH,YAAc,SAAUtF,GAC3BjB,EAAgBiB,EAChBR,GAAuB,GACvBjB,EAAoB0B,IAAI,8BAA8BhC,EAAcU,wBAAyBI,IAGjGhB,EAAOwH,sBAAwB,WAC3B,OAAOxG,EAAc9B,UAAUE,OAGnCY,EAAOyH,oBAAsB,WACzB,MAA0C,eAAnCzH,EAAOwH,yBA/StBE,OAAOC,eAAeC,EAAQ,YAAa,CACvC7F,IAAK,IAAc9C,IAGvB+E,QACK6D,OAAO,0DApBI,CACZ,mBACA,YACA,SACA,eACA,+CACA,gDAeCC,WAAW,wBAAyB/H,GACpCgI,OAAO,CAAC,sBAAuB,SAAUC,GACtCA,EAAoBC,QAAQ,CAACC,cAAc,OAE9CtE,OAAO,YAAY,WAChB,OAAOtE,KAcfS,EAAsBoI,QAAU,CAAC,SAAU,aAAc,gBAAiB,SAAU,WAAY,uBAAwB,kBAAmB,eAAgB,sBAAuB,kC","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.
|
|
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":"6EAAAA,QACKC,OAAO,yCAA0C,IACjDC,QAAQ,qBAAsBC,GAEnCA,EAAmBC,QAAU,CAAC,SAE9B,MAAMC,EAA2B,uBAEjC,SAASF,EAAmBG,GACxB,MAAO,CACHC,UASJ,SAAmBC,EAAoBC,EAAO,IAC1C,OAAOH,EAAMI,IAAI,GAAGL,KAA4BG,IAAsBC,IATtEE,gBAYJ,SAAyBC,EAAQC,EAAUJ,GACvC,OAAOH,EAAM,CACTQ,IAAK,GAAGT,KAA4BO,oBAAyBG,mBAAmBF,KAChFG,OAAQ,OACRP,UAfJQ,gBAmBJ,SAAyBR,GACrB,OAAOH,EAAMY,KAAK,2BAA4B,CAC1CC,oBAAqBV,EAAKW,oBAC1BC,wBAAyBZ,EAAKa,iBAC9BC,oBAAqBd,EAAKe,aAC1BC,gBAAiBhB,EAAKiB,YACtBC,aAAclB,EAAKmB,mBAxBvBC,cA4BJ,SAAuBjB,EAAQkB,EAAgBC,GAC3C,OAAOzB,EAAM,CACTQ,IAAK,GAAGT,KAA4BO,aACpCI,OAAQ,OACRP,KAAM,CACFuB,UAAWD,EACXD,eAAgBA,MAjCxBG,iBAsCJ,SAA0BrB,EAAQsB,GAC9B,OAAO5B,EAAM,CACTQ,IAAK,GAAGT,KAA4BO,aAAkBsB,IACtDlB,OAAQ,SACRmB,SAAU,UAzCdC,gBA6CJ,SAAyBxB,EAAQsB,GAC7B,OAAO5B,EAAM,CACTQ,IAAK,GAAGT,KAA4BO,WAAgBsB,IACpDlB,OAAQ,SACRmB,SAAU,UAhDdE,aAoDJ,SAAsBzB,EAAQH,GAC1B,OAAOH,EAAM,CACTQ,IAAK,GAAGT,KAA4BO,UACpCI,OAAQ,OACRP,a,gCCxEZ,kBAgBA,SAAS6B,EAAYC,GACjB,OAAIA,EAAKC,MACE,QAEJD,EAAK1B,SAAS4B,MAAM,kBAAkB,GAMjD,SAASC,EAAsBC,EAAQrC,EAAOsC,EAAIC,EAAQC,EAAeC,EAAWC,EACrDC,EAASC,EAAWC,EAAcC,EAAUjD,EAC5CkD,GAE3BV,EAAOW,UAAY,SAAUC,EAAQC,GACjCJ,EAASK,OAAOd,EAAOe,eACnBH,EACAZ,EAAOe,cAAgBN,GAAS,WAC5BT,EAAOY,OAASA,EAChBZ,EAAOgB,cAAgBH,IACxB,KAEHb,EAAOY,QAAS,GAIxBZ,EAAOiB,iBAAmB,WACtB,OAAOjB,EAAOgB,eAAiB,cAGnChB,EAAOpC,UAAY,SAAUC,GACzBL,EAAmBI,UAAUC,GACxBqD,SAAQ,SAAUpD,GACfkC,EAAOmB,kBAAoBrD,MAIvCkC,EAAOoB,mBAAqB,SAAUnD,EAAQoD,EAAWC,GACrD,MAAMC,EAAW,GACjBA,EAASF,GAAaC,EAEtBtB,EAAOW,WAAU,EAAM,wBACvBnD,EAAmBQ,gBAAgBgC,EAAOwB,SAASvD,EAAOC,UAAWyB,EAAY1B,GAASsD,GACrFL,SAAQ,WAIL,OAHAlB,EAAOyB,iBAAkB,EACzBvB,EAAOgB,QAAQ,OAASG,EAAY,OAASC,EAAQ,IAAK,IAC1DtB,EAAO0B,uBACA,KACRC,OAAM,SAAU7D,GAGf,OAFAkC,EAAOyB,iBAAkB,EACzBvB,EAAOyB,MAAMC,SAAS9D,GAAO,2BAA6BuD,IACnD,KACRQ,SAAQ,WACP7B,EAAOW,WAAU,OAI7BX,EAAO8B,QAAU,SAAUlC,GACvB,OAAY,MAARA,IAGAI,EAAO+B,SAASnC,GACT,gBAAiBA,EAEjB,gBAAiBA,IAIhCI,EAAOgC,UAAY,WACf,OAAO7B,EAAc8B,gBAGzBjC,EAAOkC,eAAiB,WACpBlC,EAAOmC,MAAMH,UAAYhC,EAAOgC,YAChChC,EAAOmC,MAAMtD,aAAemB,EAAOoC,aAAaC,KAC1BjC,EAAUkC,KAAK,CACjCC,YAAa,gEACbC,WAAY,sBACZC,QAAS,CACLN,MAAO,WACH,OAAOnC,EAAOmC,UAIZO,OAAOC,MAAK,SAAUR,GAChCnC,EAAOmC,MAAQA,EACfnC,EAAO4C,4BACR,WACC5C,EAAOoC,aAAe,SAI9BpC,EAAO4C,uBAAyB,WAC5B,MAAMnE,EAAsBkB,EAAYK,EAAOoC,cAE/CpC,EAAOW,WAAU,EAAM,qBAEvBnD,EAAmBc,gBAAgB,CAC/BG,oBAAqBA,EACrBE,iBAAkBqB,EAAOoC,aAAaC,KACtCxD,aAAcmB,EAAOmC,MAAMtD,aAC3BE,YAAaiB,EAAOmC,MAAMjE,SAAS2E,IACnC5D,gBAAiBe,EAAOmC,MAAMlD,kBAC/BiC,SAAQ,WACPhB,EAAOgB,QAAQ,oBAAsBlB,EAAOmC,MAAMjE,UAClD8B,EAAO8C,cACRnB,OAAM,SAAU7D,GACfoC,EAAOyB,MAAMC,SAAS9D,GAAO,yBAC9B+D,SAAQ,WACP7B,EAAOW,WAAU,OAIzBX,EAAOwB,SAAW,SAAUrD,GACxB,OAA4B,IAAxBA,EAAI4E,QAAQ,QACLV,KAEJlE,EAAI6E,UAAU7E,EAAI4E,QAAQ,iBAAmB,KAOxD/C,EAAON,aAAe,SAAUuD,EAAQC,EAAQC,GAC5C,IAAIlF,EACAmF,EAEJ,GAAI,mBAAoBH,EACpB/C,EAAOyB,MAAMsB,EAAOI,eAAgB,cAIxC,GAAI,mBAAoBH,EACpBhD,EAAOyB,MAAMuB,EAAOG,eAAgB,cAIxC,GAA8B,WAA1BJ,EAAOK,gBAAyD,WAA1BJ,EAAOI,eAAjD,CAWO,GAA8B,WAA1BL,EAAOK,eACdrF,EAASgF,EACTG,EAASF,MACN,IAA8B,WAA1BA,EAAOI,eAKd,YADApD,EAAOyB,MAAM,iCAAkC,SAH/C1D,EAASiF,EACTE,EAASH,EAMTG,EAAOlF,YAAYD,EAAOsF,QAC1BrD,EAAOyB,MAAM,0CAA2C,UAI5D3B,EAAOW,WAAU,EAAM,uBAEvBnD,EAAmB0B,cAAcc,EAAOwB,SAASvD,EAAOC,UAAWyB,EAAY1B,GAASmF,EAAOlF,UAC1FgD,SAAQ,WACL,MAAMsC,EAAYC,KAAKC,MAEvBN,EAAOO,QAAUP,EAAOO,SAAW,GACnCP,EAAOO,QAAQC,KAAK3F,EAAO0F,SAE3B3D,EAAO6D,gBAAgB5F,EAAQmF,EAAQ,GAAII,GAE3CvF,EAAOsF,QAAQH,EAAOlF,UAAY,EAElCiF,IAEAjD,EAAOgB,QAAQ,8BAA+B,OAC/CS,OAAM,SAAU7D,GACfoC,EAAOyB,MAAMC,SAAS9D,GAAO,8BAC9B+D,SAAQ,WACP7B,EAAOW,WAAU,YA7CjBsC,EAAO/E,YAAYgF,EAAOY,OAASZ,EAAOhF,YAAY+E,EAAOa,MAC7D5D,EAAOyB,MAAM,4BAA6B,SACnCsB,EAAO/E,YAAYgF,EAAOY,MACjC9D,EAAO+D,eAAed,EAAQC,GAAQ,EAAOC,GACtCD,EAAOhF,YAAY+E,EAAOa,MACjC9D,EAAO+D,eAAeb,EAAQD,GAAQ,EAAOE,GAE7CnD,EAAO+D,eAAed,EAAQC,GAAQ,EAAMC,IA0CxDnD,EAAOgE,sBAAwB,SAAUC,EAAGd,GACxC3C,EAAa0D,gBAAgB,CACzBC,MAAO,qBACPtD,QAAS,iDACTuD,SAAS,IACV1B,OACEC,MAAK,WACF3C,EAAOqE,eAAeJ,EAAGd,OAkDrCnD,EAAOqE,eAAiB,SAAUJ,EAAGd,EAAWmB,GAC5C,IAAIrG,EAAS,GACTmF,EAAS,GACmB,WAA5Ba,EAAEhB,OAAOK,gBACTrF,EAASgG,EAAEhB,OACXG,EAASa,EAAEf,QACwB,WAA5Be,EAAEf,OAAOI,iBAChBrF,EAASgG,EAAEf,OACXE,EAASa,EAAEhB,QAGVqB,KAAqB,mBAAoBrG,GAAoC,WAA1BmF,EAAOE,gBAA+B,mBAAoBF,IAclHpD,EAAOW,WAAU,EAAM,0BAEO,WAA1ByC,EAAOE,eAzEf,SAA0BW,EAAGhG,EAAQmF,EAAQD,GACzC3F,EAAmB8B,iBAAiBU,EAAOwB,SAASvD,EAAOC,UAAWqG,EAAEC,MAAM,CAC1EnF,UAAW+D,EAAOlF,SAClBiB,eAAgBQ,EAAY1B,MAC5BiD,SAAQ,WACRlB,EAAOyE,WAAWR,GAElBb,EAAOO,QAAUP,EAAOO,QAAQe,QAAO,SAAUC,GAC7C,OAAOA,IAAM1G,EAAO0F,kBAGjB1F,EAAOsF,QAAQH,EAAOlF,UAE7BiF,IAEAjD,EAAOgB,QAAQ,mCAAoC,OACpDS,OAAM,SAAU7D,GACfoC,EAAOyB,MAAMC,SAAS9D,GAAO,iCAC9B+D,SAAQ,WACP7B,EAAOW,WAAU,MAuDjBrB,CAAiB2E,EAAGhG,EAAQmF,EAAQD,GAnD5C,SAAyBc,EAAGhG,EAAQmF,EAAQD,GACxC3F,EAAmBiC,gBAAgBO,EAAOwB,SAASvD,EAAOC,UAAWqG,EAAEC,MAAM,CACzErF,eAAgBQ,EAAY1B,GAC5B2G,aAAc3G,EAAO4G,OACrBC,aAAcnF,EAAYyD,GAC1B2B,iBAAkB/E,EAAOwB,SAAS4B,EAAOlF,UACzC8G,WAAY5B,EAAOyB,UACnB3D,SAAQ,SAAUpD,GAClBkC,EAAOyE,WAAWR,GAAG,UAEdb,EAAOU,MAAM7F,EAAOC,iBACpBD,EAAO6F,MAAMV,EAAOlF,UAE3BiF,IAEAjD,EAAOgB,QAAQpD,EAAM,OACtB6D,OAAM,SAAU7D,GACfoC,EAAOyB,MAAMC,SAAS9D,GAAO,kCAC9B+D,SAAQ,WACP7B,EAAOW,WAAU,MAmCjBlB,CAAgBwE,EAAGhG,EAAQmF,EAAQD,IAnBnC3C,EAAa0D,gBAAgB,CACzBC,MAAO,qBACPtD,QAAS,yJAETuD,SAAS,IACV1B,OACEC,MAAK,WACF3C,EAAOqE,eAAeJ,EAAGd,GAAW,OAiBpDnD,EAAOiF,WAAa,SAAUrF,GACtBI,EAAOoC,eAAiBxC,EACxBI,EAAOoC,aAAexC,EAEtBI,EAAOoC,aAAe,KAE1BpC,EAAOkF,UAGXlF,EAAO+B,SAAW,SAAUnC,GACxB,OAAOA,SAA+D,WAAxBA,EAAK0D,gBAGvDtD,EAAO+D,eAAiB,SAAUoB,EAAOC,EAAQC,EAAelC,GAC5D,MAAMmC,EAAeH,EAAMjH,SAAS4B,MAAM,kBACpCyF,EAAgBH,EAAOlH,SAAS4B,MAAM,kBAE5CE,EAAOW,WAAU,EAAM,uBAEvBnD,EAAmBkC,aAAa4F,EAAa,GAAI,CAC7CnG,eAAgBgG,EAAMtF,MAAQ,QAAUyF,EAAa,GACrDV,aAAcO,EAAMN,OACpBC,aAAcM,EAAOvF,MAAQ,QAAU0F,EAAc,GACrDR,iBAAkBQ,EAAc,GAChCP,WAAYI,EAAOP,OACnBQ,cAAeA,IAChBnE,SAAQ,SAAUpD,GAEjB,MAAM0F,EAAYC,KAAKC,MAEvB1D,EAAO6D,gBAAgBsB,EAAOC,EAAQ,KAAM5B,GAC5C2B,EAAMrB,MAAMsB,EAAOlH,UAAY,EAE3BmH,IACAD,EAAOtB,MAAMqB,EAAMjH,UAAY,EAC/B8B,EAAO6D,gBAAgBuB,EAAQD,EAAO,KAAM3B,IAGhDL,IAEAjD,EAAOgB,QAAQpD,EAAM,OACtB6D,OAAM,SAAU7D,GACfoC,EAAOyB,MAAMC,SAAS9D,GAAO,+BAC9B+D,SAAQ,WACP7B,EAAOW,WAAU,OAIzBX,EAAO6D,gBAAkB,SAAUZ,EAAQC,EAAQsC,EAAQhC,GACvD,MAAMiC,EAAMxC,EAAO/E,SAAW,IAAMgF,EAAOhF,SAC3C,IAAIwH,EAAO1F,EAAO2F,UAAUF,GAC5B,MAAMG,EAAa1C,EAAOhF,SAAW,IAAM+E,EAAO/E,SAC5C2H,EAAc7F,EAAO2F,UAAUC,GA0BrC,OAzBKF,IAEDA,EAAO,GACP1F,EAAO2F,UAAUF,GAAOC,EACxB1F,EAAO8F,MAAMlC,KAAK8B,GAClBA,EAAa,OAAIzC,EACjByC,EAAa,OAAIxC,EACjBlD,EAAO+F,gBAAiB,GAK5BL,EAAa,OAAIF,EACjBE,EAAgB,UAAIlC,EAEpBkC,EAAyB,mBAA8B,WAA1BzC,EAAOK,gBAAyD,WAA1BJ,EAAOI,iBAAgCuC,EACtGA,GAAeA,EAAgC,qBAC/CA,EAAgC,oBAAI,GAExC7F,EAAO2F,UAAUF,GAAOC,EAEpB1F,EAAOgG,gBACPhG,EAAOgG,iBAGJN,GAGX1F,EAAOyE,WAAa,SAAUiB,EAAMO,GAChCjG,EAAO8F,MAAMI,OAAOlG,EAAO8F,MAAM/C,QAAQ2C,GAAO,GAChD,MAAMD,EAAMC,EAAKzC,OAAO/E,SAAW,IAAMwH,EAAKxC,OAAOhF,SAQrD,UAPO8B,EAAO2F,UAAUF,IACpBC,EAAKzC,OAAOI,gBAAkBqC,EAAKxC,OAAOG,kBAE1C8C,QAAQC,IAAI,uCACZpG,EAAOqG,gBAAiB,GAGxBJ,EAAe,CACf,MAAML,EAAaF,EAAKxC,OAAOhF,SAAW,IAAMwH,EAAKzC,OAAO/E,SACtD2H,EAAc7F,EAAO2F,UAAUC,GACjCC,GACA7F,EAAOyE,WAAWoB,GAAa,KAK3C7F,EAAOsG,iBAAmB,SAAU1G,EAAM4D,EAAW+C,EAAUC,GAC3D,OAAOhJ,EAAmBI,UAAUgC,EAAKyC,KAAM,CAC3C9C,OAAQ,CACJJ,eAAgBQ,EAAYC,MAG/B+B,OAAM,SAAU7D,GAiBb,MAhB0B,iCAEtB8B,EAAKyD,iBAELnD,EAAOyB,MAAMC,SAAS9D,GAAO,0BAA4B8B,EAAKyC,MAE9DzC,EAAKyD,eANiB,+BAStBzD,EAAKkE,MAAQ,GACblE,EAAK2D,QAAU,GACf3D,EAAK6G,YAAa,GAGtB7G,EAAK4D,UAAYA,GAEV,KAEVtC,SAAQ,SAAUwF,GACf9G,EAAK+G,gBAAkBD,EAAWC,gBAClC/G,EAAKgH,eAAiBF,EAAWE,eACjChH,EAAKiH,gBAAkBH,EAAWG,gBAClCjH,EAAKkH,YAAcJ,EAAWI,YAC9BlH,EAAKmH,aAAeL,EAAWK,aAC/BnH,EAAKoH,cAAgBN,EAAWM,cAChCpH,EAAKqH,aAAeP,EAAWO,aAC/BrH,EAAKsH,cAAgBR,EAAWQ,cAChCtH,EAAKuH,SAAWT,EAAWS,SAC3BvH,EAAKwH,KAAOV,EAAWU,KACvBxH,EAAKiF,OAAS6B,EAAW7B,OACzBjF,EAAKkE,MAAQ,GACblE,EAAK2D,QAAU,GACf3D,EAAK4D,UAAYA,EACjB5D,EAAK6G,WAAaC,EAAWnD,QAAQ8D,OAAS,EAE9CX,EAAW5C,MAAMwD,SAAQ,SAAUC,GAC/B3H,EAAKkE,MAAMyD,EAAKrJ,UAAY,EACtBqJ,EAAKrJ,YAAY8B,EAAOwH,YAEtBjB,GACAJ,QAAQC,IAAI,kCACZpG,EAAOqG,gBAAiB,GAGxBrG,EAAOwH,UAAUD,EAAKrJ,UAAY,CAC9BmE,KAAMrC,EAAOwB,SAAS+F,EAAKrJ,UAC3BmF,eAAgB,4EAChBnF,SAAUqJ,EAAKrJ,SACf2G,OAAQ0C,EAAK1C,OACbvB,eAAgB,SAChBmE,mBAAmB,IAM/BzH,EAAO6D,gBAAgBjE,EAAMI,EAAOwH,UAAUD,EAAKrJ,UAAW,KAAMsF,MAGxEkD,EAAWnD,QAAQ+D,SAAQ,SAAUlE,GACjCxD,EAAK2D,QAAQH,EAAOlF,UAAY,EAChC,IAAIwJ,EAAa,GACjB,GAAItE,EAAOlF,YAAY8B,EAAOwH,UAC1BE,EAAa1H,EAAOwH,UAAUpE,EAAOlF,cAClC,CAEH,GAAIqI,EAGA,OAFAJ,QAAQC,IAAI,uCACZpG,EAAOqG,gBAAiB,GAGxBqB,EAAa1H,EAAOwH,UAAUpE,EAAOlF,UAAY,CAC7CmE,KAAMrC,EAAOwB,SAAS4B,EAAOlF,UAC7BA,SAAUkF,EAAOlF,SACjBoF,eAAgB,SAChBmE,mBAAmB,GAK/BC,EAAWC,YAAcvE,EAAOuE,YAChCD,EAAWE,gBAAkBxE,EAAOwE,gBACpCF,EAAWG,YAAczE,EAAOyE,YAChCH,EAAWI,eAAiB1E,EAAO0E,eACnCJ,EAAWK,aAAe3E,EAAO2E,aACjCL,EAAWlE,UAAYA,EAEnBkE,EAAWD,mBACXC,EAAWrE,eAAiB,mDACxBD,EAAO4E,YACPN,EAAWrE,gBAAkB,OAASD,EAAO4E,YAE1C5E,EAAO4E,UACdN,EAAWrE,eAAiBD,EAAO4E,iBAE5BN,EAAWrE,eAGlBqE,EAAWrE,iBACXqE,EAAWrE,eAAiBhD,EAAK4H,YAAYP,EAAWrE,iBAG5DqE,EAAW/D,QAAU+D,EAAW/D,SAAW,IACO,IAA9C+D,EAAW/D,QAAQZ,QAAQnD,EAAK+D,UAChC+D,EAAW/D,QAAQC,KAAKhE,EAAK+D,SAGjC,IAAI6B,EAASpC,EAAOoC,OAGhBgB,IACAhB,EAAS,CAAC,gBAAiB,KAAM,MAAO,qBAAsB,qBAC1D,cAAe,qBAAsB,gBAAiB,WAAW0C,KAAKC,MAAsB,EAAhBD,KAAKE,YAIzFpI,EAAO6D,gBAAgBjE,EAAMI,EAAOwH,UAAUpE,EAAOlF,UAAWsH,EAAQhC,SAE7E6E,OAAM,WACL,OAAO,MAInBrI,EAAO8C,SAAW,WAWd,OATA9C,EAAOsI,MAAQ,GACftI,EAAO8F,MAAQ,GACf9F,EAAO2F,UAAY,GACnB3F,EAAOmC,MAAQ,GACfnC,EAAOoC,aAAe,KACtBpC,EAAOuI,SAAW,GAElBvI,EAAOW,WAAU,GAEVD,EAAwB8H,aAC1BtH,SAAQ,SAAUpD,GACfkC,EAAOyI,SAAW3K,EAAKuJ,OAAS,EAChCrH,EAAO8F,MAAQ,GACf9F,EAAO2F,UAAY,GACnB3F,EAAOuI,SAAW,GAElB,MAAM/E,EAAYC,KAAKC,MAEvB1D,EAAOwH,UAAY1J,EAAK4K,QAAO,SAAUhG,EAAQ9C,GAU7C,MATkB,WAAdA,EAAK+I,MAAmC,WAAd/I,EAAK+I,OAC/BjG,EAAO9C,EAAKiD,KAAO,CACfR,KAAMrC,EAAOwB,SAAS5B,EAAKiD,KAC3BhD,MAAOD,EAAKC,MACZ3B,SAAU0B,EAAKiD,IACfS,eAAgB1D,EAAK+I,KACrBnF,UAAWA,IAGZd,IACR,IAEH,IAAIkG,EAAa,EAEjB,MAAMC,EAAcC,OAAOC,KAAK/I,EAAOwH,WAAW9C,QAAO,SAAUe,GAC/D,MAAgD,WAAzCzF,EAAOwH,UAAU/B,GAAKnC,kBAC9B0F,MAAK,SAAUC,EAAIC,GAClB,OAAID,EAAKC,GACG,EACDD,EAAKC,EACL,EAGJ,KACRC,KAAI,SAAU1D,GACb,MAAM7F,EAAOI,EAAOwH,UAAU/B,GAK9B,OAHA7F,EAAK+D,QAAUiF,EACf5I,EAAOuI,SAAS3E,KAAKhE,GACrBgJ,IACO5I,EAAOsG,iBAAiB1G,EAAM4D,MAGzC,OAAOvD,EAAGmJ,IAAIP,GAAahH,SAAQ,WAC/B7B,EAAOsI,MAAQe,EAAEC,OACbR,OAAOC,KAAK/I,EAAOwH,WAAW2B,KAAI,SAAU1D,GACxC,OAAOzF,EAAOwH,UAAU/B,MAE5B,CAAC,SAGLzF,EAAOuJ,SAEPvJ,EAAOW,WAAU,SAIxBgB,OAAM,SAAU7D,GACbkC,EAAOyI,UAAW,EAClBvI,EAAOyB,MAAMC,SAAS9D,GAAO,uBAC7BkC,EAAOW,WAAU,MAEpBkB,SAAQ,WACL7B,EAAOqG,gBAAiB,MAIpCrG,EAAOwJ,yBAA2B,SAAUhG,GACxC,OAAO9C,EAAwB8H,aAC1BtH,SAAQ,SAAUpD,GACf,MAAM2L,EAAe3L,EAAK4K,QAAO,SAAUhG,EAAQ9C,GAO/C,MANkB,WAAdA,EAAK+I,MAAmC,WAAd/I,EAAK+I,OAC/BjG,EAAO9C,EAAKiD,KAAO,CACf3E,SAAU0B,EAAKiD,IACfS,eAAgB1D,EAAK+I,OAGtBjG,IACR,IAEH,IAAK,IAAIgH,EAAI,EAAGA,EAAI1J,EAAOsI,MAAMjB,OAAQqC,IAAK,CAC1C,MAAM9J,EAAOI,EAAOsI,MAAMoB,GAC1B,GAAI9J,EAAK1B,YAAYuL,EACZ7J,EAAK6H,oBAEN7H,EAAK4D,UAAYA,SACViG,EAAa7J,EAAK1B,gBAE1B,IAAK0B,EAAK6H,kBAIb,OAFAtB,QAAQC,IAAI,iCACZpG,EAAOqG,gBAAiB,GACjB,EAIXyC,OAAOC,KAAKU,GAAcpC,OAAS,IAEnClB,QAAQC,IAAI,+BACZpG,EAAOqG,gBAAiB,MAG/B1E,OAAM,SAAU7D,GACboC,EAAOyB,MAAMC,SAAS9D,GAAO,2BAIzCkC,EAAO2J,sBAAwB,SAAUC,GAErC5J,EAAO6J,UAAW,EAElB,MAAMrG,EAAYC,KAAKC,MAEjBoG,EAAgB,WAClB,IAAK9J,EAAOqG,eAER,IAAK,IAAIqD,EAAI,EAAGA,EAAI1J,EAAO8F,MAAMuB,OAAQqC,IAAK,CAC1C,MAAMhE,EAAO1F,EAAO8F,MAAM4D,GACtBhE,EAAgB,YAAMlC,IACtB2C,QAAQC,IAAI,qCAIZpG,EAAOyE,WAAWiB,GAAM,IAKhC1F,EAAOqG,gBAEPF,QAAQC,IAAI,qBACZpG,EAAO8C,YACA9C,EAAO+F,gBAEdI,QAAQC,IAAI,kCACZpG,EAAO+J,YAGP/J,EAAOgK,iBAEPhK,EAAOiK,eAEPjK,EAAOgG,iBAEPhG,EAAO6J,UAAW,IAI1B,GAAID,EACA5J,EAAOwJ,yBAAyBhG,GAAWb,MAAK,WAC5C,GAAK3C,EAAOqG,eAURyD,QAVwB,CACxB,MAAMI,EAAW,GACjB,IAAK,IAAIR,EAAI,EAAGA,EAAI1J,EAAOsI,MAAMjB,OAAQqC,IAAK,CAC1C,MAAM9J,EAAOI,EAAOsI,MAAMoB,GACE,WAAxB9J,EAAK0D,gBACL4G,EAAStG,KAAK5D,EAAOsG,iBAAiB1G,EAAM4D,GAAW,IAG/DvD,EAAGmJ,IAAIc,GAAUrI,QAAQiI,WAK9B,CACH,MAAMI,EAAW,GACjB,IAAK,IAAIR,EAAI,EAAGA,EAAI1J,EAAOsI,MAAMjB,OAAQqC,IAAK,CAC1C,MAAM9J,EAAOI,EAAOsI,MAAMoB,GACE,WAAxB9J,EAAK0D,gBACL4G,EAAStG,KAAK5D,EAAOsG,iBAAiB1G,EAAM4D,GAAW,IAG/DvD,EAAGmJ,IAAIc,GAAUrI,QAAQiI,KAIjC9J,EAAO8C,WAEP9C,EAAOmK,QAAU,SAAU/C,GACvBpH,EAAOyB,iBAAkB,EACzBzB,EAAOoB,mBAAmBpB,EAAOoC,aAAc,OAAQgF,IAG3DpH,EAAOoK,YAAc,SAAUjD,GAC3BnH,EAAOyB,iBAAkB,EACzBzB,EAAOoC,aAAa+E,SAAWA,EAC/BnH,EAAOoB,mBAAmBpB,EAAOoC,aAAc,WAAY+E,IAG/D,IAAIkD,EAAe,EACnB,MAAMC,EAAQ/J,GAAU,WAEfP,EAAOyB,iBAAoBzB,EAAO6J,WACnCQ,IAEArK,EAAO2J,sBAAsBU,EAAe,GAAM,MAEvD,KAEHrK,EAAOuK,IAAI,YAAY,WACnBhK,EAAUO,OAAOwJ,MAGrBtK,EAAOyB,iBAAkB,EACzBzB,EAAO6J,UAAW,EAGlB,MAAMW,EAAInN,QAAQoN,QAAQnK,GACpBoK,EAAS,WACX1K,EAAO0K,UAEXF,EAAEG,KAAK,SAAUD,GACjB1K,EAAOuK,IAAI,YAAY,WACnBC,EAAEI,OAAO,SAAUF,MAIvB1K,EAAOuK,IAAI,oBAAoB,WAC3BvK,EAAO0K,YAMf,SAASG,EAAoB7K,EAAQ8K,EAAmB3I,GAEpDnC,EAAOmC,MAAQ9E,QAAQ0N,KAAK5I,GAC5BnC,EAAOgL,GAAK,WACR,MAAMC,EAAO,IAAIC,OAAO,oBACxBlL,EAAOmL,mBAAqBF,EAAKG,KAAKpL,EAAOmC,MAAMtD,cAC9CmB,EAAOmL,mBACRL,EAAkBO,MAAMrL,EAAOmC,QAIvCnC,EAAOc,OAAS,WACZgK,EAAkBQ,QAAQ,WA1vBlCjO,QACKC,OAAO,kDATI,CACZ,eACA,+CACA,8CACA,yCACA,WAKCkF,WAAW,wBAAyBzC,GACpCyC,WAAW,sBAAuBqI,GASvC9K,EAAsBtC,QAAU,CAAC,SAAU,QAAS,KAAM,SAAU,gBAAiB,YAAa,OAC9F,UAAW,YAAa,eAAgB,WAAY,qBAAsB,2BA+tB9EoN,EAAoBpN,QAAU,CAAC,SAAU,oBAAqB","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
|