graphdb-workbench 2.3.0-TR6 → 2.3.0-TR7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/{0.15196c70676b993db356.bundle.js → 0.48f0a08c129cab95f345.bundle.js} +3 -3
  2. package/dist/0.48f0a08c129cab95f345.bundle.js.map +1 -0
  3. package/dist/108.112426f55d9e34a78ab3.bundle.js +2 -0
  4. package/dist/108.112426f55d9e34a78ab3.bundle.js.map +1 -0
  5. package/dist/{11.e3c940aa59365084050b.bundle.js → 11.4928d8d13ff46f3872bb.bundle.js} +2 -2
  6. package/dist/11.4928d8d13ff46f3872bb.bundle.js.map +1 -0
  7. package/dist/129.c42b901c27e8de081b82.bundle.js +2 -0
  8. package/dist/129.c42b901c27e8de081b82.bundle.js.map +1 -0
  9. package/dist/148.45985ae23de642595544.bundle.js +1 -1
  10. package/dist/148.45985ae23de642595544.bundle.js.map +1 -1
  11. package/dist/20.4eb25ede434dc329ecf1.bundle.js +1 -1
  12. package/dist/20.4eb25ede434dc329ecf1.bundle.js.map +1 -1
  13. package/dist/{21.dd1a8782fa1bea210dc2.bundle.js → 21.62777310f384dd7b71a4.bundle.js} +2 -2
  14. package/dist/21.62777310f384dd7b71a4.bundle.js.map +1 -0
  15. package/dist/{25.c2d2c79cbb29e36a4cce.bundle.js → 25.dad934ee482c9b825245.bundle.js} +2 -2
  16. package/dist/25.dad934ee482c9b825245.bundle.js.map +1 -0
  17. package/dist/27.fef157d9275358c9f1a0.bundle.js +1 -1
  18. package/dist/27.fef157d9275358c9f1a0.bundle.js.map +1 -1
  19. package/dist/{3.d06a0ca122c78522c911.bundle.js → 3.d4e2ee6def5774b8b495.bundle.js} +2 -2
  20. package/dist/3.d4e2ee6def5774b8b495.bundle.js.map +1 -0
  21. package/dist/33.fde8076c81c87c25c367.bundle.js +1 -1
  22. package/dist/33.fde8076c81c87c25c367.bundle.js.map +1 -1
  23. package/dist/{39.0eebc4b972cff879c1c9.bundle.js → 39.ecdfa8a15c661473c246.bundle.js} +2 -2
  24. package/dist/39.ecdfa8a15c661473c246.bundle.js.map +1 -0
  25. package/dist/40.10f42e3f6d8d87bd3221.bundle.js +1 -1
  26. package/dist/40.10f42e3f6d8d87bd3221.bundle.js.map +1 -1
  27. package/dist/62.eff529f903ab72e57c23.bundle.js +2 -0
  28. package/dist/62.eff529f903ab72e57c23.bundle.js.map +1 -0
  29. package/dist/94.94158487a9024ff3a623.bundle.js +1 -1
  30. package/dist/94.94158487a9024ff3a623.bundle.js.map +1 -1
  31. package/dist/{bundle.00cc9035be8b524d4240.bundle.js → bundle.896281e5e7a26024597b.bundle.js} +3 -3
  32. package/dist/bundle.896281e5e7a26024597b.bundle.js.map +1 -0
  33. package/dist/css/yasr.custom.css +9 -7
  34. package/dist/i18n/locale-en.json +2 -1
  35. package/dist/i18n/locale-fr.json +2 -1
  36. package/dist/index.html +4 -4
  37. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  38. package/dist/{main.59e407d8a8b46a1a9bad.css → main.c29920c7f6f6ecb00cae.css} +1 -1
  39. package/dist/pages/autocomplete.html +1 -1
  40. package/dist/pages/choose-repository-type.html +1 -1
  41. package/dist/pages/cluster-management/clusterInfo.html +3 -3
  42. package/dist/pages/create-index.html +4 -4
  43. package/dist/pages/dependencies.html +1 -1
  44. package/dist/pages/domainRangeInfo.html +2 -2
  45. package/dist/pages/edit.html +1 -1
  46. package/dist/pages/explore.html +1 -1
  47. package/dist/pages/export.html +1 -1
  48. package/dist/pages/find.html +1 -1
  49. package/dist/pages/graph-config/saveGraphConfig.html +11 -11
  50. package/dist/pages/graphs-visualizations.html +7 -7
  51. package/dist/pages/guides.html +1 -1
  52. package/dist/pages/import.html +1 -1
  53. package/dist/pages/jdbc-create.html +5 -5
  54. package/dist/pages/monitor/queries.html +1 -1
  55. package/dist/pages/monitor/resources.html +2 -2
  56. package/dist/pages/namespaces.html +2 -2
  57. package/dist/pages/plugins.html +1 -1
  58. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  59. package/dist/pages/rdfrank.html +2 -2
  60. package/dist/pages/repositories.html +2 -2
  61. package/dist/pages/repository.html +2 -2
  62. package/dist/pages/similarity-indexes.html +1 -1
  63. package/dist/pages/sparql-template-create.html +5 -5
  64. package/dist/pages/sparql.html +3 -3
  65. package/dist/pages/webapi.html +2 -2
  66. package/dist/plugins.js +2 -1
  67. package/dist/res/swagger/index.html +27 -27
  68. package/package.json +1 -1
  69. package/dist/0.15196c70676b993db356.bundle.js.map +0 -1
  70. package/dist/108.d415d719be3fc3a428f4.bundle.js +0 -2
  71. package/dist/108.d415d719be3fc3a428f4.bundle.js.map +0 -1
  72. package/dist/11.e3c940aa59365084050b.bundle.js.map +0 -1
  73. package/dist/129.02e23389a50348366a13.bundle.js +0 -2
  74. package/dist/129.02e23389a50348366a13.bundle.js.map +0 -1
  75. package/dist/21.dd1a8782fa1bea210dc2.bundle.js.map +0 -1
  76. package/dist/25.c2d2c79cbb29e36a4cce.bundle.js.map +0 -1
  77. package/dist/3.d06a0ca122c78522c911.bundle.js.map +0 -1
  78. package/dist/39.0eebc4b972cff879c1c9.bundle.js.map +0 -1
  79. package/dist/62.35e111a570b5e038fdea.bundle.js +0 -2
  80. package/dist/62.35e111a570b5e038fdea.bundle.js.map +0 -1
  81. package/dist/bundle.00cc9035be8b524d4240.bundle.js.map +0 -1
@@ -1,2 +1,2 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[21,53,107,108,124],{100:function(e,r){function o(e,r,o,t){return{restrict:"E",scope:!0,templateUrl:"js/angular/repositories/templates/fedx-repo.html",link:function(i){const s="ResolvableRepository";i.fedxMembers=[],i.knownRepos=[],i.allAttachedRepos=[],i.editRepoPage&&(i.fedxMembers=i.repositoryInfo.params.member.value.slice());function n(){for(const e of i.fedxMembers)i.knownRepos=i.knownRepos.filter((function(r){return e.repositoryServer?r.id!==e.repositoryName||r.location!==e.repositoryServer:r.id!==e.repositoryName||!r.local}))}function a(){r.getRepositories(i.repositoryInfo.location).success((function(e){let r=[];_.values(e).forEach(e=>{r.push.apply(r,e)}),i.allAttachedRepos=_.cloneDeep(r)})).error((function(e){const r=getError(e);o.error(r,t.instant("common.error"))})).then((function(){i.knownRepos=i.allAttachedRepos.slice(),n()}))}i.setWritableRepo=function(e){let r=i.fedxMembers.find(e=>"true"===e.writable);r&&((r.store!==s||e.store===s&&r.repositoryName===e.repositoryName)&&("RemoteRepository"!==r.store||"RemoteRepository"===e.store&&r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)||(r.writable="false")),e.writable=JSON.stringify("false"===e.writable)},i.getActiveClass=function(e){return"true"===e.writable?" active":""},i.checkIfRepoExist=function(e){return!i.allAttachedRepos.length||(e.store===s?i.allAttachedRepos.find(r=>r.id===e.repositoryName&&!r.location):"RemoteRepository"!==e.store||i.allAttachedRepos.find(r=>r.id===e.repositoryName&&r.location===e.repositoryServer))},i.getRepositoryServer=function(e){return e.local?"Local":e.location};const c=setInterval((function(){a()}),5e3);function l(e){i.fedxMembers.push(e),i.repositoryInfo.params.member.value=i.fedxMembers}function p(e){return"/"===e.slice(-1)?e.slice(0,-1):e}function d(){return i.editRepoPage&&!i.editRepoPage||!i.model.editMode}i.$on("$destroy",(function(){clearInterval(c)})),i.addMember=function(e){let r;r="Local"===i.getRepositoryServer(e)?{store:s,repositoryName:e.id,repoType:e.type,respectRights:"true",writable:"false"}:{store:"RemoteRepository",repositoryName:e.id,repositoryServer:e.location,username:"",password:"",supportsASKQueries:"true",writable:"false"},i.knownRepos=i.knownRepos.filter(r=>r.id!==e.id||r.location!==e.location),l(r)},i.removeMember=function(e){e.store&&e.store===s?(i.fedxMembers=i.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName&&!r.repositoryServer),a()):e.store&&"SPARQLEndpoint"===e.store?i.fedxMembers=i.fedxMembers.filter(r=>r.endpoint!==e.endpoint):e.store&&"NativeStore"===e.store?i.fedxMembers=i.fedxMembers.filter(r=>r.repositoryLocation!==e.repositoryLocation):e.store&&"RemoteRepository"===e.store&&(i.fedxMembers=i.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer),a()),i.repositoryInfo.params.member.value=i.fedxMembers},i.addRemoteMember=function(){i.mode="remote",i.model={editMode:!1,store:"RemoteRepository",repositoryName:"",repositoryServer:"",sparqlEndpoint:"",username:"",password:"",supportsASKQueries:"true",writable:"false"},i.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:i})},i.getMemberIcon=function(e){return e.repoType?"icon-repo-"+e.repoType:"NativeStore"===e.store?"icon-warning":"icon-link"},i.editFedXRepository=function(r){r.store===s?(i.mode="local",i.model={editMode:!0,store:r.store,respectRights:r.respectRights,repositoryName:r.repositoryName,repoType:r.repoType,writable:r.writable}):(i.mode="remote",i.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}),i.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:i})},i.resolveName=function(e){switch(e.store){case s:return e.repositoryName;case"RemoteRepository":return e.repositoryName+"@"+e.repositoryServer;case"SPARQLEndpoint":return e.endpoint;case"NativeStore":return e.repositoryLocation;default:return""}},i.cancel=function(){i.$uibModalInstance.dismiss("cancel")},i.ok=function(){let e;if(i.model.repositoryName&&i.model.store===s)e={store:s,repositoryName:i.model.repositoryName,repoType:i.model.repoType,respectRights:i.model.respectRights,writable:i.model.writable},i.fedxMembers=i.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.store!==e.store);else if(i.model.repositoryName&&"RemoteRepository"===i.model.store){if(e={store:"RemoteRepository",repositoryName:i.model.repositoryName,repositoryServer:p(i.model.repositoryServer),username:i.model.username,password:i.model.password,writable:i.model.writable},d()&&i.fedxMembers.find(r=>r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)){let r=i.resolveName(e);return o.error(t.instant("fedx.repo.already.added.member.error",{name:r})),void i.$uibModalInstance.close()}i.fedxMembers=i.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer)}else{if(e={store:"SPARQLEndpoint",endpoint:p(i.model.sparqlEndpoint),username:i.model.username,password:i.model.password,supportsASKQueries:i.model.supportsASKQueries,writable:i.model.writable},d()&&i.fedxMembers.find(r=>r.endpoint===e.endpoint)){let r=i.resolveName(e);return o.error(t.instant("fedx.repo.already.added.sparql.endpoint.error",{name:r})),void i.$uibModalInstance.close()}i.fedxMembers=i.fedxMembers.filter(r=>r.endpoint!==e.endpoint)}l(e),n(),i.$uibModalInstance.close()},i.$on("changedLocation",(function(){i.fedxMembers=[],a()})),a()}}}angular.module("graphdb.framework.repositories.fedx-repo.directive",[]).directive("fedxRepo",o),o.$inject=["$uibModal","RepositoriesRestService","toastr","$translate"]},101:function(e,r,o){"use strict";o.r(r);o(4),o(11),o(8),o(65),o(21),o(12),o(35),o(36);function t(e){e.interceptors.push("$unauthorizedInterceptor")}function i(e,r,o){e.$on("$locationChangeStart",(function(){o.isLicenseHardcoded&&"/license/register"===r.url()&&r.path("license")}))}angular.module("graphdb.framework.settings",["toastr","ui.bootstrap","graphdb.framework.rest.license.service","graphdb.framework.settings.controllers","graphdb.framework.core.interceptors.unauthorized","graphdb.framework.core.services.jwtauth"]).config(t).run(i),t.$inject=["$httpProvider","$routeProvider"],i.$inject=["$rootScope","$location","$licenseService"]},151:function(e,r,o){"use strict";o.r(r);o(4),o(11),o(16),o(66),o(99),o(100),o(10),o(101),o(35),o(36);angular.module("graphdb.framework.repositories",["ui.bootstrap","toastr","ngCookies","ngRoute","graphdb.framework.repositories.controllers","graphdb.framework.repositories.ontop-repo.directive","graphdb.framework.repositories.fedx-repo.directive","graphdb.framework.core.services.repositories","graphdb.framework.core.directives","graphdb.framework.core.controllers","graphdb.framework.settings"])},65:function(e,r,o){"use strict";o.r(r);o(4),o(12);function t(e,r,o,t,i){e.supportsStatistics=!0,e.settings={statistics:!1},e.getSettings=function(){e.loader=!0,t.getStatistics().then((function(r){e.settings.statistics="true"===r.data,e.supportsStatistics=!0}),(function(o){if(404===o.status)e.supportsStatistics=!1;else{const e=getError(o.data);r.error(e,i.instant("error.getting.settings"))}}))},e.getSettings(),e.setSettings=function(){e.loader=!0,t.toggleStatistics(e.settings.statistics).then((function(){o.close(),r.success(i.instant("saving.settings.success"))}),(function(e){const o=getError(e.data);r.error(o,i.instant("saving.settings.error"))}))},e.submitForm=function(){e.setSettings()},e.cancel=function(){o.dismiss("cancel")}}function i(e,r,o,t,i,s,n){e.loadingLicense=function(){return o.loadingLicense},o.checkLicenseStatus(),e.revertToFree=function(){s.openSimpleModal({title:n.instant("confirm.operation"),message:n.instant("revert.to.free.warning.msg"),warning:!0}).result.then((function(){r.unregisterLicense().success((function(){o.checkLicenseStatus()}))}))}}function s(e,r,o,t,i,s,n,a){e.$on("securityInit",(function(){n.isAdmin()||o.path("/license")})),e.sendLicenseToValidateAndActivate=l;const c=$(".license-textarea");function l(e){r.sendLicenseToValidate(e).success((function(o){"Invalid"!==o.licensee?(c.val(e),function(e,o){t.open({templateUrl:"js/angular/settings/modal/validate-license.html",controller:"ValidateLicenseModalCtrl",size:"lg",resolve:{license:function(){return e}}}).result.then((function(){!function(e){e||(e=c.val());if(e){const o=atob(e.replace(/\s/g,""));r.registerLicense(o).success((function(){s.history.back()})).error((function(){i.error(a.instant("license.register.error"))}))}else i.error(a.instant("no.license.code.error"))}(o)}))}(o,e)):(c.val(""),i.error(o.message))})).error((function(){i.error(a.instant("invalid.license"))}))}e.$watch("currentFile",(function(){if(e.currentFile){const o=e.currentFile;r.extractFromLicenseFile(o).success((function(e){l(e)})).error((function(){i.error(a.instant("could.not.upload.file.error"))}))}})),e.getBackToPreviousPage=function(){s.history.back()}}function n(e,r,o){e.ok=function(){r.close()},e.cancel=function(){r.dismiss("cancel")},e.license=o}function a(e){e.loader=!0,e.setLoader=function(r){e.loader=r}}angular.module("graphdb.framework.settings.controllers",["ngCookies","ui.bootstrap","graphdb.framework.core.services.jwtauth","toastr"]).controller("ActiveLocationSettingsCtrl",t).controller("ValidateLicenseModalCtrl",n).controller("LicenseCtrl",i).controller("RegisterLicenseCtrl",s).controller("LoaderSamplesCtrl",a),t.$inject=["$scope","toastr","$uibModalInstance","LicenseRestService","$translate"],i.$inject=["$scope","LicenseRestService","$licenseService","toastr","$rootScope","ModalService","$translate"],s.$inject=["$scope","LicenseRestService","$location","$uibModal","toastr","$window","$jwtAuth","$translate"],n.$inject=["$scope","$uibModalInstance","license"],a.$inject=["$scope"]},99:function(e,r,o){"use strict";o.r(r);var t=o(66);function i(e,r,o,i,s){return{restrict:"E",scope:!1,templateUrl:"js/angular/repositories/templates/ontop-repo.html",link:function(n){n.ontopProperiesLink="https://ontop-vkg.org/guide/advanced/configuration.html",n.selectedDriver={driverType:"generic",driverName:"Generic JDBC Driver",jdbc:{hostName:"",port:"",databaseName:"",userName:"",password:"",driverClass:"",url:""},urlTemplate:"",downloadDriverUrl:""},n.ontopRepoFileNames={},n.supportedDriversData=[],n.ontopRepoFileLabels={propertiesFile:"JDBC properties",obdaFile:"OBDA or R2RML",owlFile:"ontology file",constraintFile:"constraint file",dbMetadataFile:"DB metadata file"},n.ontopRepoFiles=Object.keys(n.ontopRepoFileLabels),n.ontopRepoFiles.forEach((function(e){n.repositoryInfo.params[e]&&(n.ontopRepoFileNames[e]=Object(t.getFileName)(n.repositoryInfo.params[e].value))})),n.supportedDriverLabels={hostName:"Hostname",port:"Port",databaseName:"Database name",userName:"Username",password:"Password",driverClass:"Driver class",url:"URL"},n.propertiesFileParams=Object.keys(n.supportedDriverLabels),n.classAvailable=!1,n.genericDriverType="generic",n.propertiesFile="propertiesFile";const a=[n.propertiesFile,"obdaFile"],c=["hostName","databaseName","userName"];function l(){return n.selectedDriver.driverType!==n.genericDriverType?c.filter((function(e){return!n.selectedDriver.jdbc[e]})).length>0&&(o.error(s.instant("missing.required.field.error")),1)?Promise.reject(s.instant("missing.required.field.error")):(n.uploadFileLoader=!0,r.updatePropertiesFile(n.repositoryInfo.params[n.propertiesFile].value,n.selectedDriver.jdbc,n.repositoryInfo.location).success((function(e){n.ontopRepoFileNames[n.propertiesFile]=Object(t.getFileName)(e.fileLocation),n.repositoryInfo.params[n.propertiesFile].value=e.fileLocation,n.uploadFileLoader=!1})).error((function(e){p(s.instant("common.error"),e),n.uploadFileLoader=!1}))):Promise.resolve()}function p(e,r){const t=getError(r);o.error(t,e)}n.loadDriverByClass=function(e){const r=n.supportedDriversData.find(r=>r.driverClass===e);return r&&n.copyDriverProperties(r),r},n.selectDriverByType=function(e){n.copyDriverProperties(n.supportedDriversData.find(r=>r.driverType===e)),n.concatURL("hostName",n)},n.copyDriverProperties=function(e){n.selectedDriver.driverType=e.driverType,n.selectedDriver.jdbc.driverClass=e.driverClass,n.selectedDriver.jdbc.url=e.urlTemplate,n.selectedDriver.urlTemplate=e.urlTemplate,n.selectedDriver.downloadDriverUrl=e.downloadDriverUrl,n.selectedDriver.portRequired=e.portRequired,n.classAvailable=e.classAvailable},n.isReadOnly=function(e){return"driverClass"===e||"url"===e},n.editFile=function(o){e.open({templateUrl:"js/angular/templates/modal/editRepoFile.html",controller:"EditRepositoryFileCtrl",resolve:{file:function(){return n.repositoryInfo.params[o]?n.repositoryInfo.params[o].value:""}}}).result.then((function(e){r.updateRepositoryFileContent(e.fileLocation,e.content,n.repositoryInfo.location).success((function(e){n.ontopRepoFileNames[o]=Object(t.getFileName)(e.fileLocation),n.repositoryInfo.params[o].value=e.fileLocation})).error((function(e){p(s.instant("common.error"),e)}))}))},n.uploadOntopRepoFile=function(e,r){e&&e.length&&(n.uploadFile=e[0],n.uploadFileLoader=!0,i.upload({url:"rest/repositories/file/upload",data:{file:n.uploadFile,location:n.repositoryInfo.location}}).success((function(e){e.success?(n.ontopRepoFileNames[r]=n.uploadFile.name,n.repositoryInfo.params[r].value=e.fileLocation):o.error(e.errorMessage),n.uploadFileLoader=!1})).error((function(e){p(s.instant("common.error"),e),n.uploadFile="",n.uploadFileLoader=!1})))},n.concatURL=function(e){if("hostName"===e||"port"===e||"databaseName"===e){let e=n.selectedDriver.urlTemplate;n.selectedDriver.jdbc.hostName&&(e=n.selectedDriver.jdbc.port?e.replace("{hostport}",`${n.selectedDriver.jdbc.hostName}:${n.selectedDriver.jdbc.port}`):e.replace("{hostport}",n.selectedDriver.jdbc.hostName)),n.selectedDriver.jdbc.databaseName&&(e=e.replace("{database}",n.selectedDriver.jdbc.databaseName)),n.selectedDriver.jdbc.url=e}},n.getInputType=function(e){switch(e){case"password":return"password";case"port":return"number";default:return"text"}},n.checkForRequiredOntopFiles=function(){return l().then((function(){return a.filter((function(e){return!n.repositoryInfo.params[e].value})).length>0?(o.error(s.instant("ontop.repo.missing.required.file.error")),Promise.reject(s.instant("ontop.repo.missing.required.file.error"))):Promise.resolve()}))},n.validateOntopPropertiesConnection=function(){l().then((function(){r.validateOntopPropertiesConnection(n.repositoryInfo).success((function(){o.success(s.instant("ontop.repo.successful.connection.msg"))})).error((function(e){p(s.instant("ontop.repo.failed.to.connect"),e)}))}))},n.isOntopRepoFileUploaded=function(){return n.repositoryInfo.params.propertiesFile&&n.repositoryInfo.params.propertiesFile.value.length>0},n.isRequiredOntopRepoFile=function(e){return a.indexOf(e)>-1},n.isRequiredField=function(e){return c.indexOf(e)>-1||"port"===e&&n.selectedDriver.portRequired},n.getFieldTooltip=function(e){return"port"===e&&n.selectedDriver.portRequired&&(e="portIfRequired"),s.instant("repoTooltips.ontop."+e)},n.editOntopRepo=function(){n.checkForRequiredOntopFiles().then((function(){n.editRepository()})).catch((function(e){}))},n.createOntopRepo=function(){n.repositoryInfo.id?n.checkForRequiredOntopFiles().then((function(){n.createRepo()})).catch((function(e){})):o.error(s.instant("empty.repoid.warning"))},n.goBackToPrevious=function(){n.goBackToPreviousLocation()},r.getSupportedDriversData(n.repositoryInfo).success((function(e){n.supportedDriversData=e})).error((function(e){p(s.instant("common.error"),e)})).then((function(){n.editRepoPage&&r.loadPropertiesFile(n.repositoryInfo.params[n.propertiesFile].value,n.repositoryInfo.location).success((function(e){n.loadDriverByClass(e.driverClass)&&(n.selectedDriver.jdbc.hostName=e.hostName,n.selectedDriver.jdbc.port=parseInt(e.port),n.selectedDriver.jdbc.databaseName=e.databaseName,n.selectedDriver.jdbc.userName=e.userName,n.selectedDriver.jdbc.password=e.password,n.selectedDriver.jdbc.url=e.url)})).error((function(e){p(s.instant("common.error"),e),n.uploadFileLoader=!1}))}))}}}angular.module("graphdb.framework.repositories.ontop-repo.directive",[]).directive("ontopRepo",i),i.$inject=["$uibModal","RepositoriesRestService","toastr","Upload","$translate"]}}]);
2
- //# sourceMappingURL=21.dd1a8782fa1bea210dc2.bundle.js.map
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[21,53,107,108,124],{100:function(e,r){function o(e,r,o,t){return{restrict:"E",scope:!0,templateUrl:"js/angular/repositories/templates/fedx-repo.html",link:function(i){const s="ResolvableRepository";i.fedxMembers=[],i.knownRepos=[],i.allAttachedRepos=[],i.editRepoPage&&(i.fedxMembers=i.repositoryInfo.params.member.value.slice());function n(){for(const e of i.fedxMembers)i.knownRepos=i.knownRepos.filter((function(r){return e.repositoryServer?r.id!==e.repositoryName||r.location!==e.repositoryServer:r.id!==e.repositoryName||!r.local}))}function a(){r.getRepositories(i.repositoryInfo.location).success((function(e){let r=[];_.values(e).forEach(e=>{r.push.apply(r,e)}),i.allAttachedRepos=_.cloneDeep(r)})).error((function(e){const r=getError(e);o.error(r,t.instant("common.error"))})).then((function(){i.knownRepos=i.allAttachedRepos.slice(),n()}))}i.setWritableRepo=function(e){let r=i.fedxMembers.find(e=>"true"===e.writable);r&&((r.store!==s||e.store===s&&r.repositoryName===e.repositoryName)&&("RemoteRepository"!==r.store||"RemoteRepository"===e.store&&r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)||(r.writable="false")),e.writable=JSON.stringify("false"===e.writable)},i.getActiveClass=function(e){return"true"===e.writable?" active":""},i.checkIfRepoExist=function(e){return!i.allAttachedRepos.length||(e.store===s?i.allAttachedRepos.find(r=>r.id===e.repositoryName&&!r.location):"RemoteRepository"!==e.store||i.allAttachedRepos.find(r=>r.id===e.repositoryName&&r.location===e.repositoryServer))},i.getRepositoryServer=function(e){return e.local?"Local":e.location};const c=setInterval((function(){a()}),5e3);function l(e){i.fedxMembers.push(e),i.repositoryInfo.params.member.value=i.fedxMembers}function p(e){return"/"===e.slice(-1)?e.slice(0,-1):e}function d(){return i.editRepoPage&&!i.editRepoPage||!i.model.editMode}i.$on("$destroy",(function(){clearInterval(c)})),i.addMember=function(e){let r;r="Local"===i.getRepositoryServer(e)?{store:s,repositoryName:e.id,repoType:e.type,respectRights:"true",writable:"false"}:{store:"RemoteRepository",repositoryName:e.id,repositoryServer:e.location,username:"",password:"",supportsASKQueries:"true",writable:"false"},i.knownRepos=i.knownRepos.filter(r=>r.id!==e.id||r.location!==e.location),l(r)},i.removeMember=function(e){e.store&&e.store===s?(i.fedxMembers=i.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName&&!r.repositoryServer),a()):e.store&&"SPARQLEndpoint"===e.store?i.fedxMembers=i.fedxMembers.filter(r=>r.endpoint!==e.endpoint):e.store&&"NativeStore"===e.store?i.fedxMembers=i.fedxMembers.filter(r=>r.repositoryLocation!==e.repositoryLocation):e.store&&"RemoteRepository"===e.store&&(i.fedxMembers=i.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer),a()),i.repositoryInfo.params.member.value=i.fedxMembers},i.addRemoteMember=function(){i.mode="remote",i.model={editMode:!1,store:"RemoteRepository",repositoryName:"",repositoryServer:"",sparqlEndpoint:"",username:"",password:"",supportsASKQueries:"true",writable:"false"},i.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:i})},i.getMemberIcon=function(e){return e.repoType?"icon-repo-"+e.repoType:"NativeStore"===e.store?"icon-warning":"icon-link"},i.editFedXRepository=function(r){r.store===s?(i.mode="local",i.model={editMode:!0,store:r.store,respectRights:r.respectRights,repositoryName:r.repositoryName,repoType:r.repoType,writable:r.writable}):(i.mode="remote",i.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}),i.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:i})},i.resolveName=function(e){switch(e.store){case s:return e.repositoryName;case"RemoteRepository":return e.repositoryName+"@"+e.repositoryServer;case"SPARQLEndpoint":return e.endpoint;case"NativeStore":return e.repositoryLocation;default:return""}},i.cancel=function(){i.$uibModalInstance.dismiss("cancel")},i.ok=function(){let e;if(i.model.repositoryName&&i.model.store===s)e={store:s,repositoryName:i.model.repositoryName,repoType:i.model.repoType,respectRights:i.model.respectRights,writable:i.model.writable},i.fedxMembers=i.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.store!==e.store);else if(i.model.repositoryName&&"RemoteRepository"===i.model.store){if(e={store:"RemoteRepository",repositoryName:i.model.repositoryName,repositoryServer:p(i.model.repositoryServer),username:i.model.username,password:i.model.password,writable:i.model.writable},d()&&i.fedxMembers.find(r=>r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)){let r=i.resolveName(e);return o.error(t.instant("fedx.repo.already.added.member.error",{name:r})),void i.$uibModalInstance.close()}i.fedxMembers=i.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer)}else{if(e={store:"SPARQLEndpoint",endpoint:p(i.model.sparqlEndpoint),username:i.model.username,password:i.model.password,supportsASKQueries:i.model.supportsASKQueries,writable:i.model.writable},d()&&i.fedxMembers.find(r=>r.endpoint===e.endpoint)){let r=i.resolveName(e);return o.error(t.instant("fedx.repo.already.added.sparql.endpoint.error",{name:r})),void i.$uibModalInstance.close()}i.fedxMembers=i.fedxMembers.filter(r=>r.endpoint!==e.endpoint)}l(e),n(),i.$uibModalInstance.close()},i.$on("changedLocation",(function(){i.fedxMembers=[],a()})),a()}}}angular.module("graphdb.framework.repositories.fedx-repo.directive",[]).directive("fedxRepo",o),o.$inject=["$uibModal","RepositoriesRestService","toastr","$translate"]},101:function(e,r,o){"use strict";o.r(r);o(4),o(11),o(8),o(65),o(21),o(12),o(35),o(36);function t(e){e.interceptors.push("$unauthorizedInterceptor")}function i(e,r,o){e.$on("$locationChangeStart",(function(){o.isLicenseHardcoded&&"/license/register"===r.url()&&r.path("license")}))}angular.module("graphdb.framework.settings",["toastr","ui.bootstrap","graphdb.framework.rest.license.service","graphdb.framework.settings.controllers","graphdb.framework.core.interceptors.unauthorized","graphdb.framework.core.services.jwtauth"]).config(t).run(i),t.$inject=["$httpProvider","$routeProvider"],i.$inject=["$rootScope","$location","$licenseService"]},151:function(e,r,o){"use strict";o.r(r);o(4),o(11),o(16),o(66),o(99),o(100),o(10),o(101),o(35),o(36);angular.module("graphdb.framework.repositories",["ui.bootstrap","toastr","ngCookies","ngRoute","graphdb.framework.repositories.controllers","graphdb.framework.repositories.ontop-repo.directive","graphdb.framework.repositories.fedx-repo.directive","graphdb.framework.core.services.repositories","graphdb.framework.core.directives","graphdb.framework.core.controllers","graphdb.framework.settings"])},65:function(e,r,o){"use strict";o.r(r);o(4),o(12);function t(e,r,o,t,i){e.supportsStatistics=!0,e.settings={statistics:!1},e.getSettings=function(){e.loader=!0,t.getStatistics().then((function(r){e.settings.statistics="true"===r.data,e.supportsStatistics=!0}),(function(o){if(404===o.status)e.supportsStatistics=!1;else{const e=getError(o.data);r.error(e,i.instant("error.getting.settings"))}}))},e.getSettings(),e.setSettings=function(){e.loader=!0,t.toggleStatistics(e.settings.statistics).then((function(){o.close(),r.success(i.instant("saving.settings.success"))}),(function(e){const o=getError(e.data);r.error(o,i.instant("saving.settings.error"))}))},e.submitForm=function(){e.setSettings()},e.cancel=function(){o.dismiss("cancel")}}function i(e,r,o,t,i,s,n){e.loadingLicense=function(){return o.loadingLicense},o.checkLicenseStatus(),e.revertToFree=function(){s.openSimpleModal({title:n.instant("confirm.operation"),message:n.instant("revert.to.free.warning.msg"),warning:!0}).result.then((function(){r.unregisterLicense().success((function(){o.checkLicenseStatus()}))}))}}function s(e,r,o,t,i,s,n,a){e.$on("securityInit",(function(){n.isAdmin()||o.path("/license")})),e.sendLicenseToValidateAndActivate=l;const c=$(".license-textarea");function l(e){r.sendLicenseToValidate(e).success((function(o){"Invalid"!==o.licensee?(c.val(e),function(e,o){t.open({templateUrl:"js/angular/settings/modal/validate-license.html",controller:"ValidateLicenseModalCtrl",size:"lg",resolve:{license:function(){return e}}}).result.then((function(){!function(e){e||(e=c.val());if(e){const o=atob(e.replace(/\s/g,""));r.registerLicense(o).success((function(){s.history.back()})).error((function(){i.error(a.instant("license.register.error"))}))}else i.error(a.instant("no.license.code.error"))}(o)}))}(o,e)):(c.val(""),i.error(o.message))})).error((function(){i.error(a.instant("invalid.license"))}))}e.$watch("currentFile",(function(){if(e.currentFile){const o=e.currentFile;r.extractFromLicenseFile(o).success((function(e){l(e)})).error((function(){i.error(a.instant("could.not.upload.file.error"))}))}})),e.getBackToPreviousPage=function(){s.history.back()}}function n(e,r,o){e.ok=function(){r.close()},e.cancel=function(){r.dismiss("cancel")},e.license=o}function a(e){e.loader=!0,e.setLoader=function(r){e.loader=r}}angular.module("graphdb.framework.settings.controllers",["ngCookies","ui.bootstrap","graphdb.framework.core.services.jwtauth","toastr"]).controller("ActiveLocationSettingsCtrl",t).controller("ValidateLicenseModalCtrl",n).controller("LicenseCtrl",i).controller("RegisterLicenseCtrl",s).controller("LoaderSamplesCtrl",a),t.$inject=["$scope","toastr","$uibModalInstance","LicenseRestService","$translate"],i.$inject=["$scope","LicenseRestService","$licenseService","toastr","$rootScope","ModalService","$translate"],s.$inject=["$scope","LicenseRestService","$location","$uibModal","toastr","$window","$jwtAuth","$translate"],n.$inject=["$scope","$uibModalInstance","license"],a.$inject=["$scope"]},99:function(e,r,o){"use strict";o.r(r);var t=o(66);function i(e,r,o,i,s){return{restrict:"E",scope:!1,templateUrl:"js/angular/repositories/templates/ontop-repo.html",link:function(n){n.ontopProperiesLink="https://ontop-vkg.org/guide/advanced/configuration.html",n.selectedDriver={driverType:"generic",driverName:"Generic JDBC Driver",jdbc:{hostName:"",port:"",databaseName:"",userName:"",password:"",driverClass:"",url:""},urlTemplate:"",downloadDriverUrl:""},n.ontopRepoFileNames={},n.supportedDriversData=[],n.ontopRepoFileLabels={propertiesFile:"JDBC properties",obdaFile:"OBDA or R2RML",owlFile:"ontology file",constraintFile:"constraint file",lensesFile:"lenses file",dbMetadataFile:"DB metadata file"},n.ontopRepoFiles=Object.keys(n.ontopRepoFileLabels),n.ontopRepoFiles.forEach((function(e){n.repositoryInfo.params[e]&&(n.ontopRepoFileNames[e]=Object(t.getFileName)(n.repositoryInfo.params[e].value))})),n.supportedDriverLabels={hostName:"Hostname",port:"Port",databaseName:"Database name",userName:"Username",password:"Password",driverClass:"Driver class",url:"URL"},n.propertiesFileParams=Object.keys(n.supportedDriverLabels),n.classAvailable=!1,n.genericDriverType="generic",n.propertiesFile="propertiesFile";const a=[n.propertiesFile,"obdaFile"],c=["hostName","databaseName","userName"];function l(){return n.selectedDriver.driverType!==n.genericDriverType?c.filter((function(e){return!n.selectedDriver.jdbc[e]})).length>0&&(o.error(s.instant("missing.required.field.error")),1)?Promise.reject(s.instant("missing.required.field.error")):(n.uploadFileLoader=!0,r.updatePropertiesFile(n.repositoryInfo.params[n.propertiesFile].value,n.selectedDriver.jdbc,n.repositoryInfo.location).success((function(e){n.ontopRepoFileNames[n.propertiesFile]=Object(t.getFileName)(e.fileLocation),n.repositoryInfo.params[n.propertiesFile].value=e.fileLocation,n.uploadFileLoader=!1})).error((function(e){p(s.instant("common.error"),e),n.uploadFileLoader=!1}))):Promise.resolve()}function p(e,r){const t=getError(r);o.error(t,e)}n.loadDriverByClass=function(e){const r=n.supportedDriversData.find(r=>r.driverClass===e);return r&&n.copyDriverProperties(r),r},n.selectDriverByType=function(e){n.constructCustomFiledForDriver(e),n.copyDriverProperties(n.supportedDriversData.find(r=>r.driverType===e)),n.concatURL("hostName",n)},n.constructCustomFiledForDriver=function(e){switch(n.supportedDriverLabels.databaseName="Database name",n.supportedDriverLabels.hostName="Hostname",e){case"snowflake":n.supportedDriverLabels.hostName="Account identifier",n.supportedDriverLabels.databaseName="Warehouse";break;case"databricks":n.supportedDriverLabels.databaseName="HttpPath";break;case"dremio":n.supportedDriverLabels.databaseName="Schema"}},n.copyDriverProperties=function(e){n.selectedDriver.driverType=e.driverType,n.selectedDriver.jdbc.driverClass=e.driverClass,n.selectedDriver.jdbc.url=e.urlTemplate,n.selectedDriver.urlTemplate=e.urlTemplate,n.selectedDriver.downloadDriverUrl=e.downloadDriverUrl,n.selectedDriver.portRequired=e.portRequired,n.classAvailable=e.classAvailable},n.isReadOnly=function(e){return"driverClass"===e||"url"===e},n.editFile=function(o){e.open({templateUrl:"js/angular/templates/modal/editRepoFile.html",controller:"EditRepositoryFileCtrl",resolve:{file:function(){return n.repositoryInfo.params[o]?n.repositoryInfo.params[o].value:""}}}).result.then((function(e){r.updateRepositoryFileContent(e.fileLocation,e.content,n.repositoryInfo.location).success((function(e){n.ontopRepoFileNames[o]=Object(t.getFileName)(e.fileLocation),n.repositoryInfo.params[o].value=e.fileLocation})).error((function(e){p(s.instant("common.error"),e)}))}))},n.uploadOntopRepoFile=function(e,r){e&&e.length&&(n.uploadFile=e[0],n.uploadFileLoader=!0,i.upload({url:"rest/repositories/file/upload",data:{file:n.uploadFile,location:n.repositoryInfo.location}}).success((function(e){e.success?(n.ontopRepoFileNames[r]=n.uploadFile.name,n.repositoryInfo.params[r].value=e.fileLocation):o.error(e.errorMessage),n.uploadFileLoader=!1})).error((function(e){p(s.instant("common.error"),e),n.uploadFile="",n.uploadFileLoader=!1})))},n.concatURL=function(e){if("hostName"===e||"port"===e||"databaseName"===e){let e=n.selectedDriver.urlTemplate;n.selectedDriver.jdbc.hostName&&(e=n.selectedDriver.jdbc.port?e.replace("{hostport}",`${n.selectedDriver.jdbc.hostName}:${n.selectedDriver.jdbc.port}`):e.replace("{hostport}",n.selectedDriver.jdbc.hostName)),n.selectedDriver.jdbc.databaseName&&(e=e.replace("{database}",n.selectedDriver.jdbc.databaseName)),n.selectedDriver.jdbc.url=e}},n.getInputType=function(e){switch(e){case"password":return"password";case"port":return"number";default:return"text"}},n.checkForRequiredOntopFiles=function(){return l().then((function(){return a.filter((function(e){return!n.repositoryInfo.params[e].value})).length>0?(o.error(s.instant("ontop.repo.missing.required.file.error")),Promise.reject(s.instant("ontop.repo.missing.required.file.error"))):Promise.resolve()}))},n.validateOntopPropertiesConnection=function(){l().then((function(){r.validateOntopPropertiesConnection(n.repositoryInfo).success((function(){o.success(s.instant("ontop.repo.successful.connection.msg"))})).error((function(e){p(s.instant("ontop.repo.failed.to.connect"),e)}))}))},n.isOntopRepoFileUploaded=function(){return n.repositoryInfo.params.propertiesFile&&n.repositoryInfo.params.propertiesFile.value.length>0},n.isRequiredOntopRepoFile=function(e){return a.indexOf(e)>-1},n.isRequiredField=function(e){return c.indexOf(e)>-1||"port"===e&&n.selectedDriver.portRequired},n.getFieldTooltip=function(e){return"port"===e&&n.selectedDriver.portRequired&&(e="portIfRequired"),s.instant("repoTooltips.ontop."+e)},n.editOntopRepo=function(){n.checkForRequiredOntopFiles().then((function(){n.editRepository()})).catch((function(e){}))},n.createOntopRepo=function(){n.repositoryInfo.id?n.checkForRequiredOntopFiles().then((function(){n.createRepo()})).catch((function(e){})):o.error(s.instant("empty.repoid.warning"))},n.goBackToPrevious=function(){n.goBackToPreviousLocation()},r.getSupportedDriversData(n.repositoryInfo).success((function(e){n.supportedDriversData=e})).error((function(e){p(s.instant("common.error"),e)})).then((function(){n.editRepoPage&&r.loadPropertiesFile(n.repositoryInfo.params[n.propertiesFile].value,n.repositoryInfo.location).success((function(e){n.loadDriverByClass(e.driverClass)&&(n.selectedDriver.jdbc.hostName=e.hostName,n.selectedDriver.jdbc.port=parseInt(e.port),n.selectedDriver.jdbc.databaseName=e.databaseName,n.selectedDriver.jdbc.userName=e.userName,n.selectedDriver.jdbc.password=e.password,n.selectedDriver.jdbc.url=e.url)})).error((function(e){p(s.instant("common.error"),e),n.uploadFileLoader=!1}))}))}}}angular.module("graphdb.framework.repositories.ontop-repo.directive",[]).directive("ontopRepo",i),i.$inject=["$uibModal","RepositoriesRestService","toastr","Upload","$translate"]}}]);
2
+ //# sourceMappingURL=21.62777310f384dd7b71a4.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/js/angular/repositories/fedx-repo.directive.js","webpack:///./src/js/angular/settings/app.js","webpack:///./src/js/angular/repositories/app.js","webpack:///./src/js/angular/settings/controllers.js","webpack:///./src/js/angular/repositories/ontop-repo.directive.js"],"names":["fedxRepoDirective","$uibModal","RepositoriesRestService","toastr","$translate","restrict","scope","templateUrl","link","$scope","LOCAL_REPO_STORE","fedxMembers","knownRepos","allAttachedRepos","editRepoPage","repositoryInfo","params","member","value","slice","populateKnownRepos","filter","repo","repositoryServer","id","repositoryName","location","local","getKnownRepos","getRepositories","success","response","repos","_","values","forEach","push","apply","cloneDeep","error","msg","getError","instant","then","setWritableRepo","currentWritable","find","writable","store","JSON","stringify","getActiveClass","checkIfRepoExist","length","getRepositoryServer","localReposTimer","setInterval","updateMembers","removeEndingSlash","url","checkEditMode","model","editMode","$on","clearInterval","addMember","repository","repoType","type","respectRights","username","password","supportsASKQueries","removeMember","el","endpoint","repositoryLocation","addRemoteMember","mode","sparqlEndpoint","$uibModalInstance","open","getMemberIcon","editFedXRepository","resolveName","cancel","dismiss","ok","resolvedName","name","close","angular","module","directive","$inject","config","$httpProvider","interceptors","run","$rootScope","$location","$licenseService","isLicenseHardcoded","path","ActiveLocationSettingsCtrl","LicenseRestService","supportsStatistics","settings","statistics","getSettings","loader","getStatistics","data","status","setSettings","toggleStatistics","submitForm","LicenseCtrl","ModalService","loadingLicense","checkLicenseStatus","revertToFree","openSimpleModal","title","message","warning","result","unregisterLicense","RegisterLicenseCtrl","$window","$jwtAuth","isAdmin","sendLicenseToValidateAndActivate","textAreaSel","$","licenseCode","sendLicenseToValidate","validatedLicense","licensee","val","license","controller","size","resolve","decodedLicense","atob","replace","registerLicense","history","back","confirmWantedNewLicenseDetails","$watch","currentFile","file","extractFromLicenseFile","getBackToPreviousPage","ValidateLicenseModalCtrl","LoaderSamplesCtrl","setLoader","ontopRepoDirective","Upload","ontopProperiesLink","selectedDriver","driverType","driverName","jdbc","hostName","port","databaseName","userName","driverClass","urlTemplate","downloadDriverUrl","ontopRepoFileNames","supportedDriversData","ontopRepoFileLabels","propertiesFile","obdaFile","owlFile","constraintFile","lensesFile","dbMetadataFile","ontopRepoFiles","Object","keys","key","supportedDriverLabels","propertiesFileParams","classAvailable","genericDriverType","REQUIRED_ONTOP_REPO_PARAMS","REQUIRED_PROPERTIES_FIELD_PARAMS","updateProperties","requiredField","Promise","reject","uploadFileLoader","updatePropertiesFile","fileLocation","showErrorMsg","loadDriverByClass","foundDriver","driver","copyDriverProperties","selectDriverByType","constructCustomFiledForDriver","concatURL","portRequired","isReadOnly","labelName","editFile","updateRepositoryFileContent","content","uploadOntopRepoFile","files","param","uploadFile","upload","errorMessage","getInputType","checkForRequiredOntopFiles","requiredFile","validateOntopPropertiesConnection","isOntopRepoFileUploaded","isRequiredOntopRepoFile","indexOf","isRequiredField","field","getFieldTooltip","editOntopRepo","editRepository","catch","err","createOntopRepo","createRepo","goBackToPrevious","goBackToPreviousLocation","getSupportedDriversData","loadPropertiesFile","driverData","parseInt"],"mappings":"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","file":"21.62777310f384dd7b71a4.bundle.js","sourcesContent":["angular\n .module('graphdb.framework.repositories.fedx-repo.directive', [])\n .directive('fedxRepo', fedxRepoDirective);\n\nfedxRepoDirective.$inject = ['$uibModal', 'RepositoriesRestService', 'toastr', '$translate'];\n\nfunction fedxRepoDirective($uibModal, RepositoriesRestService, toastr, $translate) {\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'js/angular/repositories/templates/fedx-repo.html',\n\n link: linkFunc\n };\n\n function linkFunc($scope) {\n\n const LOCAL_REPO_STORE = 'ResolvableRepository';\n const REMOTE_REPO_STORE = 'RemoteRepository';\n const SPARQL_ENDPOINT_STORE = 'SPARQLEndpoint';\n const NATIVE_STORE = 'NativeStore';\n\n $scope.fedxMembers = [];\n $scope.knownRepos = [];\n $scope.allAttachedRepos = [];\n\n if ($scope.editRepoPage) {\n $scope.fedxMembers = $scope.repositoryInfo.params.member.value.slice();\n }\n\n function getRepositories() {\n return RepositoriesRestService.getRepositories($scope.repositoryInfo.location)\n .success(function (response) {\n let repos = [];\n _.values(response).forEach((value) => {\n repos.push.apply(repos, value);\n });\n $scope.allAttachedRepos = _.cloneDeep(repos);\n }).error(function (response) {\n const msg = getError(response);\n toastr.error(msg, $translate.instant('common.error'));\n });\n }\n\n function populateKnownRepos() {\n for (const member of $scope.fedxMembers) {\n $scope.knownRepos = $scope.knownRepos.filter(function (repo) {\n if (member.repositoryServer) {\n // if the member is a remote attached member\n return repo.id !== member.repositoryName || repo.location !== member.repositoryServer;\n } else {\n // if the member is a local one\n return repo.id !== member.repositoryName || !repo.local;\n }\n });\n }\n }\n\n $scope.setWritableRepo = function (member) {\n let currentWritable = getWritableRepo();\n if (currentWritable) {\n if (currentWritable.store === LOCAL_REPO_STORE && (member.store !== LOCAL_REPO_STORE || currentWritable.repositoryName !== member.repositoryName) ) {\n currentWritable.writable = 'false';\n } else if (currentWritable.store === REMOTE_REPO_STORE && (member.store !== REMOTE_REPO_STORE || currentWritable.repositoryName !== member.repositoryName || currentWritable.repositoryServer !== member.repositoryServer)) {\n currentWritable.writable = 'false';\n }\n }\n member.writable = JSON.stringify(member.writable === 'false');\n }\n\n $scope.getActiveClass = function (member) {\n return member.writable === 'true' ? ' active' : '';\n }\n\n function getWritableRepo() {\n return $scope.fedxMembers.find(member => member.writable === \"true\");\n }\n\n function getKnownRepos() {\n getRepositories()\n .then(function () {\n $scope.knownRepos = $scope.allAttachedRepos.slice();\n populateKnownRepos();\n });\n }\n\n $scope.checkIfRepoExist = function (member) {\n if (!$scope.allAttachedRepos.length) {\n return true;\n }\n if (member.store === LOCAL_REPO_STORE) {\n return $scope.allAttachedRepos.find(repo => repo.id === member.repositoryName && !repo.location);\n } else if (member.store === REMOTE_REPO_STORE) {\n return $scope.allAttachedRepos.find(repo => repo.id === member.repositoryName && repo.location === member.repositoryServer);\n } else {\n return true;\n }\n }\n\n $scope.getRepositoryServer = function (repo) {\n if (repo.local) {\n return \"Local\";\n } else {\n return repo.location;\n }\n }\n\n const localReposTimer = setInterval(function () {\n getKnownRepos();\n }, 5000);\n\n $scope.$on('$destroy', function () {\n clearInterval(localReposTimer);\n });\n\n $scope.addMember = function(repository) {\n let member;\n if ($scope.getRepositoryServer(repository) === \"Local\") {\n member = {\n store: LOCAL_REPO_STORE,\n repositoryName: repository.id,\n repoType: repository.type,\n respectRights: \"true\",\n writable: \"false\"\n };\n } else {\n member = {\n store: REMOTE_REPO_STORE,\n repositoryName: repository.id,\n repositoryServer: repository.location,\n username: '',\n password: '',\n supportsASKQueries: \"true\",\n writable: \"false\"\n };\n }\n $scope.knownRepos = $scope.knownRepos.filter(repo => repo.id !== repository.id || repo.location !== repository.location);\n updateMembers(member);\n }\n\n $scope.removeMember = function (member) {\n if (member.store && member.store === LOCAL_REPO_STORE) {\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.store !== member.store || el.repositoryName !== member.repositoryName && !el.repositoryServer);\n getKnownRepos();\n } else if (member.store && member.store === SPARQL_ENDPOINT_STORE) {\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.endpoint !== member.endpoint);\n } else if (member.store && member.store === NATIVE_STORE) {\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.repositoryLocation !== member.repositoryLocation);\n } else if (member.store && member.store === REMOTE_REPO_STORE) {\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.store !== member.store || el.repositoryName !== member.repositoryName\n || el.repositoryServer !== member.repositoryServer);\n getKnownRepos();\n }\n $scope.repositoryInfo.params['member'].value = $scope.fedxMembers;\n }\n\n $scope.addRemoteMember = function () {\n $scope.mode = 'remote';\n $scope.model = {\n editMode: false,\n store: REMOTE_REPO_STORE,\n repositoryName: '',\n repositoryServer: '',\n sparqlEndpoint: '',\n username: '',\n password: '',\n supportsASKQueries: \"true\",\n writable: \"false\"\n }\n\n $scope.$uibModalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/add-fedx-remote-repo.html',\n scope: $scope,\n });\n };\n\n $scope.getMemberIcon = function (member) {\n if (member.repoType) {\n return 'icon-repo-' + member.repoType;\n } else if (member.store === NATIVE_STORE) {\n return 'icon-warning';\n } else {\n return 'icon-link';\n }\n }\n\n $scope.editFedXRepository = function (member) {\n if (member.store === LOCAL_REPO_STORE) {\n $scope.mode = 'local';\n $scope.model = {\n editMode: true,\n store: member.store,\n respectRights: member.respectRights,\n repositoryName: member.repositoryName,\n repoType: member.repoType,\n writable: member.writable\n }\n } else {\n $scope.mode = 'remote';\n $scope.model = {\n editMode: true,\n store: member.store,\n repositoryName: member.repositoryName,\n repositoryServer: member.repositoryServer,\n sparqlEndpoint: member.store === SPARQL_ENDPOINT_STORE ? member.endpoint : member.repositoryLocation,\n username: member.username,\n password: member.password,\n supportsASKQueries: member.supportsASKQueries,\n writable: member.writable\n }\n }\n\n $scope.$uibModalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/add-fedx-remote-repo.html',\n scope: $scope\n });\n };\n\n $scope.resolveName = function (member) {\n switch (member.store) {\n case LOCAL_REPO_STORE : {\n return member.repositoryName;\n }\n case REMOTE_REPO_STORE : {\n return member.repositoryName + '@' + member.repositoryServer;\n }\n case SPARQL_ENDPOINT_STORE : {\n return member.endpoint;\n }\n case NATIVE_STORE : {\n return member.repositoryLocation;\n }\n default :\n return \"\";\n }\n }\n\n $scope.cancel = function () {\n $scope.$uibModalInstance.dismiss('cancel');\n };\n\n function updateMembers(member) {\n $scope.fedxMembers.push(member);\n $scope.repositoryInfo.params['member'].value = $scope.fedxMembers;\n }\n\n function removeEndingSlash(url) {\n return url.slice(-1) === '/' ? url.slice(0, -1) : url\n }\n\n function checkEditMode() {\n return $scope.editRepoPage && !$scope.editRepoPage || !$scope.model.editMode;\n }\n\n $scope.ok = function () {\n let member;\n if ($scope.model.repositoryName && $scope.model.store === LOCAL_REPO_STORE) {\n member = {\n store: LOCAL_REPO_STORE,\n repositoryName: $scope.model.repositoryName,\n repoType: $scope.model.repoType,\n respectRights: $scope.model.respectRights,\n writable: $scope.model.writable\n }\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.repositoryName !== member.repositoryName || el.store !== member.store );\n } else if ($scope.model.repositoryName && $scope.model.store === REMOTE_REPO_STORE) {\n member = {\n store: REMOTE_REPO_STORE,\n repositoryName: $scope.model.repositoryName,\n repositoryServer: removeEndingSlash($scope.model.repositoryServer),\n username: $scope.model.username,\n password: $scope.model.password,\n writable: $scope.model.writable\n };\n if (checkEditMode() && $scope.fedxMembers.find(el => el.repositoryName === member.repositoryName\n && el.repositoryServer === member.repositoryServer)) {\n let resolvedName = $scope.resolveName(member);\n toastr.error($translate.instant('fedx.repo.already.added.member.error', {name: resolvedName}));\n $scope.$uibModalInstance.close();\n return;\n }\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.repositoryName !== member.repositoryName\n || el.repositoryServer !== member.repositoryServer);\n } else {\n member = {\n store: SPARQL_ENDPOINT_STORE,\n endpoint: removeEndingSlash($scope.model.sparqlEndpoint),\n username: $scope.model.username,\n password: $scope.model.password,\n supportsASKQueries: $scope.model.supportsASKQueries,\n writable: $scope.model.writable\n };\n\n if (checkEditMode() && $scope.fedxMembers.find(el => el.endpoint === member.endpoint)) {\n let resolvedName = $scope.resolveName(member);\n toastr.error($translate.instant('fedx.repo.already.added.sparql.endpoint.error', {name: resolvedName}));\n $scope.$uibModalInstance.close();\n return;\n }\n\n $scope.fedxMembers = $scope.fedxMembers.filter(el => el.endpoint !== member.endpoint);\n }\n\n updateMembers(member);\n populateKnownRepos();\n $scope.$uibModalInstance.close();\n };\n\n $scope.$on('changedLocation', function () {\n $scope.fedxMembers = [];\n getKnownRepos();\n });\n\n getKnownRepos();\n }\n}\n","import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/rest/license.rest.service';\nimport 'angular/settings/controllers';\nimport 'angular/core/interceptors/unauthorized.interceptor';\nimport 'angular/core/services/jwt-auth.service';\nimport 'ng-file-upload/dist/ng-file-upload.min';\nimport 'ng-file-upload/dist/ng-file-upload-shim.min';\n\nangular.module('graphdb.framework.settings', [\n 'toastr',\n 'ui.bootstrap',\n 'graphdb.framework.rest.license.service',\n 'graphdb.framework.settings.controllers',\n 'graphdb.framework.core.interceptors.unauthorized',\n 'graphdb.framework.core.services.jwtauth'\n])\n .config(config)\n .run(run);\n\nconfig.$inject = ['$httpProvider', '$routeProvider'];\n\nfunction config($httpProvider) {\n $httpProvider.interceptors.push('$unauthorizedInterceptor');\n}\n\nrun.$inject = ['$rootScope', '$location', '$licenseService'];\n\nfunction run($rootScope, $location, $licenseService) {\n $rootScope.$on('$locationChangeStart', function () {\n if ($licenseService.isLicenseHardcoded && $location.url() === '/license/register') {\n $location.path('license');\n }\n });\n}\n","import 'angular/core/services';\nimport 'angular/core/directives';\nimport 'angular/core/controllers';\nimport 'angular/repositories/controllers';\nimport 'angular/repositories/ontop-repo.directive';\nimport 'angular/repositories/fedx-repo.directive';\nimport 'angular/core/services/repositories.service';\nimport 'angular/settings/app';\nimport 'ng-file-upload/dist/ng-file-upload.min';\nimport 'ng-file-upload/dist/ng-file-upload-shim.min';\n\nconst modules = [\n 'ui.bootstrap',\n 'toastr',\n 'ngCookies',\n 'ngRoute',\n 'graphdb.framework.repositories.controllers',\n 'graphdb.framework.repositories.ontop-repo.directive',\n 'graphdb.framework.repositories.fedx-repo.directive',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.core.directives',\n 'graphdb.framework.core.controllers',\n 'graphdb.framework.settings'\n];\n\nangular.module('graphdb.framework.repositories', modules);\n","import 'angular/core/services';\nimport 'angular/core/services/jwt-auth.service';\n\nangular\n .module('graphdb.framework.settings.controllers', [\n 'ngCookies',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.jwtauth',\n 'toastr'\n ])\n .controller('ActiveLocationSettingsCtrl', ActiveLocationSettingsCtrl)\n .controller('ValidateLicenseModalCtrl', ValidateLicenseModalCtrl)\n .controller('LicenseCtrl', LicenseCtrl)\n .controller('RegisterLicenseCtrl', RegisterLicenseCtrl)\n .controller('LoaderSamplesCtrl', LoaderSamplesCtrl);\n\nActiveLocationSettingsCtrl.$inject = ['$scope', 'toastr', '$uibModalInstance', 'LicenseRestService', '$translate'];\n\nfunction ActiveLocationSettingsCtrl($scope, toastr, $uibModalInstance, LicenseRestService, $translate) {\n $scope.supportsStatistics = true;\n $scope.settings = {statistics: false};\n $scope.getSettings = getSettings;\n\n function getSettings() {\n $scope.loader = true;\n LicenseRestService.getStatistics().then(function (response) {\n $scope.settings.statistics = response.data === 'true';\n $scope.supportsStatistics = true;\n }, function (response) {\n if (response.status === 404) {\n $scope.supportsStatistics = false;\n } else {\n const msg = getError(response.data);\n toastr.error(msg, $translate.instant('error.getting.settings'));\n }\n });\n }\n\n $scope.getSettings();\n\n $scope.setSettings = function () {\n $scope.loader = true;\n LicenseRestService.toggleStatistics($scope.settings.statistics).then(function () {\n $uibModalInstance.close();\n toastr.success($translate.instant('saving.settings.success'));\n }, function (response) {\n const msg = getError(response.data);\n toastr.error(msg, $translate.instant('saving.settings.error'));\n });\n };\n\n $scope.submitForm = function () {\n $scope.setSettings();\n };\n\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nLicenseCtrl.$inject = ['$scope', 'LicenseRestService', '$licenseService', 'toastr', '$rootScope', 'ModalService', '$translate'];\n\nfunction LicenseCtrl($scope, LicenseRestService, $licenseService, toastr, $rootScope, ModalService, $translate) {\n\n $scope.loadingLicense = function() {\n return $licenseService.loadingLicense;\n };\n\n $licenseService.checkLicenseStatus();\n\n $scope.revertToFree = function () {\n ModalService.openSimpleModal({\n title: $translate.instant('confirm.operation'),\n message: $translate.instant(\"revert.to.free.warning.msg\"),\n warning: true\n }).result\n .then(function () {\n LicenseRestService.unregisterLicense()\n .success(function () {\n $licenseService.checkLicenseStatus();\n });\n });\n };\n}\n\nRegisterLicenseCtrl.$inject = ['$scope', 'LicenseRestService', '$location', '$uibModal', 'toastr', '$window', '$jwtAuth', '$translate'];\n\nfunction RegisterLicenseCtrl($scope, LicenseRestService, $location, $uibModal, toastr, $window, $jwtAuth, $translate) {\n $scope.$on('securityInit', function () {\n if (!$jwtAuth.isAdmin()) {\n $location.path('/license');\n }\n });\n\n $scope.sendLicenseToValidateAndActivate = sendLicenseToValidateAndActivate;\n\n const textAreaSel = $('.license-textarea');\n\n // watch for uploaded license file\n $scope.$watch('currentFile', function () {\n if ($scope.currentFile) {\n const file = $scope.currentFile;\n LicenseRestService.extractFromLicenseFile(file)\n .success(function (licenseCode) {\n sendLicenseToValidateAndActivate(licenseCode);\n }).error(function () {\n toastr.error($translate.instant('could.not.upload.file.error'));\n });\n }\n });\n\n $scope.getBackToPreviousPage = function () {\n $window.history.back();\n };\n\n // send license code for validation and activation\n function sendLicenseToValidateAndActivate(licenseCode) {\n LicenseRestService.sendLicenseToValidate(licenseCode)\n .success(function (validatedLicense) {\n if (validatedLicense.licensee !== 'Invalid') {\n // write code to textarea\n textAreaSel.val(licenseCode);\n // pop dialog for license details confirmation\n confirmWantedNewLicenseDetails(validatedLicense, licenseCode);\n } else {\n // clear textarea on invalid license\n textAreaSel.val('');\n // show error\n toastr.error(validatedLicense.message);\n }\n })\n .error(function () {\n toastr.error($translate.instant('invalid.license'));\n });\n }\n\n\n // pops a modal dialog which asks you if your expected license details are correct\n // and sends license to GraphDB upon confirmation\n function confirmWantedNewLicenseDetails(license, licenseCode) {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/settings/modal/validate-license.html',\n controller: 'ValidateLicenseModalCtrl',\n size: 'lg',\n resolve: {\n license: function () {\n return license;\n }\n }\n });\n\n modalInstance.result.then(function () {\n registerLicense(licenseCode);\n });\n }\n\n // send license code to GraphDB for activation\n function registerLicense(licenseCode) {\n if (!licenseCode) {\n licenseCode = textAreaSel.val();\n }\n\n if (licenseCode) {\n // replacing whitespace makes this work on Safari too,\n // whereas other browser happily ignore the whitespace\n const decodedLicense = atob(licenseCode.replace(/\\s/g, ''));\n LicenseRestService.registerLicense(decodedLicense)\n .success(function () {\n $window.history.back();\n }).error(function () {\n toastr.error($translate.instant('license.register.error'));\n });\n } else {\n toastr.error($translate.instant('no.license.code.error'));\n }\n }\n}\n\nValidateLicenseModalCtrl.$inject = ['$scope', '$uibModalInstance', 'license'];\n\nfunction ValidateLicenseModalCtrl($scope, $uibModalInstance, license) {\n $scope.ok = ok;\n $scope.cancel = cancel;\n $scope.license = license;\n\n function ok() {\n $uibModalInstance.close();\n }\n\n function cancel() {\n $uibModalInstance.dismiss('cancel');\n }\n}\n\nLoaderSamplesCtrl.$inject = ['$scope'];\n\nfunction LoaderSamplesCtrl($scope) {\n $scope.loader = true;\n $scope.setLoader = function (loader) {\n $scope.loader = loader;\n };\n}\n","import {getFileName} from \"./controllers\";\n\n// A link to Ontop's website with all Ontop configuration keys\nconst ONTOP_PROPERTIES_LINK = 'https://ontop-vkg.org/guide/advanced/configuration.html';\n\nangular\n .module('graphdb.framework.repositories.ontop-repo.directive', [])\n .directive('ontopRepo', ontopRepoDirective);\n\nontopRepoDirective.$inject = ['$uibModal', 'RepositoriesRestService', 'toastr', 'Upload', '$translate'];\n\nfunction ontopRepoDirective($uibModal, RepositoriesRestService, toastr, Upload, $translate) {\n return {\n restrict: 'E',\n scope: false,\n templateUrl: 'js/angular/repositories/templates/ontop-repo.html',\n\n link: linkFunc\n };\n\n function linkFunc($scope) {\n $scope.ontopProperiesLink = ONTOP_PROPERTIES_LINK;\n $scope.selectedDriver = {\n driverType: \"generic\",\n driverName: \"Generic JDBC Driver\",\n jdbc: {\n hostName: \"\",\n port: \"\",\n databaseName: \"\",\n userName: \"\",\n password: \"\",\n driverClass: \"\",\n url: \"\"\n },\n urlTemplate: \"\",\n downloadDriverUrl: \"\"\n };\n $scope.ontopRepoFileNames = {};\n $scope.supportedDriversData = [];\n $scope.ontopRepoFileLabels =\n {propertiesFile: 'JDBC properties', obdaFile: 'OBDA or R2RML', owlFile: 'ontology file',\n constraintFile: 'constraint file', lensesFile: 'lenses file', dbMetadataFile: 'DB metadata file'};\n $scope.ontopRepoFiles = Object.keys($scope.ontopRepoFileLabels);\n $scope.ontopRepoFiles.forEach(function(key) {\n if ($scope.repositoryInfo.params[key]) {\n $scope.ontopRepoFileNames[key] = getFileName($scope.repositoryInfo.params[key].value);\n }\n });\n $scope.supportedDriverLabels = {hostName: 'Hostname', port: \"Port\", databaseName: 'Database name',\n userName: 'Username', password: 'Password', driverClass: 'Driver class', url: 'URL'};\n $scope.propertiesFileParams = Object.keys($scope.supportedDriverLabels);\n $scope.classAvailable = false;\n $scope.genericDriverType = 'generic';\n $scope.propertiesFile = 'propertiesFile';\n\n const REQUIRED_ONTOP_REPO_PARAMS = [$scope.propertiesFile, 'obdaFile'];\n const REQUIRED_PROPERTIES_FIELD_PARAMS = ['hostName', 'databaseName', 'userName'];\n\n function getSupportedDriversData() {\n return RepositoriesRestService.getSupportedDriversData($scope.repositoryInfo)\n .success(function (response) {\n $scope.supportedDriversData = response;\n }).error(function (response) {\n showErrorMsg($translate.instant('common.error'), response);\n });\n }\n\n $scope.loadDriverByClass = function (driverClass) {\n const foundDriver = $scope.supportedDriversData\n .find((driver) => driver.driverClass === driverClass);\n if (foundDriver) {\n $scope.copyDriverProperties(foundDriver);\n }\n return foundDriver;\n };\n\n $scope.selectDriverByType = function (driverType) {\n $scope.constructCustomFiledForDriver(driverType);\n\n $scope.copyDriverProperties($scope.supportedDriversData\n .find((driver) => driver.driverType === driverType));\n // Call concatURL with proper labelName to apply changes to url field\n $scope.concatURL('hostName', $scope);\n };\n\n $scope.constructCustomFiledForDriver = function (driver) {\n $scope.supportedDriverLabels.databaseName = 'Database name';\n $scope.supportedDriverLabels.hostName = 'Hostname';\n switch (driver) {\n case 'snowflake':\n $scope.supportedDriverLabels.hostName = 'Account identifier';\n $scope.supportedDriverLabels.databaseName = 'Warehouse';\n break;\n case 'databricks':\n $scope.supportedDriverLabels.databaseName = 'HttpPath';\n break;\n case 'dremio':\n $scope.supportedDriverLabels.databaseName = 'Schema';\n break;\n }\n };\n\n $scope.copyDriverProperties = function (driver) {\n $scope.selectedDriver.driverType = driver.driverType;\n $scope.selectedDriver.jdbc.driverClass = driver.driverClass;\n $scope.selectedDriver.jdbc.url = driver.urlTemplate;\n $scope.selectedDriver.urlTemplate = driver.urlTemplate;\n $scope.selectedDriver.downloadDriverUrl = driver.downloadDriverUrl;\n $scope.selectedDriver.portRequired = driver.portRequired;\n $scope.classAvailable = driver.classAvailable;\n };\n\n $scope.isReadOnly = function (labelName) {\n return labelName === 'driverClass' || labelName === 'url';\n }\n\n $scope.editFile = function(file) {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/editRepoFile.html',\n controller: 'EditRepositoryFileCtrl',\n resolve: {\n file: function () {\n return $scope.repositoryInfo.params[file] ? $scope.repositoryInfo.params[file].value : '';\n }\n }\n });\n\n modalInstance.result.then(function (data) {\n // send data to backend\n RepositoriesRestService.updateRepositoryFileContent(data.fileLocation, data.content, $scope.repositoryInfo.location).success(function(result) {\n $scope.ontopRepoFileNames[file] = getFileName(result.fileLocation);\n $scope.repositoryInfo.params[file].value = result.fileLocation;\n }).error(function (error) {\n showErrorMsg($translate.instant('common.error'), error);\n })\n });\n }\n\n $scope.uploadOntopRepoFile = function(files, param) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories/file/upload',\n data: {file: $scope.uploadFile, location: $scope.repositoryInfo.location}\n })\n .success(function (data) {\n if (!data.success) {\n toastr.error(data.errorMessage);\n } else {\n $scope.ontopRepoFileNames[param] = $scope.uploadFile.name;\n $scope.repositoryInfo.params[param].value = data.fileLocation;\n }\n $scope.uploadFileLoader = false;\n }).error(function (data) {\n showErrorMsg($translate.instant('common.error'), data);\n $scope.uploadFile = '';\n $scope.uploadFileLoader = false;\n });\n }\n }\n\n $scope.concatURL = function(labelName) {\n if (labelName === 'hostName' || labelName === 'port' || labelName === 'databaseName') {\n let result = $scope.selectedDriver.urlTemplate;\n if ($scope.selectedDriver.jdbc.hostName) {\n if ($scope.selectedDriver.jdbc.port) {\n result = result.replace('{hostport}',\n `${$scope.selectedDriver.jdbc.hostName}:${$scope.selectedDriver.jdbc.port}`);\n } else {\n result = result.replace('{hostport}', $scope.selectedDriver.jdbc.hostName);\n }\n }\n\n if ($scope.selectedDriver.jdbc.databaseName) {\n result = result.replace('{database}', $scope.selectedDriver.jdbc.databaseName);\n }\n\n $scope.selectedDriver.jdbc.url = result;\n }\n }\n\n $scope.getInputType = function (labelName) {\n switch (labelName) {\n case 'password':\n return 'password';\n case 'port':\n return 'number';\n default:\n return 'text';\n }\n }\n\n $scope.checkForRequiredOntopFiles = function () {\n // Should guarantee that code will be executed in sequential manner,\n // because properties file is not created yet\n return updateProperties()\n .then(function () {\n const missingRequired = REQUIRED_ONTOP_REPO_PARAMS.filter(function (requiredFile) {\n return !$scope.repositoryInfo.params[requiredFile].value;\n });\n if (missingRequired.length > 0) {\n toastr.error($translate.instant('ontop.repo.missing.required.file.error'));\n return Promise.reject($translate.instant('ontop.repo.missing.required.file.error'));\n }\n return Promise.resolve();\n });\n }\n\n function loadPropertiesFile() {\n RepositoriesRestService.loadPropertiesFile($scope.repositoryInfo.params[$scope.propertiesFile].value, $scope.repositoryInfo.location)\n .success(function (driverData) {\n const driver = $scope.loadDriverByClass(driverData.driverClass);\n // If driver class is not found means that the selected driver is a GENERIC ONE\n if (driver) {\n $scope.selectedDriver.jdbc.hostName = driverData.hostName;\n $scope.selectedDriver.jdbc.port = parseInt(driverData.port);\n $scope.selectedDriver.jdbc.databaseName = driverData.databaseName;\n $scope.selectedDriver.jdbc.userName = driverData.userName;\n $scope.selectedDriver.jdbc.password = driverData.password;\n $scope.selectedDriver.jdbc.url = driverData.url;\n }\n }).error(function (data) {\n showErrorMsg($translate.instant('common.error'), data);\n $scope.uploadFileLoader = false;\n });\n }\n\n $scope.validateOntopPropertiesConnection = function () {\n updateProperties()\n .then(function () {\n RepositoriesRestService.validateOntopPropertiesConnection($scope.repositoryInfo)\n .success(function () {\n toastr.success($translate.instant('ontop.repo.successful.connection.msg'));\n }).error(function (data) {\n showErrorMsg($translate.instant('ontop.repo.failed.to.connect'), data);\n });\n });\n }\n\n $scope.isOntopRepoFileUploaded = function() {\n return $scope.repositoryInfo.params.propertiesFile &&\n $scope.repositoryInfo.params.propertiesFile.value.length > 0\n };\n\n function missingRequiredField() {\n const missing = REQUIRED_PROPERTIES_FIELD_PARAMS\n .filter(function (requiredField) {\n return !$scope.selectedDriver.jdbc[requiredField]\n });\n if (missing.length > 0) {\n toastr.error($translate.instant('missing.required.field.error'));\n return true;\n }\n return false;\n }\n\n function updateProperties() {\n if ($scope.selectedDriver.driverType !== $scope.genericDriverType) {\n if (missingRequiredField()) {\n return Promise.reject($translate.instant('missing.required.field.error'));\n }\n return updatePropertiesFile();\n }\n return Promise.resolve();\n }\n\n function updatePropertiesFile() {\n $scope.uploadFileLoader = true;\n return RepositoriesRestService\n .updatePropertiesFile($scope.repositoryInfo.params[$scope.propertiesFile].value, $scope.selectedDriver.jdbc, $scope.repositoryInfo.location)\n .success(function (data) {\n $scope.ontopRepoFileNames[$scope.propertiesFile] = getFileName(data.fileLocation);\n $scope.repositoryInfo.params[$scope.propertiesFile].value = data.fileLocation;\n $scope.uploadFileLoader = false;\n }).error(function (data) {\n showErrorMsg($translate.instant('common.error'), data);\n $scope.uploadFileLoader = false;\n });\n }\n\n $scope.isRequiredOntopRepoFile = function(file) {\n return REQUIRED_ONTOP_REPO_PARAMS.indexOf(file) > -1;\n };\n\n $scope.isRequiredField = function (field) {\n return REQUIRED_PROPERTIES_FIELD_PARAMS.indexOf(field) > -1\n || field === 'port' && $scope.selectedDriver.portRequired;\n };\n\n $scope.getFieldTooltip = function (field) {\n if (field === 'port' && $scope.selectedDriver.portRequired) {\n field = 'portIfRequired';\n }\n return $translate.instant('repoTooltips.ontop.' + field);\n };\n\n $scope.editOntopRepo = function () {\n $scope.checkForRequiredOntopFiles()\n .then(function () {\n $scope.editRepository();\n }).catch(function (err) {\n // The catch block is empty, because error is handled in promise\n });\n }\n\n $scope.createOntopRepo = function () {\n if (!$scope.repositoryInfo.id) {\n toastr.error($translate.instant('empty.repoid.warning'));\n return;\n }\n\n $scope.checkForRequiredOntopFiles()\n .then(function () {\n $scope.createRepo();\n }).catch(function (err) {\n // The catch block is empty, because error is handled in promise\n });\n };\n\n $scope.goBackToPrevious = function () {\n $scope.goBackToPreviousLocation();\n }\n\n function showErrorMsg (title, data) {\n const msg = getError(data);\n toastr.error(msg, title);\n }\n\n getSupportedDriversData()\n .then(function () {\n if ($scope.editRepoPage) {\n loadPropertiesFile();\n }\n });\n }\n}\n"],"sourceRoot":""}