UNPKG

@wbg-mde/repository

Version:

Managing all common method for file system CRUD operations.

656 lines (655 loc) 37.6 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 export_master_config_1 = require("../shared/configs/export.master.config"); const template_service_1 = require("../shared/services/template.service"); const import_study_service_1 = require("../shared/services/import.study.service"); const app_repo_utility_1 = require("../shared/app.repo.utility"); const export_helpers_1 = require("../shared/services/export.helpers"); const _ = require('lodash'); const trace_decorator_1 = require("../decorators/trace.decorator"); let ImportDDI = class ImportDDI { constructor() { this.templateService = new template_service_1.TemplateService(); this.importService = new import_study_service_1.ImportStudyService(); this.helpers = new export_helpers_1.ExportHelpers(); } readImportedFile(filePath, studyType, language, options, callBack) { try { this.importService.parseXMLtoJSON(filePath, (parser_resp) => { if (parser_resp.result == 'ok') { let data = parser_resp.data; let metadata = {}; if (data[export_master_config_1.Export_Master_Config.xmlNodeProps.rootNode]) { let ddiDoc = data[export_master_config_1.Export_Master_Config.xmlNodeProps.rootNode]; this.templateService.getTreeViewSchema(studyType, language, (response) => { let nodes = response.nodes; let self = this; _.forEach(ddiDoc, (item, key) => { if (key == export_master_config_1.Export_Master_Config.codeBookNodes.FileDescription) { let editorMapSchema = export_master_config_1.Export_Master_Config.fileDescSectionMap; self.templateService.createTreeViewSchema(editorMapSchema, response.schema, response.form, (response) => { self.getFileDescription(item, metadata, response); }); } else if (key == export_master_config_1.Export_Master_Config.codeBookNodes.DataDescription) { let editorMapSchema = export_master_config_1.Export_Master_Config.variableDocSectionMap; self.templateService.createTreeViewSchema(editorMapSchema, response.schema, response.form, (response) => { self.getDataDescription(item, metadata, response); }); } else { if (options[key]) { let treenode = _.filter(nodes, (obj) => { return obj.key == key; }); if (treenode && treenode.length > 0) { self.getDDIObject(treenode[0], ddiDoc, metadata); } } } }); this.assignVariableNumber(metadata.variables); callBack({ result: "ok", data: metadata }); }); } else { callBack({ result: "warning", messages: "This is not a valid DDI document." }); } } else { callBack(parser_resp); } }); } catch (e) { callBack({ result: "error", messages: e }); app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > readImportedFile > ' + e, 3); } } getDDIObject(form, data, outData) { try { if (form.nodes && form.nodes instanceof Array) { let self = this; _.forEach(form.nodes, function (__node) { if (__node.nodes && __node.nodes instanceof Array) { self.getDDIObject(__node, data, outData); } else { if (__node.formschema.exportKey) { if (__node.formschema.exportMapFn) { self.helpers[__node.formschema.exportMapFn](export_master_config_1.Export_Master_Config.actions.import, data, __node.formschema.items, __node.formschema.exportKey, outData, __node.key); } else { let __data = app_repo_utility_1.App_Repository_Utility.getNestedProperty(data, __node.formschema.exportKey); if (__data) { __data = self.convertToDataType(__node.formschema, __data); if (__node.formschema.splArray && __node["exportKey"]) { var tempData = _.cloneDeep(outData) || {}; var tempJson = {}; self .importService .setNestedProperty(outData, __node["exportKey"], __data); outData = _.merge(outData, tempData); } else { self .importService .setNestedProperty(outData, __node.key, __data); } } } } } }); } return outData; } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > getDDIObject > ' + e, 3); return outData; } } getFileDescription(data, outData, form) { try { let fileDescr = new Array(); if (data && data instanceof Array) { outData[export_master_config_1.Export_Master_Config.ddiNodes.dataSets] = {}; let self = this; _.forEach(data, function (file) { let fileDescription = {}; let headerProps = file[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]; if (headerProps) { let headerObj = self.buildFileObject(headerProps); fileDescription = headerObj; } let fileTextObj = self.buildFileObject(file[export_master_config_1.Export_Master_Config.fileDescriptionProps.fileText]); if (fileTextObj) { fileDescription[export_master_config_1.Export_Master_Config.fileDescriptionProps.fileText] = {}; _.forEach(fileTextObj, function (val, key) { if (export_master_config_1.Export_Master_Config.staticProps.fileText.indexOf(key) > -1) { fileDescription[export_master_config_1.Export_Master_Config.fileDescriptionProps.fileText][key] = val; } }); if (fileTextObj.fileName) { fileDescription["Name"] = fileTextObj.fileName.replace(/\.[^/.]+$/, ""); } } if (form instanceof Array && form.length == 1) { form = form[0]; } self.getFileDescriptionObject(form, file, fileDescription); fileDescr.push(fileDescription); }); outData[export_master_config_1.Export_Master_Config.ddiNodes.dataSets][export_master_config_1.Export_Master_Config.ddiNodes.fileDescription] = fileDescr; } } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > getFileDescription > ' + e, 3); } } getDataDescription(data, outData, treeNodes) { try { if (data instanceof Array && data[0]) { outData[export_master_config_1.Export_Master_Config.ddiNodes.variables] = {}; let variables = data[0][export_master_config_1.Export_Master_Config.codeBookNodes.variable]; let self = this; let parentNodeKey = "variables."; if (variables instanceof Array) { let outVariables = {}; _.forEach(variables, function (variable) { let varDescr = {}; varDescr = self.getVariableObject(treeNodes[0], variable, varDescr, parentNodeKey); _.forEach(variable, (item, key) => { if (key === export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute) { _.forEach(item, (attrItem, attrKey) => { varDescr[attrKey] = attrItem; }); } else if (key === export_master_config_1.Export_Master_Config.variableDescriptionProps.format) { if (item) { varDescr = self.getFormat(item, varDescr); } } else if (key === export_master_config_1.Export_Master_Config.variableDescriptionProps.location) { if (item) { varDescr = self.getLocation(item, varDescr); } } else if (key == export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange) { if (item) { varDescr = self.getValidRange(item, varDescr); } } else if (key == export_master_config_1.Export_Master_Config.variableDescriptionProps.invalidRange) { if (item) { varDescr = self.getInvalidRange(item, varDescr); } } else if (key == export_master_config_1.Export_Master_Config.variableDescriptionProps.summaryStatus) { if (item instanceof Array) { let summary = new Array(); _.forEach(item, function (status) { let summaryObj = {}; if (status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute] && status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"] && !status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["wgtd"]) { if (status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"] == "mean" || status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"] == "stdev") { if (!varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange]) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange] = {}; } if (!varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range]) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range] = {}; } varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range][status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"]] = status[export_master_config_1.Export_Master_Config.xmlNodeProps.elementProp]; } else if (status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"] == "vald" || status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"] == "invd") { summaryObj["type"] = status[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["type"]; summaryObj["text"] = status[export_master_config_1.Export_Master_Config.xmlNodeProps.elementProp]; summary.push(summaryObj); } } }); varDescr[key] = summary; } } else if (key == export_master_config_1.Export_Master_Config.variableDescriptionProps.category) { if (item) { varDescr = self.getCategory(item, varDescr); } } else { let variableProps = varDescr.variables || {}; if (!variableProps[key]) { if (item instanceof Array && item.length == 1) { let propVal = item[0]; if (propVal instanceof Object) { varDescr[key] = {}; _.forEach(propVal, (atrVal, atrKey) => { if (atrVal instanceof Array) { varDescr[key][atrKey] = atrVal[0]; } else { varDescr[key][atrKey] = atrVal; } }); } else { varDescr[key] = item[0]; } } } } }); varDescr = self.setRequiredProps(varDescr); if (varDescr.files) { if (outVariables[varDescr.files]) { outVariables[varDescr.files].push(varDescr); } else { outVariables[varDescr.files] = [varDescr]; } } }); outData[export_master_config_1.Export_Master_Config.ddiNodes.variables] = outVariables; } let varGroups = data[0][export_master_config_1.Export_Master_Config.codeBookNodes.varGroups]; if (varGroups && varGroups.length > 0) { let outGroups = []; for (let group of varGroups) { let oGroup = {}; let keys = _.keys(group); for (let key of keys) { if (key === export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute) { let hKeys = _.keys(group[key]); for (let hkey of hKeys) { if (hkey === export_master_config_1.Export_Master_Config.codeBookNodes.variable) { let varbls = group[key][hkey]; oGroup['variables'] = varbls ? varbls.split(' ') : []; } else { oGroup[hkey] = group[key][hkey]; } } } else { oGroup[key] = group[key][0]; } } outGroups.push(oGroup); } outData[export_master_config_1.Export_Master_Config.ddiNodes.varGroups] = outGroups; } } } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > getDataDescription > ' + e, 3); } } buildFileObject(data) { try { if (data instanceof Array) { return this.buildFileObject(data[0]); } else if (data instanceof Object) { let outObj = {}; _.forEach(data, (item, key) => { if (key == export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute) { _.forEach(item, (attrItem, attrKey) => { outObj[attrKey] = attrItem; }); } else if (item instanceof Object || item instanceof Array) { outObj[key] = this.buildFileObject(item); } else { outObj[key] = item; } }); return outObj; } else { return data; } } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > buildFileObject > ' + e, 3); return data; } } convertToDataType(schema, value) { try { let type = schema.type; switch (type) { case export_master_config_1.Export_Master_Config.formSchemaTypes.table: let tableVal = new Array(); _.forEach(value, function (val) { let rowVal = {}; let i = 0; _.forEach(schema.items, function (item) { let keys = item .key .split("."); let propName = keys[keys.length - 1]; if (item.exportKey) { if (val instanceof Object) { let propVal = app_repo_utility_1.App_Repository_Utility.getNestedProperty(val, item.exportKey); if (propVal) { if (propVal instanceof Array) { rowVal[propName] = propVal[0]; } else { rowVal[propName] = propVal; } } } else { if (item.exportKey == export_master_config_1.Export_Master_Config.xmlNodeProps.elementProp) { rowVal[propName] = val; } } } else { if (val[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]) { if (val[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute][propName]) { rowVal[propName] = val[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute][propName]; } } } }); tableVal.push(rowVal); }); if (schema.period) { let items = schema.items; let cnt = 0; let periods = new Array(); _.forEach(tableVal, function (item) { var curschema = items[cnt]; if (curschema.type == "date" || curschema.type == "month") { let date = String(item.date); if (date.indexOf('T') !== -1) { date = date.split('T')[0]; } item.date = date; } if (item.event == "start") { let period = {}; period["date"] = item.date; period["event"] = ""; period["cycle"] = item.cycle; periods.push(period); } else { if (periods.length > 0) { periods[periods.length - 1]["event"] = item.date; } else { let period = {}; period["event"] = item.date; period["cycle"] = item.cycle; periods.push(period); } } }); tableVal = periods; } return tableVal; case export_master_config_1.Export_Master_Config.formSchemaTypes.date: if (value instanceof Array) { value = value[0]; return value; } else { return value; } default: if (value instanceof Array) { value = value[0]; } if (typeof value === 'string') { return value.trim(); } else { return value; } } } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > buildFileObject > ' + e, 3); return value; } } formatTableData() { } mergeGrandNummber(fundAg, grandNumber) { _ .forEach(fundAg, function (val) { _ .forEach(grandNumber, function (grnd) { if (grnd[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]) { if (grnd[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]["agency"] == val.abbr) { val["grantNumber"] = grnd[export_master_config_1.Export_Master_Config.xmlNodeProps.elementProp]; } } }); }); } getTemplateFile(nodes) { let templateFIle = export_master_config_1.Export_Master_Config.defaultOptions.tmplFile; if (nodes[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]) { let headerAttr = nodes[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]; if (headerAttr[export_master_config_1.Export_Master_Config.customAttributes.template]) { templateFIle = headerAttr[export_master_config_1.Export_Master_Config.customAttributes.template]; } } return templateFIle; } getStudyType(nodes) { let studyType = export_master_config_1.Export_Master_Config.defaultOptions.studyType; if (nodes[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]) { let headerAttr = nodes[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]; if (headerAttr[export_master_config_1.Export_Master_Config.customAttributes.type]) { studyType = headerAttr[export_master_config_1.Export_Master_Config.customAttributes.type]; } } return studyType; } getVariableObject(form, data, outData, parentKey) { try { if (form.nodes && form.nodes instanceof Array) { let self = this; _.forEach(form.nodes, function (__node) { if (__node.nodes && __node.nodes instanceof Array) { self.getVariableObject(__node, data, outData, parentKey); } else { let exportKey = (__node.formschema.exportKey || __node.formschema.key).replace(parentKey, ""); let __data = app_repo_utility_1.App_Repository_Utility.getNestedProperty(data, exportKey); if (__data) { __data = self.convertToDataType(__node.formschema, __data); if (__node.formschema.type == export_master_config_1.Export_Master_Config.formSchemaTypes.table) { __node.key = __node .key .replace('[]', ''); } self .importService .setNestedProperty(outData, __node.key, __data); } } }); } return outData; } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > getVariableObject > ' + e, 3); return outData; } } getFileDescriptionObject(form, data, outData) { try { if (form.nodes && form.nodes instanceof Array) { let self = this; _.forEach(form.nodes, function (__node) { let __data = app_repo_utility_1.App_Repository_Utility.getNestedProperty(data, __node.formschema.exportKey || __node.formschema.key.replace('fileDscr.', '')); if (__data) { __data = self.convertToDataType(__node.formschema, __data); self .importService .setNestedProperty(outData, __node.key.replace(export_master_config_1.Export_Master_Config.fileDescriptionProps.prefixKey, ''), __data); } }); } return outData; } catch (e) { app_repo_utility_1.App_Repository_Utility.LogText('Import > DDI > getVariableObject > ' + e, 3); return outData; } } getLocation(locations, varDescr) { if (locations instanceof Array && locations[0]) { let location = locations[0]; varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.location] = {}; _.forEach(location, (locVal, locKey) => { if (locVal && locVal.length && locVal[0]) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.location][locKey] = locVal[0]; } else if (locVal) { let keys = _.keys(locVal); for (let key of keys) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.location][key] = locVal[key]; } } }); } return varDescr; } getFormat(formats, varDescr) { if (formats instanceof Array && formats[0]) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.format] = {}; let format = formats[0]; let formatObj = format[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]; _.forEach(formatObj, (fmVal, fmKey) => { if (fmVal) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.format][fmKey] = fmVal; } }); } return varDescr; } getValidRange(validRange, varDescr) { if (validRange instanceof Array && validRange[0]) { let valRange = validRange[0]; if (valRange[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range] && valRange[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range] instanceof Array && valRange[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range][0]) { let range = valRange[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range][0]; varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange] = {}; if (range[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]) { let rangeProps = range[export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]; varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range] = {}; _.forEach(rangeProps, (rgVal, rgKey) => { if (rgVal) { varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range][rgKey] = rgVal; } }); } } } return varDescr; } getInvalidRange(invlrng, varDescr) { if (!invlrng || (invlrng && invlrng.length === 0)) { return varDescr; } let newInvlrngRanges = []; let newInvlrngItems = []; let invlRanges = invlrng[0].range || []; let invlItems = invlrng[0].item || []; if (invlRanges.length > 0) { for (let i = 0; i < invlRanges.length; i++) { newInvlrngRanges.push(invlRanges[i][export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]); } } if (invlItems.length > 0) { for (let i = 0; i < invlItems.length; i++) { newInvlrngItems.push(invlItems[i][export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]); } } varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.invalidRange] = {}; varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.invalidRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range] = newInvlrngRanges; varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.invalidRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.invalidRange_item] = newInvlrngItems; return varDescr; } getCategory(variableCategories, varDescr) { let categories = new Array(); _.forEach(variableCategories, function (catgry) { let catagoryObj = {}; _.forEach(catgry, (catVal, catKey) => { if (catKey == export_master_config_1.Export_Master_Config.variableDescriptionProps.categoryStatus) { catagoryObj[catKey] = {}; if (catVal instanceof Array && catVal[0]) { if (catVal[0][export_master_config_1.Export_Master_Config.xmlNodeProps.elementProp]) { catagoryObj[catKey]["text"] = catVal[0][export_master_config_1.Export_Master_Config.xmlNodeProps.elementProp]; } if (catVal[0][export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute]) { _.forEach(catVal[0][export_master_config_1.Export_Master_Config.xmlNodeProps.headerAttribute], (atrVal, atrKey) => { catagoryObj[catKey][atrKey] = atrVal; }); } } } else { if (catKey === export_master_config_1.Export_Master_Config.variableDescriptionProps.label && catVal[0]) { catagoryObj[export_master_config_1.Export_Master_Config.variableDescriptionProps.labelled] = true; } else if (catKey === "catValu" && catVal instanceof Array && catVal[0]) { if (catVal[0] === export_master_config_1.Export_Master_Config.xmlNodeProps.missing) { catVal[0] = "NA"; } } catagoryObj[catKey] = catVal[0]; } }); categories.push(catagoryObj); }); varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.category] = categories; return varDescr; } setRequiredProps(varDescr) { if (!varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange]) varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange] = {}; if (!varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range]) varDescr[export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange][export_master_config_1.Export_Master_Config.variableDescriptionProps.validRange_range] = {}; return varDescr; } assignVariableNumber(data) { if (data) { let files = _.keys(data); for (let file of files) { let variables = data[file]; let i = 1; for (let variable of variables) { variable.number = "V" + i; i++; } } } } }; ImportDDI = __decorate([ trace_decorator_1.Trace({ exclude: [ 'getDDIObject', 'convertToDataType', 'buildFileObject', 'getFileDescriptionObject', 'getLocation', 'getCategory', 'getFormat', 'getVariableObject', 'setRequiredProps', 'getFileDescription', 'getDataDescription', 'getValidRange', 'getInvalidRange' ], params: { getTemplateFile: ['*'], getStudyType: ['*'], getVariableObject: ['*'] } }) ], ImportDDI); exports.ImportDDI = ImportDDI;