graphdb-workbench 2.3.0-TR13 → 2.3.0-TR14
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 → 108.2a3cf65810651d09177e.bundle.js} +2 -2
- package/dist/108.2a3cf65810651d09177e.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/{172.8b5bc91c1b15909a0ce4.bundle.js → 172.d80696724520505a794d.bundle.js} +2 -2
- package/dist/{172.8b5bc91c1b15909a0ce4.bundle.js.map → 172.d80696724520505a794d.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.07350ccc2e95126b165e.bundle.js +2 -0
- package/dist/21.07350ccc2e95126b165e.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.dacee83de90b0e3091da.bundle.js → bundle.fb5d69798d676122d4e6.bundle.js} +3 -3
- package/dist/{bundle.dacee83de90b0e3091da.bundle.js.map → bundle.fb5d69798d676122d4e6.bundle.js.map} +1 -1
- package/dist/i18n/locale-en.json +5 -0
- package/dist/i18n/locale-fr.json +5 -0
- package/dist/index.html +3 -3
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/repositories/templates/ontop-repo.html +2 -2
- 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.48d356705148824d9fa5.bundle.js.map +0 -1
- package/dist/21.45b691e4f5bf3f075855.bundle.js +0 -2
- package/dist/21.45b691e4f5bf3f075855.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","editRepoPage","currentOntopRepoInfo","angular","copy","clearFormData","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","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","module","directive","$inject"],"mappings":"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","file":"108.48d356705148824d9fa5.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.editRepoPage && $scope.currentOntopRepoInfo && $scope.currentOntopRepoInfo.connectionInformation.driverType === driverType) {\n $scope.formData = angular.copy($scope.currentOntopRepoInfo);\n } else {\n clearFormData();\n $scope.formData.connectionInformation.driverType = $scope.selectedDriver.driverType;\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 $scope.currentOntopRepoInfo = angular.copy($scope.formData);\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 const clearFormData = () => {\n $scope.formData = {\n connectionInformation: new OntopConnectionInformation(),\n settings: {\n additionalProperties: '',\n ontopFiles: []\n }\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 // =========================\n // Initialize component data\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([[21,53,107,108,124],{100: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 n(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(n),t.$inject=["$httpProvider","$routeProvider"],n.$inject=["$rootScope","$location","$licenseService"]},106:function(e,r,o){"use strict";o.r(r);var t=o(66);const n={OBDA:"obdaFile",OWL:"owlFile",CONSTRAINT:"constraintFile",LENSES:"lensesFile",DB_METADATA:"dbMetadataFile"};class s{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,o,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=n,d.selectedDriver=new c,d.supportedDriversData=[],d.formData={connectionInformation:new s,settings:{additionalProperties:"",ontopFiles:[]}},d.selectDriver=e=>{d.selectedDriver=d.supportedDriversData.find(r=>r.driverType===e),d.editRepoPage&&d.currentOntopRepoInfo&&d.currentOntopRepoInfo.connectionInformation.driverType===e?d.formData=angular.copy(d.currentOntopRepoInfo):(R(),d.formData.connectionInformation.driverType=d.selectedDriver.driverType),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=f()||"";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(N).then(b).then(h).then(w).then(v).then(()=>r.validateOntopPropertiesConnection(d.repositoryInfo)).then(()=>o.success(p.instant("ontop.repo.successful.connection.msg"))).catch(e=>{e instanceof a?o.error(e.message):g(p.instant("ontop.repo.failed.to.connect"),e)})},d.editFile=o=>{const n=d.repositoryInfo.params[o.type].label,s=p.instant("update.file.edit.content.header",{fileName:n});e.open({templateUrl:"js/angular/templates/modal/editRepoFile.html",controller:"EditRepositoryFileCtrl",windowClass:"update-ontop-repo-dialog",resolve:{file:()=>{const e=d.repositoryInfo.params[o.type];return e?e.value:""},dialogTitle:()=>s}}).result.then(e=>{r.updateRepositoryFileContent(e.fileLocation,e.content,d.repositoryInfo.location).success(e=>{o.fileName=Object(t.getFileName)(e.fileLocation),d.repositoryInfo.params[o.type].value=e.fileLocation}).error(e=>{g(p.instant("common.error"),e)})})},d.uploadOntopFile=(e,r)=>{if(e&&e.length){const t=e[0];r.loading=!0;const n={url:"rest/repositories/file/upload",data:{file:t,location:d.repositoryInfo.location}};l.upload(n).success(e=>{e.success?(r.fileName=t.name,d.repositoryInfo.params[r.type].value=e.fileLocation):o.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;D().then(y).then(N).then(b).then(h).then(w).then(I).then(v).then(e).catch(e=>{e instanceof a?o.error(e.message):console.log(e)})},d.onKeyDownInUrlInput=e=>{const r=e.keyCode;if(37===r||39===r||36===r||35===r)return;const o=f();if(!o)return;const t=e.ctrlKey||e.metaKey;if(t&&65===r||t&&67===r)return;const n=e.target.selectionStart;8===r&&n-1<o.length&&(e.preventDefault(),e.stopPropagation()),n<o.length&&(e.preventDefault(),e.stopPropagation())},d.onKeyUpInUrlInput=()=>{m()};const m=()=>{const e=f();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},f=()=>{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},u=e=>{d.formData.settings.ontopFiles.forEach(r=>{r.loading=e})},v=()=>{u(!0);const e=d.formData.connectionInformation,o={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,o,d.repositoryInfo.location,d.selectedDriver.driverType).success(e=>{d.repositoryInfo.params.propertiesFile.value=e.fileLocation}).error(e=>{g(p.instant("common.error"),e)}).finally(()=>u(!1))},g=(e,r)=>{const t=getError(r);o.error(t,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")}))),D=()=>d.repositoryInfo.id?Promise.resolve():Promise.reject(new a(p.instant("empty.repoid.warning"))),I=()=>d.getOntopFileInfo(n.OBDA).fileName?Promise.resolve():Promise.reject(new a(p.instant("ontop.repo.missing.required.file",{fileName:d.repositoryInfo.params[n.OBDA].label}))),N=()=>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(),R=()=>{d.formData={connectionInformation:new s,settings:{additionalProperties:"",ontopFiles:[]}},Object.values(n).forEach(e=>{const r=new i(e);d.formData.settings.ontopFiles.push(r)}),d.getOntopFileInfo(n.OBDA).required=!0};r.getSupportedDriversData(d.repositoryInfo).success(e=>{d.supportedDriversData=e}).error(e=>{g(p.instant("common.error"),e)}).then(()=>{d.editRepoPage?(u(!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(n).forEach(e=>{const r=d.repositoryInfo.params[e],o=d.getOntopFileInfo(e);r&&(o.fileName=Object(t.getFileName)(r.value))}),d.currentOntopRepoInfo=angular.copy(d.formData)}).error(e=>{g(p.instant("common.error"),e)}).finally(()=>{u(!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,o){"use strict";o.r(r);o(4),o(11),o(16),o(66),o(106),o(99),o(10),o(100),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,n){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,n.instant("error.getting.settings"))}}))},e.getSettings(),e.setSettings=function(){e.loader=!0,t.toggleStatistics(e.settings.statistics).then((function(){o.close(),r.success(n.instant("saving.settings.success"))}),(function(e){const o=getError(e.data);r.error(o,n.instant("saving.settings.error"))}))},e.submitForm=function(){e.setSettings()},e.cancel=function(){o.dismiss("cancel")}}function n(e,r,o,t,n,s,i){e.loadingLicense=function(){return o.loadingLicense},o.checkLicenseStatus(),e.revertToFree=function(){s.openSimpleModal({title:i.instant("confirm.operation"),message:i.instant("revert.to.free.warning.msg"),warning:!0}).result.then((function(){r.unregisterLicense().success((function(){o.checkLicenseStatus()}))}))}}function s(e,r,o,t,n,s,i,a){e.$on("securityInit",(function(){i.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(){n.error(a.instant("license.register.error"))}))}else n.error(a.instant("no.license.code.error"))}(o)}))}(o,e)):(c.val(""),n.error(o.message))})).error((function(){n.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(){n.error(a.instant("could.not.upload.file.error"))}))}})),e.getBackToPreviousPage=function(){s.history.back()}}function i(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",i).controller("LicenseCtrl",n).controller("RegisterLicenseCtrl",s).controller("LoaderSamplesCtrl",a),t.$inject=["$scope","toastr","$uibModalInstance","LicenseRestService","$translate"],n.$inject=["$scope","LicenseRestService","$licenseService","toastr","$rootScope","ModalService","$translate"],s.$inject=["$scope","LicenseRestService","$location","$uibModal","toastr","$window","$jwtAuth","$translate"],i.$inject=["$scope","$uibModalInstance","license"],a.$inject=["$scope"]},99:function(e,r){function o(e,r,o,t){return{restrict:"E",scope:!0,templateUrl:"js/angular/repositories/templates/fedx-repo.html",link:function(n){const s="ResolvableRepository";n.fedxMembers=[],n.knownRepos=[],n.allAttachedRepos=[],n.editRepoPage&&(n.fedxMembers=n.repositoryInfo.params.member.value.slice());function i(){for(const e of n.fedxMembers)n.knownRepos=n.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(n.repositoryInfo.location).success((function(e){let r=[];_.values(e).forEach(e=>{r.push.apply(r,e)}),n.allAttachedRepos=_.cloneDeep(r)})).error((function(e){const r=getError(e);o.error(r,t.instant("common.error"))})).then((function(){n.knownRepos=n.allAttachedRepos.slice(),i()}))}n.setWritableRepo=function(e){let r=n.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)},n.getActiveClass=function(e){return"true"===e.writable?" active":""},n.checkIfRepoExist=function(e){return!n.allAttachedRepos.length||(e.store===s?n.allAttachedRepos.find(r=>r.id===e.repositoryName&&!r.location):"RemoteRepository"!==e.store||n.allAttachedRepos.find(r=>r.id===e.repositoryName&&r.location===e.repositoryServer))},n.getRepositoryServer=function(e){return e.local?"Local":e.location};const c=setInterval((function(){a()}),5e3);function l(e){n.fedxMembers.push(e),n.repositoryInfo.params.member.value=n.fedxMembers}function p(e){return"/"===e.slice(-1)?e.slice(0,-1):e}function d(){return n.editRepoPage&&!n.editRepoPage||!n.model.editMode}n.$on("$destroy",(function(){clearInterval(c)})),n.addMember=function(e){let r;r="Local"===n.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"},n.knownRepos=n.knownRepos.filter(r=>r.id!==e.id||r.location!==e.location),l(r)},n.removeMember=function(e){e.store&&e.store===s?(n.fedxMembers=n.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName&&!r.repositoryServer),a()):e.store&&"SPARQLEndpoint"===e.store?n.fedxMembers=n.fedxMembers.filter(r=>r.endpoint!==e.endpoint):e.store&&"NativeStore"===e.store?n.fedxMembers=n.fedxMembers.filter(r=>r.repositoryLocation!==e.repositoryLocation):e.store&&"RemoteRepository"===e.store&&(n.fedxMembers=n.fedxMembers.filter(r=>r.store!==e.store||r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer),a()),n.repositoryInfo.params.member.value=n.fedxMembers},n.addRemoteMember=function(){n.mode="remote",n.model={editMode:!1,store:"RemoteRepository",repositoryName:"",repositoryServer:"",sparqlEndpoint:"",username:"",password:"",supportsASKQueries:"true",writable:"false"},n.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:n})},n.getMemberIcon=function(e){return e.repoType?"icon-repo-"+e.repoType:"NativeStore"===e.store?"icon-warning":"icon-link"},n.editFedXRepository=function(r){r.store===s?(n.mode="local",n.model={editMode:!0,store:r.store,respectRights:r.respectRights,repositoryName:r.repositoryName,repoType:r.repoType,writable:r.writable}):(n.mode="remote",n.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}),n.$uibModalInstance=e.open({templateUrl:"js/angular/templates/modal/add-fedx-remote-repo.html",scope:n})},n.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""}},n.cancel=function(){n.$uibModalInstance.dismiss("cancel")},n.ok=function(){let e;if(n.model.repositoryName&&n.model.store===s)e={store:s,repositoryName:n.model.repositoryName,repoType:n.model.repoType,respectRights:n.model.respectRights,writable:n.model.writable},n.fedxMembers=n.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.store!==e.store);else if(n.model.repositoryName&&"RemoteRepository"===n.model.store){if(e={store:"RemoteRepository",repositoryName:n.model.repositoryName,repositoryServer:p(n.model.repositoryServer),username:n.model.username,password:n.model.password,writable:n.model.writable},d()&&n.fedxMembers.find(r=>r.repositoryName===e.repositoryName&&r.repositoryServer===e.repositoryServer)){let r=n.resolveName(e);return o.error(t.instant("fedx.repo.already.added.member.error",{name:r})),void n.$uibModalInstance.close()}n.fedxMembers=n.fedxMembers.filter(r=>r.repositoryName!==e.repositoryName||r.repositoryServer!==e.repositoryServer)}else{if(e={store:"SPARQLEndpoint",endpoint:p(n.model.sparqlEndpoint),username:n.model.username,password:n.model.password,supportsASKQueries:n.model.supportsASKQueries,writable:n.model.writable},d()&&n.fedxMembers.find(r=>r.endpoint===e.endpoint)){let r=n.resolveName(e);return o.error(t.instant("fedx.repo.already.added.sparql.endpoint.error",{name:r})),void n.$uibModalInstance.close()}n.fedxMembers=n.fedxMembers.filter(r=>r.endpoint!==e.endpoint)}l(e),i(),n.$uibModalInstance.close()},n.$on("changedLocation",(function(){n.fedxMembers=[],a()})),a()}}}angular.module("graphdb.framework.repositories.fedx-repo.directive",[]).directive("fedxRepo",o),o.$inject=["$uibModal","RepositoriesRestService","toastr","$translate"]}}]);
|
|
2
|
-
//# sourceMappingURL=21.45b691e4f5bf3f075855.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","editRepoPage","currentOntopRepoInfo","copy","clearFormData","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","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.45b691e4f5bf3f075855.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.editRepoPage && $scope.currentOntopRepoInfo && $scope.currentOntopRepoInfo.connectionInformation.driverType === driverType) {\n $scope.formData = angular.copy($scope.currentOntopRepoInfo);\n } else {\n clearFormData();\n $scope.formData.connectionInformation.driverType = $scope.selectedDriver.driverType;\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 $scope.currentOntopRepoInfo = angular.copy($scope.formData);\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 const clearFormData = () => {\n $scope.formData = {\n connectionInformation: new OntopConnectionInformation(),\n settings: {\n additionalProperties: '',\n ontopFiles: []\n }\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 // =========================\n // Initialize component data\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":""}
|