UNPKG

grafo-client

Version:

Grafo Client API Library

1 lines 10.1 kB
"use strict";const async=require("async"),util=require("../util"),DataTypes=require("./datatypes"),ekgdocUtil=require("./ekgdoc_util");this.runAllConceptCrud=function(t,e,a){return new Promise((i,r)=>{async.forEachOfSeries(e,function(e,i,n){conceptCrud(t,i,e,a).then(()=>{n()}).catch(t=>{console.log(t),r(t)})},function(t,e){t?r(t):i()})})},this.runAllRelCrud=function(t,e,a){return new Promise((i,r)=>{async.forEachOfSeries(e,function(e,i,n){relCrud(t,i,e,a).then(()=>{n()}).catch(t=>{console.log(t),r(t)})},function(t,e){t?r(t):i()})})};let conceptCrud=async function(t,e,a,i){if(i||a.entityState||a.entityState===DataTypes.EntityState.UNCHANGED||(a.entityState=ekgdocUtil.deduceEntityState(t,e),t.logger.debug("Deduced EntityState : "+a.entityState)),i||a.entityState===DataTypes.EntityState.CREATE){let i=await t.addConcept(a.label,a.positionX,a.positionY,a.description,a.color,a.fields,a.iri,e,!0);if(i&&a.attrGroup&&a.attrGroup.attributes)return await addOrUpdateConceptAttribute(t,a,i)}else if(a.entityState===DataTypes.EntityState.UPDATE){await t.updateConcept(a.label,a.positionX,a.positionY,a.description,a.color,null,null,a.iri,e,!0);if(a.attrGroup&&a.attrGroup.attributes){await addOrUpdateConceptAttribute(t,a)}if(a.fields&&a.fields.length>0){await addOrUpdateConceptFields(t,a)}}else{if(a.entityState===DataTypes.EntityState.DELETE)return await t.deleteConcept(e);if(a.entityState!==DataTypes.EntityState.UNCHANGED)throw new GenericValidationError(GrafoErrorGlossary.ErrorLevel.WARNING,"Edited State is invalid");if(a.fields&&a.fields.length>0){await addOrUpdateConceptFields(t,a)}if(a.attrGroup&&a.attrGroup.attributes){await addOrUpdateConceptAttribute(t,a)}}},addOrUpdateConceptFields=async function(t,e){let a={ekgDoc:t,origJsonConcept:e};return await util.eachSeries(e.fields,conceptFieldCrudCbForAsyncIterator,a)},addOrUpdateConceptAttribute=async function(t,e,a){let i=e.attrGroup.attributes;if(!e.entityState&&e.entityState!==DataTypes.EntityState.UNCHANGED||e.entityState===DataTypes.EntityState.CREATE){a.createAttributeGroup(e.attrGroup.id);let r=a.getAttributeGroup(),n=util.deepCopy(r),d={ekgDoc:t,concept:a,aFetchedAttrGroup:r,anAttrGroupForUpdate:n},l=(await util.eachSeries(i,addConceptAttributeCbForAsyncIterator,d),await t.ekgApi.addAttribute(n));return t.concepts[a.getId()].attrGroup=l,await updateAttrToParentEntityMap(t,a.getId(),l),l}{let a=t.concepts[e.id],r=a.getAttributeGroup(),n=util.deepCopy(r),d={ekgDoc:t,concept:e,aFetchedConcept:a,aFetchedAttrGroup:r,anAttrGroupForUpdate:n},l=(await util.eachSeries(i,conceptAttrCrudCbForAsyncIterator,d),await t.ekgApi.updateAttribute(n,r));return t.logger.debug(l),t.concepts[e.id].attrGroup=l,await updateAttrToParentEntityMap(t,e.id,l),l}},conceptAttributeCrud=async function(t,e,a,i,r,n){if(e.entityState||e.entityState===DataTypes.EntityState.UNCHANGED||(e.entityState=ekgdocUtil.deduceEntityState(t,e.id,a.id)),e.entityState===DataTypes.EntityState.CREATE)return await t.addAttributeToConcept(e.label,e.description,e.fields,e.xsdDataType,e.cardinalityType,e.cardinality,e.iri,e.id,a.id,!0,i,r,n);if(e.entityState===DataTypes.EntityState.UPDATE){await t.updateAttributeToConcept(e.label,e.description,null,null,e.xsdDataType,e.cardinalityType,e.cardinality,e.iri,e.id,a.id,!0,i,r,n);if(e.fields&&e.fields.length>0)return await addOrUpdateConceptAttrFields(t,e,a,i,r,n)}else{if(e.entityState===DataTypes.EntityState.DELETE)return await t.deleteConceptAttribute(a.id,e.id,i,r,n);if(e.entityState===DataTypes.EntityState.UNCHANGED&&e.fields&&e.fields.length>0)return await addOrUpdateConceptAttrFields(t,e,a,i,r,n)}},addOrUpdateConceptAttrFields=async function(t,e,a,i,r,n){let d={ekgDoc:t,attr:e,origJsonConcept:a,aFetchedConcept:i,aFetchedAttrGroup:r,anAttrGroupForUpdate:n};return await util.eachSeries(e.fields,conceptAttrFieldCrudCbForAsyncIterator,d)},relCrud=async function(t,e,a,i){if(i||a.entityState||a.entityState===DataTypes.EntityState.UNCHANGED||(a.entityState=ekgdocUtil.deduceEntityState(t,e),t.logger.debug("Deduced EntityState : "+a.entityState)),i||a.entityState===DataTypes.EntityState.CREATE){let i=await t.addRelationship(a.label,a.fromConceptId,a.toConceptId,a.specialization,a.description,a.color,a.fields,a.cardinalityType,a.cardinality,a.positionX,a.positionY,a.iri,e,!0);if(i&&a.attrGroup&&a.attrGroup.attributes)return await addOrUpdateRelAttribute(t,a,i)}else if(a.entityState===DataTypes.EntityState.UPDATE){await t.updateRelationship(a.label,a.specialization,a.description,a.color,null,null,a.cardinalityType,a.cardinality,a.positionX,a.positionY,a.iri,e,!0);if(a.attrGroup&&a.attrGroup.attributes){await addOrUpdateRelAttribute(t,a)}if(a.fields&&a.fields.length>0){await addOrUpdateRelFields(t,a)}}else{if(a.entityState===DataTypes.EntityState.DELETE)return await t.deleteRelationship(e);if(a.entityState!==DataTypes.EntityState.UNCHANGED)throw new GenericValidationError(GrafoErrorGlossary.ErrorLevel.WARNING,"Edited State is invalid");if(a.fields&&a.fields.length>0){await addOrUpdateRelFields(t,a)}if(a.attrGroup&&a.attrGroup.attributes){await addOrUpdateRelAttribute(t,a)}}},addOrUpdateRelFields=async function(t,e){let a={ekgDoc:t,origRelJson:e};return await util.eachSeries(e.fields,relFieldCrudCbForAsyncIterator,a)},addOrUpdateRelAttribute=async function(t,e,a){let i=e.attrGroup.attributes;if(!e.entityState&&e.entityState!==DataTypes.EntityState.UNCHANGED||e.entityState===DataTypes.EntityState.CREATE){a.createAttributeGroup(e.attrGroup.id);let r=a.getAttributeGroup(),n=util.deepCopy(r),d={ekgDoc:t,relationship:a,aFetchedAttrGroup:r,anAttrGroupForUpdate:n},l=(await util.eachSeries(i,addRelAttributeCbForAsyncIterator,d),await t.ekgApi.addAttribute(n));return t.relationships[a.getId()].attrGroup=l,await updateAttrToParentEntityMap(t,a.getId(),l),l}{let a=t.relationships[e.id],r=a.getAttributeGroup(),n=util.deepCopy(r),d={ekgDoc:t,relationship:e,aFetchedRel:a,aFetchedAttrGroup:r,anAttrGroupForUpdate:n},l=(await util.eachSeries(i,relAttrCrudCbForAsyncIterator,d),await t.ekgApi.updateAttribute(n,r));return t.relationships[e.id].attrGroup=l,await updateAttrToParentEntityMap(t,e.id,l),l}},relAttributeCrud=async function(t,e,a,i,r,n){if(e.entityState||e.entityState===DataTypes.EntityState.UNCHANGED||(e.entityState=ekgdocUtil.deduceEntityState(t,e.id,a.id)),e.entityState===DataTypes.EntityState.CREATE)return await t.addRelationshipAttribute(e.label,e.description,e.fields,e.xsdDataType,e.cardinalityType,e.cardinality,e.iri,e.id,a.id,!0,i,r,n);if(e.entityState===DataTypes.EntityState.UPDATE){await t.updateRelationshipAttribute(e.label,e.description,null,e.xsdDataType,e.cardinalityType,e.cardinality,e.iri,e.id,a.id,!0,i,r,n);if(e.fields&&e.fields.length>0)return await addOrUpdateRelAttrFields(t,e,a,i,r,n)}else{if(e.entityState===DataTypes.EntityState.DELETE)return await t.deleteRelationshipAttribute(a.id,e.id,i,r,n);if(e.entityState===DataTypes.EntityState.UNCHANGED&&e.fields&&e.fields.length>0)return await addOrUpdateRelAttrFields(t,e,a,i,r,n)}},addOrUpdateRelAttrFields=async function(t,e,a,i,r,n){let d={ekgDoc:t,attr:e,origJsonRel:a,aFetchedRel:i,aFetchedAttrGroup:r,anAttrGroupForUpdate:n};return await util.eachSeries(e.fields,relAttrFieldCrudCbForAsyncIterator,d)},updateAttrToParentEntityMap=async function(t,e,a){return await util.eachSeriesUpdateCollectionWithSuppliedData(a.attributeList,t.attrMap,e,{onValueId:!0})},addConceptAttributeCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.concept,r=e.aFetchedAttrGroup,n=e.anAttrGroupForUpdate;return await a.addAttributeToConcept(t.label,t.description,t.fields,t.xsdDataType,t.cardinalityType,t.cardinality,t.iri,t.id,i.getId(),!0,i,r,n)},conceptFieldCrudCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.origJsonConcept;if(t.entityState===DataTypes.EntityState.CREATE||t.entityState===DataTypes.EntityState.UPDATE){let e=[];return e.push(t),await a.updateConcept(null,null,null,null,null,e,null,null,i.id,!0)}if(t.entityState===DataTypes.EntityState.DELETE)return await a.deleteConceptField(i.id,t.id)},conceptAttrCrudCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.concept,r=e.aFetchedConcept,n=e.aFetchedAttrGroup,d=e.anAttrGroupForUpdate;return await conceptAttributeCrud(a,t,i,r,n,d)},conceptAttrFieldCrudCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.attr,r=e.origJsonConcept,n=e.aFetchedConcept,d=e.aFetchedAttrGroup,l=e.anAttrGroupForUpdate;if(t.entityState===DataTypes.EntityState.CREATE||t.entityState===DataTypes.EntityState.UPDATE){let e=[];return e.push(t),await a.updateAttributeToConcept(null,null,e,null,null,null,null,null,i.id,r.id,!0,n,d,l)}if(t.entityState===DataTypes.EntityState.DELETE)return await a.deleteConceptAttributeField(r.id,i.id,t.id,n,d,l)},addRelAttributeCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.relationship,r=e.aFetchedAttrGroup,n=e.anAttrGroupForUpdate;return await a.addRelationshipAttribute(t.label,t.description,t.fields,t.xsdDataType,t.cardinalityType,t.cardinality,t.iri,t.id,i.getId(),!0,i,r,n)},relFieldCrudCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.origRelJson;if(t.entityState===DataTypes.EntityState.CREATE||t.entityState===DataTypes.EntityState.UPDATE){let e=[];return e.push(t),await a.updateRelationship(null,null,null,null,e,null,null,null,null,null,null,i.id,!0)}if(t.entityState===DataTypes.EntityState.DELETE)return await a.deleteRelationshipField(i.id,t.id)},relAttrCrudCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.relationship,r=e.aFetchedRel,n=e.aFetchedAttrGroup,d=e.anAttrGroupForUpdate;return await relAttributeCrud(a,t,i,r,n,d)},relAttrFieldCrudCbForAsyncIterator=async function(t,e){let a=e.ekgDoc,i=e.attr,r=e.origJsonRel,n=e.aFetchedRel,d=e.aFetchedAttrGroup,l=e.anAttrGroupForUpdate;if(t.entityState===DataTypes.EntityState.CREATE||t.entityState===DataTypes.EntityState.UPDATE){let e=[];return e.push(t),await a.updateRelationshipAttribute(null,null,e,null,null,null,null,i.id,r.id,!0,n,d,l)}if(t.entityState===DataTypes.EntityState.DELETE)return await a.deleteRelAttributeField(r.id,i.id,t.id,n,d,l)};module.exports={runAllConceptCrud:this.runAllConceptCrud,runAllRelCrud:this.runAllRelCrud};