UNPKG

@wbg-mde/repository

Version:

Managing all common method for file system CRUD operations.

275 lines (274 loc) 15.5 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); const repositoryContainer_1 = require("../repository/repositoryContainer"); const app_repo_utility_1 = require("../shared/app.repo.utility"); const app_repo_constants_1 = require("../shared/app.repo.constants"); const project_configuration_1 = require("../configuration/project.configuration"); const model_1 = require("@wbg-mde/model"); const model_2 = require("@wbg-mde/model"); const trace_decorator_1 = require("../decorators/trace.decorator"); const path = require("path"); let ProjectHeader = class ProjectHeader { addNewStudy(studyType, language, newStudyAdded) { this.getAvailableStudyName((studyName) => { project_configuration_1.configuaration.refresh(); let repository = repositoryContainer_1.repoContainer.get(); let selectedDataType = app_repo_utility_1.App_Repository_Utility.getDataTypeByType(studyType); if (selectedDataType) { if (selectedDataType.custom === true) { language = selectedDataType.language; } let templateFile = this.getDefaultTemplate(studyType, language); let dblnCoreTemplate = "NA"; if (selectedDataType.dblngcore !== false) { dblnCoreTemplate = this.getDefaultTemplate(app_repo_constants_1.App_Repository_Constants.schemaTypes.dbln_core, language); } let newStudy = new model_1.ProjectHeader({ version: app_repo_constants_1.App_Repository_Constants.projectHeader.version, _id: app_repo_utility_1.App_Repository_Utility.generateGUID(), header: '', type: studyType, name: studyName, template: templateFile, language: language, where: '', by: '', created: new Date(), modified: null, archived: null, closed: null, status: model_1.ProjectStatus.new, dblngcoretemplate: dblnCoreTemplate }); repository.create(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, newStudy, (response) => { if (response.result == 'ok') { let metadata = this.getProjectModel(studyType, { _id: response.data._id }); repository.create(response.data._id, app_repo_constants_1.App_Repository_Constants.metadataHeader.db_name, metadata, (response_metadata) => { if (response_metadata.result == 'ok') { newStudyAdded({ result: 'ok', project: { header: response.data, metadata: response_metadata.data } }); } else { return response_metadata; } }); } else { return response; } }); } else { newStudyAdded({ result: 'error', message: 'datatype not found!!' }); } }); } saveStudy(projectHeader, projectMetaData, studySaved) { let repository = repositoryContainer_1.repoContainer.get(); let query = { "_id": projectHeader._id || '' }; projectHeader.modified = new Date(); if (projectHeader.status === model_1.ProjectStatus.archived) { projectHeader.archived = new Date(); } repository.update(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, query, projectHeader, (response) => { if (response.result == 'ok') { repository.update(projectMetaData._id, app_repo_constants_1.App_Repository_Constants.metadataHeader.db_name, query, projectMetaData, (updatedRecord) => { studySaved(updatedRecord); }); } }); } removeTempStudy(id, tempStudyRemoved) { let repository = repositoryContainer_1.repoContainer.get(); repository.findById(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, id, (response_header) => { if (response_header.result == 'ok') { repository.deleteById(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, id, (response) => { if (response.result == 'ok') { let folderPath = path.join(project_configuration_1.configuaration.userDataPath, app_repo_constants_1.App_Repository_Constants.userDataPaths.cur_user, app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, id); app_repo_utility_1.App_Repository_Utility.deleteFolder(folderPath); tempStudyRemoved(response); } }); let fpath = response_header.data.header; app_repo_utility_1.App_Repository_Utility.deleteFile(fpath); } }); } removeAlltempStudy(rowIds, tempStudyRemoved) { for (var i = 0; i < rowIds.length; i++) { this.removeTempStudy(rowIds[i], tempStudyRemoved); } } removeAllnewStudy(callback) { let repository = repositoryContainer_1.repoContainer.get(); let filter = { "status": model_1.ProjectStatus.new }; this.getAllProjects(filter, (response) => { if (response.result == 'ok') { for (var i = 0; i < response.data.length; i++) { let id = response.data[i]._id; let folderPath = path.join(project_configuration_1.configuaration.userDataPath, app_repo_constants_1.App_Repository_Constants.userDataPaths.cur_user, app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, id); app_repo_utility_1.App_Repository_Utility.deleteFolder(folderPath); } repository.deleteByStatus(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, model_1.ProjectStatus.new, (responses) => { callback(responses); }); } }); } openStudy(filePath, callback) { let projectFile = app_repo_utility_1.App_Repository_Utility.readFile(filePath).toString(); let projectHeaderId = JSON.parse(projectFile)._id; this.openStudyById(projectHeaderId, callback); } openStudyById(id, callback) { let repository = repositoryContainer_1.repoContainer.get(); repository.findById(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, id, (response_header) => { if (response_header.result == 'ok') { repository.findById(id, app_repo_constants_1.App_Repository_Constants.metadataHeader.db_name, id, (response_metadata) => { if (response_metadata.result == 'ok') { callback({ result: 'ok', header: response_header.data, metadata: response_metadata.data }); } else { callback(response_metadata); } }); } else { callback(response_header); } }); } getAllProjects(filter, projectFetched) { let repository = repositoryContainer_1.repoContainer.get(); repository.findByFilter(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, filter, (response) => { projectFetched(response); }); } getAvailableStudyName(callback) { let repository = repositoryContainer_1.repoContainer.get(); repository.find(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, (response) => { if (response.result == 'ok') { let projects = response.data.map((value) => { return value.name; }); let i = 1; for (i = 1; projects.indexOf(app_repo_constants_1.App_Repository_Constants.projectHeader.temp_name_format + i) > -1; i++) { } callback(app_repo_constants_1.App_Repository_Constants.projectHeader.temp_name_format + i); } else { callback(app_repo_constants_1.App_Repository_Constants.projectHeader.temp_name_format + 1); } }); } getDefaultTemplate(type, language) { let defaultTemplates = project_configuration_1.configuaration.defaultTemplates; let templateFile = defaultTemplates[(type + "_" + language)]; if (templateFile) { return templateFile; } let types = app_repo_utility_1.App_Repository_Utility.getTypes(true); templateFile = types .filter((val) => { return (val.type == type); }) .map((val) => { return val.template; }); return app_repo_utility_1.App_Repository_Utility.formatFileNameByLanguage(templateFile[0], language, false); } getProjectModel(type, data) { switch (type) { case app_repo_constants_1.App_Repository_Constants.schemaTypes.ddi: case app_repo_constants_1.App_Repository_Constants.schemaTypes.survey: return new model_2.Survey(data); case app_repo_constants_1.App_Repository_Constants.schemaTypes.geospatial: return new model_2.Geospatial(data); case app_repo_constants_1.App_Repository_Constants.schemaTypes.timeseries: return new model_2.TimeSeries(data); default: return new model_1.ProjectMetadata(data); } } deleteDatasetFiles(datasets, datasetRemoved) { try { for (let i = 0; i < datasets.length; i++) { let csvPath = datasets[i].filePath; app_repo_utility_1.App_Repository_Utility.deleteFile(csvPath); let filename = csvPath.substring(0, csvPath.lastIndexOf('.')); if (filename.endsWith('_V1')) { let filename = csvPath.substring(0, csvPath.lastIndexOf('_')); app_repo_utility_1.App_Repository_Utility.deleteFile(filename + '.csv'); app_repo_utility_1.App_Repository_Utility.deleteFile(filename + '.json'); } else { let jsonpath = csvPath.substring(0, csvPath.lastIndexOf('.')) + '.json'; app_repo_utility_1.App_Repository_Utility.deleteFile(jsonpath); } } datasetRemoved({ result: 'ok' }); } catch (e) { console.log('Repo >> Delete Dataset Files >> ' + e); datasetRemoved({ result: 'error', messages: e }); } } moveFoldersToNewProject(activeProjId, newProjId, folderMoved) { try { let activeProjPath = path.join(project_configuration_1.configuaration.userDataPath, app_repo_constants_1.App_Repository_Constants.userDataPaths.cur_user, app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, activeProjId); let newProjPath = path.join(project_configuration_1.configuaration.userDataPath, app_repo_constants_1.App_Repository_Constants.userDataPaths.cur_user, app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, newProjId); app_repo_utility_1.App_Repository_Utility.moveFolder(activeProjPath, newProjPath); folderMoved({ result: 'ok' }); } catch (e) { console.log('Repo >> Move Folders >> ' + e); folderMoved({ result: 'error', messages: e }); } } checkFileExistence(project, callback) { let repository = repositoryContainer_1.repoContainer.get(); repository.findByName(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, project.header.name, project._id, (response_header) => { if (response_header.result == 'ok' && response_header.data) { repository.deleteById(app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, app_repo_constants_1.App_Repository_Constants.projectHeader.db_name, response_header.data._id, (response) => { if (response.result == 'ok') { let folderPath = path.join(project_configuration_1.configuaration.userDataPath, app_repo_constants_1.App_Repository_Constants.userDataPaths.cur_user, app_repo_constants_1.App_Repository_Constants.projectHeader.base_folder, response_header.data._id); app_repo_utility_1.App_Repository_Utility.deleteFolder(folderPath); callback(response); } }); } else { callback(response_header); } }); } saveAllOPenStudies(projects, callback) { if (projects.length > 0) { let index = 0; this.saveUnSavedStudies(projects, index, () => { this.removeAllnewStudy((resp) => { callback(resp); }); }); } else { this.removeAllnewStudy((resp) => { callback(resp); }); } } saveUnSavedStudies(projects, index, callback) { const project = projects[index]; this.saveStudy(project.header, project.metadata, (resp) => { index++; if (index < projects.length) { this.saveUnSavedStudies(projects, index, callback); } else { callback(); } }); } }; ProjectHeader = __decorate([ trace_decorator_1.Trace({ params: { 'saveStudy': [1] } }) ], ProjectHeader); exports.ProjectHeader = ProjectHeader;