1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #include <precomp.h> 23 #include "hfi_service.hxx" 24 25 26 // NOT FULLY DEFINED SERVICES 27 #include <ary/idl/i_ce.hxx> 28 #include <ary/idl/ik_property.hxx> 29 #include <ary/idl/ik_service.hxx> 30 #include <toolkit/hf_docentry.hxx> 31 #include <toolkit/hf_linachain.hxx> 32 #include <toolkit/hf_navi_sub.hxx> 33 #include <toolkit/hf_title.hxx> 34 #include "hfi_doc.hxx" 35 #include "hfi_navibar.hxx" 36 #include "hfi_property.hxx" 37 #include "hfi_tag.hxx" 38 #include "hfi_typetext.hxx" 39 #include "hi_linkhelper.hxx" 40 41 42 43 44 extern const String 45 C_sCePrefix_Service("service"); 46 47 namespace 48 { 49 50 const String 51 C_sList_IncludedServices("Services' Summary"); 52 const String 53 C_sList_IncludedServices_Heading("Included Services - Summary"); 54 const String 55 C_sList_IncludedServices_Label("ServicesSummary"); 56 const String 57 C_sList_IncludedServicesDetails("Services' Details"); 58 const String 59 C_sList_IncludedServicesDetails_Heading("Included Services - Details"); 60 const String 61 C_sList_IncludedServicesDetails_Label("ServicesDetails"); 62 const String 63 C_sList_ExportedInterfaces("Interfaces' Summary"); 64 const String 65 C_sList_ExportedInterfaces_Heading("Exported Interfaces - Summary"); 66 const String 67 C_sList_ExportedInterfaces_Label("InterfacesSummary"); 68 const String 69 C_sList_ExportedInterfacesDetails("Interfaces' Details"); 70 const String 71 C_sList_ExportedInterfacesDetails_Heading("Exported Interfaces - Details"); 72 const String 73 C_sList_ExportedInterfacesDetails_Label("InterfacesDetails"); 74 const String 75 C_sList_Properties("Properties' Summary"); 76 const String 77 C_sList_Properties_Label("PropertiesSummary"); 78 const String 79 C_sList_PropertiesDetails("Properties' Details"); 80 const String 81 C_sList_PropertiesDetails_Label("PropertiesDetails"); 82 83 84 enum E_SubListIndices 85 { 86 sli_IncludedServicesSummary = 0, 87 sli_InterfacesSummary = 1, 88 sli_PropertiesSummary = 2, 89 sli_IncludedServicesDetails = 3, 90 sli_InterfacesDetails = 4, 91 sli_PropertiesDetails = 5 92 }; 93 94 } //anonymous namespace 95 96 97 HF_IdlService::HF_IdlService( Environment & io_rEnv, 98 Xml::Element & o_rOut ) 99 : HtmlFactory_Idl(io_rEnv, &o_rOut) 100 { 101 } 102 103 HF_IdlService::~HF_IdlService() 104 { 105 106 } 107 108 typedef ::ary::idl::ifc_service::attr 109 ServiceAttr; 110 typedef ::ary::Dyn_StdConstIterator< ::ary::idl::CommentedRelation > 111 dyn_comref_list; 112 113 void 114 HF_IdlService::produce_CommentedRelations( const client & i_ce, 115 comref_list & it_list, 116 const String & i_summaryTitle, 117 const String & i_summaryLabel, 118 const String & i_detailsTitle, 119 const String & i_detailsLabel, 120 const E_DocType i_docType ) const 121 { 122 csv_assert( it_list ); 123 124 bool bSummaryOnly = ( i_docType == doctype_summaryOnly ); 125 HF_SubTitleTable aTable( 126 CurOut(), 127 bSummaryOnly ? i_summaryLabel : i_detailsLabel, 128 bSummaryOnly ? i_summaryTitle : i_detailsTitle, 129 2 ); 130 131 for ( ; it_list; ++it_list ) 132 { 133 Xml::Element & 134 rRow = aTable.Add_Row(); 135 136 if ( bSummaryOnly ) 137 { 138 produce_Link(rRow, (*it_list).Type()); 139 produce_LinkSummary(i_ce, rRow, *it_list); 140 } 141 else 142 { 143 HF_IdlCommentedRelationElement 144 aRelation( Env(), aTable, *it_list ); 145 aRelation.Produce_byData( i_ce ); 146 } 147 } // end for 148 } 149 150 void 151 HF_IdlService::Produce_byData( const client & i_ce ) const 152 { 153 Dyn<HF_NaviSubRow> 154 pNaviSubRow( &make_Navibar(i_ce) ); 155 156 HF_TitleTable 157 aTitle(CurOut()); 158 HF_LinkedNameChain 159 aNameChain(aTitle.Add_Row()); 160 161 aNameChain.Produce_CompleteChain(Env().CurPosition(), nameChainLinker); 162 produce_Title(aTitle, C_sCePrefix_Service, i_ce); 163 164 write_Docu(aTitle.Add_Row(), i_ce); 165 CurOut() << new Html::HorizontalLine(); 166 167 // produce ... 168 // - included services: summary 169 dyn_comref_list dpIncludedServices; 170 ServiceAttr::Get_IncludedServices(dpIncludedServices, i_ce); 171 if ( (*dpIncludedServices).operator bool() ) 172 { 173 produce_CommentedRelations( i_ce, *dpIncludedServices, 174 C_sList_IncludedServices_Heading, 175 C_sList_IncludedServices_Label, 176 C_sList_IncludedServicesDetails_Heading, 177 C_sList_IncludedServicesDetails_Label, 178 doctype_summaryOnly ); 179 pNaviSubRow->SwitchOn(sli_IncludedServicesSummary); 180 } 181 182 // - exported interfaces: summary 183 dyn_comref_list dpExportedInterfaces; 184 ServiceAttr::Get_ExportedInterfaces(dpExportedInterfaces, i_ce); 185 if ( (*dpExportedInterfaces).operator bool() ) 186 { 187 produce_CommentedRelations( i_ce, *dpExportedInterfaces, 188 C_sList_ExportedInterfaces_Heading, 189 C_sList_ExportedInterfaces_Label, 190 C_sList_ExportedInterfacesDetails_Heading, 191 C_sList_ExportedInterfacesDetails_Label, 192 doctype_summaryOnly ); 193 pNaviSubRow->SwitchOn(sli_InterfacesSummary); 194 } 195 196 // - supported properties: summary 197 dyn_ce_list dpProperties; 198 ServiceAttr::Get_Properties(dpProperties, i_ce); 199 if ( (*dpProperties).operator bool() ) 200 { 201 produce_Members( *dpProperties, 202 C_sList_Properties, 203 C_sList_Properties_Label, 204 C_sList_PropertiesDetails, 205 C_sList_PropertiesDetails_Label, 206 viewtype_summary ); 207 pNaviSubRow->SwitchOn(sli_PropertiesSummary); 208 } 209 210 // - included services: details 211 ServiceAttr::Get_IncludedServices(dpIncludedServices, i_ce); 212 if ( (*dpIncludedServices).operator bool() ) 213 { 214 produce_CommentedRelations( i_ce, *dpIncludedServices, 215 C_sList_IncludedServices_Heading, 216 C_sList_IncludedServices_Label, 217 C_sList_IncludedServicesDetails_Heading, 218 C_sList_IncludedServicesDetails_Label, 219 doctype_complete ); 220 pNaviSubRow->SwitchOn(sli_IncludedServicesDetails); 221 } 222 223 // - exported interfaces: details 224 ServiceAttr::Get_ExportedInterfaces(dpExportedInterfaces, i_ce); 225 if ( (*dpExportedInterfaces).operator bool() ) 226 { 227 produce_CommentedRelations( i_ce, *dpExportedInterfaces, 228 C_sList_ExportedInterfaces_Heading, 229 C_sList_ExportedInterfaces_Label, 230 C_sList_ExportedInterfacesDetails_Heading, 231 C_sList_ExportedInterfacesDetails_Label, 232 doctype_complete ); 233 pNaviSubRow->SwitchOn(sli_InterfacesDetails); 234 } 235 236 // supported properties: details 237 ServiceAttr::Get_Properties(dpProperties, i_ce); 238 if ( (*dpProperties).operator bool() ) 239 { 240 produce_Members( *dpProperties, 241 C_sList_Properties, 242 C_sList_Properties_Label, 243 C_sList_PropertiesDetails, 244 C_sList_PropertiesDetails_Label, 245 viewtype_details ); 246 pNaviSubRow->SwitchOn(sli_PropertiesDetails); 247 } 248 249 pNaviSubRow->Produce_Row(); 250 CurOut() << new Xml::XmlCode("<br> "); 251 } 252 253 typedef ary::idl::ifc_property::attr PropertyAttr; 254 255 void 256 HF_IdlService::produce_SummaryDeclaration( Xml::Element & o_row, 257 const client & i_property ) const 258 { 259 // KORR_FUTURE 260 // Put this in to HF_IdlProperty! 261 262 Xml::Element & 263 rCell = o_row 264 >> *new Html::TableCell 265 << new Html::ClassAttr( C_sCellStyle_SummaryLeft ); 266 267 if (PropertyAttr::HasAnyStereotype(i_property)) 268 { 269 rCell << "[ "; 270 if (PropertyAttr::IsReadOnly(i_property)) 271 rCell << "readonly "; 272 if (PropertyAttr::IsBound(i_property)) 273 rCell << "bound "; 274 if (PropertyAttr::IsConstrained(i_property)) 275 rCell << "constrained "; 276 if (PropertyAttr::IsMayBeAmbiguous(i_property)) 277 rCell << "maybeambiguous "; 278 if (PropertyAttr::IsMayBeDefault(i_property)) 279 rCell << "maybedefault "; 280 if (PropertyAttr::IsMayBeVoid(i_property)) 281 rCell << "maybevoid "; 282 if (PropertyAttr::IsRemovable(i_property)) 283 rCell << "removable "; 284 if (PropertyAttr::IsTransient(i_property)) 285 rCell << "transient "; 286 rCell << "] "; 287 } // end if 288 289 HF_IdlTypeText 290 aType( Env(), rCell, true ); 291 aType.Produce_byData( PropertyAttr::Type(i_property) ); 292 293 StreamLock aLocalLink(100); 294 aLocalLink() << "#" << i_property.LocalName(); 295 rCell 296 << new Html::LineBreak 297 >> *new Html::Link( aLocalLink().c_str() ) 298 << i_property.LocalName(); 299 } 300 301 DYN HF_NaviSubRow & 302 HF_IdlService::make_Navibar( const client & i_ce ) const 303 { 304 HF_IdlNavigationBar 305 aNaviBar(Env(), CurOut()); 306 aNaviBar.Produce_CeMainRow(i_ce); 307 308 DYN HF_NaviSubRow & 309 ret = aNaviBar.Add_SubRow(); 310 ret.AddItem(C_sList_IncludedServices, C_sList_IncludedServices_Label, false); 311 ret.AddItem(C_sList_ExportedInterfaces, C_sList_ExportedInterfaces_Label, false); 312 ret.AddItem(C_sList_Properties, C_sList_Properties_Label, false); 313 ret.AddItem(C_sList_IncludedServicesDetails, C_sList_IncludedServicesDetails_Label, false); 314 ret.AddItem(C_sList_ExportedInterfacesDetails, C_sList_ExportedInterfacesDetails_Label, false); 315 ret.AddItem(C_sList_PropertiesDetails, C_sList_PropertiesDetails_Label, false); 316 317 CurOut() << new Html::HorizontalLine(); 318 return ret; 319 } 320 321 void 322 HF_IdlService::produce_Link( Xml::Element & o_row, 323 type_id i_type ) const 324 { 325 Xml::Element & 326 rCell = o_row 327 >> *new Html::TableCell 328 << new Html::ClassAttr(C_sCellStyle_SummaryLeft); 329 HF_IdlTypeText 330 aText(Env(), rCell, true); 331 aText.Produce_byData(i_type); 332 } 333 334 void 335 HF_IdlService::produce_LinkSummary( const client & i_ce, 336 Xml::Element & o_row, 337 const comref & i_commentedRef ) const 338 { 339 Xml::Element & 340 rCell = o_row 341 >> *new Html::TableCell 342 << new Html::ClassAttr(C_sCellStyle_SummaryRight); 343 344 HF_IdlCommentedRelationElement::produce_LinkDoc( Env(), i_ce, rCell, i_commentedRef, doctype_summaryOnly ); 345 } 346 347 void 348 HF_IdlService::produce_MemberDetails( HF_SubTitleTable & o_table, 349 const client & i_ce ) const 350 { 351 HF_IdlProperty 352 aProperty( Env(), o_table); 353 aProperty.Produce_byData( i_ce ); 354 } 355 356 357 358