graphdb-workbench 2.3.0-TR10 → 2.3.0-TR12
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/108.48d356705148824d9fa5.bundle.js +2 -0
- package/dist/108.48d356705148824d9fa5.bundle.js.map +1 -0
- package/dist/11.a7e4833dee726968779b.bundle.js +1 -1
- package/dist/11.a7e4833dee726968779b.bundle.js.map +1 -1
- package/dist/148.45985ae23de642595544.bundle.js +1 -1
- package/dist/148.45985ae23de642595544.bundle.js.map +1 -1
- package/dist/176.49de8d4af3a5b6a05865.bundle.js +2 -0
- package/dist/{176.d95064b9ddfc85fb2fc7.bundle.js.map → 176.49de8d4af3a5b6a05865.bundle.js.map} +1 -1
- package/dist/20.4eb25ede434dc329ecf1.bundle.js +1 -1
- package/dist/20.4eb25ede434dc329ecf1.bundle.js.map +1 -1
- package/dist/21.45b691e4f5bf3f075855.bundle.js +2 -0
- package/dist/21.45b691e4f5bf3f075855.bundle.js.map +1 -0
- package/dist/27.fef157d9275358c9f1a0.bundle.js +1 -1
- package/dist/27.fef157d9275358c9f1a0.bundle.js.map +1 -1
- package/dist/33.fde8076c81c87c25c367.bundle.js +1 -1
- package/dist/33.fde8076c81c87c25c367.bundle.js.map +1 -1
- package/dist/40.10f42e3f6d8d87bd3221.bundle.js +1 -1
- package/dist/40.10f42e3f6d8d87bd3221.bundle.js.map +1 -1
- package/dist/94.94158487a9024ff3a623.bundle.js +1 -1
- package/dist/94.94158487a9024ff3a623.bundle.js.map +1 -1
- package/dist/{bundle.11da5a2c538b23f407f5.bundle.js → bundle.dacee83de90b0e3091da.bundle.js} +3 -3
- package/dist/{bundle.11da5a2c538b23f407f5.bundle.js.map → bundle.dacee83de90b0e3091da.bundle.js.map} +1 -1
- package/dist/i18n/locale-en.json +2 -1
- package/dist/i18n/locale-fr.json +2 -1
- package/dist/index.html +3 -3
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/security/templates/users.html +5 -4
- package/dist/license-checker.json +2 -2
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +4 -4
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +11 -11
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +1 -1
- package/dist/pages/jdbc-create.html +5 -5
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +2 -2
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +2 -2
- package/dist/pages/repository.html +2 -2
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-template-create.html +5 -5
- package/dist/pages/sparql.html +3 -3
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger/index.html +27 -27
- package/package.json +1 -1
- package/dist/108.8793fd609f0f8dd524c0.bundle.js +0 -2
- package/dist/108.8793fd609f0f8dd524c0.bundle.js.map +0 -1
- package/dist/176.d95064b9ddfc85fb2fc7.bundle.js +0 -2
- package/dist/21.33ba67922a4116081e11.bundle.js +0 -2
- package/dist/21.33ba67922a4116081e11.bundle.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/models/ontop/ontop-file-type.js","webpack:///./src/models/ontop/ontop-connection-information.js","webpack:///./src/models/ontop/ontop-file-info.js","webpack:///./src/models/ontop/ontop-repository-error.js","webpack:///./src/models/ontop/ontop-driver-data.js","webpack:///./src/js/angular/repositories/ontop-repo.directive.js"],"names":["OntopFileType","OntopConnectionInformation","driverType","this","hostName","port","undefined","databaseName","username","password","driverClass","url","urlUserInput","OntopFileInfo","type","required","fileName","loading","OntopRepositoryError","Error","OntopDriverData","classAvailable","downloadDriverUrl","driverName","portRequired","urlTemplate","ontopRepoDirective","$uibModal","RepositoriesRestService","toastr","Upload","$translate","restrict","scope","templateUrl","link","$scope","genericDriverType","defaultUrlTemplate","ontopProperiesLink","ontopFileType","selectedDriver","supportedDriversData","formData","connectionInformation","settings","additionalProperties","ontopFiles","selectDriver","find","driver","updateUrl","getOntopFileInfo","ontopFileInfo","getHostNameLabel","hostNameLabel","instant","getDatabaseNameLabel","dataBaseNameLabelKey","calculateTemplateUrl","isTestConnectionDisabled","testConnection","validateHostName","then","validatePort","validateDatabaseName","validateDriverClass","validateUrl","updatePropertiesFile","validateOntopPropertiesConnection","repositoryInfo","success","catch","error","message","showErrorMsg","editFile","params","label","title","open","controller","windowClass","resolve","file","ontopFile","value","dialogTitle","result","data","updateRepositoryFileContent","fileLocation","content","location","uploadOntopFile","files","length","uploadFile","uploadData","upload","name","errorMessage","finally","updateOntopRepo","createOrUpdate","editRepoPage","editRepository","createRepo","validateRepositoryId","validateOntopFiles","console","log","onKeyDownInUrlInput","event","keyCode","ctrlDown","ctrlKey","metaKey","cursorPosition","target","selectionStart","preventDefault","stopPropagation","onKeyUpInUrlInput","extractExtraUrl","startsWith","substring","replace","setLoading","forEach","jdbc","userName","propertiesFile","msg","getError","Promise","reject","fieldName","id","OBDA","Object","values","push","getSupportedDriversData","response","loadPropertiesFile","driverData","parseInt","angular","module","directive","$inject"],"mappings":"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","file":"108.8793fd609f0f8dd524c0.bundle.js","sourcesContent":["export const OntopFileType = {\n 'OBDA': 'obdaFile',\n 'OWL': 'owlFile',\n 'CONSTRAINT': 'constraintFile',\n 'LENSES': 'lensesFile',\n 'DB_METADATA': 'dbMetadataFile'\n};\n","export class OntopConnectionInformation {\n constructor(driverType = 'generic') {\n this.driverType = driverType;\n this.hostName = '';\n this.port = undefined;\n this.databaseName = '';\n this.username = '';\n this.password = '';\n this.driverClass = '';\n this.url = '';\n this.urlUserInput = '';\n }\n}\n","export class OntopFileInfo {\n\n /**\n * Initializes ontop file info object.\n * @param {string} type - the type of ontop file. It's value have to be one of {@link OntopFileType};\n * @param {boolean} required - true if file is required.\n */\n constructor(type, required = false) {\n this.type = type;\n this.fileName = '';\n this.loading = false;\n this.required = required;\n }\n}\n","export class OntopRepositoryError extends Error {\n}\n","export class OntopDriverData {\n constructor() {\n this.classAvailable = false;\n this.downloadDriverUrl = '';\n this.driverClass = '';\n this.driverName = '';\n this.driverType = '';\n this.portRequired = false;\n this.urlTemplate = '';\n }\n}\n","import {getFileName} from \"./controllers\";\nimport {OntopFileType} from \"../../../models/ontop/ontop-file-type\";\nimport {OntopConnectionInformation} from \"../../../models/ontop/ontop-connection-information\";\nimport {OntopFileInfo} from \"../../../models/ontop/ontop-file-info\";\nimport {OntopRepositoryError} from \"../../../models/ontop/ontop-repository-error\";\nimport {OntopDriverData} from \"../../../models/ontop/ontop-driver-data\";\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 const HOME_KEY = 36;\n const END_KEY = 35;\n const LEFT_ARROW = 37;\n const RIGHT_ARROW = 39;\n const BACKSPACE = 8;\n const KEY_C = 67;\n const KEY_A = 65;\n $scope.genericDriverType = 'generic';\n $scope.defaultUrlTemplate = 'jdbc:database://localhost:port/database_name';\n $scope.ontopProperiesLink = ONTOP_PROPERTIES_LINK;\n $scope.ontopFileType = OntopFileType;\n\n /**\n * Holds reference to selected driver.\n *\n * @type {OntopDriverData}\n */\n $scope.selectedDriver = new OntopDriverData();\n\n /**\n * Holds all supported jdbc drivers.\n * @type {OntopDriverData[]}\n */\n $scope.supportedDriversData = [];\n $scope.formData = {\n connectionInformation: new OntopConnectionInformation(),\n settings: {\n additionalProperties: '',\n /**\n * Holds information about repository files.\n */\n ontopFiles: []\n }\n };\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Changes selected driver and updates url field.\n * @param {string} driverType - the type of driver.\n */\n $scope.selectDriver = (driverType) => {\n $scope.selectedDriver = $scope.supportedDriversData.find((driver) => driver.driverType === driverType);\n if ($scope.formData.connectionInformation.driverClass !== $scope.selectedDriver.driverClass) {\n $scope.formData.connectionInformation.url = '';\n }\n $scope.formData.connectionInformation.driverClass = $scope.selectedDriver.driverClass;\n $scope.updateUrl();\n };\n\n /**\n * Finds ontop file depends on file type <code>ontopFileType</code>\n * @param {OntopFileType} ontopFileType - the type of searched ontop file.\n * @return {OntopFileInfo} found ontop file.\n */\n $scope.getOntopFileInfo = (ontopFileType) => {\n return $scope.formData.settings.ontopFiles.find((ontopFileInfo) => ontopFileType === ontopFileInfo.type);\n };\n\n $scope.getHostNameLabel = () => {\n const hostNameLabel = 'snowflake' === $scope.selectedDriver.driverType ? 'ontop.repo.database.snowflake.host_name' : 'ontop.repo.database.host_name';\n return $translate.instant(hostNameLabel) + '*';\n };\n\n $scope.getDatabaseNameLabel = () => {\n let dataBaseNameLabelKey = '';\n switch ($scope.selectedDriver.driverType) {\n case 'snowflake':\n dataBaseNameLabelKey = 'ontop.repo.database.warehouse.database_name';\n break;\n case 'databricks':\n dataBaseNameLabelKey = 'ontop.repo.database.http_path.database_name';\n break;\n case 'dremio':\n dataBaseNameLabelKey = 'ontop.repo.database.schema.database_name';\n break;\n default:\n dataBaseNameLabelKey = 'ontop.repo.database.database_name';\n }\n return $translate.instant(dataBaseNameLabelKey);\n };\n\n /**\n * Updates value of <code>$scope.formData.connectionInformation.url</code> depends on other connection information: Host name, Port...\n */\n $scope.updateUrl = () => {\n const templateUrl = calculateTemplateUrl() || '';\n $scope.formData.connectionInformation.url = templateUrl + $scope.formData.connectionInformation.urlUserInput;\n };\n\n /**\n * Checks if test connection can be executed.\n * @return {boolean} true if all needed data is filled by the user.\n */\n $scope.isTestConnectionDisabled = () => {\n const connectionInformation = $scope.formData.connectionInformation;\n const selectedDriver = $scope.selectedDriver;\n if (!connectionInformation.driverClass || !connectionInformation.url || selectedDriver.portRequired && !connectionInformation.port) {\n return true;\n }\n return selectedDriver.driverType !== $scope.genericDriverType && (!connectionInformation.hostName || !connectionInformation.databaseName);\n };\n\n /**\n * Performs a test connection.\n */\n $scope.testConnection = () => {\n validateHostName()\n .then(validatePort)\n .then(validateDatabaseName)\n .then(validateDriverClass)\n .then(validateUrl)\n .then(updatePropertiesFile)\n .then(() => RepositoriesRestService.validateOntopPropertiesConnection($scope.repositoryInfo))\n .then(() => toastr.success($translate.instant('ontop.repo.successful.connection.msg')))\n .catch((error) => {\n if (error instanceof OntopRepositoryError) {\n toastr.error(error.message);\n } else {\n showErrorMsg($translate.instant('ontop.repo.failed.to.connect'), error);\n }\n });\n };\n\n /**\n * Updates the file with type <code>ontopFileType</code>.\n *\n * @param {OntopFileInfo} ontopFileInfo\n */\n $scope.editFile = (ontopFileInfo) => {\n\n const fileName = $scope.repositoryInfo.params[ontopFileInfo.type].label;\n const title = $translate.instant('update.file.edit.content.header', {fileName});\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/editRepoFile.html',\n controller: 'EditRepositoryFileCtrl',\n windowClass: 'update-ontop-repo-dialog',\n resolve: {\n file: () => {\n const ontopFile = $scope.repositoryInfo.params[ontopFileInfo.type];\n return ontopFile ? ontopFile.value : '';\n },\n dialogTitle: () => {\n return title;\n }\n }\n });\n\n modalInstance.result.then((data) => {\n // send data to backend\n RepositoriesRestService.updateRepositoryFileContent(data.fileLocation, data.content, $scope.repositoryInfo.location)\n .success((result) => {\n ontopFileInfo.fileName = getFileName(result.fileLocation);\n $scope.repositoryInfo.params[ontopFileInfo.type].value = result.fileLocation;\n }).error((error) => {\n showErrorMsg($translate.instant('common.error'), error);\n });\n });\n };\n\n $scope.uploadOntopFile = (files, ontopFileInfo) => {\n if (files && files.length) {\n const uploadFile = files[0];\n ontopFileInfo.loading = true;\n const uploadData = {\n url: 'rest/repositories/file/upload',\n data: {file: uploadFile, location: $scope.repositoryInfo.location}\n };\n Upload.upload(uploadData)\n .success((data) => {\n if (!data.success) {\n toastr.error(data.errorMessage);\n } else {\n ontopFileInfo.fileName = uploadFile.name;\n $scope.repositoryInfo.params[ontopFileInfo.type].value = data.fileLocation;\n }\n })\n .error((data) => {\n showErrorMsg($translate.instant('common.error'), data);\n $scope.uploadFile = '';\n })\n .finally(() => {\n ontopFileInfo.loading = false;\n });\n }\n };\n\n $scope.updateOntopRepo = () => {\n const createOrUpdate = $scope.editRepoPage ? $scope.editRepository : $scope.createRepo;\n validateRepositoryId()\n .then(validateHostName)\n .then(validatePort)\n .then(validateDatabaseName)\n .then(validateDriverClass)\n .then(validateUrl)\n .then(validateOntopFiles)\n .then(updatePropertiesFile)\n .then(createOrUpdate)\n .catch((error) => {\n if (error instanceof OntopRepositoryError) {\n toastr.error(error.message);\n } else {\n console.log(error);\n }\n });\n };\n\n /**\n * Some databases expect additional properties than hostname, port, database name in order to establish the connection.\n * So url is not readonly and user can modify it. Every driver instead generic one has template tha can't be changed by the user, it\n * is filled automatically when user writes hostname, port, and database name.\n *\n * This function prevent modification of driver template.\n *\n * @param event - event fired by key down.\n */\n $scope.onKeyDownInUrlInput = (event) => {\n const keyCode = event.keyCode;\n // We don't prevent event if user clicked on left, right arrow, home or end key,\n // the client can move cursor without matter where the cursor is.\n if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW || keyCode === HOME_KEY || keyCode === END_KEY) {\n return;\n }\n\n const templateUrl = calculateTemplateUrl();\n // If templateUrl is empty this means that chosen driver is generic or user is not filled hostname, port, or database name.\n // So user can type any characters into url input.\n if (!templateUrl) {\n return;\n }\n\n // Allows user to select all and copy the url value regardless that cursor position is in url template area.\n // event.metaKey -> Mac support\n const ctrlDown = event.ctrlKey || event.metaKey;\n if (ctrlDown && KEY_A === keyCode || ctrlDown && KEY_C === keyCode) {\n return;\n }\n\n const cursorPosition = event.target.selectionStart;\n\n if (keyCode === BACKSPACE && cursorPosition - 1 < templateUrl.length) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (cursorPosition < templateUrl.length) {\n // If templateUrl is not empty and cursor is in the middle of it, we will prevent the event and not allow to modify the url.\n event.preventDefault();\n event.stopPropagation();\n }\n\n // If templateUrl is not empty and cursor is after it, the user can write any character into the url input.\n };\n\n $scope.onKeyUpInUrlInput = () => {\n extractExtraUrl();\n };\n\n // =========================\n // Private functions\n // =========================\n\n /**\n * Extracts manual user input from url input element.\n */\n const extractExtraUrl = () => {\n const templateUrl = calculateTemplateUrl();\n if (templateUrl) {\n if ($scope.formData.connectionInformation.url.startsWith(templateUrl)) {\n // If templateUrl is not empty and url input value starts with the templateUrl, the text entered by user is part after the templateUrl.\n $scope.formData.connectionInformation.urlUserInput = $scope.formData.connectionInformation.url.substring(templateUrl.length);\n } else {\n // If templateUrl is not empty and url input value don't start with the templateUrl, all url is entered by the user.\n $scope.formData.connectionInformation.urlUserInput = $scope.formData.connectionInformation.url;\n }\n } else {\n // If templateUrl is empty this means that chosen driver is generic or user is not filled hostname, port, or database name.\n // So all characters in url input are entered by user.\n $scope.formData.connectionInformation.urlUserInput = $scope.formData.connectionInformation.url;\n }\n };\n\n const calculateTemplateUrl = () => {\n let url = $scope.selectedDriver.urlTemplate;\n const connectionInformation = $scope.formData.connectionInformation;\n if (connectionInformation.hostName) {\n if (connectionInformation.port) {\n url = url.replace('{hostport}', `${connectionInformation.hostName}:${connectionInformation.port}`);\n } else {\n url = url.replace('{hostport}', `${connectionInformation.hostName}`);\n }\n }\n if (connectionInformation.databaseName) {\n url = url.replace('{database}', connectionInformation.databaseName);\n }\n return url;\n };\n\n const loadSupportedDriversData = () => {\n return RepositoriesRestService.getSupportedDriversData($scope.repositoryInfo)\n .success((response) => {\n $scope.supportedDriversData = response;\n }).error((response) => {\n showErrorMsg($translate.instant('common.error'), response);\n });\n };\n\n const setLoading = (loading) => {\n $scope.formData.settings.ontopFiles.forEach((ontopFile) => {\n ontopFile.loading = loading;\n });\n };\n\n const loadPropertiesFile = () => {\n setLoading(true);\n RepositoriesRestService.loadPropertiesFile($scope.repositoryInfo.params.propertiesFile.value, $scope.repositoryInfo.location, $scope.selectedDriver.driverType)\n .success((driverData) => {\n let driver = $scope.supportedDriversData.find((driver) => driver.driverClass === driverData.driverClass);\n if (!driver) {\n driver = $scope.supportedDriversData.find((driver) => $scope.genericDriverType === driver.driverType);\n }\n $scope.selectDriver(driver.driverType);\n $scope.formData.connectionInformation.driverType = driver.driverType;\n $scope.formData.connectionInformation.databaseName = driverData.databaseName;\n $scope.formData.connectionInformation.driverClass = driverData.driverClass;\n $scope.formData.connectionInformation.hostName = driverData.hostName;\n $scope.formData.connectionInformation.password = driverData.password;\n $scope.formData.connectionInformation.port = driverData.port ? parseInt(driverData.port, 10) : undefined;\n $scope.formData.connectionInformation.username = driverData.userName;\n $scope.formData.connectionInformation.url = driverData.url;\n $scope.formData.settings.additionalProperties = driverData.additionalProperties;\n\n extractExtraUrl();\n $scope.updateUrl();\n\n Object.values(OntopFileType)\n .forEach((ontopFileType) => {\n const ontopFileInfo = $scope.repositoryInfo.params[ontopFileType];\n const ontopFile = $scope.getOntopFileInfo(ontopFileType);\n if (ontopFileInfo) {\n ontopFile.fileName = getFileName(ontopFileInfo.value);\n }\n });\n })\n .error((data) => {\n showErrorMsg($translate.instant('common.error'), data);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const updatePropertiesFile = () => {\n setLoading(true);\n const connectionInformation = $scope.formData.connectionInformation;\n\n const jdbc = {\n hostName: connectionInformation.hostName,\n port: connectionInformation.port,\n databaseName: connectionInformation.databaseName,\n userName: connectionInformation.username,\n password: connectionInformation.password,\n driverClass: connectionInformation.driverClass,\n url: connectionInformation.url,\n additionalProperties: $scope.formData.settings.additionalProperties\n };\n\n return RepositoriesRestService\n .updatePropertiesFile($scope.repositoryInfo.params.propertiesFile.value, jdbc, $scope.repositoryInfo.location, $scope.selectedDriver.driverType)\n .success((data) => {\n $scope.repositoryInfo.params.propertiesFile.value = data.fileLocation;\n }).error((data) => {\n showErrorMsg($translate.instant('common.error'), data);\n })\n .finally(() => setLoading(false));\n };\n\n const showErrorMsg = (title, data) => {\n const msg = getError(data);\n toastr.error(msg, title);\n };\n\n const validateHostName = () => {\n if ($scope.selectedDriver.driverType !== $scope.genericDriverType) {\n if (!$scope.formData.connectionInformation.hostName) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.host_name')})));\n }\n }\n return Promise.resolve();\n };\n\n const validateDatabaseName = () => {\n if ($scope.selectedDriver.driverType !== $scope.genericDriverType) {\n if (!$scope.formData.connectionInformation.databaseName) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.database_name')})));\n }\n }\n return Promise.resolve();\n };\n\n const validateDriverClass = () => {\n if (!$scope.formData.connectionInformation.driverClass) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.driver_class')})));\n }\n return Promise.resolve();\n };\n\n const validateUrl = () => {\n if (!$scope.formData.connectionInformation.url) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.url')})));\n }\n return Promise.resolve();\n };\n\n const validateRepositoryId = () => {\n if (!$scope.repositoryInfo.id) {\n return Promise.reject(new OntopRepositoryError($translate.instant('empty.repoid.warning')));\n }\n return Promise.resolve();\n };\n\n const validateOntopFiles = () => {\n if (!$scope.getOntopFileInfo(OntopFileType.OBDA).fileName) {\n return Promise.reject(new OntopRepositoryError($translate.instant('ontop.repo.missing.required.file', {fileName: $scope.repositoryInfo.params[OntopFileType.OBDA].label})));\n }\n return Promise.resolve();\n };\n\n const validatePort = () => {\n if ($scope.selectedDriver.portRequired && !$scope.formData.connectionInformation.port) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.port')})));\n }\n return Promise.resolve();\n };\n\n // =========================\n // Initialize component data\n // =========================\n\n Object.values(OntopFileType)\n .forEach((ontopFileType) => {\n const ontopFileInfo = new OntopFileInfo(ontopFileType);\n $scope.formData.settings.ontopFiles.push(ontopFileInfo);\n });\n\n $scope.getOntopFileInfo(OntopFileType.OBDA).required = true;\n\n\n loadSupportedDriversData()\n .then(() => {\n if ($scope.editRepoPage) {\n loadPropertiesFile();\n } else {\n $scope.selectDriver($scope.genericDriverType);\n }\n });\n }\n}\n"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[176],{243:function(module,exports){module.exports=function(obj){obj||(obj={});var __t,__p="";with(obj)__p+='<h1>\n\t{{title}}\n\t<span class="btn btn-link"\n\t uib-popover-template="\'js/angular/templates/titlePopoverTemplate.html\'"\n\t popover-trigger="mouseenter"\n\t popover-placement="bottom-right"\n\t popover-append-to-body="true"><span class="icon-info"></span></span>\n</h1>\n<div id="wb-users" ng-hide="loader">\n\t<div class="mb-1">\n\t\t<div class="pull-right">\n\t\t\t<span id="toggle-security" class="mr-1">\n\t\t\t\t<span class="security-switch-label">{{\'security.is\' | translate}} <span class="tag {{securityEnabled() ? \'tag-primary\' : \'tag-default\'}}">{{securityEnabled() ? \'common.on.btn\' : \'common.off.btn\' | translate}}</span></span>\n\t\t\t\t<span gdb-tooltip="{{\'click.to\' | translate}} {{securityEnabled() ? \'disable\' : \'enable\' | translate}} {{\'security.label\' | translate}}" tooltip-placement="top" ng-click="toggleSecurity()" class="switch">\n\t\t\t\t\t<input type="checkbox" class="switch" ng-checked="securityEnabled()"/>\n\t\t\t\t\t<label for="toggle-security"></label>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t\t<span ng-show="securityEnabled()" id="toggle-freeaccess">\n\t\t\t\t<span>{{\'security.free.access.is\' | translate}} <span class="tag {{freeAccessEnabled() ? \'tag-primary\' : \'tag-default\'}}">{{freeAccessEnabled() ? \'common.on.btn\' : \'common.off.btn\' | translate}}</span></span>\n\t\t\t\t<span gdb-tooltip="{{\'click.to\' | translate}} {{freeAccessEnabled() ? \'disable\' : \'enable\' | translate}} {{\'security.free.access.non.admin\' | translate}}" tooltip-placement="top" ng-click="toggleFreeAccess()" class="switch">\n\t\t\t\t\t<input type="checkbox" class="switch" ng-checked="freeAccessEnabled()"/>\n\t\t\t\t\t<label for="toggle-freeaccess"></label>\n\t\t\t\t</span>\n\t\t\t\t<span ng-show="freeAccessEnabled()">\n\t\t\t\t\t{{\'security.free.access.settings\' | translate}}\n\t\t\t\t\t<a style="padding-left: 0px;" class="btn btn-link" href="#"><em class="icon-settings" gdb-tooltip="{{\'security.free.access.config.title\' | translate}}" ng-click="editFreeAccess()"></em></a>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</div>\n\n\t\t<a id="wb-users-userCreateLink" ng-show="!hasExternalAuth()" class="btn btn-primary" href="user/create"><span class="icon-plus"></span> {{\'view.create.user.title\' | translate}}</a>\n\t</div>\n\n\t<div ng-show="hasExternalAuth()">\n\t\t<div> </div>\n\t\t<div class="alert alert-info no-icon mt-1">\n\t\t\t<p>{{\'security.using.external.auth.db\' | translate}} {{getAuthImplementation()}}.</p>\n\t\t\t<p>{{\'security.user.settings.modification\' | translate}}</p>\n\t\t</div>\n\t</div>\n\n\t<table id="wb-users-userInUsers" class="table table-striped" aria-describedby="Users table">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th id="usernameColumn">{{\'security.table.username\' | translate}}</th>\n\t\t\t\t<th id="roleColumn">{{\'security.table.role\' | translate}}</th>\n\t\t\t\t<th id="repoRightsColumn">{{\'security.repo.rights\' | translate}}</th>\n\t\t\t\t<th id="creationDateColumn">{{\'security.table.date.created\' | translate}}</th>\n\t\t\t\t<th id="actionsColumn">{{\'security.table.actions\' | translate}}</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr ng-repeat="user in users | orderBy: \'username\'">\n\t\t\t\t<td class="username"><span>{{user.username}}</span></td>\n\t\t\t\t<td class="user-type">{{user.userTypeDescription}}</td>\n\t\t\t\t<td class="repository-rights">\n\t\t\t\t\t<div ng-show="user.userType === \'user\'" ng-repeat="(repo, rights) in user.repositories track by $index">\n\t\t\t\t\t\t<em class="icon-eye" ng-class="rights.read ? \'text-tertiary\' : \'text-muted\'" gdb-tooltip="{{rights.read ? \'security.has.read.access\' : \'security.no.read.access\' | translate}}"></em>\n\t\t\t\t\t\t<em class="icon-edit" ng-class="rights.write ? \'text-tertiary\' : \'text-muted\'" gdb-tooltip="{{rights.read ? \'security.has.write.access\' : \'security.no.write.access\' | translate}}"></em>\n\t\t\t\t\t\t{{repo}}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ng-show="user.userType !== \'user\'">{{\'security.unrestricted\' | translate}}</div>\n\t\t\t\t</td>\n\t\t\t\t<td class="date-created"><span>{{user.dateCreated | date: \'yyyy-MM-dd HH:mm:ss\'}}</span></td>\n\t\t\t\t<td class="actions-bar">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<a class="btn btn-link edit-user-btn" href="user/{{encodeURIComponent(user.username)}}">\n <em class="icon-edit" gdb-tooltip="{{\'security.edit.user.tooltip\' | translate}}"></em>\n </a>\n\t\t\t\t\t\t<a class="btn btn-link secondary delete-user-btn" ng-if="user.username != \'admin\'" ng-show="!hasExternalAuth()" href ng-click="removeUser(user.username)">\n <em class="icon-trash" gdb-tooltip="{{\'security.delete.user.tooltip\' | translate}}"></em>\n </a>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n<div class="ot-loader ot-main-loader" onto-loader size="50" ng-show="loader"></div>\n\n';return __p}}}]);
|
|
2
|
-
//# sourceMappingURL=176.d95064b9ddfc85fb2fc7.bundle.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[21,53,107,108,124],{100:function(e,r,t){"use strict";t.r(r);t(4),t(11),t(8),t(65),t(21),t(12),t(35),t(36);function o(e){e.interceptors.push("$unauthorizedInterceptor")}function s(e,r,t){e.$on("$locationChangeStart",(function(){t.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(o).run(s),o.$inject=["$httpProvider","$routeProvider"],s.$inject=["$rootScope","$location","$licenseService"]},106:function(e,r,t){"use strict";t.r(r);var o=t(66);const s={OBDA:"obdaFile",OWL:"owlFile",CONSTRAINT:"constraintFile",LENSES:"lensesFile",DB_METADATA:"dbMetadataFile"};class n{constructor(e="generic"){this.driverType=e,this.hostName="",this.port=void 0,this.databaseName="",this.username="",this.password="",this.driverClass="",this.url="",this.urlUserInput=""}}class i{constructor(e,r=!1){this.type=e,this.fileName="",this.loading=!1,this.required=r}}class a extends Error{}class c{constructor(){this.classAvailable=!1,this.downloadDriverUrl="",this.driverClass="",this.driverName="",this.driverType="",this.portRequired=!1,this.urlTemplate=""}}function l(e,r,t,l,p){return{restrict:"E",scope:!1,templateUrl:"js/angular/repositories/templates/ontop-repo.html",link:function(d){d.genericDriverType="generic",d.defaultUrlTemplate="jdbc:database://localhost:port/database_name",d.ontopProperiesLink="https://ontop-vkg.org/guide/advanced/configuration.html",d.ontopFileType=s,d.selectedDriver=new c,d.supportedDriversData=[],d.formData={connectionInformation:new n,settings:{additionalProperties:"",ontopFiles:[]}},d.selectDriver=e=>{d.selectedDriver=d.supportedDriversData.find(r=>r.driverType===e),d.formData.connectionInformation.driverClass!==d.selectedDriver.driverClass&&(d.formData.connectionInformation.url=""),d.formData.connectionInformation.driverClass=d.selectedDriver.driverClass,d.updateUrl()},d.getOntopFileInfo=e=>d.formData.settings.ontopFiles.find(r=>e===r.type),d.getHostNameLabel=()=>{const e="snowflake"===d.selectedDriver.driverType?"ontop.repo.database.snowflake.host_name":"ontop.repo.database.host_name";return p.instant(e)+"*"},d.getDatabaseNameLabel=()=>{let e="";switch(d.selectedDriver.driverType){case"snowflake":e="ontop.repo.database.warehouse.database_name";break;case"databricks":e="ontop.repo.database.http_path.database_name";break;case"dremio":e="ontop.repo.database.schema.database_name";break;default:e="ontop.repo.database.database_name"}return p.instant(e)},d.updateUrl=()=>{const e=u()||"";d.formData.connectionInformation.url=e+d.formData.connectionInformation.urlUserInput},d.isTestConnectionDisabled=()=>{const e=d.formData.connectionInformation,r=d.selectedDriver;return!(e.driverClass&&e.url&&(!r.portRequired||e.port))||!(r.driverType===d.genericDriverType||e.hostName&&e.databaseName)},d.testConnection=()=>{y().then(I).then(b).then(h).then(w).then(v).then(()=>r.validateOntopPropertiesConnection(d.repositoryInfo)).then(()=>t.success(p.instant("ontop.repo.successful.connection.msg"))).catch(e=>{e instanceof a?t.error(e.message):g(p.instant("ontop.repo.failed.to.connect"),e)})},d.editFile=t=>{const s=d.repositoryInfo.params[t.type].label,n=p.instant("update.file.edit.content.header",{fileName:s});e.open({templateUrl:"js/angular/templates/modal/editRepoFile.html",controller:"EditRepositoryFileCtrl",windowClass:"update-ontop-repo-dialog",resolve:{file:()=>{const e=d.repositoryInfo.params[t.type];return e?e.value:""},dialogTitle:()=>n}}).result.then(e=>{r.updateRepositoryFileContent(e.fileLocation,e.content,d.repositoryInfo.location).success(e=>{t.fileName=Object(o.getFileName)(e.fileLocation),d.repositoryInfo.params[t.type].value=e.fileLocation}).error(e=>{g(p.instant("common.error"),e)})})},d.uploadOntopFile=(e,r)=>{if(e&&e.length){const o=e[0];r.loading=!0;const s={url:"rest/repositories/file/upload",data:{file:o,location:d.repositoryInfo.location}};l.upload(s).success(e=>{e.success?(r.fileName=o.name,d.repositoryInfo.params[r.type].value=e.fileLocation):t.error(e.errorMessage)}).error(e=>{g(p.instant("common.error"),e),d.uploadFile=""}).finally(()=>{r.loading=!1})}},d.updateOntopRepo=()=>{const e=d.editRepoPage?d.editRepository:d.createRepo;N().then(y).then(I).then(b).then(h).then(w).then(D).then(v).then(e).catch(e=>{e instanceof a?t.error(e.message):console.log(e)})},d.onKeyDownInUrlInput=e=>{const r=e.keyCode;if(37===r||39===r||36===r||35===r)return;const t=u();if(!t)return;const o=e.ctrlKey||e.metaKey;if(o&&65===r||o&&67===r)return;const s=e.target.selectionStart;8===r&&s-1<t.length&&(e.preventDefault(),e.stopPropagation()),s<t.length&&(e.preventDefault(),e.stopPropagation())},d.onKeyUpInUrlInput=()=>{m()};const m=()=>{const e=u();e&&d.formData.connectionInformation.url.startsWith(e)?d.formData.connectionInformation.urlUserInput=d.formData.connectionInformation.url.substring(e.length):d.formData.connectionInformation.urlUserInput=d.formData.connectionInformation.url},u=()=>{let e=d.selectedDriver.urlTemplate;const r=d.formData.connectionInformation;return r.hostName&&(e=r.port?e.replace("{hostport}",`${r.hostName}:${r.port}`):e.replace("{hostport}",""+r.hostName)),r.databaseName&&(e=e.replace("{database}",r.databaseName)),e},f=e=>{d.formData.settings.ontopFiles.forEach(r=>{r.loading=e})},v=()=>{f(!0);const e=d.formData.connectionInformation,t={hostName:e.hostName,port:e.port,databaseName:e.databaseName,userName:e.username,password:e.password,driverClass:e.driverClass,url:e.url,additionalProperties:d.formData.settings.additionalProperties};return r.updatePropertiesFile(d.repositoryInfo.params.propertiesFile.value,t,d.repositoryInfo.location,d.selectedDriver.driverType).success(e=>{d.repositoryInfo.params.propertiesFile.value=e.fileLocation}).error(e=>{g(p.instant("common.error"),e)}).finally(()=>f(!1))},g=(e,r)=>{const o=getError(r);t.error(o,e)},y=()=>d.selectedDriver.driverType===d.genericDriverType||d.formData.connectionInformation.hostName?Promise.resolve():Promise.reject(new a(p.instant("missing.required.field",{fieldName:p.instant("ontop.repo.database.host_name")}))),b=()=>d.selectedDriver.driverType===d.genericDriverType||d.formData.connectionInformation.databaseName?Promise.resolve():Promise.reject(new a(p.instant("missing.required.field",{fieldName:p.instant("ontop.repo.database.database_name")}))),h=()=>d.formData.connectionInformation.driverClass?Promise.resolve():Promise.reject(new a(p.instant("missing.required.field",{fieldName:p.instant("ontop.repo.database.driver_class")}))),w=()=>d.formData.connectionInformation.url?Promise.resolve():Promise.reject(new a(p.instant("missing.required.field",{fieldName:p.instant("ontop.repo.database.url")}))),N=()=>d.repositoryInfo.id?Promise.resolve():Promise.reject(new a(p.instant("empty.repoid.warning"))),D=()=>d.getOntopFileInfo(s.OBDA).fileName?Promise.resolve():Promise.reject(new a(p.instant("ontop.repo.missing.required.file",{fileName:d.repositoryInfo.params[s.OBDA].label}))),I=()=>d.selectedDriver.portRequired&&!d.formData.connectionInformation.port?Promise.reject(new a(p.instant("missing.required.field",{fieldName:p.instant("ontop.repo.database.port")}))):Promise.resolve();Object.values(s).forEach(e=>{const r=new i(e);d.formData.settings.ontopFiles.push(r)}),d.getOntopFileInfo(s.OBDA).required=!0,r.getSupportedDriversData(d.repositoryInfo).success(e=>{d.supportedDriversData=e}).error(e=>{g(p.instant("common.error"),e)}).then(()=>{d.editRepoPage?(f(!0),r.loadPropertiesFile(d.repositoryInfo.params.propertiesFile.value,d.repositoryInfo.location,d.selectedDriver.driverType).success(e=>{let r=d.supportedDriversData.find(r=>r.driverClass===e.driverClass);r||(r=d.supportedDriversData.find(e=>d.genericDriverType===e.driverType)),d.selectDriver(r.driverType),d.formData.connectionInformation.driverType=r.driverType,d.formData.connectionInformation.databaseName=e.databaseName,d.formData.connectionInformation.driverClass=e.driverClass,d.formData.connectionInformation.hostName=e.hostName,d.formData.connectionInformation.password=e.password,d.formData.connectionInformation.port=e.port?parseInt(e.port,10):void 0,d.formData.connectionInformation.username=e.userName,d.formData.connectionInformation.url=e.url,d.formData.settings.additionalProperties=e.additionalProperties,m(),d.updateUrl(),Object.values(s).forEach(e=>{const r=d.repositoryInfo.params[e],t=d.getOntopFileInfo(e);r&&(t.fileName=Object(o.getFileName)(r.value))})}).error(e=>{g(p.instant("common.error"),e)}).finally(()=>{f(!1)})):d.selectDriver(d.genericDriverType)})}}}angular.module("graphdb.framework.repositories.ontop-repo.directive",[]).directive("ontopRepo",l),l.$inject=["$uibModal","RepositoriesRestService","toastr","Upload","$translate"]},151:function(e,r,t){"use strict";t.r(r);t(4),t(11),t(16),t(66),t(106),t(99),t(10),t(100),t(35),t(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,t){"use strict";t.r(r);t(4),t(12);function o(e,r,t,o,s){e.supportsStatistics=!0,e.settings={statistics:!1},e.getSettings=function(){e.loader=!0,o.getStatistics().then((function(r){e.settings.statistics="true"===r.data,e.supportsStatistics=!0}),(function(t){if(404===t.status)e.supportsStatistics=!1;else{const e=getError(t.data);r.error(e,s.instant("error.getting.settings"))}}))},e.getSettings(),e.setSettings=function(){e.loader=!0,o.toggleStatistics(e.settings.statistics).then((function(){t.close(),r.success(s.instant("saving.settings.success"))}),(function(e){const t=getError(e.data);r.error(t,s.instant("saving.settings.error"))}))},e.submitForm=function(){e.setSettings()},e.cancel=function(){t.dismiss("cancel")}}function s(e,r,t,o,s,n,i){e.loadingLicense=function(){return t.loadingLicense},t.checkLicenseStatus(),e.revertToFree=function(){n.openSimpleModal({title:i.instant("confirm.operation"),message:i.instant("revert.to.free.warning.msg"),warning:!0}).result.then((function(){r.unregisterLicense().success((function(){t.checkLicenseStatus()}))}))}}function n(e,r,t,o,s,n,i,a){e.$on("securityInit",(function(){i.isAdmin()||t.path("/license")})),e.sendLicenseToValidateAndActivate=l;const c=$(".license-textarea");function l(e){r.sendLicenseToValidate(e).success((function(t){"Invalid"!==t.licensee?(c.val(e),function(e,t){o.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 t=atob(e.replace(/\s/g,""));r.registerLicense(t).success((function(){n.history.back()})).error((function(){s.error(a.instant("license.register.error"))}))}else s.error(a.instant("no.license.code.error"))}(t)}))}(t,e)):(c.val(""),s.error(t.message))})).error((function(){s.error(a.instant("invalid.license"))}))}e.$watch("currentFile",(function(){if(e.currentFile){const t=e.currentFile;r.extractFromLicenseFile(t).success((function(e){l(e)})).error((function(){s.error(a.instant("could.not.upload.file.error"))}))}})),e.getBackToPreviousPage=function(){n.history.back()}}function i(e,r,t){e.ok=function(){r.close()},e.cancel=function(){r.dismiss("cancel")},e.license=t}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",o).controller("ValidateLicenseModalCtrl",i).controller("LicenseCtrl",s).controller("RegisterLicenseCtrl",n).controller("LoaderSamplesCtrl",a),o.$inject=["$scope","toastr","$uibModalInstance","LicenseRestService","$translate"],s.$inject=["$scope","LicenseRestService","$licenseService","toastr","$rootScope","ModalService","$translate"],n.$inject=["$scope","LicenseRestService","$location","$uibModal","toastr","$window","$jwtAuth","$translate"],i.$inject=["$scope","$uibModalInstance","license"],a.$inject=["$scope"]},99:function(e,r){function t(e,r,t,o){return{restrict:"E",scope:!0,templateUrl:"js/angular/repositories/templates/fedx-repo.html",link:function(s){const n="ResolvableRepository";s.fedxMembers=[],s.knownRepos=[],s.allAttachedRepos=[],s.editRepoPage&&(s.fedxMembers=s.repositoryInfo.params.member.value.slice());function i(){for(const e of s.fedxMembers)s.knownRepos=s.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(s.repositoryInfo.location).success((function(e){let r=[];_.values(e).forEach(e=>{r.push.apply(r,e)}),s.allAttachedRepos=_.cloneDeep(r)})).error((function(e){const r=getError(e);t.error(r,o.instant("common.error"))})).then((function(){s.knownRepos=s.allAttachedRepos.slice(),i()}))}s.setWritableRepo=function(e){let r=s.fedxMembers.find(e=>"true"===e.writable);r&&((r.store!==n||e.store===n&&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)},s.getActiveClass=function(e){return"true"===e.writable?" active":""},s.checkIfRepoExist=function(e){return!s.allAttachedRepos.length||(e.store===n?s.allAttachedRepos.find(r=>r.id===e.repositoryName&&!r.location):"RemoteRepository"!==e.store||s.allAttachedRepos.find(r=>r.id===e.repositoryName&&r.location===e.repositoryServer))},s.getRepositoryServer=function(e){return e.local?"Local":e.location};const c=setInterval((function(){a()}),5e3);function l(e){s.fedxMembers.push(e),s.repositoryInfo.params.member.value=s.fedxMembers}function p(e){return"/"===e.slice(-1)?e.slice(0,-1):e}function d(){return s.editRepoPage&&!s.editRepoPage||!s.model.editMode}s.$on("$destroy",(function(){clearInterval(c)})),s.addMember=function(e){let r;r="Local"===s.getRepositoryServer(e)?{store:n,repositoryName:e.id,repoType:e.type,respectRights:"true",writable:"false"}:{store:"RemoteRepository",repositoryName:e.id,repositoryServer:e.location,username:"",password:"",supportsASKQueries:"true",writable:"false"},s.knownRepos=s.knownRepos.filter(r=>r.id!==e.id||r.location!==e.location),l(r)},s.removeMember=function(e){e.store&&e.store===n?(s.fedxMembers=s.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName&&!r.repositoryServer),a()):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.store!==e.store||r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer),a()),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===n?(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 n: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===n)e={store:n,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:p(s.model.repositoryServer),username:s.model.username,password:s.model.password,writable:s.model.writable},d()&&s.fedxMembers.find(r=>r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)){let r=s.resolveName(e);return t.error(o.instant("fedx.repo.already.added.member.error",{name:r})),void s.$uibModalInstance.close()}s.fedxMembers=s.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer)}else{if(e={store:"SPARQLEndpoint",endpoint:p(s.model.sparqlEndpoint),username:s.model.username,password:s.model.password,supportsASKQueries:s.model.supportsASKQueries,writable:s.model.writable},d()&&s.fedxMembers.find(r=>r.endpoint===e.endpoint)){let r=s.resolveName(e);return t.error(o.instant("fedx.repo.already.added.sparql.endpoint.error",{name:r})),void s.$uibModalInstance.close()}s.fedxMembers=s.fedxMembers.filter(r=>r.endpoint!==e.endpoint)}l(e),i(),s.$uibModalInstance.close()},s.$on("changedLocation",(function(){s.fedxMembers=[],a()})),a()}}}angular.module("graphdb.framework.repositories.fedx-repo.directive",[]).directive("fedxRepo",t),t.$inject=["$uibModal","RepositoriesRestService","toastr","$translate"]}}]);
|
|
2
|
-
//# sourceMappingURL=21.33ba67922a4116081e11.bundle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/angular/settings/app.js","webpack:///./src/models/ontop/ontop-file-type.js","webpack:///./src/models/ontop/ontop-connection-information.js","webpack:///./src/models/ontop/ontop-file-info.js","webpack:///./src/models/ontop/ontop-repository-error.js","webpack:///./src/models/ontop/ontop-driver-data.js","webpack:///./src/js/angular/repositories/ontop-repo.directive.js","webpack:///./src/js/angular/repositories/app.js","webpack:///./src/js/angular/settings/controllers.js","webpack:///./src/js/angular/repositories/fedx-repo.directive.js"],"names":["config","$httpProvider","interceptors","push","run","$rootScope","$location","$licenseService","$on","isLicenseHardcoded","url","path","angular","module","$inject","OntopFileType","OntopConnectionInformation","driverType","this","hostName","port","undefined","databaseName","username","password","driverClass","urlUserInput","OntopFileInfo","type","required","fileName","loading","OntopRepositoryError","Error","OntopDriverData","classAvailable","downloadDriverUrl","driverName","portRequired","urlTemplate","ontopRepoDirective","$uibModal","RepositoriesRestService","toastr","Upload","$translate","restrict","scope","templateUrl","link","$scope","genericDriverType","defaultUrlTemplate","ontopProperiesLink","ontopFileType","selectedDriver","supportedDriversData","formData","connectionInformation","settings","additionalProperties","ontopFiles","selectDriver","find","driver","updateUrl","getOntopFileInfo","ontopFileInfo","getHostNameLabel","hostNameLabel","instant","getDatabaseNameLabel","dataBaseNameLabelKey","calculateTemplateUrl","isTestConnectionDisabled","testConnection","validateHostName","then","validatePort","validateDatabaseName","validateDriverClass","validateUrl","updatePropertiesFile","validateOntopPropertiesConnection","repositoryInfo","success","catch","error","message","showErrorMsg","editFile","params","label","title","open","controller","windowClass","resolve","file","ontopFile","value","dialogTitle","result","data","updateRepositoryFileContent","fileLocation","content","location","uploadOntopFile","files","length","uploadFile","uploadData","upload","name","errorMessage","finally","updateOntopRepo","createOrUpdate","editRepoPage","editRepository","createRepo","validateRepositoryId","validateOntopFiles","console","log","onKeyDownInUrlInput","event","keyCode","ctrlDown","ctrlKey","metaKey","cursorPosition","target","selectionStart","preventDefault","stopPropagation","onKeyUpInUrlInput","extractExtraUrl","startsWith","substring","replace","setLoading","forEach","jdbc","userName","propertiesFile","msg","getError","Promise","reject","fieldName","id","OBDA","Object","values","getSupportedDriversData","response","loadPropertiesFile","driverData","parseInt","directive","ActiveLocationSettingsCtrl","$uibModalInstance","LicenseRestService","supportsStatistics","statistics","getSettings","loader","getStatistics","status","setSettings","toggleStatistics","close","submitForm","cancel","dismiss","LicenseCtrl","ModalService","loadingLicense","checkLicenseStatus","revertToFree","openSimpleModal","warning","unregisterLicense","RegisterLicenseCtrl","$window","$jwtAuth","isAdmin","sendLicenseToValidateAndActivate","textAreaSel","$","licenseCode","sendLicenseToValidate","validatedLicense","licensee","val","license","size","decodedLicense","atob","registerLicense","history","back","confirmWantedNewLicenseDetails","$watch","currentFile","extractFromLicenseFile","getBackToPreviousPage","ValidateLicenseModalCtrl","ok","LoaderSamplesCtrl","setLoader","fedxRepoDirective","LOCAL_REPO_STORE","fedxMembers","knownRepos","allAttachedRepos","member","slice","populateKnownRepos","filter","repo","repositoryServer","repositoryName","local","getKnownRepos","getRepositories","repos","_","apply","cloneDeep","setWritableRepo","currentWritable","writable","store","JSON","stringify","getActiveClass","checkIfRepoExist","getRepositoryServer","localReposTimer","setInterval","updateMembers","removeEndingSlash","checkEditMode","model","editMode","clearInterval","addMember","repository","repoType","respectRights","supportsASKQueries","removeMember","el","endpoint","repositoryLocation","addRemoteMember","mode","sparqlEndpoint","getMemberIcon","editFedXRepository","resolveName","resolvedName"],"mappings":"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","file":"21.33ba67922a4116081e11.bundle.js","sourcesContent":["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","export const OntopFileType = {\n 'OBDA': 'obdaFile',\n 'OWL': 'owlFile',\n 'CONSTRAINT': 'constraintFile',\n 'LENSES': 'lensesFile',\n 'DB_METADATA': 'dbMetadataFile'\n};\n","export class OntopConnectionInformation {\n constructor(driverType = 'generic') {\n this.driverType = driverType;\n this.hostName = '';\n this.port = undefined;\n this.databaseName = '';\n this.username = '';\n this.password = '';\n this.driverClass = '';\n this.url = '';\n this.urlUserInput = '';\n }\n}\n","export class OntopFileInfo {\n\n /**\n * Initializes ontop file info object.\n * @param {string} type - the type of ontop file. It's value have to be one of {@link OntopFileType};\n * @param {boolean} required - true if file is required.\n */\n constructor(type, required = false) {\n this.type = type;\n this.fileName = '';\n this.loading = false;\n this.required = required;\n }\n}\n","export class OntopRepositoryError extends Error {\n}\n","export class OntopDriverData {\n constructor() {\n this.classAvailable = false;\n this.downloadDriverUrl = '';\n this.driverClass = '';\n this.driverName = '';\n this.driverType = '';\n this.portRequired = false;\n this.urlTemplate = '';\n }\n}\n","import {getFileName} from \"./controllers\";\nimport {OntopFileType} from \"../../../models/ontop/ontop-file-type\";\nimport {OntopConnectionInformation} from \"../../../models/ontop/ontop-connection-information\";\nimport {OntopFileInfo} from \"../../../models/ontop/ontop-file-info\";\nimport {OntopRepositoryError} from \"../../../models/ontop/ontop-repository-error\";\nimport {OntopDriverData} from \"../../../models/ontop/ontop-driver-data\";\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 const HOME_KEY = 36;\n const END_KEY = 35;\n const LEFT_ARROW = 37;\n const RIGHT_ARROW = 39;\n const BACKSPACE = 8;\n const KEY_C = 67;\n const KEY_A = 65;\n $scope.genericDriverType = 'generic';\n $scope.defaultUrlTemplate = 'jdbc:database://localhost:port/database_name';\n $scope.ontopProperiesLink = ONTOP_PROPERTIES_LINK;\n $scope.ontopFileType = OntopFileType;\n\n /**\n * Holds reference to selected driver.\n *\n * @type {OntopDriverData}\n */\n $scope.selectedDriver = new OntopDriverData();\n\n /**\n * Holds all supported jdbc drivers.\n * @type {OntopDriverData[]}\n */\n $scope.supportedDriversData = [];\n $scope.formData = {\n connectionInformation: new OntopConnectionInformation(),\n settings: {\n additionalProperties: '',\n /**\n * Holds information about repository files.\n */\n ontopFiles: []\n }\n };\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Changes selected driver and updates url field.\n * @param {string} driverType - the type of driver.\n */\n $scope.selectDriver = (driverType) => {\n $scope.selectedDriver = $scope.supportedDriversData.find((driver) => driver.driverType === driverType);\n if ($scope.formData.connectionInformation.driverClass !== $scope.selectedDriver.driverClass) {\n $scope.formData.connectionInformation.url = '';\n }\n $scope.formData.connectionInformation.driverClass = $scope.selectedDriver.driverClass;\n $scope.updateUrl();\n };\n\n /**\n * Finds ontop file depends on file type <code>ontopFileType</code>\n * @param {OntopFileType} ontopFileType - the type of searched ontop file.\n * @return {OntopFileInfo} found ontop file.\n */\n $scope.getOntopFileInfo = (ontopFileType) => {\n return $scope.formData.settings.ontopFiles.find((ontopFileInfo) => ontopFileType === ontopFileInfo.type);\n };\n\n $scope.getHostNameLabel = () => {\n const hostNameLabel = 'snowflake' === $scope.selectedDriver.driverType ? 'ontop.repo.database.snowflake.host_name' : 'ontop.repo.database.host_name';\n return $translate.instant(hostNameLabel) + '*';\n };\n\n $scope.getDatabaseNameLabel = () => {\n let dataBaseNameLabelKey = '';\n switch ($scope.selectedDriver.driverType) {\n case 'snowflake':\n dataBaseNameLabelKey = 'ontop.repo.database.warehouse.database_name';\n break;\n case 'databricks':\n dataBaseNameLabelKey = 'ontop.repo.database.http_path.database_name';\n break;\n case 'dremio':\n dataBaseNameLabelKey = 'ontop.repo.database.schema.database_name';\n break;\n default:\n dataBaseNameLabelKey = 'ontop.repo.database.database_name';\n }\n return $translate.instant(dataBaseNameLabelKey);\n };\n\n /**\n * Updates value of <code>$scope.formData.connectionInformation.url</code> depends on other connection information: Host name, Port...\n */\n $scope.updateUrl = () => {\n const templateUrl = calculateTemplateUrl() || '';\n $scope.formData.connectionInformation.url = templateUrl + $scope.formData.connectionInformation.urlUserInput;\n };\n\n /**\n * Checks if test connection can be executed.\n * @return {boolean} true if all needed data is filled by the user.\n */\n $scope.isTestConnectionDisabled = () => {\n const connectionInformation = $scope.formData.connectionInformation;\n const selectedDriver = $scope.selectedDriver;\n if (!connectionInformation.driverClass || !connectionInformation.url || selectedDriver.portRequired && !connectionInformation.port) {\n return true;\n }\n return selectedDriver.driverType !== $scope.genericDriverType && (!connectionInformation.hostName || !connectionInformation.databaseName);\n };\n\n /**\n * Performs a test connection.\n */\n $scope.testConnection = () => {\n validateHostName()\n .then(validatePort)\n .then(validateDatabaseName)\n .then(validateDriverClass)\n .then(validateUrl)\n .then(updatePropertiesFile)\n .then(() => RepositoriesRestService.validateOntopPropertiesConnection($scope.repositoryInfo))\n .then(() => toastr.success($translate.instant('ontop.repo.successful.connection.msg')))\n .catch((error) => {\n if (error instanceof OntopRepositoryError) {\n toastr.error(error.message);\n } else {\n showErrorMsg($translate.instant('ontop.repo.failed.to.connect'), error);\n }\n });\n };\n\n /**\n * Updates the file with type <code>ontopFileType</code>.\n *\n * @param {OntopFileInfo} ontopFileInfo\n */\n $scope.editFile = (ontopFileInfo) => {\n\n const fileName = $scope.repositoryInfo.params[ontopFileInfo.type].label;\n const title = $translate.instant('update.file.edit.content.header', {fileName});\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/editRepoFile.html',\n controller: 'EditRepositoryFileCtrl',\n windowClass: 'update-ontop-repo-dialog',\n resolve: {\n file: () => {\n const ontopFile = $scope.repositoryInfo.params[ontopFileInfo.type];\n return ontopFile ? ontopFile.value : '';\n },\n dialogTitle: () => {\n return title;\n }\n }\n });\n\n modalInstance.result.then((data) => {\n // send data to backend\n RepositoriesRestService.updateRepositoryFileContent(data.fileLocation, data.content, $scope.repositoryInfo.location)\n .success((result) => {\n ontopFileInfo.fileName = getFileName(result.fileLocation);\n $scope.repositoryInfo.params[ontopFileInfo.type].value = result.fileLocation;\n }).error((error) => {\n showErrorMsg($translate.instant('common.error'), error);\n });\n });\n };\n\n $scope.uploadOntopFile = (files, ontopFileInfo) => {\n if (files && files.length) {\n const uploadFile = files[0];\n ontopFileInfo.loading = true;\n const uploadData = {\n url: 'rest/repositories/file/upload',\n data: {file: uploadFile, location: $scope.repositoryInfo.location}\n };\n Upload.upload(uploadData)\n .success((data) => {\n if (!data.success) {\n toastr.error(data.errorMessage);\n } else {\n ontopFileInfo.fileName = uploadFile.name;\n $scope.repositoryInfo.params[ontopFileInfo.type].value = data.fileLocation;\n }\n })\n .error((data) => {\n showErrorMsg($translate.instant('common.error'), data);\n $scope.uploadFile = '';\n })\n .finally(() => {\n ontopFileInfo.loading = false;\n });\n }\n };\n\n $scope.updateOntopRepo = () => {\n const createOrUpdate = $scope.editRepoPage ? $scope.editRepository : $scope.createRepo;\n validateRepositoryId()\n .then(validateHostName)\n .then(validatePort)\n .then(validateDatabaseName)\n .then(validateDriverClass)\n .then(validateUrl)\n .then(validateOntopFiles)\n .then(updatePropertiesFile)\n .then(createOrUpdate)\n .catch((error) => {\n if (error instanceof OntopRepositoryError) {\n toastr.error(error.message);\n } else {\n console.log(error);\n }\n });\n };\n\n /**\n * Some databases expect additional properties than hostname, port, database name in order to establish the connection.\n * So url is not readonly and user can modify it. Every driver instead generic one has template tha can't be changed by the user, it\n * is filled automatically when user writes hostname, port, and database name.\n *\n * This function prevent modification of driver template.\n *\n * @param event - event fired by key down.\n */\n $scope.onKeyDownInUrlInput = (event) => {\n const keyCode = event.keyCode;\n // We don't prevent event if user clicked on left, right arrow, home or end key,\n // the client can move cursor without matter where the cursor is.\n if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW || keyCode === HOME_KEY || keyCode === END_KEY) {\n return;\n }\n\n const templateUrl = calculateTemplateUrl();\n // If templateUrl is empty this means that chosen driver is generic or user is not filled hostname, port, or database name.\n // So user can type any characters into url input.\n if (!templateUrl) {\n return;\n }\n\n // Allows user to select all and copy the url value regardless that cursor position is in url template area.\n // event.metaKey -> Mac support\n const ctrlDown = event.ctrlKey || event.metaKey;\n if (ctrlDown && KEY_A === keyCode || ctrlDown && KEY_C === keyCode) {\n return;\n }\n\n const cursorPosition = event.target.selectionStart;\n\n if (keyCode === BACKSPACE && cursorPosition - 1 < templateUrl.length) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (cursorPosition < templateUrl.length) {\n // If templateUrl is not empty and cursor is in the middle of it, we will prevent the event and not allow to modify the url.\n event.preventDefault();\n event.stopPropagation();\n }\n\n // If templateUrl is not empty and cursor is after it, the user can write any character into the url input.\n };\n\n $scope.onKeyUpInUrlInput = () => {\n extractExtraUrl();\n };\n\n // =========================\n // Private functions\n // =========================\n\n /**\n * Extracts manual user input from url input element.\n */\n const extractExtraUrl = () => {\n const templateUrl = calculateTemplateUrl();\n if (templateUrl) {\n if ($scope.formData.connectionInformation.url.startsWith(templateUrl)) {\n // If templateUrl is not empty and url input value starts with the templateUrl, the text entered by user is part after the templateUrl.\n $scope.formData.connectionInformation.urlUserInput = $scope.formData.connectionInformation.url.substring(templateUrl.length);\n } else {\n // If templateUrl is not empty and url input value don't start with the templateUrl, all url is entered by the user.\n $scope.formData.connectionInformation.urlUserInput = $scope.formData.connectionInformation.url;\n }\n } else {\n // If templateUrl is empty this means that chosen driver is generic or user is not filled hostname, port, or database name.\n // So all characters in url input are entered by user.\n $scope.formData.connectionInformation.urlUserInput = $scope.formData.connectionInformation.url;\n }\n };\n\n const calculateTemplateUrl = () => {\n let url = $scope.selectedDriver.urlTemplate;\n const connectionInformation = $scope.formData.connectionInformation;\n if (connectionInformation.hostName) {\n if (connectionInformation.port) {\n url = url.replace('{hostport}', `${connectionInformation.hostName}:${connectionInformation.port}`);\n } else {\n url = url.replace('{hostport}', `${connectionInformation.hostName}`);\n }\n }\n if (connectionInformation.databaseName) {\n url = url.replace('{database}', connectionInformation.databaseName);\n }\n return url;\n };\n\n const loadSupportedDriversData = () => {\n return RepositoriesRestService.getSupportedDriversData($scope.repositoryInfo)\n .success((response) => {\n $scope.supportedDriversData = response;\n }).error((response) => {\n showErrorMsg($translate.instant('common.error'), response);\n });\n };\n\n const setLoading = (loading) => {\n $scope.formData.settings.ontopFiles.forEach((ontopFile) => {\n ontopFile.loading = loading;\n });\n };\n\n const loadPropertiesFile = () => {\n setLoading(true);\n RepositoriesRestService.loadPropertiesFile($scope.repositoryInfo.params.propertiesFile.value, $scope.repositoryInfo.location, $scope.selectedDriver.driverType)\n .success((driverData) => {\n let driver = $scope.supportedDriversData.find((driver) => driver.driverClass === driverData.driverClass);\n if (!driver) {\n driver = $scope.supportedDriversData.find((driver) => $scope.genericDriverType === driver.driverType);\n }\n $scope.selectDriver(driver.driverType);\n $scope.formData.connectionInformation.driverType = driver.driverType;\n $scope.formData.connectionInformation.databaseName = driverData.databaseName;\n $scope.formData.connectionInformation.driverClass = driverData.driverClass;\n $scope.formData.connectionInformation.hostName = driverData.hostName;\n $scope.formData.connectionInformation.password = driverData.password;\n $scope.formData.connectionInformation.port = driverData.port ? parseInt(driverData.port, 10) : undefined;\n $scope.formData.connectionInformation.username = driverData.userName;\n $scope.formData.connectionInformation.url = driverData.url;\n $scope.formData.settings.additionalProperties = driverData.additionalProperties;\n\n extractExtraUrl();\n $scope.updateUrl();\n\n Object.values(OntopFileType)\n .forEach((ontopFileType) => {\n const ontopFileInfo = $scope.repositoryInfo.params[ontopFileType];\n const ontopFile = $scope.getOntopFileInfo(ontopFileType);\n if (ontopFileInfo) {\n ontopFile.fileName = getFileName(ontopFileInfo.value);\n }\n });\n })\n .error((data) => {\n showErrorMsg($translate.instant('common.error'), data);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const updatePropertiesFile = () => {\n setLoading(true);\n const connectionInformation = $scope.formData.connectionInformation;\n\n const jdbc = {\n hostName: connectionInformation.hostName,\n port: connectionInformation.port,\n databaseName: connectionInformation.databaseName,\n userName: connectionInformation.username,\n password: connectionInformation.password,\n driverClass: connectionInformation.driverClass,\n url: connectionInformation.url,\n additionalProperties: $scope.formData.settings.additionalProperties\n };\n\n return RepositoriesRestService\n .updatePropertiesFile($scope.repositoryInfo.params.propertiesFile.value, jdbc, $scope.repositoryInfo.location, $scope.selectedDriver.driverType)\n .success((data) => {\n $scope.repositoryInfo.params.propertiesFile.value = data.fileLocation;\n }).error((data) => {\n showErrorMsg($translate.instant('common.error'), data);\n })\n .finally(() => setLoading(false));\n };\n\n const showErrorMsg = (title, data) => {\n const msg = getError(data);\n toastr.error(msg, title);\n };\n\n const validateHostName = () => {\n if ($scope.selectedDriver.driverType !== $scope.genericDriverType) {\n if (!$scope.formData.connectionInformation.hostName) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.host_name')})));\n }\n }\n return Promise.resolve();\n };\n\n const validateDatabaseName = () => {\n if ($scope.selectedDriver.driverType !== $scope.genericDriverType) {\n if (!$scope.formData.connectionInformation.databaseName) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.database_name')})));\n }\n }\n return Promise.resolve();\n };\n\n const validateDriverClass = () => {\n if (!$scope.formData.connectionInformation.driverClass) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.driver_class')})));\n }\n return Promise.resolve();\n };\n\n const validateUrl = () => {\n if (!$scope.formData.connectionInformation.url) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.url')})));\n }\n return Promise.resolve();\n };\n\n const validateRepositoryId = () => {\n if (!$scope.repositoryInfo.id) {\n return Promise.reject(new OntopRepositoryError($translate.instant('empty.repoid.warning')));\n }\n return Promise.resolve();\n };\n\n const validateOntopFiles = () => {\n if (!$scope.getOntopFileInfo(OntopFileType.OBDA).fileName) {\n return Promise.reject(new OntopRepositoryError($translate.instant('ontop.repo.missing.required.file', {fileName: $scope.repositoryInfo.params[OntopFileType.OBDA].label})));\n }\n return Promise.resolve();\n };\n\n const validatePort = () => {\n if ($scope.selectedDriver.portRequired && !$scope.formData.connectionInformation.port) {\n return Promise.reject(new OntopRepositoryError($translate.instant('missing.required.field', {fieldName: $translate.instant('ontop.repo.database.port')})));\n }\n return Promise.resolve();\n };\n\n // =========================\n // Initialize component data\n // =========================\n\n Object.values(OntopFileType)\n .forEach((ontopFileType) => {\n const ontopFileInfo = new OntopFileInfo(ontopFileType);\n $scope.formData.settings.ontopFiles.push(ontopFileInfo);\n });\n\n $scope.getOntopFileInfo(OntopFileType.OBDA).required = true;\n\n\n loadSupportedDriversData()\n .then(() => {\n if ($scope.editRepoPage) {\n loadPropertiesFile();\n } else {\n $scope.selectDriver($scope.genericDriverType);\n }\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","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"],"sourceRoot":""}
|