node-opcua-address-space 2.77.0 → 2.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/source/continuation_points/continuation_point_manager.d.ts +59 -0
- package/dist/source/continuation_points/continuation_point_manager.js +6 -6
- package/dist/source/continuation_points/continuation_point_manager.js.map +1 -1
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +1 -0
- package/dist/source/index.js.map +1 -1
- package/dist/source/loader/ensure_datatype_extracted.js +25 -0
- package/dist/source/loader/ensure_datatype_extracted.js.map +1 -1
- package/dist/source/loader/generateAddressSpaceRaw.d.ts +2 -1
- package/dist/source/loader/generateAddressSpaceRaw.js +2 -2
- package/dist/source/loader/generateAddressSpaceRaw.js.map +1 -1
- package/dist/source/loader/load_nodeset2.d.ts +7 -3
- package/dist/source/loader/load_nodeset2.js +66 -31
- package/dist/source/loader/load_nodeset2.js.map +1 -1
- package/dist/source/xml_writer.d.ts +5 -0
- package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.d.ts +1 -1
- package/dist/src/base_node_impl.d.ts +1 -0
- package/dist/src/base_node_impl.js +30 -3
- package/dist/src/base_node_impl.js.map +1 -1
- package/dist/src/base_node_private.js +5 -0
- package/dist/src/base_node_private.js.map +1 -1
- package/dist/src/historical_access/address_space_historical_data_node.js +14 -3
- package/dist/src/historical_access/address_space_historical_data_node.js.map +1 -1
- package/dist/src/index_current.d.ts +2 -1
- package/dist/src/index_current.js +3 -2
- package/dist/src/index_current.js.map +1 -1
- package/dist/src/namespace_impl.d.ts +2 -0
- package/dist/src/namespace_impl.js +11 -1
- package/dist/src/namespace_impl.js.map +1 -1
- package/dist/src/namespace_private.d.ts +1 -0
- package/dist/src/namespace_private.js.map +1 -1
- package/dist/src/nodeid_manager.d.ts +1 -0
- package/dist/src/nodeid_manager.js +14 -2
- package/dist/src/nodeid_manager.js.map +1 -1
- package/dist/src/nodeset_tools/{typedictionary_to_xml.d.ts → dump_to_bsd.d.ts} +1 -1
- package/dist/src/nodeset_tools/{typedictionary_to_xml.js → dump_to_bsd.js} +14 -5
- package/dist/src/nodeset_tools/dump_to_bsd.js.map +1 -0
- package/dist/src/nodeset_tools/nodeset_to_xml.d.ts +9 -1
- package/dist/src/nodeset_tools/nodeset_to_xml.js +220 -89
- package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
- package/dist/src/tool_isSupertypeOf.js +12 -2
- package/dist/src/tool_isSupertypeOf.js.map +1 -1
- package/dist/src/ua_data_type_impl.js +10 -5
- package/dist/src/ua_data_type_impl.js.map +1 -1
- package/dist/src/ua_method_impl.d.ts +2 -1
- package/dist/src/ua_method_impl.js +9 -1
- package/dist/src/ua_method_impl.js.map +1 -1
- package/dist/src/ua_object_impl.js +8 -1
- package/dist/src/ua_object_impl.js.map +1 -1
- package/dist/src/ua_variable_impl.d.ts +5 -0
- package/dist/src/ua_variable_impl.js +36 -2
- package/dist/src/ua_variable_impl.js.map +1 -1
- package/dist/src/ua_variable_impl_ext_obj.js +1 -1
- package/dist/src/ua_variable_impl_ext_obj.js.map +1 -1
- package/distHelpers/get_mini_address_space.js +1 -1
- package/distHelpers/get_mini_address_space.js.map +1 -1
- package/distNodeJS/generate_address_space.d.ts +3 -1
- package/distNodeJS/generate_address_space.js +13 -2
- package/distNodeJS/generate_address_space.js.map +1 -1
- package/package.json +26 -26
- package/source/continuation_points/continuation_point_manager.ts +13 -12
- package/source/index.ts +1 -0
- package/source/loader/ensure_datatype_extracted.ts +38 -3
- package/source/loader/generateAddressSpaceRaw.ts +4 -3
- package/source/loader/load_nodeset2.ts +86 -33
- package/source/xml_writer.ts +3 -0
- package/source_nodejs/generate_address_space.ts +27 -5
- package/src/alarms_and_conditions/ua_limit_alarm_impl.ts +1 -1
- package/src/base_node_impl.ts +34 -3
- package/src/base_node_private.ts +6 -0
- package/src/historical_access/address_space_historical_data_node.ts +18 -3
- package/src/index_current.ts +3 -1
- package/src/namespace_impl.ts +24 -1
- package/src/namespace_private.ts +2 -0
- package/src/nodeid_manager.ts +14 -5
- package/src/nodeset_tools/{typedictionary_to_xml.ts → dump_to_bsd.ts} +24 -14
- package/src/nodeset_tools/nodeset_to_xml.ts +278 -77
- package/src/tool_isSupertypeOf.ts +14 -2
- package/src/ua_data_type_impl.ts +11 -7
- package/src/ua_method_impl.ts +9 -3
- package/src/ua_object_impl.ts +12 -2
- package/src/ua_variable_impl.ts +42 -4
- package/src/ua_variable_impl_ext_obj.ts +1 -1
- package/test_helpers/get_mini_address_space.ts +1 -1
- package/test_helpers/test_fixtures/mini.Node.Set2.xml +207 -0
- package/test_helpers/test_fixtures/nodeset_no_aliases.xml +30 -0
- package/test_helpers/test_fixtures/nodeset_no_aliases_with_aliases.xml +31 -0
- package/dist/source/helpers/check_event_clause.d.ts +0 -17
- package/dist/source/helpers/check_event_clause.js +0 -53
- package/dist/source/helpers/check_event_clause.js.map +0 -1
- package/dist/src/alarms_and_conditions/check_where_clause.d.ts +0 -4
- package/dist/src/alarms_and_conditions/check_where_clause.js +0 -110
- package/dist/src/alarms_and_conditions/check_where_clause.js.map +0 -1
- package/dist/src/alarms_and_conditions/condition_info.d.ts +0 -27
- package/dist/src/alarms_and_conditions/condition_info.js +0 -55
- package/dist/src/alarms_and_conditions/condition_info.js.map +0 -1
- package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +0 -233
- package/dist/src/alarms_and_conditions/condition_snapshot.js +0 -667
- package/dist/src/alarms_and_conditions/condition_snapshot.js.map +0 -1
- package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +0 -10
- package/dist/src/alarms_and_conditions/extract_event_fields.js +0 -90
- package/dist/src/alarms_and_conditions/extract_event_fields.js.map +0 -1
- package/dist/src/data_access/ua_multistate_value_discrete.d.ts +0 -51
- package/dist/src/data_access/ua_multistate_value_discrete.js +0 -250
- package/dist/src/data_access/ua_multistate_value_discrete.js.map +0 -1
- package/dist/src/data_access/ua_two_state_discrete.d.ts +0 -25
- package/dist/src/data_access/ua_two_state_discrete.js +0 -154
- package/dist/src/data_access/ua_two_state_discrete.js.map +0 -1
- package/dist/src/nodeset_tools/typedictionary_to_xml.js.map +0 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.dumpXml = void 0;
|
|
4
|
+
/* eslint-disable complexity */
|
|
4
5
|
/**
|
|
5
6
|
* @module node-opcua-address-space
|
|
6
7
|
*/
|
|
7
8
|
// produce nodeset xml files
|
|
8
9
|
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
10
|
+
const node_opcua_constants_1 = require("node-opcua-constants");
|
|
9
11
|
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
10
12
|
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
11
13
|
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
@@ -23,6 +25,7 @@ const namespace_impl_1 = require("../namespace_impl");
|
|
|
23
25
|
const ua_method_impl_1 = require("../ua_method_impl");
|
|
24
26
|
const ua_data_type_impl_1 = require("../ua_data_type_impl");
|
|
25
27
|
const ua_variable_type_impl_1 = require("../ua_variable_type_impl");
|
|
28
|
+
const index_current_1 = require("../index_current");
|
|
26
29
|
const decode_xml_extension_object_1 = require("../../source/loader/decode_xml_extension_object");
|
|
27
30
|
const construct_namespace_dependency_1 = require("./construct_namespace_dependency");
|
|
28
31
|
// tslint:disable:no-var-requires
|
|
@@ -63,6 +66,10 @@ function translateBrowseName(xw, browseName) {
|
|
|
63
66
|
function b(xw, browseName) {
|
|
64
67
|
return translateBrowseName(xw, browseName).toString().replace("ns=0;", "");
|
|
65
68
|
}
|
|
69
|
+
function _dumpReverseReferences(xw, node) {
|
|
70
|
+
const addressSpace = node.addressSpace;
|
|
71
|
+
const hasSubtypeReferenceType = addressSpace.findReferenceType("HasSubtype");
|
|
72
|
+
}
|
|
66
73
|
function _dumpReferences(xw, node) {
|
|
67
74
|
xw.startElement("References");
|
|
68
75
|
const addressSpace = node.addressSpace;
|
|
@@ -153,25 +160,54 @@ function _dumpQualifiedName(xw, v) {
|
|
|
153
160
|
function _dumpXmlElement(xw, v) {
|
|
154
161
|
xw.text(v);
|
|
155
162
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
163
|
+
function initXmlWriterEx(xw, map, namespaceArray) {
|
|
164
|
+
const xwe = xw;
|
|
165
|
+
xwe.map = map;
|
|
166
|
+
xwe.stackMap = [];
|
|
167
|
+
xwe.namespaceArray = namespaceArray;
|
|
168
|
+
}
|
|
169
|
+
function findXsdNamespaceUri(xw, nodeId) {
|
|
170
|
+
const xwe = xw;
|
|
171
|
+
if (!xwe.namespaceArray) {
|
|
172
|
+
return "";
|
|
173
|
+
}
|
|
174
|
+
const namespace = xwe.namespaceArray[nodeId.namespace];
|
|
175
|
+
if (namespace === "http://opcfoundation.org/UA/") {
|
|
176
|
+
return "http://opcfoundation.org/UA/2008/02/Types.xsd";
|
|
177
|
+
}
|
|
178
|
+
return namespace.replace(/\/$/, "") + "/Types.xsd";
|
|
179
|
+
}
|
|
180
|
+
function getPrefix(xw, namespace) {
|
|
181
|
+
const xwe = xw;
|
|
182
|
+
if (!xwe.map)
|
|
183
|
+
return "";
|
|
184
|
+
const p = xwe.map[namespace] || "";
|
|
185
|
+
return p ? p + ":" : "";
|
|
186
|
+
}
|
|
187
|
+
function restoreDefaultNamespace(xw) {
|
|
188
|
+
const xwe = xw;
|
|
189
|
+
if (!xwe.map)
|
|
190
|
+
return;
|
|
191
|
+
xwe.map = xwe.stackMap.pop();
|
|
192
|
+
}
|
|
193
|
+
function setDefaultNamespace(xw, namespace) {
|
|
194
|
+
const xwe = xw;
|
|
195
|
+
if (!xwe.map)
|
|
196
|
+
return;
|
|
197
|
+
if (xwe.map[namespace] !== "") {
|
|
198
|
+
xw.writeAttribute("xmlns", namespace);
|
|
199
|
+
}
|
|
200
|
+
xwe.stackMap.push(Object.assign({}, xwe.map));
|
|
201
|
+
xwe.map[namespace] = "";
|
|
202
|
+
}
|
|
203
|
+
function startElementEx(xw, ns, name, defaultNamespace) {
|
|
204
|
+
const xwe = xw;
|
|
205
|
+
xw.startElement(name);
|
|
206
|
+
setDefaultNamespace(xw, defaultNamespace);
|
|
207
|
+
}
|
|
173
208
|
function _dumpNodeId(xw, v) {
|
|
174
|
-
xw.
|
|
209
|
+
const xmlns = getPrefix(xw, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
210
|
+
xw.startElement(`${xmlns}Identifier`);
|
|
175
211
|
xw.text(n(xw, v));
|
|
176
212
|
xw.endElement();
|
|
177
213
|
}
|
|
@@ -184,12 +220,15 @@ function _dumpVariantValue(xw, dataType, node, value) {
|
|
|
184
220
|
if (dataType === node_opcua_variant_1.DataType.Null) {
|
|
185
221
|
return;
|
|
186
222
|
}
|
|
187
|
-
xw.
|
|
223
|
+
const uax = getPrefix(xw, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
224
|
+
xw.startElement(`${uax}${node_opcua_variant_1.DataType[dataType]}`);
|
|
188
225
|
const definitionMap = (0, decode_xml_extension_object_1.makeDefinitionMap)(node.addressSpace);
|
|
189
226
|
_dumpVariantInnerValue(xw, dataType, dataTypeNode.nodeId, definitionMap, value);
|
|
190
227
|
xw.endElement();
|
|
191
228
|
}
|
|
192
229
|
function _dumpVariantInnerExtensionObject(xw, definitionMap, definition, value) {
|
|
230
|
+
const namespaceUri = findXsdNamespaceUri(xw, definition.defaultEncodingId);
|
|
231
|
+
const ns = getPrefix(xw, namespaceUri);
|
|
193
232
|
for (const field of definition.fields || []) {
|
|
194
233
|
const dataTypeNodeId = field.dataType;
|
|
195
234
|
const fieldName = field.name;
|
|
@@ -203,7 +242,8 @@ function _dumpVariantInnerExtensionObject(xw, definitionMap, definition, value)
|
|
|
203
242
|
continue; // ns=0;i=0 is reserved
|
|
204
243
|
}
|
|
205
244
|
const { name, definition } = definitionMap.findDefinition(dataTypeNodeId);
|
|
206
|
-
xw
|
|
245
|
+
startElementEx(xw, ns, fieldName, namespaceUri);
|
|
246
|
+
// xw.startElement(fieldName);
|
|
207
247
|
let fun = (value) => {
|
|
208
248
|
/** */
|
|
209
249
|
};
|
|
@@ -239,6 +279,7 @@ function _dumpVariantInnerExtensionObject(xw, definitionMap, definition, value)
|
|
|
239
279
|
console.log(field);
|
|
240
280
|
// throw err;
|
|
241
281
|
}
|
|
282
|
+
restoreDefaultNamespace(xw);
|
|
242
283
|
xw.endElement();
|
|
243
284
|
}
|
|
244
285
|
}
|
|
@@ -252,6 +293,7 @@ function _dumpVariantInnerValueEnum(xw, definition, value) {
|
|
|
252
293
|
}
|
|
253
294
|
// eslint-disable-next-line complexity
|
|
254
295
|
function _dumpVariantInnerValue(xw, dataType, dataTypeNodeId, definitionMap, value) {
|
|
296
|
+
const uax = getPrefix(xw, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
255
297
|
switch (dataType) {
|
|
256
298
|
case null:
|
|
257
299
|
case node_opcua_variant_1.DataType.Null:
|
|
@@ -293,12 +335,12 @@ function _dumpVariantInnerValue(xw, dataType, dataTypeNodeId, definitionMap, val
|
|
|
293
335
|
case node_opcua_variant_1.DataType.Guid:
|
|
294
336
|
/*
|
|
295
337
|
<uax:Guid>
|
|
296
|
-
|
|
338
|
+
<uax:String>947c29a7-490d-4dc9-adda-1109e3e8fcb7</uax:String>
|
|
297
339
|
</uax:Guid>
|
|
298
340
|
*/
|
|
299
341
|
if (value !== undefined && value !== null) {
|
|
300
342
|
// xw.writeAttribute("xmlns", "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
301
|
-
xw.startElement(
|
|
343
|
+
xw.startElement(`${uax}String`);
|
|
302
344
|
xw.text(value.toString());
|
|
303
345
|
xw.endElement();
|
|
304
346
|
}
|
|
@@ -326,10 +368,13 @@ function _dumpVariantInnerValue(xw, dataType, dataTypeNodeId, definitionMap, val
|
|
|
326
368
|
*/
|
|
327
369
|
function _dumpVariantExtensionObjectValue_Body(xw, definitionMap, name, definition, value) {
|
|
328
370
|
if (value) {
|
|
329
|
-
xw.
|
|
371
|
+
const namespaceUri = findXsdNamespaceUri(xw, definition.defaultEncodingId);
|
|
372
|
+
const ns = getPrefix(xw, namespaceUri);
|
|
373
|
+
startElementEx(xw, ns, `${name}`, namespaceUri);
|
|
330
374
|
if (value) {
|
|
331
375
|
_dumpVariantInnerExtensionObject(xw, definitionMap, definition, value);
|
|
332
376
|
}
|
|
377
|
+
restoreDefaultNamespace(xw);
|
|
333
378
|
xw.endElement();
|
|
334
379
|
}
|
|
335
380
|
}
|
|
@@ -338,24 +383,29 @@ function _dumpVariantExtensionObjectValue(xw, dataTypeNodeId, definitionMap, val
|
|
|
338
383
|
// const encodingDefaultXml = (getStructureTypeConstructor(schema.name) as any).encodingDefaultXml;
|
|
339
384
|
const encodingDefaultXml = value.schema.encodingDefaultXml;
|
|
340
385
|
if (!encodingDefaultXml) {
|
|
386
|
+
warningLog("dataType Name ", name, "with ", dataTypeNodeId.toString(), " does not have xml encoding");
|
|
341
387
|
// throw new Error("Extension Object doesn't provide a XML ");
|
|
342
388
|
return;
|
|
343
389
|
}
|
|
344
|
-
xw.
|
|
390
|
+
const uax = getPrefix(xw, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
391
|
+
startElementEx(xw, uax, `ExtensionObject`, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
345
392
|
{
|
|
346
|
-
xw.
|
|
393
|
+
const uax = getPrefix(xw, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
394
|
+
xw.startElement(`${uax}TypeId`);
|
|
347
395
|
{
|
|
348
396
|
// find HasEncoding node
|
|
349
397
|
// xx var encodingDefaultXml = schema.encodingDefaultXml;
|
|
350
|
-
xw.startElement(
|
|
398
|
+
xw.startElement(`${uax}Identifier`);
|
|
351
399
|
xw.text(n(xw, encodingDefaultXml));
|
|
352
400
|
xw.endElement();
|
|
353
401
|
}
|
|
354
402
|
xw.endElement();
|
|
355
|
-
xw
|
|
403
|
+
startElementEx(xw, uax, "Body", "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
356
404
|
_dumpVariantExtensionObjectValue_Body(xw, definitionMap, name, definition, value);
|
|
405
|
+
restoreDefaultNamespace(xw);
|
|
357
406
|
xw.endElement();
|
|
358
407
|
}
|
|
408
|
+
restoreDefaultNamespace(xw);
|
|
359
409
|
xw.endElement();
|
|
360
410
|
}
|
|
361
411
|
function _dumpVariantExtensionObjectValue2(xw, dataTypeNode, value) {
|
|
@@ -384,10 +434,7 @@ function _isDefaultValue(value) {
|
|
|
384
434
|
}
|
|
385
435
|
break;
|
|
386
436
|
case node_opcua_variant_1.DataType.Boolean:
|
|
387
|
-
|
|
388
|
-
return true;
|
|
389
|
-
}
|
|
390
|
-
break;
|
|
437
|
+
return false; // we want it all the time !
|
|
391
438
|
case node_opcua_variant_1.DataType.SByte:
|
|
392
439
|
case node_opcua_variant_1.DataType.Byte:
|
|
393
440
|
case node_opcua_variant_1.DataType.UInt16:
|
|
@@ -440,7 +487,7 @@ function _dumpValue(xw, node, value) {
|
|
|
440
487
|
return;
|
|
441
488
|
}
|
|
442
489
|
(0, node_opcua_assert_1.assert)(value instanceof node_opcua_variant_1.Variant);
|
|
443
|
-
const dataTypeNode = addressSpace.
|
|
490
|
+
const dataTypeNode = addressSpace.findDataType(node.dataType);
|
|
444
491
|
if (!dataTypeNode) {
|
|
445
492
|
console.log("Cannot find dataType:", node.dataType);
|
|
446
493
|
return;
|
|
@@ -457,15 +504,13 @@ function _dumpValue(xw, node, value) {
|
|
|
457
504
|
return;
|
|
458
505
|
}
|
|
459
506
|
xw.startElement("Value");
|
|
507
|
+
const uax = getPrefix(xw, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
460
508
|
if (isExtensionObject) {
|
|
461
|
-
const dataTypeNode = addressSpace.findDataType(node.dataType);
|
|
462
|
-
if (!dataTypeNode) {
|
|
463
|
-
throw new Error("Cannot find data type " + node.dataType.toString());
|
|
464
|
-
}
|
|
465
509
|
const encodeXml = _dumpVariantExtensionObjectValue2.bind(null, xw, dataTypeNode);
|
|
466
510
|
if (value.arrayType === node_opcua_variant_1.VariantArrayType.Array) {
|
|
467
|
-
xw
|
|
511
|
+
startElementEx(xw, uax, `ListOf${baseDataTypeName}`, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
468
512
|
value.value.forEach(encodeXml);
|
|
513
|
+
restoreDefaultNamespace(xw);
|
|
469
514
|
xw.endElement();
|
|
470
515
|
}
|
|
471
516
|
else if (value.arrayType === node_opcua_variant_1.VariantArrayType.Scalar) {
|
|
@@ -481,15 +526,15 @@ function _dumpValue(xw, node, value) {
|
|
|
481
526
|
const encodeXml = _dumpVariantValue.bind(null, xw, value.dataType, node);
|
|
482
527
|
if (value.arrayType === node_opcua_variant_1.VariantArrayType.Matrix) {
|
|
483
528
|
// console.log("Warning _dumpValue : Matrix not supported yet");
|
|
484
|
-
xw
|
|
485
|
-
xw.writeAttribute("xmlns", "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
529
|
+
startElementEx(xw, uax, `ListOf${dataTypeName}`, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
486
530
|
value.value.forEach(encodeXml);
|
|
531
|
+
restoreDefaultNamespace(xw);
|
|
487
532
|
xw.endElement();
|
|
488
533
|
}
|
|
489
534
|
else if (value.arrayType === node_opcua_variant_1.VariantArrayType.Array) {
|
|
490
|
-
xw
|
|
491
|
-
xw.writeAttribute("xmlns", "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
535
|
+
startElementEx(xw, uax, `ListOf${dataTypeName}`, "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
492
536
|
value.value.forEach(encodeXml);
|
|
537
|
+
restoreDefaultNamespace(xw);
|
|
493
538
|
xw.endElement();
|
|
494
539
|
}
|
|
495
540
|
else if (value.arrayType === node_opcua_variant_1.VariantArrayType.Scalar) {
|
|
@@ -511,11 +556,9 @@ function _dumpArrayDimensionsAttribute(xw, node) {
|
|
|
511
556
|
xw.writeAttribute("ArrayDimensions", node.arrayDimensions.join(","));
|
|
512
557
|
}
|
|
513
558
|
}
|
|
514
|
-
function visitUANode(node,
|
|
559
|
+
function visitUANode(node, data, forward) {
|
|
515
560
|
(0, node_opcua_assert_1.assert)(typeof forward === "boolean");
|
|
516
561
|
const addressSpace = node.addressSpace;
|
|
517
|
-
options.elements = options.elements || [];
|
|
518
|
-
options.index_el = options.index_el || {};
|
|
519
562
|
// visit references
|
|
520
563
|
function process_reference(reference) {
|
|
521
564
|
// only backward or forward references
|
|
@@ -526,16 +569,16 @@ function visitUANode(node, options, forward) {
|
|
|
526
569
|
return; // skip OPCUA namespace
|
|
527
570
|
}
|
|
528
571
|
const k = _hash(reference);
|
|
529
|
-
if (!
|
|
530
|
-
|
|
572
|
+
if (!data.index_el[k]) {
|
|
573
|
+
data.index_el[k] = 1;
|
|
531
574
|
const o = addressSpace.findNode(k);
|
|
532
575
|
if (o) {
|
|
533
|
-
visitUANode(o,
|
|
576
|
+
visitUANode(o, data, forward);
|
|
534
577
|
}
|
|
535
578
|
}
|
|
536
579
|
}
|
|
537
580
|
node.ownReferences().forEach(process_reference);
|
|
538
|
-
|
|
581
|
+
data.elements.push(node);
|
|
539
582
|
return node;
|
|
540
583
|
}
|
|
541
584
|
function dumpNodeInXml(xw, node) {
|
|
@@ -593,10 +636,20 @@ function dumpReferencedNodes(xw, node, forward) {
|
|
|
593
636
|
}
|
|
594
637
|
}
|
|
595
638
|
}
|
|
639
|
+
function getParent(node) {
|
|
640
|
+
if (node instanceof ua_variable_impl_1.UAVariableImpl || node instanceof ua_method_impl_1.UAMethodImpl || node instanceof ua_object_impl_1.UAObjectImpl) {
|
|
641
|
+
return node.parent;
|
|
642
|
+
}
|
|
643
|
+
return null;
|
|
644
|
+
}
|
|
596
645
|
const currentReadFlag = (0, node_opcua_data_model_1.makeAccessLevelFlag)("CurrentRead");
|
|
597
646
|
function dumpCommonAttributes(xw, node) {
|
|
598
647
|
xw.writeAttribute("NodeId", n(xw, node.nodeId));
|
|
599
648
|
xw.writeAttribute("BrowseName", b(xw, node.browseName));
|
|
649
|
+
const parentNode = getParent(node);
|
|
650
|
+
if (parentNode) {
|
|
651
|
+
xw.writeAttribute("ParentNodeId", n(xw, parentNode.nodeId));
|
|
652
|
+
}
|
|
600
653
|
if (Object.prototype.hasOwnProperty.call(node, "symbolicName")) {
|
|
601
654
|
xw.writeAttribute("SymbolicName", node.symbolicName);
|
|
602
655
|
}
|
|
@@ -677,13 +730,20 @@ function _dumpStructureDefinition(xw, structureDefinition, baseStructureDefiniti
|
|
|
677
730
|
xw.endElement();
|
|
678
731
|
}
|
|
679
732
|
}
|
|
733
|
+
function _dumpEncoding(xw, uaEncoding) {
|
|
734
|
+
const uaDescription = uaEncoding.findReferencesAsObject("HasDescription")[0];
|
|
735
|
+
if (uaDescription) {
|
|
736
|
+
dumpUAVariable(xw, uaDescription);
|
|
737
|
+
}
|
|
738
|
+
_dumpUAObject(xw, uaEncoding);
|
|
739
|
+
}
|
|
680
740
|
function _dumpEncodings(xw, uaDataType) {
|
|
681
741
|
const encodings = uaDataType.findReferencesExAsObject("HasEncoding", node_opcua_data_model_1.BrowseDirection.Forward);
|
|
682
|
-
for (const
|
|
683
|
-
if (
|
|
742
|
+
for (const uaEncoding of encodings) {
|
|
743
|
+
if (uaEncoding.nodeClass !== node_opcua_data_model_1.NodeClass.Object) {
|
|
684
744
|
continue;
|
|
685
745
|
}
|
|
686
|
-
|
|
746
|
+
_dumpEncoding(xw, uaEncoding);
|
|
687
747
|
}
|
|
688
748
|
}
|
|
689
749
|
function _dumpUADataTypeDefinition(xw, uaDataType) {
|
|
@@ -696,15 +756,20 @@ function _dumpUADataTypeDefinition(xw, uaDataType) {
|
|
|
696
756
|
return;
|
|
697
757
|
}
|
|
698
758
|
if (uaDataType.isStructure()) {
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
759
|
+
// in case the namespace is conforming to 1.03 specification the DataTypeDefinition attribute
|
|
760
|
+
// will be not be readable....
|
|
761
|
+
const dataValue = uaDataType.readAttribute(index_current_1.SessionContext.defaultContext, node_opcua_basic_types_1.AttributeIds.DataTypeDefinition);
|
|
762
|
+
if (true || dataValue.statusCode === node_opcua_basic_types_1.StatusCodes.Good) {
|
|
763
|
+
const definition = uaDataType.getStructureDefinition();
|
|
764
|
+
const baseDefinition = uaDataTypeBase ? uaDataTypeBase.getStructureDefinition() : null;
|
|
765
|
+
xw.startElement("Definition");
|
|
766
|
+
xw.writeAttribute("Name", b(xw, uaDataType.browseName));
|
|
767
|
+
if (definition.structureType === node_opcua_types_1.StructureType.Union) {
|
|
768
|
+
xw.writeAttribute("IsUnion", "true");
|
|
769
|
+
}
|
|
770
|
+
_dumpStructureDefinition(xw, definition, baseDefinition);
|
|
771
|
+
xw.endElement();
|
|
705
772
|
}
|
|
706
|
-
_dumpStructureDefinition(xw, definition, baseDefinition);
|
|
707
|
-
xw.endElement();
|
|
708
773
|
return;
|
|
709
774
|
}
|
|
710
775
|
}
|
|
@@ -732,6 +797,10 @@ function _markAsVisited(xw, node) {
|
|
|
732
797
|
xw.visitedNode[_hash(node)] = 1;
|
|
733
798
|
}
|
|
734
799
|
function dumpUAVariable(xw, node) {
|
|
800
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
801
|
+
if (xw.visitedNode[_hash(node)]) {
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
735
804
|
_markAsVisited(xw, node);
|
|
736
805
|
dumpReferencedNodes(xw, node, false);
|
|
737
806
|
const addressSpace = node.addressSpace;
|
|
@@ -764,6 +833,7 @@ function dumpUAVariable(xw, node) {
|
|
|
764
833
|
dumpAggregates(xw, node);
|
|
765
834
|
}
|
|
766
835
|
function dumpUAVariableType(xw, node) {
|
|
836
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.VariableType);
|
|
767
837
|
xw.visitedNode = xw.visitedNode || {};
|
|
768
838
|
(0, node_opcua_assert_1.assert)(!xw.visitedNode[_hash(node)]);
|
|
769
839
|
xw.visitedNode[_hash(node)] = 1;
|
|
@@ -809,6 +879,7 @@ function dumpUAObject(xw, node) {
|
|
|
809
879
|
xw.writeComment("Object - " + b(xw, node.browseName) + " }}}} ");
|
|
810
880
|
}
|
|
811
881
|
function _dumpUAObject(xw, node) {
|
|
882
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Object);
|
|
812
883
|
xw.visitedNode = xw.visitedNode || {};
|
|
813
884
|
(0, node_opcua_assert_1.assert)(!xw.visitedNode[_hash(node)]);
|
|
814
885
|
xw.visitedNode[_hash(node)] = 1;
|
|
@@ -853,6 +924,7 @@ function dumpAggregates(xw, node) {
|
|
|
853
924
|
// Xx xw.writeComment("Aggregates }} ");
|
|
854
925
|
}
|
|
855
926
|
function dumpUAObjectType(xw, node) {
|
|
927
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.ObjectType);
|
|
856
928
|
(0, node_opcua_assert_1.assert)(node instanceof ua_object_type_impl_1.UAObjectTypeImpl);
|
|
857
929
|
xw.writeComment("ObjectType - " + b(xw, node.browseName) + " {{{{ ");
|
|
858
930
|
_markAsVisited(xw, node);
|
|
@@ -866,6 +938,7 @@ function dumpUAObjectType(xw, node) {
|
|
|
866
938
|
xw.writeComment("ObjectType - " + b(xw, node.browseName) + " }}}}");
|
|
867
939
|
}
|
|
868
940
|
function dumpUAMethod(xw, node) {
|
|
941
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Method);
|
|
869
942
|
_markAsVisited(xw, node);
|
|
870
943
|
dumpReferencedNodes(xw, node, false);
|
|
871
944
|
xw.startElement("UAMethod");
|
|
@@ -894,16 +967,16 @@ function resolveDataTypeName(addressSpace, dataType) {
|
|
|
894
967
|
}
|
|
895
968
|
return dataTypeNode.browseName;
|
|
896
969
|
}
|
|
897
|
-
function buildUpAliases(node, xw,
|
|
970
|
+
function buildUpAliases(node, xw, data) {
|
|
898
971
|
const addressSpace = node.addressSpace;
|
|
899
|
-
|
|
900
|
-
|
|
972
|
+
if (!data.aliases_visited)
|
|
973
|
+
data.aliases_visited = {};
|
|
901
974
|
const k = _hash(node);
|
|
902
975
|
// istanbul ignore next
|
|
903
|
-
if (
|
|
976
|
+
if (data.aliases_visited[k]) {
|
|
904
977
|
return;
|
|
905
978
|
}
|
|
906
|
-
|
|
979
|
+
data.aliases_visited[k] = 1;
|
|
907
980
|
// put datatype into aliases list
|
|
908
981
|
if (node.nodeClass === node_opcua_data_model_1.NodeClass.Variable || node.nodeClass === node_opcua_data_model_1.NodeClass.VariableType) {
|
|
909
982
|
const nodeV = node;
|
|
@@ -911,8 +984,8 @@ function buildUpAliases(node, xw, options) {
|
|
|
911
984
|
// name
|
|
912
985
|
const dataTypeName = b(xw, resolveDataTypeName(addressSpace, nodeV.dataType));
|
|
913
986
|
if (dataTypeName) {
|
|
914
|
-
if (!
|
|
915
|
-
|
|
987
|
+
if (!data.aliases[dataTypeName]) {
|
|
988
|
+
data.aliases[dataTypeName] = n(xw, nodeV.dataType);
|
|
916
989
|
}
|
|
917
990
|
}
|
|
918
991
|
}
|
|
@@ -920,8 +993,8 @@ function buildUpAliases(node, xw, options) {
|
|
|
920
993
|
// name
|
|
921
994
|
const dataTypeName = b(xw, resolveDataTypeName(addressSpace, nodeV.dataType));
|
|
922
995
|
if (dataTypeName) {
|
|
923
|
-
if (!
|
|
924
|
-
|
|
996
|
+
if (!data.aliases[dataTypeName]) {
|
|
997
|
+
data.aliases[dataTypeName] = n(xw, nodeV.dataType);
|
|
925
998
|
}
|
|
926
999
|
}
|
|
927
1000
|
}
|
|
@@ -929,12 +1002,12 @@ function buildUpAliases(node, xw, options) {
|
|
|
929
1002
|
function collectReferenceNameInAlias(reference) {
|
|
930
1003
|
// reference.referenceType
|
|
931
1004
|
const key = b(xw, (0, base_node_impl_1.getReferenceType)(reference).browseName);
|
|
932
|
-
if (!
|
|
1005
|
+
if (!data.aliases.key) {
|
|
933
1006
|
if (reference.referenceType.namespace === 0) {
|
|
934
|
-
|
|
1007
|
+
data.aliases[key] = reference.referenceType.toString().replace("ns=0;", "");
|
|
935
1008
|
}
|
|
936
1009
|
else {
|
|
937
|
-
|
|
1010
|
+
data.aliases[key] = n(xw, reference.referenceType);
|
|
938
1011
|
}
|
|
939
1012
|
}
|
|
940
1013
|
}
|
|
@@ -989,12 +1062,12 @@ function sortByNodeId(a, b) {
|
|
|
989
1062
|
function dumpXml(node, options) {
|
|
990
1063
|
const namespace = node.namespace;
|
|
991
1064
|
// make a first visit so that we determine which node to output and in which order
|
|
992
|
-
const
|
|
1065
|
+
const data = { aliases: {}, aliases_visited: {}, index_el: {}, elements: [] };
|
|
993
1066
|
const dependency = (0, construct_namespace_dependency_1.constructNamespaceDependency)(namespace);
|
|
994
1067
|
const translationTable = constructNamespaceTranslationTable(dependency);
|
|
995
1068
|
const xw = new XMLWriter(true);
|
|
996
1069
|
xw.translationTable = translationTable;
|
|
997
|
-
visitUANode(node,
|
|
1070
|
+
visitUANode(node, data, false);
|
|
998
1071
|
xw.startDocument({ encoding: "utf-8" });
|
|
999
1072
|
xw.startElement("UANodeSet");
|
|
1000
1073
|
xw.writeAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema-instance");
|
|
@@ -1002,9 +1075,23 @@ function dumpXml(node, options) {
|
|
|
1002
1075
|
xw.writeAttribute("Version", "1.02");
|
|
1003
1076
|
xw.writeAttribute("LastModified", new Date().toISOString());
|
|
1004
1077
|
xw.writeAttribute("xmlns", "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd");
|
|
1005
|
-
buildUpAliases(node, xw,
|
|
1006
|
-
writeAliases(xw,
|
|
1007
|
-
|
|
1078
|
+
buildUpAliases(node, xw, data);
|
|
1079
|
+
writeAliases(xw, data.aliases);
|
|
1080
|
+
const xmlNamspace = {
|
|
1081
|
+
default: { namespace: "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" }
|
|
1082
|
+
};
|
|
1083
|
+
xw.startElement("Extensions");
|
|
1084
|
+
{
|
|
1085
|
+
xw.startElement("Extension");
|
|
1086
|
+
{
|
|
1087
|
+
xw.startElement("ModelInfo");
|
|
1088
|
+
xw.writeAttribute("NodeOPCUA");
|
|
1089
|
+
xw.endElement();
|
|
1090
|
+
}
|
|
1091
|
+
xw.endElement();
|
|
1092
|
+
}
|
|
1093
|
+
xw.endElement();
|
|
1094
|
+
for (const el of data.elements) {
|
|
1008
1095
|
el.dumpXML(xw);
|
|
1009
1096
|
}
|
|
1010
1097
|
xw.endElement();
|
|
@@ -1033,10 +1120,17 @@ ua_object_type_impl_1.UAObjectTypeImpl.prototype.dumpXML = function (xw) {
|
|
|
1033
1120
|
ua_data_type_impl_1.UADataTypeImpl.prototype.dumpXML = function (xw) {
|
|
1034
1121
|
dumpUADataType(xw, this);
|
|
1035
1122
|
};
|
|
1123
|
+
function makeTypeXsd(namespaceUri) {
|
|
1124
|
+
return namespaceUri.replace(/\/$/, "") + "/Type.xsd";
|
|
1125
|
+
}
|
|
1036
1126
|
// eslint-disable-next-line max-statements
|
|
1037
1127
|
namespace_impl_1.NamespaceImpl.prototype.toNodeset2XML = function () {
|
|
1038
1128
|
const dependency = (0, construct_namespace_dependency_1.constructNamespaceDependency)(this);
|
|
1039
1129
|
const translationTable = constructNamespaceTranslationTable(dependency);
|
|
1130
|
+
const namespaceArrayNode = this.addressSpace.findNode(node_opcua_constants_1.VariableIds.Server_NamespaceArray);
|
|
1131
|
+
const namespaceArray = namespaceArrayNode
|
|
1132
|
+
? namespaceArrayNode.readAttribute(null, node_opcua_basic_types_1.AttributeIds.Value).value.value
|
|
1133
|
+
: [];
|
|
1040
1134
|
const xw = new XMLWriter(true);
|
|
1041
1135
|
xw.translationTable = translationTable;
|
|
1042
1136
|
xw.startDocument({ encoding: "utf-8", version: "1.0" });
|
|
@@ -1044,10 +1138,25 @@ namespace_impl_1.NamespaceImpl.prototype.toNodeset2XML = function () {
|
|
|
1044
1138
|
xw.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
|
|
1045
1139
|
xw.writeAttribute("xmlns:uax", "http://opcfoundation.org/UA/2008/02/Types.xsd");
|
|
1046
1140
|
xw.writeAttribute("xmlns", "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd");
|
|
1141
|
+
const namespacesMap = {
|
|
1142
|
+
"http://opcfoundation.org/UA/2011/03/UANodeSet.xsd": "",
|
|
1143
|
+
"http://opcfoundation.org/UA/2008/02/Types.xsd": "uax",
|
|
1144
|
+
"http://www.w3.org/2001/XMLSchema-instance": "xsi"
|
|
1145
|
+
};
|
|
1146
|
+
for (const namespace of dependency) {
|
|
1147
|
+
if (namespace.index === 0) {
|
|
1148
|
+
continue;
|
|
1149
|
+
}
|
|
1150
|
+
const translatedIndex = translationTable[namespace.index];
|
|
1151
|
+
const smallName = `ns${translatedIndex}`;
|
|
1152
|
+
xw.writeAttribute(`xmlns:${smallName}`, makeTypeXsd(namespace.namespaceUri));
|
|
1153
|
+
namespacesMap[namespace.namespaceUri] = smallName;
|
|
1154
|
+
}
|
|
1047
1155
|
// xx xw.writeAttribute("Version", "1.02");
|
|
1048
1156
|
// xx xw.writeAttribute("LastModified", (new Date()).toISOString());
|
|
1049
1157
|
// ------------- INamespace Uris
|
|
1050
1158
|
xw.startElement("NamespaceUris");
|
|
1159
|
+
initXmlWriterEx(xw, namespacesMap, namespaceArray);
|
|
1051
1160
|
// xx const namespaceArray = namespace.addressSpace.getNamespaceArray();
|
|
1052
1161
|
for (const depend of dependency) {
|
|
1053
1162
|
if (depend.index === 0) {
|
|
@@ -1078,11 +1187,11 @@ namespace_impl_1.NamespaceImpl.prototype.toNodeset2XML = function () {
|
|
|
1078
1187
|
xw.endElement();
|
|
1079
1188
|
}
|
|
1080
1189
|
xw.endElement();
|
|
1081
|
-
const
|
|
1190
|
+
const data = { aliases: {} };
|
|
1082
1191
|
for (const node of this.nodeIterator()) {
|
|
1083
|
-
buildUpAliases(node, xw,
|
|
1192
|
+
buildUpAliases(node, xw, data);
|
|
1084
1193
|
}
|
|
1085
|
-
writeAliases(xw,
|
|
1194
|
+
writeAliases(xw, data.aliases);
|
|
1086
1195
|
xw.visitedNode = {};
|
|
1087
1196
|
// -------------- writeReferences
|
|
1088
1197
|
xw.writeComment("ReferenceTypes");
|
|
@@ -1092,10 +1201,7 @@ namespace_impl_1.NamespaceImpl.prototype.toNodeset2XML = function () {
|
|
|
1092
1201
|
}
|
|
1093
1202
|
// -------------- Dictionaries
|
|
1094
1203
|
const addressSpace = this.addressSpace;
|
|
1095
|
-
const
|
|
1096
|
-
if (opcBinaryTypeSystem) {
|
|
1097
|
-
// let find all DataType dictionary node corresponding to a given namespace
|
|
1098
|
-
// (have DataTypeDictionaryType)
|
|
1204
|
+
const getDataTypeDescription = (opcBinaryTypeSystem) => {
|
|
1099
1205
|
const nodeToBrowse = new node_opcua_types_1.BrowseDescription({
|
|
1100
1206
|
browseDirection: node_opcua_data_model_1.BrowseDirection.Forward,
|
|
1101
1207
|
includeSubtypes: false,
|
|
@@ -1106,12 +1212,8 @@ namespace_impl_1.NamespaceImpl.prototype.toNodeset2XML = function () {
|
|
|
1106
1212
|
});
|
|
1107
1213
|
const result = opcBinaryTypeSystem.browseNode(nodeToBrowse).filter((r) => r.nodeId.namespace === this.index);
|
|
1108
1214
|
(0, node_opcua_assert_1.assert)(result.length <= 1);
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
const dataSystemType = addressSpace.findNode(result[0].nodeId);
|
|
1112
|
-
dumpNodeInXml(xw, dataSystemType);
|
|
1113
|
-
}
|
|
1114
|
-
}
|
|
1215
|
+
return result;
|
|
1216
|
+
};
|
|
1115
1217
|
// -------------- DataTypes
|
|
1116
1218
|
const dataTypes = [...this._dataTypeIterator()].sort(sortByBrowseName);
|
|
1117
1219
|
if (dataTypes.length) {
|
|
@@ -1122,6 +1224,35 @@ namespace_impl_1.NamespaceImpl.prototype.toNodeset2XML = function () {
|
|
|
1122
1224
|
dumpNodeInXml(xw, dataType);
|
|
1123
1225
|
}
|
|
1124
1226
|
}
|
|
1227
|
+
// --------------
|
|
1228
|
+
const opcBinaryTypeSystem = addressSpace.findNode(node_opcua_constants_1.ObjectIds.OPCBinarySchema_TypeSystem);
|
|
1229
|
+
const opcXmlSchemaTypeSystem = addressSpace.findNode(node_opcua_constants_1.ObjectIds.XmlSchema_TypeSystem);
|
|
1230
|
+
if (opcBinaryTypeSystem) {
|
|
1231
|
+
// let find all DataType dictionary node corresponding to a given namespace
|
|
1232
|
+
// (have DataTypeDictionaryType)
|
|
1233
|
+
const result = getDataTypeDescription(opcBinaryTypeSystem);
|
|
1234
|
+
if (result.length === 1) {
|
|
1235
|
+
xw.writeComment("DataSystem - Binary");
|
|
1236
|
+
const dataSystemType = addressSpace.findNode(result[0].nodeId);
|
|
1237
|
+
const types = dataSystemType.getComponents();
|
|
1238
|
+
for (const f of types) {
|
|
1239
|
+
dumpNodeInXml(xw, f);
|
|
1240
|
+
}
|
|
1241
|
+
dumpNodeInXml(xw, dataSystemType);
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
if (opcXmlSchemaTypeSystem) {
|
|
1245
|
+
const result = getDataTypeDescription(opcXmlSchemaTypeSystem);
|
|
1246
|
+
if (result.length === 1) {
|
|
1247
|
+
xw.writeComment("DataSystem - Xml");
|
|
1248
|
+
const dataSystemType = addressSpace.findNode(result[0].nodeId);
|
|
1249
|
+
const types = dataSystemType.getComponents();
|
|
1250
|
+
for (const f of types) {
|
|
1251
|
+
dumpNodeInXml(xw, f);
|
|
1252
|
+
}
|
|
1253
|
+
dumpNodeInXml(xw, dataSystemType);
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1125
1256
|
}
|
|
1126
1257
|
// -------------- ObjectTypes
|
|
1127
1258
|
xw.writeComment("ObjectTypes");
|