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

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Port

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

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