)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Board (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 Board support class of Fixed Telecommunications Network (FTN) data model.

    1: using Microsoft.EntityFrameworkCore;
    2: using System;
    3: using System.Collections.Generic;
    4: using System.Data;
    5: using System.Linq;
    6: using System.Text;
    7:  
    8: namespace Ia.Ftn.Cl.Models.Data.Huawei
    9: {
   10:     ////////////////////////////////////////////////////////////////////////////
   11:  
   12:     /// <summary publish="true">
   13:     /// Huawei's Board support class of Fixed Telecommunications Network (FTN) data model.
   14:     /// </summary>
   15:     /// 
   16:     /// <remarks> 
   17:     /// Copyright © 2016-2018 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   18:     /// </remarks> 
   19:     public class Board
   20:     {
   21:         /// <summary/>
   22:         public Board() { }
   23:  
   24:         ////////////////////////////////////////////////////////////////////////////
   25:  
   26:         /// <summary>
   27:         ///
   28:         /// </summary>
   29:         public static bool Update(Ia.Ftn.Cl.Models.Business.Huawei.Ems.Response response, out Ia.Cl.Models.Result result)
   30:         {
   31:             bool isUpdated;
   32:             int did, fn, sn, queryFn, querySn, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
   33:             string id, queryCommand, queryDev;
   34:             DataColumnCollection columns;
   35:             DataRow columnDataRow;
   36:             Ia.Ftn.Cl.Models.Huawei.EmsBoard board, newBoard;
   37:             Ia.Ftn.Cl.Models.Huawei.EmsDev dev;
   38:             List<string> itemIdList;
   39:             List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> boardList;
   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:                     //queryCommand = "LST-BOARD::DEV=MDU-SMC-1126-002,FN=0:{ctag}::SHOWOPTION=BNAME;"; // debug
   51:  
   52:                     // LST-BOARD::DEV=MDU-FNT-806-002,FN=0:{ctag}::SHOWOPTION=BNAME;
   53:                     // LST-BOARD::DEV=MDU-FNT-806-002,FN=0,SN=3:{ctag}::SHOWOPTION=BNAME;
   54:                     queryDev = Ia.Cl.Models.Default.Match(queryCommand, @"DEV=(.+?),");
   55:                     queryFn = int.Parse(Ia.Cl.Models.Default.Match(queryCommand, @"FN=(\d+)"));
   56:                     querySn = int.TryParse(Ia.Cl.Models.Default.Match(queryCommand, @"SN=(\d+)"), out int i) ? i : 0;
   57:  
   58:                     columns = response.QueryDataTable.Columns;
   59:                     readItemCount = response.QueryDataTable.Rows.Count;
   60:  
   61:                     dev = Ia.Ftn.Cl.Models.Data.Huawei.Dev.ReadByDev(queryDev);
   62:  
   63:                     if (dev != null)
   64:                     {
   65:                         itemIdList = new List<string>(response.QueryDataTable.Rows.Count + 1);
   66:  
   67:                         using (var db = new Ia.Ftn.Cl.Db())
   68:                         {
   69:                             boardList = (from eb in db.EmsBoards where eb.EmsDev.DEV == queryDev select eb).ToList();
   70:  
   71:                             existingItemCount = boardList.Count;
   72:  
   73:                             if (response.QueryDataTable.Rows.Count >= 1)
   74:                             {
   75:                                 columnDataRow = response.QueryDataTable.Rows[0];
   76:  
   77:                                 foreach (DataRow dataRow in response.QueryDataTable.Rows)
   78:                                 {
   79:                                     did = int.Parse(dataRow[columns.IndexOf("DID")].ToString());
   80:                                     fn = int.Parse(dataRow[columns.IndexOf("FN")].ToString());
   81:                                     sn = int.Parse(dataRow[columns.IndexOf("SN")].ToString());
   82:  
   83:                                     id = Ia.Ftn.Cl.Models.Business.Huawei.Board.BoardId(dev.Id, fn, sn);
   84:  
   85:                                     board = (from b in boardList where b.Id == id select b).SingleOrDefault();
   86:  
   87:                                     newBoard = new Ia.Ftn.Cl.Models.Huawei.EmsBoard()
   88:                                     {
   89:                                         Id = id,
   90:                                         DID = did,
   91:                                         FN = fn,
   92:                                         SN = sn,
   93:                                         BT = columns.Contains("BT") ? dataRow[columns.IndexOf("BT")].ToString() : string.Empty,
   94:                                         BVER = columns.Contains("BVER") ? dataRow[columns.IndexOf("BVER")].ToString() : string.Empty,
   95:                                         BSTAT = columns.Contains("BSTAT") ? dataRow[columns.IndexOf("BSTAT")].ToString() : string.Empty,
   96:                                         DEV = columns.Contains("DEV") ? dataRow[columns.IndexOf("DEV")].ToString() : string.Empty,
   97:                                         BNAME = columns.Contains("BNAME") ? dataRow[columns.IndexOf("BNAME")].ToString() : string.Empty,
   98:                                         NAME = columns.Contains("NAME") ? dataRow[columns.IndexOf("NAME")].ToString() : string.Empty,
   99:                                         ALIAS = columns.Contains("ALIAS") ? dataRow[columns.IndexOf("ALIAS")].ToString() : string.Empty,
  100:                                         ELABEL = columns.Contains("ELABEL") ? dataRow[columns.IndexOf("ELABEL")].ToString() : string.Empty,
  101:                                         PCBVER = columns.Contains("PCBVER") ? dataRow[columns.IndexOf("PCBVER")].ToString() : string.Empty,
  102:                                         SWVER = columns.Contains("SWVER") ? dataRow[columns.IndexOf("SWVER")].ToString() : string.Empty,
  103:                                         ROLE = columns.Contains("ROLE") ? dataRow[columns.IndexOf("ROLE")].ToString() : string.Empty,
  104:                                         ALARM = columns.Contains("ALARM") ? dataRow[columns.IndexOf("ALARM")].ToString() : string.Empty,
  105:                                         ST = columns.Contains("ST") ? dataRow[columns.IndexOf("ST")].ToString() : string.Empty,
  106:                                         PROTECTMODE = columns.Contains("PROTECTMODE") ? dataRow[columns.IndexOf("PROTECTMODE")].ToString() : string.Empty,
  107:                                         PORTCOUNT = columns.Contains("PORTCOUNT") ? dataRow[columns.IndexOf("PORTCOUNT")].ToString() : string.Empty,
  108:                                         PORTTYPE = columns.Contains("PORTTYPE") ? dataRow[columns.IndexOf("PORTTYPE")].ToString() : string.Empty,
  109:                                         WORKMODE = columns.Contains("WORKMODE") ? dataRow[columns.IndexOf("WORKMODE")].ToString() : string.Empty,
  110:                                         REPLACE = columns.Contains("REPLACE") ? dataRow[columns.IndexOf("REPLACE")].ToString() : string.Empty,
  111:                                         EmsDev = (from ed in db.EmsDevs where ed.Id == dev.Id select ed).SingleOrDefault()
  112:                                     };
  113:  
  114:                                     if (board == null)
  115:                                     {
  116:                                         newBoard.Created = newBoard.Updated = DateTime.UtcNow.AddHours(3);
  117:  
  118:                                         db.EmsBoards.Add(newBoard);
  119:  
  120:                                         insertedItemCount++;
  121:                                     }
  122:                                     else // update
  123:                                     {
  124:                                         // below: copy values from newBoard to board
  125:  
  126:                                         if (board.Update(newBoard))
  127:                                         {
  128:                                             db.EmsBoards.Attach(board);
  129:                                             db.Entry(board).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 (boardList.Count > 0)
  140:                                 {
  141:                                     foreach (Ia.Ftn.Cl.Models.Huawei.EmsBoard bo in boardList)
  142:                                     {
  143:                                         if (!itemIdList.Contains(bo.Id))
  144:                                         {
  145:                                             board = (from eb in db.EmsBoards where eb.Id == bo.Id select eb).SingleOrDefault();
  146:  
  147:                                             db.EmsBoards.Remove(board);
  148:  
  149:                                             deletedItemCount++;
  150:                                         }
  151:                                     }
  152:                                 }
  153:                             }
  154:                             else
  155:                             {
  156:                                 // below: remove all values since reading was empty
  157:  
  158:                                 if (boardList.Count > 0)
  159:                                 {
  160:                                     foreach (Ia.Ftn.Cl.Models.Huawei.EmsBoard bo in boardList)
  161:                                     {
  162:                                         board = (from eb in db.EmsBoards where eb.Id == bo.Id select eb).SingleOrDefault();
  163:  
  164:                                         db.EmsBoards.Remove(board);
  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-BOARD (" + response.Ctag + "): (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
  178:                     }
  179:                     else
  180:                     {
  181:                         result.AddError("Dev is null for dev: " + queryDev);
  182:                     }
  183:                 }
  184:                 else
  185:                 {
  186:                     result.AddWarning("LST-BOARD (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
  187:                 }
  188:             }
  189:             else
  190:             {
  191:                 result.AddWarning("LST-BOARD (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
  192:             }
  193:  
  194:             return isUpdated;
  195:         }
  196:  
  197:         ////////////////////////////////////////////////////////////////////////////
  198:  
  199:         /// <summary>
  200:         ///
  201:         /// </summary>
  202:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> List()
  203:         {
  204:             List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> list;
  205:  
  206:             using (var db = new Ia.Ftn.Cl.Db())
  207:             {
  208:                 list = (from eb in db.EmsBoards select eb).Include(u => u.EmsDev).AsNoTracking().ToList();
  209:             }
  210:  
  211:             return list.ToList();
  212:         }
  213:  
  214:         ////////////////////////////////////////////////////////////////////////////
  215:  
  216:         /// <summary>
  217:         ///
  218:         /// </summary>
  219:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> List(int devId)
  220:         {
  221:             List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> list;
  222:  
  223:             using (var db = new Ia.Ftn.Cl.Db())
  224:             {
  225:                 list = (from b in db.EmsBoards where b.EmsDev.Id == devId select b).ToList();
  226:             }
  227:  
  228:             return list;
  229:         }
  230:  
  231:         ////////////////////////////////////////////////////////////////////////////
  232:  
  233:         /// <summary>
  234:         ///
  235:         /// </summary>
  236:         public static Ia.Ftn.Cl.Models.Huawei.EmsBoard ReadByEmsNameFnSn(string emsName, int fn, int sn)
  237:         {
  238:             Ia.Ftn.Cl.Models.Huawei.EmsBoard item;
  239:  
  240:             using (var db = new Ia.Ftn.Cl.Db())
  241:             {
  242:                 item = (from b in db.EmsBoards where b.DEV == emsName && b.FN == fn && b.SN == sn select b).SingleOrDefault();
  243:             }
  244:  
  245:             return item;
  246:         }
  247:  
  248:         ////////////////////////////////////////////////////////////////////////////
  249:  
  250:         /// <summary>
  251:         ///
  252:         /// </summary>
  253:         public static Ia.Ftn.Cl.Models.Huawei.EmsBoard ReadByDidFnSn(int did, int fn, int sn)
  254:         {
  255:             Ia.Ftn.Cl.Models.Huawei.EmsBoard item;
  256:  
  257:             using (var db = new Ia.Ftn.Cl.Db())
  258:             {
  259:                 item = (from b in db.EmsBoards where b.DID == did && b.FN == fn && b.SN == sn select b).SingleOrDefault();
  260:             }
  261:  
  262:             return item;
  263:         }
  264:  
  265:         ////////////////////////////////////////////////////////////////////////////
  266:         ////////////////////////////////////////////////////////////////////////////
  267:  
  268:         /// <summary>
  269:         ///
  270:         /// </summary>
  271:         public static string ToSimpleTextString(Ia.Ftn.Cl.Models.Huawei.EmsBoard emdBoard)
  272:         {
  273:             StringBuilder sb;
  274:  
  275:             sb = new StringBuilder();
  276:  
  277:             sb.AppendLine("DID: " + emdBoard.DID);
  278:             sb.AppendLine("FN: " + emdBoard.FN);
  279:             sb.AppendLine("SN: " + emdBoard.SN);
  280:             sb.AppendLine("BT: " + emdBoard.BT);
  281:             sb.AppendLine("BVER: " + emdBoard.BVER);
  282:             sb.AppendLine("BSTAT: " + emdBoard.BSTAT);
  283:  
  284:             return sb.ToString();
  285:         }
  286:  
  287:         ////////////////////////////////////////////////////////////////////////////
  288:         ////////////////////////////////////////////////////////////////////////////
  289:     }
  290:  
  291:     ////////////////////////////////////////////////////////////////////////////
  292:     ////////////////////////////////////////////////////////////////////////////
  293: }