@@ -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 ) {
0 commit comments