diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js index a880ad990360ec4ea8c70c328962789a1189346b..7449255e045e9a9fba0da7ce92f1ac154b2f1888 100644 --- a/packages/component-mts-package/src/MTS.js +++ b/packages/component-mts-package/src/MTS.js @@ -1,6 +1,6 @@ const fs = require('fs') const convert = require('xml-js') -const { set } = require('lodash') +const { set, get } = require('lodash') const logger = require('@pubsweet/logger') const mts = require('./mts-json-template') @@ -13,16 +13,34 @@ class MTS { this.jsonTemplate = mts.getJsonTemplate(config) } - async createXMLFile(json = {}, name = 'output.xml') { - const result = convert.json2xml(json, this.options) + createFileName(id = Date.now()) { + return `${this.config.prefix}${id}` + } + + convertToXML(json = {}) { + const content = convert.json2xml(json, this.options) + const customId = get( + json, + 'article.front.article-meta.article-id[0]._text', + this.createFileName(), + ) + const name = `${customId}.xml` + return { + name, + content, + } + } - await fs.writeFile(name, result, err => { + async createXMLFile(json = {}, defaultPath = '../files/') { + const { content, name } = this.convertToXML(json) + await fs.writeFile(`${defaultPath}${name}`, content, err => { if (err) return logger.error(err) logger.info('Created XML file') }) } setMetadata(metadata, jsonTemplate) { + const fileName = this.createFileName(metadata.customId) const titleGroup = { 'article-title': convert.xml2js(metadata.title, this.options) || 'Untitled', @@ -32,13 +50,13 @@ class MTS { _attributes: { 'pub-id-type': 'publisher-id', }, - _text: `${this.config.prefix}${metadata.customId || '0000000'}`, + _text: fileName, }, { _attributes: { 'pub-id-type': 'manuscript', }, - _text: `${this.config.prefix}${metadata.customId || '0000000'}`, + _text: fileName, }, ] @@ -165,7 +183,7 @@ class MTS { composeJson(fragment = {}) { const { authors = [], - metadata = { title: 'untitled', abstract: 'no abstract' }, + metadata = { title: 'untitled', abstract: '' }, submitted = new Date(), } = fragment @@ -177,6 +195,14 @@ class MTS { // ...this.constructor.setFigures(files, this.jsonTemplate), } } + + createXMLFileFromFragment(fragment = {}, defaultPath) { + return this.createXMLFile(this.composeJson(fragment), defaultPath) + } + + convertFragmentToXML(fragment = {}) { + return this.convertToXML(this.composeJson(fragment)) + } } module.exports = MTS