@@ -40,6 +40,7 @@ def __init__(self, name, project_uri, app, is_optin=False, singlemode=False,defa
4040 self .is_singlemode = False # this is only true if config enabled is true and single mode is true
4141 self .gcconfiguri = None
4242 self .default_query_resource = "oslc_qm:TestCaseQuery"
43+ self ._confs_to_load = []
4344
4445 def load_components_and_configurations (self ,force = False ):
4546 if self ._components is not None and self ._configurations is not None and not force :
@@ -70,7 +71,7 @@ def load_components_and_configurations(self,force=False):
7071 assert compuri is not None , "compuri is None"
7172
7273 ncomps += 1
73- self ._components [compuri ] = {'name' : self .name , 'configurations' : {}}
74+ self ._components [compuri ] = {'name' : self .name , 'configurations' : {}, 'confs_to_load' : [] }
7475 configs = self .execute_get_xml ( compuri + "/configurations" , intent = "Retrieve all project/component configurations (singlemode)" )
7576 for conf in rdfxml .xml_find_elements (configs ,'.//rdfs:member' ):
7677 confu = rdfxml .xmlrdf_get_resource_uri (conf )
@@ -121,9 +122,10 @@ def load_components_and_configurations(self,force=False):
121122 compu = rdfxml .xmlrdf_get_resource_uri (component_el )
122123 comptitle = rdfxml .xmlrdf_get_resource_text (component_el , './/dcterms:title' )
123124 logger .info ( f"Found component { comptitle } " )
124- self ._components [compu ] = {'name' : comptitle , 'configurations' : {}}
125125 ncomps += 1
126126 confu = rdfxml .xmlrdf_get_resource_uri (component_el , './/oslc_config:configurations' )
127+ self ._components [compu ] = {'name' : comptitle , 'configurations' : {}, 'confs_to_load' : [confu ]}
128+
127129 configs_xml = self .execute_get_rdf_xml ( confu , intent = "Retrieve all project/component configuration definitions" )
128130 # Each config: <ldp:contains rdf:resource="https://jazz.ibm.com:9443/qm/oslc_config/resources/com.ibm.team.vvc.Configuration/_qT1EcEB4Eeus6Zk4qsm_Cw"/>
129131
@@ -149,6 +151,8 @@ def load_components_and_configurations(self,force=False):
149151 else :
150152 c = self ._create_component_api (cu , cname )
151153 c ._configurations = self ._components [cu ]['configurations' ]
154+ c ._confs_to_load = self ._components [cu ]['confs_to_load' ]
155+ self ._confs_to_load .extend (self ._components [cu ]['confs_to_load' ])
152156 self ._components [cu ]['component' ] = c
153157 return (ncomps , nconfs )
154158
@@ -174,6 +178,61 @@ def get_local_config(self, name_or_uri, global_config_uri=None):
174178 return cu
175179 return None
176180
181+ def load_configs (self ):
182+ # load configurations
183+ while self ._confs_to_load :
184+ confu = self ._confs_to_load .pop ()
185+ if not confu :
186+ # skip None in list
187+ continue
188+ logger .debug ( f"Retrieving config { confu } " )
189+ try :
190+ configs_xml = self .execute_get_rdf_xml (confu , intent = "Retrieve a configuration definition" )
191+ except :
192+ logger .info ( f"Config ERROR { thisconfu } !!!!!!!" )
193+ continue
194+ confmemberx = rdfxml .xml_find_elements (configs_xml , './/rdfs:member[@rdf:resource]' )
195+ if confmemberx :
196+ # a list of members
197+ for confmember in confmemberx :
198+ thisconfu = confmember .get ("{%s}resource" % rdfxml .RDF_DEFAULT_PREFIX ["rdf" ])
199+ self ._confs_to_load .append (thisconfu )
200+ # maybe it's got configuration(s)
201+ confmemberx = rdfxml .xml_find_elements (configs_xml , './/oslc_config:Configuration' ) + rdfxml .xml_find_elements (configs_xml , './/oslc_config:Stream' ) + rdfxml .xml_find_elements (configs_xml , './/oslc_config:Baseline' ) + rdfxml .xml_find_elements (configs_xml , './/oslc_config:ChangeSet' )
202+
203+ for confmember in confmemberx :
204+ thisconfu = rdfxml .xmlrdf_get_resource_uri ( confmember )
205+ logger .debug ( f"{ thisconfu = } " )
206+ conftitle = rdfxml .xmlrdf_get_resource_text (confmember , './/dcterms:title' )
207+ if rdfxml .xmlrdf_get_resource_uri ( confmember ,'.//rdf:type[@rdf:resource="http://open-services.net/ns/config#ChangeSet"]' ) is not None :
208+ conftype = "ChangeSet"
209+ elif rdfxml .xmlrdf_get_resource_uri ( confmember ,'.//rdf:type[@rdf:resource="http://open-services.net/ns/config#Baseline"]' ) is not None :
210+ conftype = "Baseline"
211+ elif rdfxml .xmlrdf_get_resource_uri ( confmember ,'.//rdf:type[@rdf:resource="http://open-services.net/ns/config#Stream"]' ) is not None :
212+ conftype = "Stream"
213+ elif rdfxml .xmlrdf_get_resource_uri ( confmember ,'.//rdf:type[@rdf:resource="http://open-services.net/ns/config#Configuration"]' ) is not None :
214+ conftype = "Stream"
215+ else :
216+ print ( ET .tostring (confmember ) )
217+ raise Exception ( f"Unrecognized configuration type" )
218+ created = rdfxml .xmlrdf_get_resource_uri (confmember , './/dcterms:created' )
219+ if thisconfu not in self ._configurations :
220+ logger .debug ( f"Adding { conftitle } " )
221+ self ._configurations [thisconfu ] = {
222+ 'name' : conftitle
223+ , 'conftype' : conftype
224+ ,'confXml' : confmember
225+ ,'created' : created
226+ }
227+ # self._configurations[thisconfu] = self._components[self.project_uri]['configurations'][thisconfu]
228+ else :
229+ logger .debug ( f"Skipping { thisconfu } because already defined" )
230+ # add baselines and changesets
231+ self ._confs_to_load .append ( rdfxml .xmlrdf_get_resource_uri (confmember , './oslc_config:streams' ) )
232+ self ._confs_to_load .append ( rdfxml .xmlrdf_get_resource_uri (confmember , './oslc_config:baselines' ) )
233+ self ._confs_to_load .append ( rdfxml .xmlrdf_get_resource_uri (confmember , './rm_config:changesets' ) )
234+
235+
177236 def list_configs ( self ):
178237 configs = []
179238 self .load_configs ()
0 commit comments