Skip to content

Commit 21a74af

Browse files
committed
1 parent dc078c2 commit 21a74af

File tree

3 files changed

+64
-9
lines changed

3 files changed

+64
-9
lines changed

src/ConfigurationFormats/edt.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,12 @@ export class Edt {
118118
switch (objName.split('.')[0]) {
119119
case 'Subsystem':
120120
return GetTreeItem(treeItemId, elementName ?? objName, {
121-
icon: 'subsystem', children: this.getSubsystemChildren(elementObject),
121+
icon: 'subsystem',
122+
children: this.getSubsystemChildren(
123+
elementObject,
124+
folderUri,
125+
posix.join(rootPath, objectPath)
126+
),
122127
configType: 'edt'
123128
});
124129
case 'CommonModule':
@@ -166,13 +171,13 @@ export class Edt {
166171
case 'WebService':
167172
return GetTreeItem(treeItemId, elementName ?? objName, {
168173
icon: 'ws', context: 'module', path: treeItemPath,
169-
children: this.fillWebServiceItemsByMetadata(),
174+
children: this.fillWebServiceItemsByMetadata(treeItemIdSlash, elementObject),
170175
configType: 'edt'
171176
});
172177
case 'HTTPService':
173178
return GetTreeItem(treeItemId, elementName ?? objName, {
174179
icon: 'http', context: 'module', path: treeItemPath,
175-
children: this.fillHttpServiceItemsByMetadata(),
180+
children: this.fillHttpServiceItemsByMetadata(treeItemIdSlash, elementObject),
176181
configType: 'edt'
177182
});
178183
case 'WSReference':
@@ -303,8 +308,38 @@ export class Edt {
303308
return null;
304309
}
305310

306-
getSubsystemChildren(obj: any): TreeItem[] | undefined {
307-
return undefined;
311+
getSubsystemChildren(obj: any, folderUri: vscode.Uri, path: string): TreeItem[] | undefined {
312+
const subtreeItems: TreeItem[] = [];
313+
314+
if (obj.subsystems && obj.subsystems.length > 0) {
315+
for (const subsystem of obj.subsystems) {
316+
const subPath = posix.join(path, 'Subsystems', subsystem);
317+
const fileName = folderUri.with({ path: posix.join(subPath, `${subsystem}.mdo`) });
318+
fs.promises.readFile(fileName.fsPath)
319+
.then(data => {
320+
const parser = new XMLParser({
321+
ignoreAttributes: false,
322+
attributeNamePrefix: '$_',
323+
isArray: (name, jpath, isLeafNode, isAttribute) => {
324+
if(jpath === 'mdclass:Subsystem.subsystems') return true;
325+
326+
return false;
327+
}
328+
});
329+
330+
const element = parser.parse(data);
331+
const elementObject = element[Object.keys(element)[1]];
332+
const elementName = elementObject.name;
333+
334+
subtreeItems.push(GetTreeItem(`${subPath}/${elementObject.$_uuid}`, elementName ?? subsystem, {
335+
icon: 'subsystem', children: this.getSubsystemChildren(elementObject, folderUri, subPath),
336+
configType: 'edt'
337+
}));
338+
});
339+
}
340+
}
341+
342+
return subtreeItems;
308343
}
309344

310345
fillObjectItemsByMetadata(idPrefix: string, metadataType: string, metadata: Metadata) {
@@ -323,12 +358,18 @@ export class Edt {
323358
return [ ...items, ...this.fillCommonItems(idPrefix, metadataType, metadata) ];
324359
}
325360

326-
fillWebServiceItemsByMetadata() {
327-
return undefined;
361+
fillWebServiceItemsByMetadata(idPrefix: string, metadata: Metadata) {
362+
return metadata.operations?.map((operation) => GetTreeItem(idPrefix + operation.$_uuid, operation.name, {
363+
icon: 'operation', children: operation.parameters?.
364+
map(parameter => GetTreeItem(idPrefix + parameter.$_uuid, parameter.name, { icon: 'parameter' }))
365+
}));
328366
}
329367

330-
fillHttpServiceItemsByMetadata() {
331-
return undefined;
368+
fillHttpServiceItemsByMetadata(idPrefix: string, metadata: Metadata) {
369+
return metadata.urlTemplates?.map((urlTemplate) => GetTreeItem(idPrefix + urlTemplate.$_uuid, urlTemplate.name, {
370+
icon: 'urlTemplate', children: urlTemplate.methods?.
371+
map(method => GetTreeItem(idPrefix + method.$_uuid, method.name, { icon: 'parameter' }))
372+
}));
332373
}
333374

334375
fillCommonItems(idPrefix: string, metadataType: string, metadata: Metadata) {

src/ConfigurationFormats/edtMetadataInterfaces.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export interface Metadata extends ObjectParams {
1111
accountingFlags?: ObjectParams[];
1212
extDimensionAccountingFlags?: ObjectParams[];
1313
addressingAttributes?: ObjectParams[];
14+
operations?: WebServiceOperation[];
15+
urlTemplates?: UrlTemplate[];
1416
}
1517

1618
export interface ObjectParams {
@@ -20,4 +22,12 @@ export interface ObjectParams {
2022

2123
export interface TabularSections extends ObjectParams {
2224
attributes?: ObjectParams[];
25+
}
26+
27+
export interface WebServiceOperation extends ObjectParams {
28+
parameters?: ObjectParams[];
29+
}
30+
31+
export interface UrlTemplate extends ObjectParams {
32+
methods?: ObjectParams[];
2333
}

src/ConfigurationFormats/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,10 @@ export function getObjectPaths(): string[] {
175175
'mdclass:ExchangePlan.forms',
176176
'mdclass:ExchangePlan.commands',
177177
'mdclass:ExchangePlan.templates',
178+
'mdclass:WebService.operations',
179+
'mdclass:WebService.operations.parameters',
180+
'mdclass:HTTPService.urlTemplates',
181+
'mdclass:HTTPService.urlTemplates.methods',
178182
'mdclass:Catalog.attributes',
179183
'mdclass:Catalog.tabularSections',
180184
'mdclass:Catalog.tabularSections.attributes',

0 commit comments

Comments
 (0)