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

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

Huawei's Port support class of Fixed Telecommunications Network (FTN) data 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.Data.Huawei
    8: {
    9:     ////////////////////////////////////////////////////////////////////////////
   10:  
   11:     /// <summary publish="true">
   12:     /// Huawei's Port support class of Fixed Telecommunications Network (FTN) data model.
   13:     /// </summary>
   14:     /// 
   15:     /// <remarks> 
   16:     /// Copyright © 2016-2018 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   17:     /// </remarks> 
   18:     public class Port
   19:     {
   20:         /// <summary/>
   21:         public Port() { }
   22:  
   23:         ////////////////////////////////////////////////////////////////////////////
   24:  
   25:         /// <summary>
   26:         ///
   27:         /// </summary>
   28:         public static bool Update(Ia.Ftn.Cl.Models.Business.Huawei.Ems.Response response, out Ia.Cl.Models.Result result)
   29:         {
   30:             bool isUpdated;
   31:             int did, fn, sn, pn, queryFn, querySn, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
   32:             string id, queryCommand, queryDev;
   33:             DataColumnCollection columns;
   34:             DataRow columnDataRow;
   35:             Dictionary<string, int> devToDidDictionary;
   36:             Ia.Ftn.Cl.Models.Huawei.EmsPort port, newPort;
   37:             Ia.Ftn.Cl.Models.Huawei.EmsBoard board;
   38:             List<string> itemIdList;
   39:             List<Ia.Ftn.Cl.Models.Huawei.EmsPort> portList;
   40:  
   41:             isUpdated = false;
   42:             readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
   43:             result = new Ia.Cl.Models.Result();
   44:  
   45:             if (response.CompletionCode == "COMPLD")
   46:             {
   47:                 if (response.QueryDataTable != null)
   48:                 {
   49:                     queryCommand = response.CommandFromCorrelationTagDictionaryByCtag;
   50:  
   51:                     // LST-PORT::DEV=MDU-SAA-838-001,FN=0,SN=1:{ctag}::;
   52:                     queryDev = Ia.Cl.Models.Default.Match(queryCommand, @"DEV=(.+?),");
   53:                     queryFn = int.Parse(Ia.Cl.Models.Default.Match(queryCommand, @"FN=(\d+)"));
   54:                     querySn = int.TryParse(Ia.Cl.Models.Default.Match(queryCommand, @"SN=(\d+)"), out int i) ? i : 0;
   55:  
   56:                     columns = response.QueryDataTable.Columns;
   57:                     readItemCount = response.QueryDataTable.Rows.Count;
   58:  
   59:                     devToDidDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Dev.DevToDidDictionary;
   60:  
   61:                     if (devToDidDictionary.ContainsKey(queryDev))
   62:                     {
   63:                         did = devToDidDictionary[queryDev];
   64:  
   65:                         board = Ia.Ftn.Cl.Models.Data.Huawei.Board.ReadByDidFnSn(did, queryFn, querySn);
   66:  
   67:                         if (board != null)
   68:                         {
   69:                             itemIdList = new List<string>(response.QueryDataTable.Rows.Count + 1);
   70:  
   71:                             using (var db = new Ia.Ftn.Cl.Db())
   72:                             {
   73:                                 portList = (from ep in db.EmsPorts where ep.EmsBoard.Id == board.Id select ep).ToList();
   74:                                 // or portList = Ia.Ftn.Cl.Model.Data.Huawei.Port.List(board.Id);
   75:  
   76:                                 existingItemCount = portList.Count;
   77:  
   78:                                 if (response.QueryDataTable.Rows.Count >= 1)
   79:                                 {
   80:                                     columnDataRow = response.QueryDataTable.Rows[0];
   81:  
   82:                                     foreach (DataRow dataRow in response.QueryDataTable.Rows)
   83:                                     {
   84:                                         did = int.Parse(dataRow[columns.IndexOf("DID")].ToString());
   85:                                         fn = int.Parse(dataRow[columns.IndexOf("FN")].ToString());
   86:                                         sn = int.Parse(dataRow[columns.IndexOf("SN")].ToString());
   87:                                         pn = int.Parse(dataRow[columns.IndexOf("PN")].ToString());
   88:  
   89:                                         id = Ia.Ftn.Cl.Models.Business.Huawei.Port.PortId(board.Id, pn);
   90:  
   91:                                         port = (from p in portList where p.Id == id select p).SingleOrDefault();
   92:  
   93:                                         newPort = new Ia.Ftn.Cl.Models.Huawei.EmsPort()
   94:                                         {
   95:                                             Id = id,
   96:                                             DID = did,
   97:                                             FN = fn,
   98:                                             SN = sn,
   99:                                             PN = pn,
  100:                                             ALIAS = columns.Contains("ALIAS") ? dataRow[columns.IndexOf("ALIAS")].ToString() : string.Empty,
  101:                                             PT = columns.Contains("PT") ? dataRow[columns.IndexOf("PT")].ToString() : string.Empty,
  102:                                             PSTAT = columns.Contains("PSTAT") ? dataRow[columns.IndexOf("PSTAT")].ToString() : string.Empty,
  103:                                             NAME = columns.Contains("NAME") ? dataRow[columns.IndexOf("NAME")].ToString() : string.Empty,
  104:                                             PSPEED = columns.Contains("PSPEED") ? dataRow[columns.IndexOf("PSPEED")].ToString() : string.Empty,
  105:                                             PDIRECT = columns.Contains("PDIRECT") ? dataRow[columns.IndexOf("PDIRECT")].ToString() : string.Empty,
  106:                                             LOOPSTAT = columns.Contains("LOOPSTAT") ? dataRow[columns.IndexOf("LOOPSTAT")].ToString() : string.Empty,
  107:                                             TESTSTAT = columns.Contains("TESTSTAT") ? dataRow[columns.IndexOf("TESTSTAT")].ToString() : string.Empty,
  108:                                             FEC = columns.Contains("FEC") ? dataRow[columns.IndexOf("FEC")].ToString() : string.Empty,
  109:                                             RN = columns.Contains("RN") ? dataRow[columns.IndexOf("RN")].ToString() : string.Empty,
  110:                                             AState = columns.Contains("AState") ? dataRow[columns.IndexOf("AState")].ToString() : string.Empty,
  111:                                             EmsBoard = (from eb in db.EmsBoards where eb.Id == board.Id select eb).SingleOrDefault()
  112:                                         };
  113:  
  114:                                         if (port == null)
  115:                                         {
  116:                                             newPort.Created = newPort.Updated = DateTime.UtcNow.AddHours(3);
  117:  
  118:                                             db.EmsPorts.Add(newPort);
  119:  
  120:                                             insertedItemCount++;
  121:                                         }
  122:                                         else // update
  123:                                         {
  124:                                             // below: copy values from newPort to port
  125:  
  126:                                             if (port.Update(newPort))
  127:                                             {
  128:                                                 db.EmsPorts.Attach(port);
  129:                                                 db.Entry(port).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  130:  
  131:                                                 updatedItemCount++;
  132:                                             }
  133:                                         }
  134:  
  135:                                         itemIdList.Add(id); // keep at the end
  136:                                     }
  137:  
  138:                                     // below: this function will remove values that were not present in the reading
  139:                                     if (portList.Count > 0)
  140:                                     {
  141:                                         foreach (Ia.Ftn.Cl.Models.Huawei.EmsPort po in portList)
  142:                                         {
  143:                                             if (!itemIdList.Contains(po.Id))
  144:                                             {
  145:                                                 port = (from ep in db.EmsPorts where ep.Id == po.Id select ep).SingleOrDefault();
  146:  
  147:                                                 db.EmsPorts.Remove(port);
  148:  
  149:                                                 deletedItemCount++;
  150:                                             }
  151:                                         }
  152:                                     }
  153:                                 }
  154:                                 else
  155:                                 {
  156:                                     // below: remove all values since reading was empty
  157:  
  158:                                     if (portList.Count > 0)
  159:                                     {
  160:                                         foreach (Ia.Ftn.Cl.Models.Huawei.EmsPort po in portList)
  161:                                         {
  162:                                             port = (from ep in db.EmsPorts where ep.Id == po.Id select ep).SingleOrDefault();
  163:  
  164:                                             db.EmsPorts.Remove(port);
  165:  
  166:                                             deletedItemCount++;
  167:                                         }
  168:                                     }
  169:                                 }
  170:  
  171:                                 db.SaveChanges();
  172:                             }
  173:  
  174:                             if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
  175:                             else isUpdated = false;
  176:  
  177:                             result.AddSuccess("LST-PORT (" + response.Ctag + "): (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
  178:                         }
  179:                         else
  180:                         {
  181:                             result.AddWarning("LST-PORT (" + response.Ctag + "): board is null");
  182:                         }
  183:                     }
  184:                     else
  185:                     {
  186:                         result.AddError("LST-PORT (" + response.Ctag + "): devToDidDictionary does not contain key: " + queryDev);
  187:                     }
  188:                 }
  189:                 else
  190:                 {
  191:                     result.AddWarning("LST-PORT (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
  192:                 }
  193:             }
  194:             else
  195:             {
  196:                 result.AddWarning("LST-PORT (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
  197:             }
  198:  
  199:             return isUpdated;
  200:         }
  201:  
  202:         ////////////////////////////////////////////////////////////////////////////
  203:  
  204:         /// <summary>
  205:         ///
  206:         /// </summary>
  207:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsPort> List()
  208:         {
  209:             List<Ia.Ftn.Cl.Models.Huawei.EmsPort> list;
  210:  
  211:             using (var db = new Ia.Ftn.Cl.Db())
  212:             {
  213:                 list = (from p in db.EmsPorts select p).ToList();
  214:             }
  215:  
  216:             return list;
  217:         }
  218:  
  219:         ////////////////////////////////////////////////////////////////////////////
  220:  
  221:         /// <summary>
  222:         ///
  223:         /// </summary>
  224:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsPort> List(string boardId)
  225:         {
  226:             List<Ia.Ftn.Cl.Models.Huawei.EmsPort> list;
  227:  
  228:             using (var db = new Ia.Ftn.Cl.Db())
  229:             {
  230:                 list = (from p in db.EmsPorts where p.EmsBoard.Id == boardId select p).ToList();
  231:             }
  232:  
  233:             return list;
  234:         }
  235:  
  236:         ////////////////////////////////////////////////////////////////////////////
  237:  
  238:         /// <summary>
  239:         ///
  240:         /// </summary>
  241:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsPort> ListByDevId(int devId)
  242:         {
  243:             List<Ia.Ftn.Cl.Models.Huawei.EmsPort> list;
  244:  
  245:             using (var db = new Ia.Ftn.Cl.Db())
  246:             {
  247:                 list = (from p in db.EmsPorts where p.EmsBoard.EmsDev.Id == devId select p).ToList();
  248:             }
  249:  
  250:             return list;
  251:         }
  252:  
  253:         ////////////////////////////////////////////////////////////////////////////
  254:  
  255:         /// <summary>
  256:         ///
  257:         /// </summary>
  258:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsPort> ListByDid(int did)
  259:         {
  260:             List<Ia.Ftn.Cl.Models.Huawei.EmsPort> list;
  261:  
  262:             using (var db = new Ia.Ftn.Cl.Db())
  263:             {
  264:                 list = (from p in db.EmsPorts where p.DID == did select p).ToList();
  265:             }
  266:  
  267:             return list;
  268:         }
  269:  
  270:         ////////////////////////////////////////////////////////////////////////////
  271:  
  272:         /// <summary>
  273:         ///
  274:         /// </summary>
  275:         public static Ia.Ftn.Cl.Models.Huawei.EmsPort ReadByDidFnSnPn(int did, int fn, int sn, int pn)
  276:         {
  277:             Ia.Ftn.Cl.Models.Huawei.EmsPort item;
  278:  
  279:             using (var db = new Ia.Ftn.Cl.Db())
  280:             {
  281:                 item = (from p in db.EmsPorts where p.DID == did && p.FN == fn && p.SN == sn && p.PN == pn select p).SingleOrDefault();
  282:             }
  283:  
  284:             return item;
  285:         }
  286:  
  287:         ////////////////////////////////////////////////////////////////////////////
  288:         ////////////////////////////////////////////////////////////////////////////
  289:  
  290:         /// <summary>
  291:         ///
  292:         /// </summary>
  293:         public static string ToSimpleTextString(Ia.Ftn.Cl.Models.Huawei.EmsPort emdPort)
  294:         {
  295:             StringBuilder sb;
  296:  
  297:             sb = new StringBuilder();
  298:  
  299:             sb.AppendLine("ALIAS: " + emdPort.ALIAS);
  300:             sb.AppendLine("DID: " + emdPort.DID);
  301:             sb.AppendLine("FN: " + emdPort.FN);
  302:             sb.AppendLine("SN: " + emdPort.SN);
  303:             sb.AppendLine("PN: " + emdPort.PN);
  304:             sb.AppendLine("PT: " + emdPort.PT);
  305:             sb.AppendLine("PSTAT: " + emdPort.PSTAT);
  306:  
  307:             return sb.ToString();
  308:         }
  309:  
  310:         ////////////////////////////////////////////////////////////////////////////
  311:         ////////////////////////////////////////////////////////////////////////////
  312:     }
  313:  
  314:     ////////////////////////////////////////////////////////////////////////////
  315:     ////////////////////////////////////////////////////////////////////////////
  316: }