)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Vag (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 EMS VAG Entity Framework class for 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 EMS VAG Entity Framework class for Fixed Telecommunications Network (FTN) data model.
   13:     /// </summary>
   14:     /// 
   15:     /// <remarks> 
   16:     /// Copyright © 2019-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   17:     /// </remarks> 
   18:     public class Vag
   19:     {
   20:         /// <summary/>
   21:         public Vag() { }
   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, queryDid, queryVagId, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount, vagId;
   32:             string id, queryCommand;
   33:             DataColumnCollection columns;
   34:             DataRow columnDataRow;
   35:             Ia.Ftn.Cl.Models.Huawei.EmsVag emsVag, newVag;
   36:             Ia.Ftn.Cl.Models.Huawei.EmsOnt emsOnt;
   37:             Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev mduDev;
   38:             List<string> itemIdList;
   39:             List<Ia.Ftn.Cl.Models.Huawei.EmsVag> emsVagList;
   40:  
   41:             isUpdated = false;
   42:             readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
   43:  
   44:             result = new Ia.Cl.Models.Result(); // remove initially then add to test all return paths
   45:  
   46:             queryCommand = response.CommandFromCorrelationTagDictionaryByCtag;
   47:  
   48:             // LST-VAG::DEV=MDU-SAA-748-002,VAGID=0:1::;
   49:             //queryDev = Ia.Cl.Models.Default.Match(queryCommand, @"DEV=(.+?),");
   50:  
   51:             // LST-VAG::DID=7340164,VAGID=0:1::;
   52:             queryDid = int.TryParse(Ia.Cl.Models.Default.Match(queryCommand, @"DID=(\d+)"), out int i) ? i : 0;
   53:             queryVagId = int.TryParse(Ia.Cl.Models.Default.Match(queryCommand, @"VAGID=(\d+)"), out i) ? i : 0;
   54:  
   55:             var accessNameToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default.AccessNameToMduDevDictionary;
   56:  
   57:             mduDev = (from m in accessNameToMduDevDictionary where m.Value.Did == queryDid select m.Value).SingleOrDefault();
   58:  
   59:             if (mduDev != null)
   60:             {
   61:                 if (mduDev.Dev != null)
   62:                 {
   63:                     //nddOnt = Ia.Ftn.Cl.Model.Business.Default.NddOntFromHuaweiEmsAccessNameFormat(queryDev);
   64:  
   65:                     //if (nddOnt != null)
   66:                     //{
   67:                     using (var db = new Ia.Ftn.Cl.Db())
   68:                     {
   69:                         did = queryDid;
   70:                         vagId = queryVagId;
   71:  
   72:                         emsOnt = (from eo in db.EmsOnts where eo.Id == mduDev.NddOntId select eo).SingleOrDefault();
   73:  
   74:                         if (emsOnt != null)
   75:                         {
   76:                             emsVagList = (from v in db.EmsVags where v.EmsOnt.Id == emsOnt.Id && v.VAGID == vagId select v).ToList();
   77:  
   78:                             existingItemCount = emsVagList.Count;
   79:  
   80:                             if (response.CompletionCode == "COMPLD")
   81:                             {
   82:                                 if (response.QueryDataTable != null)
   83:                                 {
   84:                                     itemIdList = new List<string>(response.QueryDataTable.Rows.Count + 1);
   85:  
   86:                                     columns = response.QueryDataTable.Columns;
   87:                                     readItemCount = response.QueryDataTable.Rows.Count;
   88:  
   89:                                     if (response.QueryDataTable.Rows.Count >= 1)
   90:                                     {
   91:                                         columnDataRow = response.QueryDataTable.Rows[0];
   92:  
   93:                                         foreach (DataRow dataRow in response.QueryDataTable.Rows)
   94:                                         {
   95:                                             did = int.Parse(dataRow[columns.IndexOf("DID")].ToString());
   96:                                             vagId = int.Parse(dataRow[columns.IndexOf("VAGID")].ToString());
   97:  
   98:                                             if (did == queryDid && vagId == queryVagId)
   99:                                             {
  100:                                                 id = Ia.Ftn.Cl.Models.Business.Huawei.Vag.VagId(emsOnt.Id, vagId);
  101:  
  102:                                                 emsVag = (from v in emsVagList where v.Id == id select v).SingleOrDefault();
  103:  
  104:                                                 newVag = new Ia.Ftn.Cl.Models.Huawei.EmsVag()
  105:                                                 {
  106:                                                     Id = id,
  107:                                                     DID = did,
  108:                                                     VAGNAME = columns.Contains("VAGNAME") ? dataRow[columns.IndexOf("VAGNAME")].ToString() : string.Empty,
  109:                                                     VAGID = vagId,
  110:                                                     SIGIP = columns.Contains("SIGIP") ? dataRow[columns.IndexOf("SIGIP")].ToString() : string.Empty,
  111:                                                     SIGMASK = columns.Contains("SIGMASK") ? dataRow[columns.IndexOf("SIGMASK")].ToString() : string.Empty,
  112:                                                     SIGGW = columns.Contains("SIGGW") ? dataRow[columns.IndexOf("SIGGW")].ToString() : string.Empty,
  113:                                                     SIGPORT = columns.Contains("SIGPORT") ? int.Parse(dataRow[columns.IndexOf("SIGPORT")].ToString()) : 0,
  114:                                                     SIGVLANID = columns.Contains("SIGVLANID") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("SIGVLANID", dataRow[columns.IndexOf("SIGVLANID")].ToString()) : 0,
  115:                                                     SIGQOS = columns.Contains("SIGQOS") ? dataRow[columns.IndexOf("SIGQOS")].ToString() : string.Empty,
  116:                                                     SIGDSCP = columns.Contains("SIGDSCP") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("SIGDSCP", dataRow[columns.IndexOf("SIGDSCP")].ToString()) : 0,
  117:                                                     SIGIPPRI = columns.Contains("SIGIPPRI") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("SIGIPPRI", dataRow[columns.IndexOf("SIGIPPRI")].ToString()) : 0,
  118:                                                     SIGTOSPRI = columns.Contains("SIGTOSPRI") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("SIGTOSPRI", dataRow[columns.IndexOf("SIGTOSPRI")].ToString()) : 0,
  119:                                                     SIGVLANPRI = columns.Contains("SIGVLANPRI") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("SIGVLANPRI", dataRow[columns.IndexOf("SIGVLANPRI")].ToString()) : 0,
  120:                                                     MEDIAIP = columns.Contains("MEDIAIP") ? dataRow[columns.IndexOf("MEDIAIP")].ToString() : string.Empty,
  121:                                                     MEDIAMASK = columns.Contains("MEDIAMASK") ? dataRow[columns.IndexOf("MEDIAMASK")].ToString() : string.Empty,
  122:                                                     MEDIAGW = columns.Contains("MEDIAGW") ? dataRow[columns.IndexOf("MEDIAGW")].ToString() : string.Empty,
  123:                                                     MEDIAPORT = columns.Contains("MEDIAPORT") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("MEDIAPORT", dataRow[columns.IndexOf("MEDIAPORT")].ToString()) : 0,
  124:                                                     MEDIAVLANID = columns.Contains("MEDIAVLANID") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("MEDIAVLANID", dataRow[columns.IndexOf("MEDIAVLANID")].ToString()) : 0,
  125:                                                     MEDIAQOS = columns.Contains("MEDIAQOS") ? dataRow[columns.IndexOf("MEDIAQOS")].ToString() : string.Empty,
  126:                                                     MEDIADSCP = columns.Contains("MEDIADSCP") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("MEDIADSCP", dataRow[columns.IndexOf("MEDIADSCP")].ToString()) : 0,
  127:                                                     MEDIAIPPRI = columns.Contains("MEDIAIPPRI") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("MEDIAIPPRI", dataRow[columns.IndexOf("MEDIAIPPRI")].ToString()) : 0,
  128:                                                     MEDIATOSPRI = columns.Contains("MEDIATOSPRI") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("MEDIATOSPRI", dataRow[columns.IndexOf("MEDIATOSPRI")].ToString()) : 0,
  129:                                                     MEDIAVLANPRI = columns.Contains("MEDIAVLANPRI") ? Ia.Ftn.Cl.Models.Business.Huawei.Vag.SpecialIntegerParameterHandling("MEDIAVLANPRI", dataRow[columns.IndexOf("MEDIAVLANPRI")].ToString()) : 0,
  130:                                                     DOMAINNAME = columns.Contains("DOMAINNAME") ? dataRow[columns.IndexOf("DOMAINNAME")].ToString() : string.Empty,
  131:                                                     ACTIVEMGCDNAME = columns.Contains("ACTIVEMGCDNAME") ? dataRow[columns.IndexOf("ACTIVEMGCDNAME")].ToString() : string.Empty,
  132:                                                     STANDBYMGCDNAME = columns.Contains("STANDBYMGCDNAME") ? dataRow[columns.IndexOf("STANDBYMGCDNAME")].ToString() : string.Empty,
  133:                                                     VAGSTAT = columns.Contains("VAGSTAT") ? dataRow[columns.IndexOf("VAGSTAT")].ToString() : string.Empty,
  134:                                                     PROTOCOLTYPE = columns.Contains("PROTOCOLTYPE") ? dataRow[columns.IndexOf("PROTOCOLTYPE")].ToString() : string.Empty,
  135:                                                     TIDLAYER = columns.Contains("TIDLAYER") ? dataRow[columns.IndexOf("TIDLAYER")].ToString() : string.Empty,
  136:                                                     H248PFNAME = columns.Contains("H248PFNAME") ? dataRow[columns.IndexOf("H248PFNAME")].ToString() : string.Empty,
  137:                                                     SIPPFNAME = columns.Contains("SIPPFNAME") ? dataRow[columns.IndexOf("SIPPFNAME")].ToString() : string.Empty,
  138:                                                     REGMODE = columns.Contains("REGMODE") ? dataRow[columns.IndexOf("REGMODE")].ToString() : string.Empty,
  139:  
  140:                                                     EmsOnt = (from eo in db.EmsOnts where eo.Id == mduDev.NddOntId select eo).SingleOrDefault()
  141:                                                 };
  142:  
  143:                                                 if (emsVag == null)
  144:                                                 {
  145:                                                     newVag.Created = newVag.Updated = DateTime.UtcNow.AddHours(3);
  146:  
  147:                                                     db.EmsVags.Add(newVag);
  148:  
  149:                                                     insertedItemCount++;
  150:                                                 }
  151:                                                 else // update
  152:                                                 {
  153:                                                     if (emsVag.Update(newVag))
  154:                                                     {
  155:                                                         db.EmsVags.Attach(emsVag);
  156:  
  157:                                                         db.Entry(emsVag).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  158:                                                         //vag.Update(newVag); does not update
  159:  
  160:                                                         updatedItemCount++;
  161:                                                     }
  162:                                                 }
  163:  
  164:                                                 itemIdList.Add(id); // keep at the end
  165:                                             }
  166:                                             else
  167:                                             {
  168:                                                 result.AddError("LST-VAG (" + response.Ctag + "): did != queryDid and/or vagId != queryVagId for mduDev.AccessName: " + mduDev.AccessName);
  169:                                             }
  170:                                         }
  171:  
  172:                                         // below: this function will remove values that were not present in the reading
  173:                                         if (emsVagList.Count > 0)
  174:                                         {
  175:                                             foreach (var v in emsVagList)
  176:                                             {
  177:                                                 if (!itemIdList.Contains(v.Id))
  178:                                                 {
  179:                                                     emsVag = (from vi in db.EmsVags where vi.Id == v.Id select vi).SingleOrDefault();
  180:  
  181:                                                     db.EmsVags.Remove(emsVag);
  182:  
  183:                                                     deletedItemCount++;
  184:                                                 }
  185:                                             }
  186:                                         }
  187:                                     }
  188:                                     else
  189:                                     {
  190:                                         if (emsVagList.Count > 0)
  191:                                         {
  192:                                             foreach (Ia.Ftn.Cl.Models.Huawei.EmsVag v in emsVagList)
  193:                                             {
  194:                                                 emsVag = (from ev in db.EmsVags where ev.Id == v.Id select ev).SingleOrDefault();
  195:  
  196:                                                 db.EmsVags.Remove(emsVag);
  197:  
  198:                                                 deletedItemCount++;
  199:                                             }
  200:                                         }
  201:                                     }
  202:  
  203:                                     db.SaveChanges();
  204:                                 }
  205:                                 else
  206:                                 {
  207:                                     result.AddWarning("LST-VAG (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
  208:                                 }
  209:                             }
  210:                             else
  211:                             {
  212:                                 if (response.ResultCode == Ia.Ftn.Cl.Models.Client.Huawei.Ems.ResultCode.DeviceOfflineError)
  213:                                 {
  214:                                     var emsDevResultCodeIsUpdated = Ia.Ftn.Cl.Models.Data.Huawei.Dev.UpdateResultCode(mduDev.Did, response.ResultCode);
  215:  
  216:                                     result.AddWarning("LST-VAG (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ") EmsOnt.ResultCode updated?: " + emsDevResultCodeIsUpdated.ToString().ToLower());
  217:                                 }
  218:                                 else
  219:                                 {
  220:                                     result.AddWarning("LST-VAG (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
  221:                                 }
  222:                             }
  223:                         }
  224:                         else
  225:                         {
  226:                             result.AddWarning("LST-VAG (" + response.Ctag + "): EmsOnt is null for mduDev.AccessName: " + mduDev.AccessName);
  227:                         }
  228:                     }
  229:  
  230:                     if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
  231:                     else isUpdated = false;
  232:  
  233:                     result.AddSuccess("LST-VAG (" + response.Ctag + "): (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
  234:                     //}
  235:                     //else
  236:                     //{
  237:                     //    result.AddError("nddOnt is null");
  238:                     //}
  239:                 }
  240:                 else
  241:                 {
  242:                     result.AddError("LST-VAG (" + response.Ctag + "): mduDev.Dev is null for did: " + queryDid);
  243:                 }
  244:             }
  245:             else
  246:             {
  247:                 result.AddError("LST-VAG (" + response.Ctag + "): mduDev is null for did: " + queryDid);
  248:             }
  249:  
  250:             return isUpdated;
  251:         }
  252:  
  253:         ////////////////////////////////////////////////////////////////////////////
  254:  
  255:         /// <summary>
  256:         ///
  257:         /// </summary>
  258:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsVag> List()
  259:         {
  260:             List<Ia.Ftn.Cl.Models.Huawei.EmsVag> list;
  261:  
  262:             using (var db = new Ia.Ftn.Cl.Db())
  263:             {
  264:                 list = (from v in db.EmsVags select v).ToList();
  265:             }
  266:  
  267:             return list;
  268:         }
  269:  
  270:         ////////////////////////////////////////////////////////////////////////////
  271:  
  272:         /// <summary>
  273:         ///
  274:         /// </summary>
  275:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsVag> List(string ontId)
  276:         {
  277:             List<Ia.Ftn.Cl.Models.Huawei.EmsVag> list;
  278:  
  279:             using (var db = new Ia.Ftn.Cl.Db())
  280:             {
  281:                 list = (from v in db.EmsVags where v.EmsOnt.Id == ontId select v).ToList();
  282:             }
  283:  
  284:             return list;
  285:         }
  286:  
  287:         ////////////////////////////////////////////////////////////////////////////
  288:  
  289:         /// <summary>
  290:         ///
  291:         /// </summary>
  292:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsVag> ListByDid(int did)
  293:         {
  294:             List<Ia.Ftn.Cl.Models.Huawei.EmsVag> list;
  295:  
  296:             using (var db = new Ia.Ftn.Cl.Db())
  297:             {
  298:                 list = (from v in db.EmsVags where v.DID == did select v).ToList();
  299:             }
  300:  
  301:             return list;
  302:         }
  303:  
  304:         ////////////////////////////////////////////////////////////////////////////
  305:         ////////////////////////////////////////////////////////////////////////////
  306:  
  307:         /// <summary>
  308:         ///
  309:         /// </summary>
  310:         public static string ToSimpleTextString(Ia.Ftn.Cl.Models.Huawei.EmsVag vag)
  311:         {
  312:             StringBuilder sb;
  313:  
  314:             sb = new StringBuilder();
  315:  
  316:             sb.AppendLine("DID: " + vag.DID);
  317:             sb.AppendLine("VAGSTAT: " + vag.VAGSTAT);
  318:             sb.AppendLine("PROTOCOLTYPE: " + vag.PROTOCOLTYPE);
  319:             //sb.AppendLine("Route: " + Ia.Ftn.Cl.Model.Business.Huawei.Vag.RnidxRouteName[vag.RNIDX2]);
  320:  
  321:             return sb.ToString();
  322:         }
  323:  
  324:         ////////////////////////////////////////////////////////////////////////////
  325:         ////////////////////////////////////////////////////////////////////////////
  326:     }
  327:  
  328:     ////////////////////////////////////////////////////////////////////////////
  329:     ////////////////////////////////////////////////////////////////////////////
  330: }