Skip to content

Commit 652c981

Browse files
author
Rob Tjalma
authored
Merge pull request #81 from com-pas/optimize-memory-usage
Change calls to SCL Data Service because of memory optimize.
2 parents 9d27cc9 + 0cdedc5 commit 652c981

File tree

7 files changed

+31
-37
lines changed

7 files changed

+31
-37
lines changed

src/compas-editors/CompasVersions.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,8 @@ function openScl(docName: string, docId: string, version: string) {
153153
CompasSclDataService().getSclDocumentVersion(type, docId, version)
154154
.then(response => {
155155
// Copy the SCL Result from the Response and create a new Document from it.
156-
const sclElement = response.querySelectorAll("SCL").item(0);
157-
const sclDocument = document.implementation.createDocument("", "", null);
158-
sclDocument.getRootNode().appendChild(sclElement.cloneNode(true));
156+
const sclData = response.querySelectorAll("SclData").item(0).textContent;
157+
const sclDocument = new DOMParser().parseFromString(sclData??'', 'application/xml');
159158

160159
updateDocumentInOpenSCD(sclDocument);
161160

src/compas-services/CompasCimMappingService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export function CompasCimMappingService() {
3232
return `
3333
<cms:CimData>
3434
<cms:Name>${cimData.name}</cms:Name>
35-
${new XMLSerializer().serializeToString(cimData.doc.documentElement)}
35+
<cms:RdfData><![CDATA[${new XMLSerializer().serializeToString(cimData.doc.documentElement)}]]></cms:RdfData>
3636
</cms:CimData>`;
3737
}) }
3838
</cms:MapRequest>`

src/compas-services/CompasSclDataService.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,14 @@ export function CompasSclDataService() {
105105
<sds:CreateRequest xmlns:sds="${SDS_NAMESPACE}">
106106
<sds:Name>${body.sclName}</sds:Name>
107107
<sds:Comment>${body.comment}</sds:Comment>
108-
${new XMLSerializer().serializeToString(body.doc.documentElement)}
108+
<sds:SclData><![CDATA[${new XMLSerializer().serializeToString(body.doc.documentElement)}]]></sds:SclData>
109109
</sds:CreateRequest>`
110110
}).catch(handleError)
111111
.then(handleResponse)
112112
.then(parseXml);
113113
},
114114

115-
updateSclDocument(type: string, id: string, body: UpdateRequestBody): Promise<string> {
115+
updateSclDocument(type: string, id: string, body: UpdateRequestBody): Promise<Document> {
116116
const sclUrl = getCompasSettings().sclDataServiceUrl + '/scl/v1/' + type?.toUpperCase() + '/' + id;
117117
return fetch(sclUrl, {
118118
method: 'PUT',
@@ -123,10 +123,11 @@ export function CompasSclDataService() {
123123
<sds:UpdateRequest xmlns:sds="${SDS_NAMESPACE}">
124124
<sds:ChangeSet>${body.changeSet}</sds:ChangeSet>
125125
<sds:Comment>${body.comment}</sds:Comment>
126-
${new XMLSerializer().serializeToString(body.doc.documentElement)}
126+
<sds:SclData><![CDATA[${new XMLSerializer().serializeToString(body.doc.documentElement)}]]></sds:SclData>
127127
</sds:UpdateRequest>`
128128
}).catch(handleError)
129-
.then(handleResponse);
129+
.then(handleResponse)
130+
.then(parseXml);
130131
}
131132
}
132133
}

src/compas/CompasSaveTo.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {CompasSclTypeRadiogroup} from "./CompasSclTypeRadiogroup.js";
1010
import {CompasCommentElement} from "./CompasComment.js";
1111
import {CompasSclDataService} from "../compas-services/CompasSclDataService.js";
1212
import {createLogEvent} from "../compas-services/foundation.js";
13-
import {getOpenScdElement, getTypeFromDocName, reloadSclDocument, stripExtensionFromName} from "./foundation.js";
13+
import {getOpenScdElement, getTypeFromDocName, stripExtensionFromName, updateDocumentInOpenSCD} from "./foundation.js";
1414
import './CompasSclTypeRadiogroup.js';
1515

1616
@customElement('compas-save-to')
@@ -47,11 +47,11 @@ export class CompasSaveTo extends CompasExistsIn(LitElement) {
4747
const docType = this.getSclTypeRadioGroup().getSelectedValue() ?? '';
4848

4949
await CompasSclDataService().addSclDocument(docType, {sclName: name, comment: comment, doc: doc})
50-
.then(async xmlResponse => {
51-
const id = Array.from(xmlResponse.querySelectorAll('*|Id') ?? [])[0]
50+
.then(response => {
51+
const sclData = response.querySelectorAll("SclData").item(0).textContent;
52+
const sclDocument = new DOMParser().parseFromString(sclData??'', 'application/xml');
5253

53-
// Retrieve the document to fetch server-side updates.
54-
await reloadSclDocument(docType, id.textContent ?? '');
54+
updateDocumentInOpenSCD(sclDocument);
5555

5656
const openScd = getOpenScdElement();
5757
openScd.dispatchEvent(
@@ -72,9 +72,10 @@ export class CompasSaveTo extends CompasExistsIn(LitElement) {
7272
const docType = getTypeFromDocName(docName);
7373

7474
await CompasSclDataService().updateSclDocument(docType.toUpperCase(), docId, {changeSet: changeSet!, comment: comment, doc: doc})
75-
.then(async () => {
76-
// Retrieve the document to fetch server-side updates.
77-
await reloadSclDocument(docType, docId);
75+
.then(response => {
76+
const sclData = response.querySelectorAll("SclData").item(0).textContent;
77+
const sclDocument = new DOMParser().parseFromString(sclData??'', 'application/xml');
78+
updateDocumentInOpenSCD(sclDocument);
7879

7980
const openScd = getOpenScdElement();
8081
openScd.dispatchEvent(

src/compas/CompasScl.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {customElement, html, LitElement, property, TemplateResult} from "lit-element";
22
import {get, translate} from "lit-translate";
33

4-
import {newPendingStateEvent, newWizardEvent, Wizard} from "../foundation.js";
4+
import {newLogEvent, newPendingStateEvent, newWizardEvent, Wizard} from "../foundation.js";
55
import {SingleSelectedEvent} from "@material/mwc-list/mwc-list-foundation";
66

77
import {CompasSclDataService, SDS_NAMESPACE} from "../compas-services/CompasSclDataService.js";
@@ -39,9 +39,14 @@ export class CompasScl extends LitElement {
3939

4040
if (response instanceof Document) {
4141
// Copy the SCL Result from the Response and create a new Document from it.
42-
const sclElement = response.querySelectorAll("SCL").item(0);
43-
const sclDocument = document.implementation.createDocument("", "", null);
44-
sclDocument.getRootNode().appendChild(sclElement.cloneNode(true));
42+
const sclData = response.querySelectorAll("SclData").item(0).textContent;
43+
const sclDocument = new DOMParser().parseFromString(sclData??'', 'application/xml');
44+
45+
const openScd = getOpenScdElement();
46+
openScd.dispatchEvent(
47+
newLogEvent({
48+
kind: 'reset'
49+
}));
4550

4651
updateDocumentInOpenSCD(sclDocument);
4752
}

src/compas/CompasUploadVersion.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {newLogEvent, newPendingStateEvent, newWizardEvent, Wizard, WizardInput}
66
import {CompasExistsIn} from "./CompasExistsIn.js";
77
import {CompasSclDataService} from "../compas-services/CompasSclDataService.js";
88
import {createLogEvent} from "../compas-services/foundation.js";
9-
import {getOpenScdElement, getTypeFromDocName, reloadSclDocument} from "./foundation.js";
9+
import {getOpenScdElement, getTypeFromDocName, updateDocumentInOpenSCD} from "./foundation.js";
1010
import {CompasChangeSetRadiogroup} from "./CompasChangeSetRadiogroup.js";
1111
import {CompasCommentElement} from "./CompasComment.js";
1212

@@ -47,9 +47,10 @@ export class CompasUploadVersionElement extends CompasExistsIn(LitElement) {
4747

4848
await CompasSclDataService().updateSclDocument(docType.toUpperCase(), this.docId,
4949
{changeSet: changeSet!, comment: comment, doc: doc})
50-
.then(async () => {
51-
// Retrieve the document to fetch server-side updates.
52-
await reloadSclDocument(docType, this.docId);
50+
.then(response => {
51+
const sclData = response.querySelectorAll("SclData").item(0).textContent;
52+
const sclDocument = new DOMParser().parseFromString(sclData??'', 'application/xml');
53+
updateDocumentInOpenSCD(sclDocument);
5354

5455
const openScd = getOpenScdElement();
5556
openScd.dispatchEvent(

src/compas/foundation.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,6 @@ export function getOpenScdElement(): OpenSCD {
3131
return <OpenSCD>document.querySelector('open-scd');
3232
}
3333

34-
export async function reloadSclDocument(type: string, id: string): Promise<void>{
35-
await CompasSclDataService().getSclDocument(type, id)
36-
.then(response => {
37-
// Copy the SCL Result from the Response and create a new Document from it.
38-
const sclElement = response.querySelectorAll("SCL").item(0);
39-
const sclDocument = document.implementation.createDocument("", "", null);
40-
sclDocument.getRootNode().appendChild(sclElement.cloneNode(true));
41-
42-
updateDocumentInOpenSCD(sclDocument);
43-
})
44-
.catch(createLogEvent);
45-
}
46-
4734
export function updateDocumentInOpenSCD(doc: Document): void {
4835
const id = (doc.querySelectorAll(':root > Header') ?? []).item(0).getAttribute('id') ?? '';
4936
const version = (doc.querySelectorAll(':root > Header') ?? []).item(0).getAttribute('version') ?? '';

0 commit comments

Comments
 (0)