@@ -2,11 +2,12 @@ import { formatXml } from '../file.js';
2
2
3
3
import { CompasSettings } from '../compas/CompasSettings.js' ;
4
4
import {
5
- extractSclFromResponse ,
5
+ extractSclFromResponse , getWebsocketUri ,
6
6
handleError ,
7
7
handleResponse ,
8
- parseXml ,
8
+ parseXml
9
9
} from './foundation.js' ;
10
+ import { Websockets } from './Websockets.js' ;
10
11
11
12
export const SDS_NAMESPACE =
12
13
'https://www.lfenergy.org/compas/SclDataService/v1' ;
@@ -30,14 +31,48 @@ export interface UpdateRequestBody {
30
31
}
31
32
32
33
export function CompasSclDataService ( ) {
33
- function getCompasSettings ( ) {
34
- return CompasSettings ( ) . compasSettings ;
34
+ function getSclDataServiceUrl ( ) : string {
35
+ return CompasSettings ( ) . compasSettings . sclDataServiceUrl ;
36
+ }
37
+
38
+ function createCreateRequest (
39
+ sclName : string ,
40
+ comment : string | null ,
41
+ doc : Document
42
+ ) : string {
43
+ return `<?xml version="1.0" encoding="UTF-8"?>
44
+ <sds:CreateRequest xmlns:sds="${ SDS_NAMESPACE } ">
45
+ <sds:Name>${ sclName } </sds:Name>
46
+ <sds:Comment>${ comment ?? '' } </sds:Comment>
47
+ <sds:SclData><![CDATA[${ formatXml (
48
+ new XMLSerializer ( ) . serializeToString (
49
+ doc . documentElement ) ) } ]]></sds:SclData>
50
+ </sds:CreateRequest>` ;
51
+ }
52
+
53
+ function createUpdateRequest (
54
+ changeSet : ChangeSet ,
55
+ comment : string | null ,
56
+ doc : Document
57
+ ) : string {
58
+ return `<?xml version="1.0" encoding="UTF-8"?>
59
+ <sds:UpdateRequest xmlns:sds="${ SDS_NAMESPACE } ">
60
+ <sds:ChangeSet>${ changeSet } </sds:ChangeSet>
61
+ <sds:Comment>${ comment ?? '' } </sds:Comment>
62
+ <sds:SclData><![CDATA[${ formatXml (
63
+ new XMLSerializer ( ) . serializeToString (
64
+ doc . documentElement ) ) } ]]></sds:SclData>
65
+ </sds:UpdateRequest>` ;
35
66
}
36
67
37
68
return {
69
+ useWebsocket ( ) : boolean {
70
+ return CompasSettings ( ) . useWebsockets ( ) ;
71
+ } ,
72
+
38
73
listSclTypes ( ) : Promise < Document > {
39
74
const sclUrl =
40
- getCompasSettings ( ) . sclDataServiceUrl + '/common/v1/type/list' ;
75
+ getSclDataServiceUrl ( ) + '/common/v1/type/list' ;
41
76
return fetch ( sclUrl )
42
77
. catch ( handleError )
43
78
. then ( handleResponse )
@@ -64,7 +99,7 @@ export function CompasSclDataService() {
64
99
65
100
listScls ( type : string ) : Promise < Document > {
66
101
const sclUrl =
67
- getCompasSettings ( ) . sclDataServiceUrl + '/scl/v1/' + type + '/list' ;
102
+ getSclDataServiceUrl ( ) + '/scl/v1/' + type + '/list' ;
68
103
return fetch ( sclUrl )
69
104
. catch ( handleError )
70
105
. then ( handleResponse )
@@ -73,7 +108,7 @@ export function CompasSclDataService() {
73
108
74
109
listVersions ( type : string , id : string ) : Promise < Document > {
75
110
const sclUrl =
76
- getCompasSettings ( ) . sclDataServiceUrl +
111
+ getSclDataServiceUrl ( ) +
77
112
'/scl/v1/' +
78
113
type +
79
114
'/' +
@@ -87,7 +122,7 @@ export function CompasSclDataService() {
87
122
88
123
getSclDocument ( type : string , id : string ) : Promise < Document > {
89
124
const sclUrl =
90
- getCompasSettings ( ) . sclDataServiceUrl + '/scl/v1/' + type + '/' + id ;
125
+ getSclDataServiceUrl ( ) + '/scl/v1/' + type + '/' + id ;
91
126
return fetch ( sclUrl )
92
127
. catch ( handleError )
93
128
. then ( handleResponse )
@@ -101,7 +136,7 @@ export function CompasSclDataService() {
101
136
version : string
102
137
) : Promise < Document > {
103
138
const sclUrl =
104
- getCompasSettings ( ) . sclDataServiceUrl +
139
+ getSclDataServiceUrl ( ) +
105
140
'/scl/v1/' +
106
141
type +
107
142
'/' +
@@ -121,7 +156,7 @@ export function CompasSclDataService() {
121
156
version : string
122
157
) : Promise < string > {
123
158
const sclUrl =
124
- getCompasSettings ( ) . sclDataServiceUrl +
159
+ getSclDataServiceUrl ( ) +
125
160
'/scl/v1/' +
126
161
type +
127
162
'/' +
@@ -135,63 +170,80 @@ export function CompasSclDataService() {
135
170
136
171
deleteSclDocument ( type : string , id : string ) : Promise < string > {
137
172
const sclUrl =
138
- getCompasSettings ( ) . sclDataServiceUrl + '/scl/v1/' + type + '/' + id ;
173
+ getSclDataServiceUrl ( ) + '/scl/v1/' + type + '/' + id ;
139
174
return fetch ( sclUrl , { method : 'DELETE' } )
140
175
. catch ( handleError )
141
176
. then ( handleResponse ) ;
142
177
} ,
143
178
144
- addSclDocument ( type : string , body : CreateRequestBody ) : Promise < Document > {
145
- const sclUrl = getCompasSettings ( ) . sclDataServiceUrl + '/scl/v1/' + type ;
179
+ addSclDocumentUsingRest ( type : string , body : CreateRequestBody ) : Promise < Document > {
180
+ const sclUrl = getSclDataServiceUrl ( ) + '/scl/v1/' + type ;
146
181
return fetch ( sclUrl , {
147
182
method : 'POST' ,
148
183
headers : {
149
184
'Content-Type' : 'application/xml' ,
150
185
} ,
151
- body : `<?xml version="1.0" encoding="UTF-8"?>
152
- <sds:CreateRequest xmlns:sds="${ SDS_NAMESPACE } ">
153
- <sds:Name>${ body . sclName } </sds:Name>
154
- <sds:Comment>${ body . comment ?? '' } </sds:Comment>
155
- <sds:SclData><![CDATA[${ formatXml (
156
- new XMLSerializer ( ) . serializeToString (
157
- body . doc . documentElement
158
- )
159
- ) } ]]></sds:SclData>
160
- </sds:CreateRequest>` ,
186
+ body : createCreateRequest ( body . sclName , body . comment , body . doc ) ,
161
187
} )
162
188
. catch ( handleError )
163
189
. then ( handleResponse )
164
190
. then ( parseXml )
165
191
. then ( extractSclFromResponse ) ;
166
192
} ,
167
193
168
- updateSclDocument (
194
+ addSclDocumentUsingWebsockets (
195
+ element : Element ,
196
+ type : string ,
197
+ body : CreateRequestBody ,
198
+ callback : ( scl : Document ) => void ,
199
+ ) {
200
+ const sclUrl = getSclDataServiceUrl ( ) + '/scl-ws/v1/' + type + '/create' ;
201
+ Websockets ( element , 'CompasSclDataService' ) . execute (
202
+ getWebsocketUri ( sclUrl ) ,
203
+ createCreateRequest ( body . sclName , body . comment , body . doc ) ,
204
+ async ( response : Document ) => {
205
+ const scl = await extractSclFromResponse ( response ) ;
206
+ callback ( scl ) ;
207
+ }
208
+ ) ;
209
+ } ,
210
+
211
+ updateSclDocumentUsingRest (
169
212
type : string ,
170
213
id : string ,
171
214
body : UpdateRequestBody
172
215
) : Promise < Document > {
173
216
const sclUrl =
174
- getCompasSettings ( ) . sclDataServiceUrl + '/scl/v1/' + type + '/' + id ;
217
+ getSclDataServiceUrl ( ) + '/scl/v1/' + type + '/' + id ;
175
218
return fetch ( sclUrl , {
176
219
method : 'PUT' ,
177
220
headers : {
178
221
'Content-Type' : 'application/xml' ,
179
222
} ,
180
- body : `<?xml version="1.0" encoding="UTF-8"?>
181
- <sds:UpdateRequest xmlns:sds="${ SDS_NAMESPACE } ">
182
- <sds:ChangeSet>${ body . changeSet } </sds:ChangeSet>
183
- <sds:Comment>${ body . comment ?? '' } </sds:Comment>
184
- <sds:SclData><![CDATA[${ formatXml (
185
- new XMLSerializer ( ) . serializeToString (
186
- body . doc . documentElement
187
- )
188
- ) } ]]></sds:SclData>
189
- </sds:UpdateRequest>` ,
223
+ body : createUpdateRequest ( body . changeSet , body . comment , body . doc ) ,
190
224
} )
191
225
. catch ( handleError )
192
226
. then ( handleResponse )
193
227
. then ( parseXml )
194
228
. then ( extractSclFromResponse ) ;
195
229
} ,
230
+
231
+ updateSclDocumentUsingWebsockets (
232
+ element : Element ,
233
+ type : string ,
234
+ id : string ,
235
+ body : UpdateRequestBody ,
236
+ callback : ( scl : Document ) => void ,
237
+ ) {
238
+ const sclUrl = getSclDataServiceUrl ( ) + '/scl-ws/v1/' + type + '/update/' + id ;
239
+ Websockets ( element , 'CompasSclDataService' ) . execute (
240
+ getWebsocketUri ( sclUrl ) ,
241
+ createUpdateRequest ( body . changeSet , body . comment , body . doc ) ,
242
+ async ( response : Document ) => {
243
+ const scl = await extractSclFromResponse ( response ) ;
244
+ callback ( scl ) ;
245
+ }
246
+ ) ;
247
+ } ,
196
248
} ;
197
249
}
0 commit comments