شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » NetworkDesignDocument

Public general use code classes and xml files that we've compiled and used over the years:

Network Design Document support class for Optical Fiber Network (OFN) UI model.

   1:  using System.Collections.Generic;
   2:  using System.Data;
   3:  using System.Linq;
   4:  using System.Runtime.Serialization;
   5:   
   6:  namespace Ia.Ngn.Cl.Model.Ui
   7:  {
   8:      ////////////////////////////////////////////////////////////////////////////
   9:   
  10:      /// <summary publish="true">
  11:      /// Network Design Document support class for Optical Fiber Network (OFN) UI model.
  12:      /// </summary>
  13:      /// 
  14:      /// <remarks> 
  15:      /// Copyright © 2006-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  16:      ///
  17:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  18:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  19:      ///
  20:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  21:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  22:      /// 
  23:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  24:      /// 
  25:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  26:      /// </remarks> 
  27:      public class NetworkDesignDocument
  28:      {
  29:          ////////////////////////////////////////////////////////////////////////////
  30:   
  31:          /// <summary>
  32:          ///
  33:          /// </summary>
  34:          public NetworkDesignDocument() { }
  35:   
  36:          ////////////////////////////////////////////////////////////////////////////
  37:   
  38:          /// <summary>
  39:          /// 
  40:          /// </summary>
  41:          [DataContract(IsReference = true, Name = "apiOnt")]
  42:          public class Ont
  43:          {
  44:              /// <summary/>
  45:              [DataMember(Name = "id")]
  46:              public string Id { get; set; }
  47:   
  48:              /// <summary/>
  49:              [DataMember(Name = "rack")]
  50:              public int Rack { get; set; }
  51:   
  52:              /// <summary/>
  53:              [DataMember(Name = "sub")]
  54:              public int Sub { get; set; }
  55:   
  56:              /// <summary/>
  57:              [DataMember(Name = "card")]
  58:              public int Card { get; set; }
  59:   
  60:              /// <summary/>
  61:              [DataMember(Name = "port")]
  62:              public int Port { get; set; }
  63:   
  64:              /// <summary/>
  65:              [DataMember(Name = "number")]
  66:              public int Number { get; set; }
  67:   
  68:              /// <summary/>
  69:              [DataMember(Name = "position")]
  70:              public string Position { get; set; }
  71:   
  72:              /// <summary/>
  73:              [DataMember(Name = "ip")]
  74:              public string Ip { get; set; }
  75:   
  76:              /// <summary/>
  77:              [DataMember(Name = "mgcIp")]
  78:              public string MgcIp { get; set; }
  79:   
  80:              /// <summary/>
  81:              [DataMember(Name = "mgcSecondaryIp")]
  82:              public string MgcSecondaryIp { get; set; }
  83:   
  84:              /// <summary/>
  85:              [DataMember(Name = "mgcSubnetMask")]
  86:              public string MgcSubnetMask { get; set; }
  87:   
  88:              /// <summary/>
  89:              [DataMember(Name = "imsService")]
  90:              public int ImsService { get; set; }
  91:   
  92:              /// <summary/>
  93:              [DataMember(Name = "imsFsdb")]
  94:              public string ImsFsdb { get; set; }
  95:   
  96:              /// <summary/>
  97:              [DataMember(Name = "primarySwitch")]
  98:              public string PrimarySwitch { get; set; }
  99:   
 100:              /// <summary/>
 101:              [DataMember(Name = "ponName")]
 102:              public string PonName { get; set; }
 103:   
 104:              /// <summary/>
 105:              [DataMember(Name = "accessName")]
 106:              public string AccessName { get; set; }
 107:          }
 108:   
 109:          ////////////////////////////////////////////////////////////////////////////    
 110:   
 111:          /// <summary>
 112:          /// 
 113:          /// </summary>
 114:          public static string StructureDataTable()
 115:          {
 116:              int siteCount, routerCount, odfCount, oltCount;
 117:              int siteOltCount, routerOltCount, odfOltCount, oltOltCount;
 118:              string htmlTable;
 119:   
 120:              siteCount = routerCount = odfCount = oltCount = 0;
 121:              siteOltCount = routerOltCount = odfOltCount = oltOltCount = 0;
 122:   
 123:              htmlTable = @"<div id=""network-design-document-structure"">";
 124:   
 125:              htmlTable += "<table>";
 126:   
 127:              htmlTable += "<tr class=site0><td>Site</td><td>PSTN/MSAN/SoftX</td><td>Switch/Router</td><td>Access</td><td></td><td></td></tr>";
 128:   
 129:              siteCount = 1;
 130:   
 131:              var siteList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.SiteList.OrderBy(u => u.Name);
 132:              var oltList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList;
 133:   
 134:              foreach (var site in siteList)
 135:              {
 136:                  siteOltCount = (from o in oltList
 137:                                  where o.Odf != null && o.Odf.Router != null && o.Odf.Router.Site == site
 138:                                  select o).Count();
 139:   
 140:                  if (site.Routers.Count > 0)
 141:                  {
 142:                      routerCount = 1;
 143:   
 144:                      foreach (var router in site.Routers)
 145:                      {
 146:                          routerOltCount = (from o in oltList
 147:                                            where o.Odf != null && o.Odf.Router == router
 148:                                            select o).Count();
 149:   
 150:                          if (router.Odfs.Count > 0)
 151:                          {
 152:                              odfCount = 1;
 153:   
 154:                              foreach (var odf in router.Odfs)
 155:                              {
 156:                                  odfOltCount = (from o in oltList
 157:                                                 where o.Odf == odf
 158:                                                 select o).Count();
 159:   
 160:                                  oltCount = 1;
 161:   
 162:                                  foreach (var olt in odf.Olts)
 163:                                  {
 164:                                      oltOltCount = odf.Olts.Count;
 165:   
 166:                                      htmlTable += @"<tr class=site" + siteCount + ">";
 167:   
 168:                                      if (routerCount == 1 && odfCount == 1 && oltCount == 1)
 169:                                      {
 170:                                          htmlTable += "<td class=site rowspan=" + siteOltCount + ">" + SiteStructureDataTable(site) + "</td>";
 171:                                          htmlTable += "<td class=pstn rowspan=" + siteOltCount + ">" + PstnAndMsanAndSoftXStructureDataTable(site) + "</td>";
 172:                                      }
 173:   
 174:                                      if (odfCount == 1 && oltCount == 1) htmlTable += "<td class=router rowspan=" + routerOltCount + ">" + RouterStructureDataTable(router) + "</td>";
 175:   
 176:                                      if (oltCount == 1) htmlTable += "<td class=odf rowspan=" + odfOltCount + ">" + OdfStructureDataTable(odf) + "</td>";
 177:   
 178:                                      // field type color
 179:                                      if (olt.FieldType == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType.Green)
 180:                                      {
 181:                                          htmlTable += @"<td style=""background-color:green""> </td><td class=olt>" + OltStructureDataTable(olt) + "</td>";
 182:                                      }
 183:                                      else // if (olt.FieldType == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType.Brown)
 184:                                      {
 185:                                          htmlTable += @"<td style=""background-color:brown""> </td><td class=olt>" + OltStructureDataTable(olt) + "</td>";
 186:                                      }
 187:   
 188:                                      htmlTable += @"</tr>";
 189:   
 190:                                      oltCount++;
 191:                                  }
 192:   
 193:                                  odfCount++;
 194:                              }
 195:                          }
 196:                          else
 197:                          {
 198:                              if (routerCount == 1)
 199:                              {
 200:                                  htmlTable += @"<tr class=site" + siteCount + ">";
 201:   
 202:                                  htmlTable += "<td class=site>" + SiteStructureDataTable(site) + "</td>";
 203:                                  htmlTable += "<td class=pstn>" + PstnAndMsanAndSoftXStructureDataTable(site) + "</td>";
 204:                                  htmlTable += "<td class=router>" + RouterStructureDataTable(router) + "</td>";
 205:                                  htmlTable += "<td class=odf> </td>";
 206:                                  htmlTable += "<td> </td>";
 207:                                  htmlTable += "<td class=olt> </td>";
 208:   
 209:                                  htmlTable += "</tr>";
 210:                              }
 211:   
 212:                              routerCount--;
 213:                          }
 214:   
 215:                          routerCount++;
 216:                      }
 217:                  }
 218:                  else
 219:                  {
 220:                      htmlTable += @"<tr class=site" + siteCount + ">";
 221:   
 222:                      htmlTable += "<td class=site>" + SiteStructureDataTable(site) + "</td>";
 223:                      htmlTable += "<td class=pstn>" + PstnAndMsanAndSoftXStructureDataTable(site) + "</td>";
 224:                      htmlTable += "<td class=router> </td>";
 225:                      htmlTable += "<td class=odf> </td>";
 226:                      htmlTable += "<td> </td>";
 227:                      htmlTable += "<td class=olt> </td>";
 228:   
 229:                      htmlTable += "</tr>";
 230:                  }
 231:   
 232:                  siteCount++;
 233:              }
 234:   
 235:              htmlTable += "</table>";
 236:   
 237:              htmlTable += "</div>";
 238:   
 239:              return htmlTable;
 240:          }
 241:   
 242:          ////////////////////////////////////////////////////////////////////////////    
 243:   
 244:          /// <summary>
 245:          /// 
 246:          /// </summary>
 247:          private static string SiteStructureDataTable(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site site)
 248:          {
 249:              string content, kuwaitOfnAreas;
 250:   
 251:              kuwaitOfnAreas = string.Empty;
 252:   
 253:              foreach (var ka in site.KuwaitNgnAreas) kuwaitOfnAreas += ka.NameArabicName + "<br />";
 254:   
 255:              kuwaitOfnAreas = kuwaitOfnAreas.Trim(',');
 256:   
 257:              content = site.NameArabicName;
 258:              content += @"<br />" + string.Join(", ", site.AreaSymbolList);
 259:              content += @"<br />" + kuwaitOfnAreas;
 260:   
 261:              return content;
 262:          }
 263:   
 264:          ////////////////////////////////////////////////////////////////////////////    
 265:   
 266:          /// <summary>
 267:          /// 
 268:          /// </summary>
 269:          private static string PstnAndMsanAndSoftXStructureDataTable(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site site)
 270:          {
 271:              var content = string.Empty;
 272:   
 273:              var pstnList = site.Pstns.ToList();
 274:   
 275:              foreach (var pstn in pstnList)
 276:              {
 277:                  content += "PSTN (" + pstn.PstnExchangeType + "): " + pstn.Name;
 278:                  content += @"<br />";
 279:                  content += string.Join(", ", pstn.DomainList);
 280:                  content += "<br />";
 281:                  content += @" Uses NP/LNP/SPS Server?: " + Ia.Cl.Model.Default.YesNo(pstn.UsesNpServer) + " ";
 282:   
 283:                  content += @"<br />";
 284:                  content += @"<br />";
 285:              }
 286:   
 287:   
 288:              var msanList = site.Msans.ToList();
 289:   
 290:              foreach (var msan in msanList)
 291:              {
 292:                  content += "MSAN: " + msan.NameSymbol;
 293:   
 294:                  if (msan.DomainList != null)
 295:                  {
 296:                      content += @"<br />";
 297:                      content += string.Join(", ", msan.DomainList);
 298:                  }
 299:   
 300:                  content += @"<br />";
 301:                  content += @"<br />";
 302:              }
 303:   
 304:   
 305:              var softXList = site.SoftXes.ToList();
 306:   
 307:              foreach (var softX in softXList)
 308:              {
 309:                  content += "SoftX: ";
 310:   
 311:                  if (softX.DomainList != null)
 312:                  {
 313:                      content += @"<br />";
 314:                      content += string.Join(", ", softX.DomainList);
 315:                  }
 316:   
 317:                  content += @"<br />";
 318:                  content += @"<br />";
 319:              }
 320:   
 321:              return content;
 322:          }
 323:   
 324:          ////////////////////////////////////////////////////////////////////////////    
 325:   
 326:          /// <summary>
 327:          /// 
 328:          /// </summary>
 329:          private static string RouterStructureDataTable(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Router router)
 330:          {
 331:              string content, domainList;
 332:   
 333:              domainList = string.Empty;
 334:   
 335:              foreach (int i in router.DomainList) domainList += i + ", ";
 336:   
 337:              domainList = domainList.Trim();
 338:              domainList = domainList.Trim(',');
 339:   
 340:              content = router.Vendor.Name;
 341:              content += @"<br />" + domainList;
 342:   
 343:              return content;
 344:          }
 345:   
 346:          ////////////////////////////////////////////////////////////////////////////    
 347:   
 348:          /// <summary>
 349:          /// 
 350:          /// </summary>
 351:          private static string OdfStructureDataTable(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Odf odf)
 352:          {
 353:              string content;
 354:   
 355:              content = odf.Name + @"<br />" + odf.Vendor.Name;
 356:   
 357:              return content;
 358:          }
 359:   
 360:          ////////////////////////////////////////////////////////////////////////////    
 361:   
 362:          /// <summary>
 363:          /// 
 364:          /// </summary>
 365:          private static string OltStructureDataTable(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
 366:          {
 367:              string content;
 368:              List<int> ponlist, proposedPonList;
 369:              Dictionary<string, List<int>> dic;
 370:   
 371:              proposedPonList = new List<int>();
 372:              dic = new Dictionary<string, List<int>>();
 373:   
 374:              content = olt.Symbol;
 375:              content += @" (" + olt.AmsName + ") ";
 376:   
 377:              content += "<br />";
 378:              content += @" Field type: " + Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldTypeColoredString(olt.FieldType) + " ";
 379:   
 380:              content += "<br />";
 381:              content += @" SIP?: " + Ia.Cl.Model.Default.YesNo(olt.IsSip) + " ";
 382:   
 383:              foreach (var ponGroup in olt.PonGroupList)
 384:              {
 385:                  ponlist = new List<int>();
 386:   
 387:                  foreach (int i in ponGroup.UsedPonInPonGroupList) if (i != 0) ponlist.Add(i);
 388:   
 389:                  if (!dic.ContainsKey(ponGroup.Symbol))
 390:                  {
 391:                      dic[ponGroup.Symbol] = ponlist;
 392:                  }
 393:                  else dic[ponGroup.Symbol].AddRange(ponlist);
 394:   
 395:                  /*
 396:                  if (ponGroup.HasNewProposedPonList) foreach (int i in ponGroup.UsedProposedPonInPonGroupList) if (i != 0) proposedPonList.Add(i);
 397:  
 398:                  if (proposedPonList.Count > 0)
 399:                  {
 400:                      content += @"(Proposed): " + Ia.Cl.Model.Default.ConvertNumberListToHyphenAndCommaSeperatedNumberString(proposedPonList) + "</b>";
 401:                  }
 402:                  */
 403:              }
 404:   
 405:              foreach (var kvp in dic)
 406:              {
 407:                  content += "<br />";
 408:                  content += kvp.Key + @": " + Ia.Cl.Model.Default.ConvertNumberListToHyphenAndCommaSeperatedNumberString(kvp.Value) + " ";
 409:              }
 410:   
 411:              //content += @" (" + olt.PonListString + ") ";
 412:   
 413:              return content;
 414:          }
 415:   
 416:          ////////////////////////////////////////////////////////////////////////////
 417:          ////////////////////////////////////////////////////////////////////////////
 418:   
 419:          /// <summary>
 420:          /// 
 421:          /// </summary>
 422:          public static string StructureToSimpleTextString()
 423:          {
 424:              int siteCount, routerCount, odfCount, oltCount;
 425:              int siteOltCount, routerOltCount, odfOltCount, oltOltCount;
 426:              string content, domainList;
 427:              string kuwaitOfnAreas;
 428:              string text;
 429:   
 430:              siteCount = routerCount = odfCount = oltCount = 0;
 431:              siteOltCount = routerOltCount = odfOltCount = oltOltCount = 0;
 432:   
 433:              text = "\n";
 434:   
 435:              siteCount = 1;
 436:   
 437:              foreach (var site in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.SiteList)
 438:              {
 439:                  siteOltCount = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList
 440:                                  where o.Odf != null && o.Odf.Router != null && o.Odf.Router.Site == site
 441:                                  select o).Count();
 442:   
 443:                  if (site.Routers.Count > 0)
 444:                  {
 445:                      routerCount = 1;
 446:   
 447:                      foreach (var router in site.Routers)
 448:                      {
 449:                          routerOltCount = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList
 450:                                            where o.Odf != null && o.Odf.Router == router
 451:                                            select o).Count();
 452:   
 453:                          if (router.Odfs.Count > 0)
 454:                          {
 455:                              odfCount = 1;
 456:   
 457:                              foreach (var odf in router.Odfs)
 458:                              {
 459:                                  odfOltCount = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList
 460:                                                 where o.Odf == odf
 461:                                                 select o).Count();
 462:   
 463:                                  oltCount = 1;
 464:   
 465:                                  foreach (var olt in odf.Olts)
 466:                                  {
 467:                                      oltOltCount = odf.Olts.Count;
 468:   
 469:                                      if (routerCount == 1 && odfCount == 1 && oltCount == 1)
 470:                                      {
 471:                                          text += "\n";
 472:   
 473:                                          //text += "\n";
 474:                                          //text += "\n";
 475:                                          text += @"===========================";
 476:   
 477:                                          text += "\n";
 478:   
 479:                                          kuwaitOfnAreas = string.Empty;
 480:   
 481:                                          foreach (var ka in site.KuwaitNgnAreas) kuwaitOfnAreas += ka.NameArabicName + "\n";
 482:   
 483:                                          kuwaitOfnAreas = kuwaitOfnAreas.Trim();
 484:   
 485:                                          content = site.NameArabicName;
 486:                                          content += "\n";
 487:                                          content += "\n" + string.Join(", ", site.AreaSymbolList);
 488:                                          content += "\n";
 489:                                          content += "\n" + kuwaitOfnAreas;
 490:   
 491:                                          text += content.Trim();
 492:                                      }
 493:   
 494:                                      if (odfCount == 1 && oltCount == 1)
 495:                                      {
 496:                                          //text += "\n";
 497:                                          text += "\n";
 498:   
 499:                                          //text += "| --------------------------";
 500:                                          text += "\n";
 501:   
 502:                                          domainList = string.Empty;
 503:   
 504:                                          foreach (int i in router.DomainList) domainList += i + ", ";
 505:   
 506:                                          domainList = domainList.Trim();
 507:                                          domainList = domainList.Trim(',');
 508:   
 509:                                          content = router.Vendor.Name + @" " + domainList;
 510:   
 511:                                          text += "| " + content;
 512:   
 513:                                          text += "\n";
 514:                                      }
 515:   
 516:                                      if (oltCount == 1)
 517:                                      {
 518:                                          text += "\n";
 519:   
 520:                                          //text += "\t\t\t\t\t\t--------------------------";
 521:                                          text += "| | " + odf.Name + @" (" + odf.Vendor.Name + ")";
 522:                                      }
 523:   
 524:                                      /*
 525:  // field type color
 526:  if (olt.FieldType == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType.Green)
 527:      htmlTable += @"<td style=""background-color:green""> </td><td class=olt>" + OltStructureDataTable(olt) + "</td>";
 528:  else /*if (olt.FieldType == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType.Brown)* /
 529:      htmlTable += @"<td style=""background-color:brown""> </td><td class=olt>" + OltStructureDataTable(olt) + "</td>";
 530:      */
 531:   
 532:                                      //text += @"====================================";
 533:   
 534:                                      oltCount++;
 535:                                  }
 536:   
 537:                                  odfCount++;
 538:                              }
 539:                          }
 540:                          else routerCount--;
 541:   
 542:                          routerCount++;
 543:                      }
 544:                  }
 545:   
 546:                  siteCount++;
 547:              }
 548:   
 549:              text += "\n";
 550:   
 551:              return text.Trim();
 552:          }
 553:   
 554:          ////////////////////////////////////////////////////////////////////////////
 555:          ////////////////////////////////////////////////////////////////////////////    
 556:      }
 557:  }