@wbg-mde/repository
Version:
Managing all common method for file system CRUD operations.
275 lines (274 loc) • 15.5 kB
JavaScript
;
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;