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

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) business model.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Data;
   4:  using System.Linq;
   5:  using System.Text;
   6:   
   7:  namespace Ia.Ngn.Cl.Model.Business
   8:  {
   9:      ////////////////////////////////////////////////////////////////////////////
  10:   
  11:      /// <summary publish="true">
  12:      /// Network Design Document support class for Optical Fiber Network (OFN) business model.
  13:      /// </summary>
  14:      /// 
  15:      /// <remarks> 
  16:      /// Copyright © 2006-2021 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  17:      ///
  18:      /// 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
  19:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  20:      ///
  21:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  22:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  23:      /// 
  24:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  25:      /// 
  26:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  27:      /// </remarks> 
  28:      public class NetworkDesignDocument
  29:      {
  30:          /// <summary/>
  31:          public const int PrecautionaryHardCodedNumberOfOntRecords = 223512;
  32:   
  33:          /// <summary/>
  34:          public enum FieldType { Green = 1, Brown = 2 };
  35:   
  36:          /// <summary/>
  37:          public enum PstnExchangeType { EricssonAxe = 1, SiemensEwsd = 2, NortelMeridian = 3 };
  38:   
  39:          ////////////////////////////////////////////////////////////////////////////
  40:   
  41:          /// <summary>
  42:          ///
  43:          /// </summary>
  44:          public NetworkDesignDocument() { }
  45:   
  46:          ////////////////////////////////////////////////////////////////////////////
  47:   
  48:          /// <summary>
  49:          ///
  50:          /// </summary>
  51:          public static string FieldTypeColoredString(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType fieldType)
  52:          {
  53:              string fieldTypeColoredString;
  54:   
  55:              switch (fieldType)
  56:              {
  57:                  case FieldType.Green: fieldTypeColoredString = "<span style=\"color:green\">Green</span>"; break;
  58:                  case FieldType.Brown: fieldTypeColoredString = "<span style=\"color:brown\">Brown</span>"; break;
  59:                  default: fieldTypeColoredString = string.Empty; break;
  60:              }
  61:   
  62:              return fieldTypeColoredString;
  63:          }
  64:   
  65:          ////////////////////////////////////////////////////////////////////////////
  66:   
  67:          /// <summary>
  68:          ///
  69:          /// </summary>
  70:          public static string FieldTypeString(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType fieldType)
  71:          {
  72:              string fieldTypeColoredString;
  73:   
  74:              switch (fieldType)
  75:              {
  76:                  case FieldType.Green: fieldTypeColoredString = "Green"; break;
  77:                  case FieldType.Brown: fieldTypeColoredString = "Brown"; break;
  78:                  default: fieldTypeColoredString = string.Empty; break;
  79:              }
  80:   
  81:              return fieldTypeColoredString;
  82:          }
  83:   
  84:          ////////////////////////////////////////////////////////////////////////////
  85:   
  86:          /// <summary>
  87:          ///
  88:          /// </summary>
  89:          public class Vendor
  90:          {
  91:              /// <summary/>
  92:              public int Id { get; set; }
  93:   
  94:              /// <summary/>
  95:              public string Name { get; set; }
  96:   
  97:              /// <summary/>
  98:              public string ShortName { get; set; }
  99:   
 100:              /// <summary/>
 101:              public string ArabicName { get; set; }
 102:   
 103:              /// <summary/>
 104:              public string ImageUrl { get; set; }
 105:   
 106:              /// <summary/>
 107:              public Vendor(int id, string name, string shortName, string arabicName, string imageUrl)
 108:              {
 109:                  this.Id = id;
 110:                  this.Name = name;
 111:                  this.ShortName = shortName;
 112:                  this.ArabicName = arabicName;
 113:                  this.ImageUrl = imageUrl;
 114:              }
 115:   
 116:              /// <summary/>
 117:              public virtual ICollection<Router> Routers
 118:              {
 119:                  get
 120:                  {
 121:                      return (from r in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.RouterList where r.Vendor == this select r).ToList();
 122:                  }
 123:              }
 124:   
 125:              /// <summary/>
 126:              public virtual ICollection<Odf> Odfs
 127:              {
 128:                  get
 129:                  {
 130:                      return (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OdfList where o.Vendor == this select o).ToList();
 131:                  }
 132:              }
 133:   
 134:              /// <summary/>
 135:              public static Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor Nokia
 136:              {
 137:                  get
 138:                  {
 139:                      return (from v in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.VendorList where v.ShortName == "No" select v).Single();
 140:                  }
 141:              }
 142:   
 143:              /// <summary/>
 144:              public static Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor Huawei
 145:              {
 146:                  get
 147:                  {
 148:                      return (from v in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.VendorList where v.ShortName == "Hu" select v).Single();
 149:                  }
 150:              }
 151:   
 152:              /// <summary/>
 153:              public static Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor Ericsson
 154:              {
 155:                  get
 156:                  {
 157:                      return (from v in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.VendorList where v.ShortName == "Er" select v).Single();
 158:                  }
 159:              }
 160:   
 161:              /// <summary/>
 162:              public static Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor Siemens
 163:              {
 164:                  get
 165:                  {
 166:                      return (from v in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.VendorList where v.ShortName == "Si" select v).Single();
 167:                  }
 168:              }
 169:   
 170:              /// <summary/>
 171:              public static Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor Undefined
 172:              {
 173:                  get
 174:                  {
 175:                      return (from v in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.VendorList where v.ShortName == "Un" select v).Single();
 176:                  }
 177:              }
 178:   
 179:              ////////////////////////////////////////////////////////////////////////////
 180:   
 181:              /// <summary>
 182:              ///
 183:              /// </summary>
 184:              public static string VendorNameFromId(int id)
 185:              {
 186:                  return (from v in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.VendorList where v.Id == id select v.Name).SingleOrDefault();
 187:              }
 188:   
 189:              ////////////////////////////////////////////////////////////////////////////
 190:   
 191:              /// <summary>
 192:              ///
 193:              /// </summary>
 194:              public static int VendorIdFromName(string name)
 195:              {
 196:                  int id;
 197:   
 198:                  switch (name)
 199:                  {
 200:                      case "Nokia": id = 1; break;
 201:                      case "ALCL": id = 1; break;
 202:                      case "Huawei": id = 2; break;
 203:                      case "Nokia-Siemens": id = 3; break;
 204:                      default: id = 0; break;
 205:                  }
 206:   
 207:                  return id;
 208:              }
 209:   
 210:              ////////////////////////////////////////////////////////////////////////////
 211:              ////////////////////////////////////////////////////////////////////////////
 212:          }
 213:   
 214:          ////////////////////////////////////////////////////////////////////////////
 215:   
 216:          /// <summary>
 217:          ///
 218:          /// </summary>
 219:          public class Network
 220:          {
 221:              /// <summary/>
 222:              public int Id { get; set; }
 223:   
 224:              /// <summary/>
 225:              public string Name { get; set; }
 226:   
 227:              /// <summary/>
 228:              public Network(int id, string name)
 229:              {
 230:                  this.Id = id;
 231:                  this.Name = name;
 232:              }
 233:   
 234:              /// <summary/>
 235:              public virtual ICollection<Site> Sites
 236:              {
 237:                  get
 238:                  {
 239:                      return (from s in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.SiteList where s.Network == this select s).ToList();
 240:                  }
 241:              }
 242:          }
 243:   
 244:          ////////////////////////////////////////////////////////////////////////////
 245:   
 246:          /// <summary>
 247:          ///
 248:          /// </summary>
 249:          public class Site
 250:          {
 251:              /// <summary/>
 252:              public int Id { get; set; }
 253:   
 254:              /// <summary/>
 255:              public string Name { get; set; }
 256:   
 257:              /// <summary/>
 258:              public string ArabicName { get; set; }
 259:   
 260:              /// <summary/>
 261:              public string NameArabicName
 262:              {
 263:                  get
 264:                  {
 265:                      return Name + " (" + ArabicName + ")";
 266:                  }
 267:              }
 268:   
 269:              /// <summary/>
 270:              public List<string> AreaSymbolList
 271:              {
 272:                  get
 273:                  {
 274:                      var list = this.Routers.SelectMany(u => u.Odfs.SelectMany(v => v.Olts.Select(w => w.Symbol))).Distinct().ToList();
 275:                      list.Remove("SSR");
 276:   
 277:                      return list;
 278:                  }
 279:              }
 280:   
 281:              /// <summary/>
 282:              public virtual Network Network { get; set; }
 283:   
 284:              /// <summary/>
 285:              public virtual ICollection<Pstn> Pstns
 286:              {
 287:                  get
 288:                  {
 289:                      if (this.Network.Id == 1)
 290:                      {
 291:                          // <network id="1" name="Optical Fiber Network">
 292:   
 293:                          return (from p in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.PstnList
 294:                                  where p.Site == this
 295:                                  select p).ToList();
 296:                      }
 297:                      else //if (this.Network.Id == 2)
 298:                      {
 299:                          // <network id="2" name="Legacy">
 300:   
 301:                          return (from p in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.LegacyPstnList
 302:                                  where p.Site == this
 303:                                  select p).ToList();
 304:                      }
 305:                  }
 306:              }
 307:   
 308:              /// <summary/>
 309:              public virtual ICollection<Msan> Msans
 310:              {
 311:                  get
 312:                  {
 313:                      return (from m in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.MsanList
 314:                              where m.Site == this
 315:                              select m).ToList();
 316:                  }
 317:              }
 318:   
 319:              /// <summary/>
 320:              public virtual ICollection<SoftX> SoftXes
 321:              {
 322:                  get
 323:                  {
 324:                      return (from s in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.SoftXList
 325:                              where s.Site == this
 326:                              select s).ToList();
 327:                  }
 328:              }
 329:   
 330:              /// <summary/>
 331:              public virtual ICollection<Router> Routers
 332:              {
 333:                  get
 334:                  {
 335:                      return (from r in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.RouterList
 336:                              where r.Site == this
 337:                              select r).ToList();
 338:                  }
 339:              }
 340:   
 341:              /// <summary/>
 342:              public virtual ICollection<Ia.Ngn.Cl.Model.Business.Service.KuwaitOfnArea> KuwaitNgnAreas
 343:              {
 344:                  get
 345:                  {
 346:                      ICollection<Ia.Ngn.Cl.Model.Business.Service.KuwaitOfnArea> ic;
 347:   
 348:                      ic = (from kna in Ia.Ngn.Cl.Model.Data.Service.KuwaitOfnAreaList
 349:                            where this.AreaSymbolList.Contains(kna.Symbol)
 350:                            select kna).ToList();
 351:   
 352:                      return ic;
 353:                  }
 354:              }
 355:   
 356:              /// <summary/>
 357:              public List<int> DomainList
 358:              {
 359:                  get
 360:                  {
 361:                      if (this.Network.Id == 1)
 362:                      {
 363:                          // <network id="1" name="Optical Fiber Network">
 364:   
 365:                          var siteRouterDomainList = (from r in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.RouterList
 366:                                                      where r.Site.Id == this.Id
 367:                                                      select r).SelectMany(z => z.DomainList).ToList();
 368:   
 369:                          return siteRouterDomainList;
 370:                      }
 371:                      else //if (this.Network.Id == 2)
 372:                      {
 373:                          // <network id="2" name="Legacy">
 374:   
 375:                          var legacySitePstnDomainListList = (from p in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.LegacyPstnList
 376:                                                              where p.Site.Id == this.Id
 377:                                                              select p).SelectMany(z => z.DomainList).ToList();
 378:   
 379:                          return legacySitePstnDomainListList;
 380:                      }
 381:                  }
 382:              }
 383:   
 384:              /// <summary/>
 385:              public int NumberOfPossibleServicesWithinDomainList
 386:              {
 387:                  get
 388:                  {
 389:                      return Ia.Ngn.Cl.Model.Data.Service.NumberOfPossibleServicesWithinDomainList(this.DomainList);
 390:                  }
 391:              }
 392:   
 393:              /// <summary/>
 394:              public Site() { }
 395:   
 396:              /// <summary/>
 397:              public int SiteId(int networkId, int siteId)
 398:              {
 399:                  return networkId * 100 + siteId;
 400:              }
 401:          }
 402:   
 403:          ////////////////////////////////////////////////////////////////////////////
 404:   
 405:          /// <summary>
 406:          ///
 407:          /// </summary>
 408:          public class Pstn
 409:          {
 410:              /// <summary/>
 411:              public int Id { get; set; }
 412:   
 413:              /// <summary/>
 414:              public string Name { get; set; }
 415:   
 416:              /// <summary/>
 417:              public string ArabicName { get; set; }
 418:   
 419:              /// <summary/>
 420:              public PstnExchangeType PstnExchangeType { get; set; }
 421:   
 422:              /// <summary/>
 423:              public bool UsesNpServer { get; set; }
 424:   
 425:              /// <summary/>
 426:              public string DomainListString { get; set; }
 427:   
 428:              /// <summary/>
 429:              public List<int> DomainList { get; set; }
 430:   
 431:              /// <summary/>
 432:              public virtual Site Site { get; set; }
 433:   
 434:              /// <summary/>
 435:              public Pstn() { }
 436:   
 437:              /// <summary/>
 438:              public int PstnId(int siteId, int pstnId)
 439:              {
 440:                  return siteId * 100 + pstnId;
 441:              }
 442:          }
 443:   
 444:          ////////////////////////////////////////////////////////////////////////////
 445:   
 446:          /// <summary>
 447:          ///
 448:          /// </summary>
 449:          public class Msan
 450:          {
 451:              private static int fixedLengthOfMsanId = 3 + 1;
 452:   
 453:              /// <summary/>
 454:              public static int FixedLengthOfMsanId { get { return fixedLengthOfMsanId; } }
 455:   
 456:              /// <summary/>
 457:              public string Id { get; set; }
 458:   
 459:              /// <summary/>
 460:              public string NameSymbol { get; set; }
 461:   
 462:              /// <summary/>
 463:              public bool UsesNpServer { get; set; }
 464:   
 465:              /// <summary/>
 466:              public string DomainListString { get; set; }
 467:   
 468:              /// <summary/>
 469:              public List<int> DomainList { get; set; }
 470:   
 471:              /// <summary/>
 472:              public virtual Site Site { get; set; }
 473:   
 474:              /// <summary/>
 475:              public Msan() { }
 476:   
 477:              /// <summary/>
 478:              public Msan(int id, string nameSymbol, Site site)
 479:              {
 480:                  Id = MsanId(site.Id, id);
 481:                  NameSymbol = nameSymbol;
 482:                  Site = site;
 483:              }
 484:   
 485:              /// <summary/>
 486:              public string MsanId(int siteId, int msanId)
 487:              {
 488:                  var id = siteId.ToString() + msanId;
 489:   
 490:                  if (id.Length != fixedLengthOfMsanId)
 491:                  {
 492:                      throw new ArgumentOutOfRangeException(@"MsanId(): Id length is not " + fixedLengthOfMsanId);
 493:                  }
 494:   
 495:                  return id;
 496:              }
 497:          }
 498:   
 499:          ////////////////////////////////////////////////////////////////////////////
 500:   
 501:          /// <summary>
 502:          ///
 503:          /// </summary>
 504:          public class SoftX
 505:          {
 506:              /// <summary/>
 507:              public string Id { get; set; }
 508:   
 509:              /// <summary/>
 510:              public string DomainListString { get; set; }
 511:   
 512:              /// <summary/>
 513:              public List<int> DomainList { get; set; }
 514:   
 515:              /// <summary/>
 516:              public virtual Site Site { get; set; }
 517:   
 518:              /// <summary/>
 519:              public SoftX() { }
 520:   
 521:              /// <summary/>
 522:              public string SoftXId(int siteId, int softXId)
 523:              {
 524:                  return siteId.ToString().PadLeft(2, '0') + softXId;
 525:              }
 526:          }
 527:   
 528:          ////////////////////////////////////////////////////////////////////////////
 529:   
 530:          /// <summary>
 531:          ///
 532:          /// </summary>
 533:          public class Router
 534:          {
 535:              /// <summary/>
 536:              public int Id { get; set; }
 537:   
 538:              /// <summary/>
 539:              public string Name { get; set; }
 540:   
 541:              /// <summary/>
 542:              public string Type { get; set; }
 543:   
 544:              /// <summary/>
 545:              public string DomainListString { get; set; }
 546:   
 547:              /// <summary/>
 548:              public List<int> DomainList { get; set; }
 549:   
 550:              /// <summary/>
 551:              public virtual Vendor Vendor { get; set; }
 552:   
 553:              /// <summary/>
 554:              public virtual Site Site { get; set; }
 555:   
 556:              /// <summary/>
 557:              public virtual ICollection<Oam> Oams
 558:              {
 559:                  get
 560:                  {
 561:                      return (from r in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OamList where r.Router == this select r).ToList();
 562:                  }
 563:              }
 564:   
 565:              /// <summary/>
 566:              public virtual ICollection<Odf> Odfs
 567:              {
 568:                  get
 569:                  {
 570:                      return (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OdfList where o.Router == this select o).ToList();
 571:                  }
 572:              }
 573:   
 574:              /// <summary/>
 575:              public Router() { }
 576:   
 577:              /// <summary/>
 578:              public int RouterId(int siteId, int routerId)
 579:              {
 580:                  return siteId * 100 + routerId;
 581:              }
 582:          }
 583:   
 584:          ////////////////////////////////////////////////////////////////////////////
 585:   
 586:          /// <summary>
 587:          ///
 588:          /// </summary>
 589:          public class Oam
 590:          {
 591:              /// <summary/>
 592:              public int Id { get; set; }
 593:   
 594:              /// <summary/>
 595:              public string Network { get; set; }
 596:   
 597:              /// <summary/>
 598:              public string Gateway { get; set; }
 599:   
 600:              /// <summary/>
 601:              public int Vlan { get; set; }
 602:   
 603:              /// <summary/>
 604:              public int Vpls { get; set; }
 605:   
 606:              /// <summary/>
 607:              public string FtpIp { get; set; }
 608:   
 609:              /// <summary/>
 610:              public string ConfigFile { get; set; }
 611:   
 612:              /// <summary/>
 613:              public virtual Router Router { get; set; }
 614:   
 615:              /// <summary/>
 616:              public Oam() { }
 617:   
 618:              /// <summary/>
 619:              public int OamId(int routerId, int oamId)
 620:              {
 621:                  return routerId * 100 + oamId;
 622:              }
 623:          }
 624:   
 625:          ////////////////////////////////////////////////////////////////////////////
 626:   
 627:          /// <summary>
 628:          ///
 629:          /// </summary>
 630:          public class Odf
 631:          {
 632:              /// <summary/>
 633:              public int Id { get; set; }
 634:   
 635:              /// <summary/>
 636:              public string Name { get; set; }
 637:   
 638:              /// <summary/>
 639:              public string GatewayIp { get; set; }
 640:   
 641:              /// <summary/>
 642:              public string MgcIp { get; set; }
 643:   
 644:              /// <summary/>
 645:              public virtual Vendor Vendor { get; set; }
 646:   
 647:              /// <summary/>
 648:              public virtual Router Router { get; set; }
 649:   
 650:              /// <summary/>
 651:              public virtual ICollection<Olt> Olts
 652:              {
 653:                  get
 654:                  {
 655:                      return (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList where o.Odf == this select o).ToList();
 656:                  }
 657:              }
 658:   
 659:              /// <summary/>
 660:              public Odf() { }
 661:   
 662:              /// <summary/>
 663:              public int OdfId(int routerId, int odfId)
 664:              {
 665:                  return routerId * 100 + odfId;
 666:              }
 667:          }
 668:   
 669:          ////////////////////////////////////////////////////////////////////////////
 670:   
 671:          /// <summary>
 672:          ///
 673:          /// </summary>
 674:          public class Olt
 675:          {
 676:              /// <summary/>
 677:              public int Id { get; set; }
 678:   
 679:              /// <summary/>
 680:              public string Type { get; set; }
 681:   
 682:              /// <summary/>
 683:              //public int StateId { get; set; }
 684:   
 685:              /// <summary/>
 686:              public bool IsSip { get; set; }
 687:   
 688:              /// <summary/>
 689:              public int Rack { get; set; }
 690:   
 691:              /// <summary/>
 692:              public int Sub { get; set; }
 693:   
 694:              /// <summary/>
 695:              public string GatewayIp { get; set; }
 696:   
 697:              /// <summary/>
 698:              public string MgcIp { get; set; }
 699:   
 700:              /// <summary/>
 701:              public string Name { get; set; }
 702:   
 703:              /// <summary/>
 704:              public string AmsName { get; set; }
 705:   
 706:              /// <summary/>
 707:              public string EmsName
 708:              {
 709:                  get
 710:                  {
 711:                      return this.AmsName;
 712:                  }
 713:   
 714:                  set
 715:                  {
 716:                      this.AmsName = value;
 717:                  }
 718:              }
 719:   
 720:              /// <summary/>
 721:              public int Did { get; set; }
 722:   
 723:              /// <summary/>
 724:              public Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldType FieldType { get; set; }
 725:   
 726:              /// <summary/>
 727:              public string Symbol { get; set; }
 728:   
 729:              /// <summary/>
 730:              public int NumberOfLts { get; set; }
 731:   
 732:              /// <summary/>
 733:              public int NumberOfPonsPerLt { get; set; }
 734:   
 735:              /// <summary/>
 736:              public int NumberOfPons { get; set; }
 737:   
 738:              /// <summary/>
 739:              public int NumberOfOntsInPon { get; set; }
 740:   
 741:              /// <summary/>
 742:              public int NumberOfFirstSlot { get; set; }
 743:   
 744:              /// <summary/>
 745:              public virtual Odf Odf { get; set; }
 746:   
 747:              /// <summary/>
 748:              public virtual ICollection<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.PonGroup> PonGroupList
 749:              {
 750:                  get
 751:                  {
 752:                      return (from l in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.PonGroupList where l.Olt == this select l).ToList();
 753:                  }
 754:              }
 755:   
 756:              /// <summary/>
 757:              public Olt() { }
 758:   
 759:              /// <summary/>
 760:              public int OltId(int odfId, int oltId)
 761:              {
 762:                  return odfId * 100 + oltId;
 763:              }
 764:          }
 765:   
 766:          ////////////////////////////////////////////////////////////////////////////
 767:   
 768:          /// <summary>
 769:          ///
 770:          /// </summary>
 771:          public class PonGroup
 772:          {
 773:              /// <summary/>
 774:              public long Id { get; set; }
 775:   
 776:              /// <summary/>
 777:              public string Symbol { get; set; }
 778:   
 779:              /// <summary/>
 780:              public int Number { get; set; }
 781:   
 782:              /// <summary/>
 783:              public string PonListString { get; set; }
 784:   
 785:              /// <summary/>
 786:              //public string ProposedPonListString { get; set; }
 787:   
 788:              /// <summary/>
 789:              public List<int> UsedPonInPonGroupList { get; set; }
 790:   
 791:              /// <summary/>
 792:              //public List<int> UsedProposedPonInPonGroupList { get; set; }
 793:   
 794:              /// <summary/>
 795:              public string NetworkNumber { get; set; }
 796:   
 797:              /// <summary/>
 798:              public string GatewayIp { get; set; }
 799:   
 800:              /// <summary/>
 801:              public string MgcIp { get; set; }
 802:   
 803:              /// <summary/>
 804:              public virtual Olt Olt { get; set; }
 805:   
 806:              /// <summary/>
 807:              public virtual ICollection<Pon> PonList
 808:              {
 809:                  get
 810:                  {
 811:                      return (from p in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.PonList where p.PonGroup == this select p).ToList();
 812:                  }
 813:              }
 814:   
 815:              /*
 816:              /// <summary/>
 817:              public bool HasNewProposedPonList
 818:              {
 819:                  get
 820:                  {
 821:                      return !string.IsNullOrEmpty(this.ProposedPonListString) && this.ProposedPonListString != this.PonListString;
 822:                  }
 823:              }
 824:              */
 825:   
 826:              /// <summary/>
 827:              public PonGroup() { }
 828:   
 829:              /// <summary/>
 830:              public long PonGroupId(int oltId, int ponGroupId)
 831:              {
 832:                  return (long)oltId * 100 + ponGroupId;
 833:              }
 834:          }
 835:   
 836:          ////////////////////////////////////////////////////////////////////////////
 837:   
 838:          /// <summary>
 839:          ///
 840:          /// </summary>
 841:          public class Pon
 842:          {
 843:              private const int FixedLengthOfId = 14;
 844:   
 845:              /// <summary/>
 846:              public string Id { get; set; }
 847:   
 848:              /// <summary/>
 849:              public int Index { get; set; }
 850:   
 851:              /// <summary/>
 852:              public int PonGroupPonIndex { get; set; }
 853:   
 854:              /// <summary/>
 855:              public int Rack { get; set; }
 856:   
 857:              /// <summary/>
 858:              public int Sub { get; set; }
 859:   
 860:              /// <summary/>
 861:              public int CardSlot { get; set; }
 862:   
 863:              /// <summary/>
 864:              public int Port { get; set; }
 865:   
 866:              /// <summary/>
 867:              public int Number { get; set; }
 868:   
 869:              /// <summary/>
 870:              //public int ProposedNumber { get; set; }
 871:   
 872:              /// <summary/>
 873:              public string Position { get; set; }
 874:   
 875:              /// <summary/>
 876:              public string Name { get; set; }
 877:   
 878:              /// <summary/>
 879:              //public string ProposedName { get; set; }
 880:   
 881:              /// <summary/>
 882:              public virtual PonGroup PonGroup { get; set; }
 883:   
 884:              /// <summary/>
 885:              public virtual ICollection<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> OntList
 886:              {
 887:                  get
 888:                  {
 889:                      return (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList where o.Pon == this select o).ToList();
 890:                  }
 891:              }
 892:   
 893:              /// <summary/>
 894:              public string RxSxLtxPonx
 895:              {
 896:                  get
 897:                  {
 898:                      int ltNumber, ponNumber;
 899:                      string rxSxLtxPonx;
 900:   
 901:                      ltNumber = this.Number / this.PonGroup.Olt.NumberOfPonsPerLt + 1;
 902:                      ponNumber = this.Number - (ltNumber - 1) * this.PonGroup.Olt.NumberOfPonsPerLt;
 903:   
 904:                      rxSxLtxPonx = "R1.S1.LT" + ltNumber + ".PON" + ponNumber;
 905:   
 906:                      //rxSxLtxPonx = "R1.S1.LT7.PON1";
 907:   
 908:                      return rxSxLtxPonx;
 909:                  }
 910:              }
 911:   
 912:              /// <summary/>
 913:              public Pon() { }
 914:   
 915:              /// <summary/>
 916:              public string PonId(int oltId, int oltPonIndex)
 917:              {
 918:                  string id;
 919:   
 920:                  // "01" to indicate PonGroup 1. I will keep it even though it mignt not be nessessary because PON numbers are distinct
 921:                  id = oltId.ToString() + "01" + oltPonIndex.ToString().PadLeft(3, '0');
 922:   
 923:                  if (id.Length != FixedLengthOfId)
 924:                  {
 925:                      throw new ArgumentOutOfRangeException(@"PonId(): Id length is not " + FixedLengthOfId);
 926:                  }
 927:   
 928:                  return id;
 929:              }
 930:          }
 931:   
 932:          ////////////////////////////////////////////////////////////////////////////
 933:   
 934:          /// <summary>
 935:          ///
 936:          /// </summary>
 937:          public class Ont
 938:          {
 939:              /// <summary/>
 940:              public string Id { get; set; }
 941:   
 942:              /// <summary/>
 943:              public int Rack { get; set; }
 944:   
 945:              /// <summary/>
 946:              public int Sub { get; set; }
 947:   
 948:              /// <summary/>
 949:              public int CardSlot { get; set; }
 950:   
 951:              /// <summary/>
 952:              public int Port { get; set; }
 953:   
 954:              /// <summary/>
 955:              public int Number { get; set; }
 956:   
 957:              /// <summary/>
 958:              public int InternalNumber { get; set; }
 959:   
 960:              /// <summary/>
 961:              public string Position { get; set; }
 962:   
 963:              /// <summary/>
 964:              public string Ip { get; set; }
 965:   
 966:              /// <summary/>
 967:              public Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService ImsBasicService { get; set; }
 968:   
 969:              /// <summary/>
 970:              public string MgcIp
 971:              {
 972:                  get
 973:                  {
 974:                      return ImsBasicService.MgcIp;
 975:                  }
 976:              }
 977:   
 978:              /// <summary/>
 979:              public string MgcSecondaryIp
 980:              {
 981:                  get
 982:                  {
 983:                      return ImsBasicService.MgcSecondaryIp;
 984:                  }
 985:              }
 986:   
 987:              /// <summary/>
 988:              public string MgcSubnetMask
 989:              {
 990:                  get
 991:                  {
 992:                      return ImsBasicService.MgcSubnetMask;
 993:                  }
 994:              }
 995:   
 996:              /// <summary/>
 997:              public int ImsService
 998:              {
 999:                  get
                {
                    return ImsBasicService.Service;
                }
            }
 
            /// <summary/>
            public string ImsFsdb
            {
                get
                {
                    return ImsBasicService.Fsdb;
                }
            }
 
            /// <summary/>
            public string PrimarySwitch
            {
                get
                {
                    return ImsBasicService.PrimarySwitch;
                }
            }
 
            /// <summary/>
            public virtual Pon Pon { get; set; }
 
            /// <summary/>
            public virtual Access Access { get; set; }
 
            /// <summary/>
            public Ont() { }
 
            ////////////////////////////////////////////////////////////////////////////
 
            /// <summary>
            ///
            /// </summary>
            public string ToSimpleTextString()
            {
                StringBuilder sb;
                Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor switchVendor, accessVendor;
 
                sb = new StringBuilder();
 
                switchVendor = this.Pon.PonGroup.Olt.Odf.Router.Vendor;
                accessVendor = this.Pon.PonGroup.Olt.Odf.Vendor;
 
                sb.AppendLine("SwitchVendor: " + switchVendor.Name);
                sb.AppendLine("AccessVendor: " + accessVendor.Name);
                sb.AppendLine("AccessName: " + ((this.Access != null) ? this.Access.Name : string.Empty));
                sb.AppendLine("Position: " + this.Position);
                sb.AppendLine("Ip: " + this.Ip);
                sb.AppendLine("Site Name: " + this.Pon.PonGroup.Olt.Odf.Router.Site.Name);
                sb.AppendLine("PrimarySwitch: " + this.PrimarySwitch);
                sb.AppendLine("Olt Field Type: " + Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.FieldTypeString(this.Pon.PonGroup.Olt.FieldType));
                sb.AppendLine("Olt IsSip: " + Ia.Cl.Model.Default.YesNoText(this.Pon.PonGroup.Olt.IsSip));
                sb.AppendLine("NetworkNumber: " + this.Pon.PonGroup.NetworkNumber);
                sb.AppendLine("GatewayIp: " + this.Pon.PonGroup.GatewayIp);
                sb.AppendLine("MgcIp: " + this.MgcIp);
                sb.AppendLine("MgcSecondaryIp: " + this.MgcSecondaryIp);
                sb.AppendLine("ImsService: " + this.ImsService);
                sb.AppendLine("ImsFsdb: " + this.ImsFsdb);
 
                return sb.ToString();
            }
        }
 
        ////////////////////////////////////////////////////////////////////////////
 
        /// <summary>
        ///
        /// </summary>
        public class Access
        {
            /// <summary/>
            public string Id { get; set; }
 
            /// <summary/>
            public string Name { get; set; }
 
            /// <summary/>
            //public string ProposedName { get; set; }
 
            /// <summary/>
            public int Ont { get; set; }
 
            /// <summary/>
            public int Pon { get; set; }
 
            /// <summary/>
            //public int ProposedPon { get; set; }
 
            /// <summary/>
            public string Symbol { get; set; }
 
            /// <summary/>
            public Access() { }
 
            /// <summary/>
            public string AccessId(int oltId, int ponNumber, int ontNumber)
            {
                return Ia.Ngn.Cl.Model.Business.Access.AccessId(oltId, ponNumber, ontNumber);
            }
        }
 
        ////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////    
    }
}