)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » NetworkDesignDocument (Ia.Ftn.Cl.Models.Business)

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

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