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.Ngn.Cl.Model.Data.Huawei
9: {
10: ////////////////////////////////////////////////////////////////////////////
11:
12: /// <summary publish="true">
13: /// Huawei's Dev support class of Optical Fiber Network (OFN) data model.
14: /// </summary>
15: ///
16: /// <remarks>
17: /// Copyright © 2016-2022 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
18: ///
19: /// 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
20: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
21: ///
22: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
23: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
24: ///
25: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
26: ///
27: /// Copyright notice: This notice may not be removed or altered from any source distribution.
28: /// </remarks>
29: public class Dev
30: {
31: private static Dictionary<int, long> didToResultCodeDictionary;
32: private static Dictionary<string, int> devTypeToDevTypeIdDictionary;
33: private static Dictionary<int, string> devTypeIdToDevTypeDictionary;
34:
35: private static Dictionary<string, int> devToDidDictionary;
36: private static Dictionary<int, string> didToDevDictionary;
37:
38: private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type> devToTypeDictionary;
39:
40: private static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type> didToTypeDictionary;
41:
42: private static DateTime didToResultCodeDictionaryFutureRefreshDateTime;
43:
44: private static readonly object objectLock = new object();
45:
46: public static Dictionary<string, int> DevTypeToDevTypeIdDictionary
47: {
48: get
49: {
50: if (devTypeToDevTypeIdDictionary == null || devTypeToDevTypeIdDictionary.Count == 0)
51: {
52: devTypeToDevTypeIdDictionary = new Dictionary<string, int>();
53:
54: devTypeToDevTypeIdDictionary["UA5000(PVMV1)"] = 219;
55: devTypeToDevTypeIdDictionary["MA5662"] = 37;
56: devTypeToDevTypeIdDictionary["MA5600V3"] = 44;
57: devTypeToDevTypeIdDictionary["MA5105(BSL)"] = 71;
58: devTypeToDevTypeIdDictionary["MA5100V2"] = 72;
59: devTypeToDevTypeIdDictionary["MA5300V1"] = 74;
60: devTypeToDevTypeIdDictionary["MD5500V1"] = 75;
61: devTypeToDevTypeIdDictionary["UA5000"] = 82;
62: devTypeToDevTypeIdDictionary["MA5100V1"] = 86;
63: devTypeToDevTypeIdDictionary["UA5000(IPMB)"] = 253;
64: devTypeToDevTypeIdDictionary["MA5605"] = 30;
65: devTypeToDevTypeIdDictionary["MA5680T"] = 34;
66: devTypeToDevTypeIdDictionary["MA5606T"] = 57;
67: devTypeToDevTypeIdDictionary["UA5000(PVU)"] = 232;
68: devTypeToDevTypeIdDictionary["MA5600T"] = 249;
69: devTypeToDevTypeIdDictionary["MA5615"] = 60;
70: devTypeToDevTypeIdDictionary["MA5626E"] = 61;
71: devTypeToDevTypeIdDictionary["MA5620E"] = 62;
72: devTypeToDevTypeIdDictionary["MA5651"] = 64;
73: devTypeToDevTypeIdDictionary["MA5620G"] = 65;
74: devTypeToDevTypeIdDictionary["MA5626G"] = 66;
75: devTypeToDevTypeIdDictionary["MA5651G"] = 67;
76: devTypeToDevTypeIdDictionary["MA5610"] = 70;
77: devTypeToDevTypeIdDictionary["MA5652G"] = 92;
78: devTypeToDevTypeIdDictionary["MA5603U"] = 94;
79: devTypeToDevTypeIdDictionary["MA5603T"] = 95;
80: devTypeToDevTypeIdDictionary["MA5620"] = 96;
81: devTypeToDevTypeIdDictionary["MA5626"] = 97;
82: devTypeToDevTypeIdDictionary["MA5616"] = 100;
83: devTypeToDevTypeIdDictionary["MA5635"] = 103;
84: devTypeToDevTypeIdDictionary["MA5612"] = 104;
85: devTypeToDevTypeIdDictionary["MA5621"] = 2319;
86: devTypeToDevTypeIdDictionary["MA5628"] = 2312;
87: devTypeToDevTypeIdDictionary["MA5652"] = 2313;
88: devTypeToDevTypeIdDictionary["MA5631"] = 2317;
89: devTypeToDevTypeIdDictionary["MA5612A"] = 2320;
90: devTypeToDevTypeIdDictionary["MA5669"] = 2321;
91: devTypeToDevTypeIdDictionary["MA5621A"] = 2322;
92: devTypeToDevTypeIdDictionary["MA5622A"] = 2323;
93: devTypeToDevTypeIdDictionary["MA5623"] = 2324;
94: devTypeToDevTypeIdDictionary["MA5623A"] = 2326;
95: devTypeToDevTypeIdDictionary["MA5632"] = 2318;
96: devTypeToDevTypeIdDictionary["MA5608T"] = 2331;
97: devTypeToDevTypeIdDictionary["MA5698"] = 2333;
98: devTypeToDevTypeIdDictionary["MA5694"] = 2335;
99: devTypeToDevTypeIdDictionary["MA5821"] = 2336;
100: devTypeToDevTypeIdDictionary["MA5822"] = 2337;
101: devTypeToDevTypeIdDictionary["MA5898"] = 2338;
102: devTypeToDevTypeIdDictionary["MA5818"] = 2339;
103: devTypeToDevTypeIdDictionary["MA5611S"] = 2340;
104: devTypeToDevTypeIdDictionary["MA5694S"] = 2343;
105: devTypeToDevTypeIdDictionary["RPS"] = 2344;
106: }
107:
108: return devTypeToDevTypeIdDictionary;
109: }
110: }
111:
112: /// <summary/>
113: public Dev() { }
114:
115: ////////////////////////////////////////////////////////////////////////////
116:
117: /// <summary>
118: ///
119: /// </summary>
120: public static Dictionary<int, string> DevTypeIdToDevTypeDictionary
121: {
122: get
123: {
124: if (devTypeIdToDevTypeDictionary == null || devTypeIdToDevTypeDictionary.Count == 0)
125: {
126: devTypeIdToDevTypeDictionary = new Dictionary<int, string>();
127:
128: foreach (KeyValuePair<string, int> kvp in DevTypeToDevTypeIdDictionary) devTypeIdToDevTypeDictionary[kvp.Value] = kvp.Key;
129: }
130:
131: return devTypeIdToDevTypeDictionary;
132: }
133: }
134:
135: ////////////////////////////////////////////////////////////////////////////
136:
137: /// <summary>
138: ///
139: /// </summary>
140: public static Dictionary<string, int> DevToDidDictionary
141: {
142: get
143: {
144: if (devToDidDictionary == null || devToDidDictionary.Count == 0)
145: {
146: devToDidDictionary = new Dictionary<string, int>();
147:
148: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> list;
149:
150: using (var db = new Ia.Ngn.Cl.Model.Ngn())
151: {
152: // this will list the Disconnecting devs first so that if there is an override it will allow the Connecting to be in dictionary
153: list = (from ed in db.EmsDevs select ed).OrderBy(u => u.DSTAT == "Connecting").ToList();
154: }
155:
156: foreach (var d in list) devToDidDictionary[d.DEV] = d.DID;
157: }
158:
159: return devToDidDictionary;
160: }
161: }
162:
163: ////////////////////////////////////////////////////////////////////////////
164:
165: /// <summary>
166: ///
167: /// </summary>
168: public static Dictionary<int, long> DidToResultCodeDictionary
169: {
170: get
171: {
172: var now = DateTime.UtcNow.AddHours(3);
173:
174: if (didToResultCodeDictionary == null || didToResultCodeDictionary.Count == 0 || now > didToResultCodeDictionaryFutureRefreshDateTime)
175: {
176: lock (objectLock)
177: {
178: didToResultCodeDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev._DidToResultCodeDictionary(60); // one hour
179: }
180: }
181:
182: return didToResultCodeDictionary;
183: }
184: }
185:
186: ////////////////////////////////////////////////////////////////////////////
187:
188: /// <summary>
189: ///
190: /// </summary>
191: private static Dictionary<int, long> _DidToResultCodeDictionary(int minutesToKeepDataValid)
192: {
193: var now = DateTime.UtcNow.AddHours(3);
194:
195: didToResultCodeDictionaryFutureRefreshDateTime = now.AddMinutes(minutesToKeepDataValid);
196:
197: using (var db = new Ia.Ngn.Cl.Model.Ngn())
198: {
199: didToResultCodeDictionary = (from ed in db.EmsDevs
200: select new { ed.DID, ed.ResultCode }).AsNoTracking().ToDictionary(u => u.DID, u => u.ResultCode);
201: }
202:
203: return didToResultCodeDictionary;
204: }
205:
206: ////////////////////////////////////////////////////////////////////////////
207:
208: /// <summary>
209: ///
210: /// </summary>
211: public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type> DevToTypeDictionary
212: {
213: get
214: {
215: if (devToTypeDictionary == null || devToTypeDictionary.Count == 0)
216: {
217: devToTypeDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type>();
218:
219: foreach (var dev in Ia.Ngn.Cl.Model.Data.Huawei.Dev.List()) devToTypeDictionary[dev.DEV] = dev.Type;
220: }
221:
222: return devToTypeDictionary;
223: }
224: }
225:
226: ////////////////////////////////////////////////////////////////////////////
227:
228: /// <summary>
229: ///
230: /// </summary>
231: public static Dictionary<int, string> DidToDevDictionary
232: {
233: get
234: {
235: if (didToDevDictionary == null || didToDevDictionary.Count == 0)
236: {
237: didToDevDictionary = new Dictionary<int, string>();
238:
239: foreach (KeyValuePair<string, int> kvp in DevToDidDictionary) didToDevDictionary[kvp.Value] = kvp.Key;
240: }
241:
242: return didToDevDictionary;
243: }
244: }
245:
246: ////////////////////////////////////////////////////////////////////////////
247:
248: /// <summary>
249: ///
250: /// </summary>
251: public static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type> DidToTypeDictionary
252: {
253: get
254: {
255: if (didToTypeDictionary == null || didToTypeDictionary.Count == 0)
256: {
257: didToTypeDictionary = new Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type>();
258:
259: foreach (KeyValuePair<int, string> kvp in DidToDevDictionary)
260: {
261: didToTypeDictionary[kvp.Key] = DevToTypeDictionary.ContainsKey(kvp.Value) ? DevToTypeDictionary[kvp.Value] : Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Unknown;
262: }
263: }
264:
265: return didToTypeDictionary;
266: }
267: }
268:
269: ////////////////////////////////////////////////////////////////////////////
270:
271: /// <summary>
272: ///
273: /// </summary>
274: public static bool Update(Ia.Ngn.Cl.Model.Business.Huawei.Ems.Response response, out Ia.Cl.Model.Result result)
275: {
276: bool isUpdated;
277: int id, queryDtTypeId, did, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
278: string queryCommand, queryDev, devDev, dtType;
279: DataColumnCollection columns;
280: DataRow columnDataRow;
281: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
282: Ia.Ngn.Cl.Model.Huawei.EmsDev dev, devByDev, newDev;
283: List<int> itemIdList;
284: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> devList;
285:
286: isUpdated = false;
287: readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
288: result = new Ia.Cl.Model.Result();
289:
290: if (response.CompletionCode == "COMPLD")
291: {
292: if (response.QueryDataTable != null)
293: {
294: queryCommand = response.CommandFromCorrelationTagDictionaryByCtag;
295:
296: columns = response.QueryDataTable.Columns;
297: readItemCount = response.QueryDataTable.Rows.Count;
298:
299: itemIdList = new List<int>(response.QueryDataTable.Rows.Count + 1);
300:
301: using (var db = new Ia.Ngn.Cl.Model.Ngn())
302: {
303: if (queryCommand.Contains("LST-DEV::DT") || queryCommand.Contains("LST-DEV::DEV"))
304: {
305: if (queryCommand.Contains("LST-DEV::DT"))
306: {
307: // LST-DEV::DT=100:{ctag}::;
308: queryDtTypeId = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"DT=(\d+)"));
309:
310: //if (Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevTypeIdToDevTypeDictionary.ContainsKey(queryDtTypeId))
311: //{
312: dtType = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevTypeIdToDevTypeDictionary[queryDtTypeId];
313:
314: devList = (from ed in db.EmsDevs where ed.DT == dtType select ed).ToList();
315: //}
316: //else
317: //{
318: // result.AddWarning("Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevTypeIdToDevTypeDictionary does not contain key queryDtTypeId: " + queryDtTypeId);
319: //}
320: }
321: else //if (queryCommand.Contains("LST-DEV::DEV"))
322: {
323: // LST-DEV::DEV=MDU-SAB-1443-001:{ctag}::;
324:
325: queryDev = Ia.Cl.Model.Default.Match(queryCommand, @"DEV=(.+?):");
326:
327: devList = (from ed in db.EmsDevs where ed.DEV == queryDev select ed).ToList();
328: }
329:
330: existingItemCount = devList.Count;
331:
332: if (response.QueryDataTable.Rows.Count >= 1)
333: {
334: columnDataRow = response.QueryDataTable.Rows[0];
335:
336: foreach (DataRow dataRow in response.QueryDataTable.Rows)
337: {
338: did = int.Parse(dataRow[columns.IndexOf("DID")].ToString());
339:
340: id = Ia.Ngn.Cl.Model.Business.Huawei.Dev.DevId(did);
341:
342: dev = (from d in devList where d.Id == id select d).SingleOrDefault();
343:
344: devDev = columns.Contains("DEV") ? dataRow[columns.IndexOf("DEV")].ToString() : string.Empty;
345:
346: newDev = new Ia.Ngn.Cl.Model.Huawei.EmsDev()
347: {
348: Id = id,
349: DID = did,
350: ResultCode = (long)response.ResultCode,
351: DEV = devDev,
352: DEVIP = columns.Contains("DEVIP") ? dataRow[columns.IndexOf("DEVIP")].ToString() : string.Empty,
353: DT = columns.Contains("DT") ? dataRow[columns.IndexOf("DT")].ToString() : string.Empty,
354: DVER = columns.Contains("DVER") ? dataRow[columns.IndexOf("DVER")].ToString() : string.Empty,
355: DSTAT = columns.Contains("DSTAT") ? dataRow[columns.IndexOf("DSTAT")].ToString() : string.Empty,
356: DLOC = columns.Contains("DLOC") ? dataRow[columns.IndexOf("DLOC")].ToString() : string.Empty,
357: AdminStat = columns.Contains("AdminStat") ? dataRow[columns.IndexOf("AdminStat")].ToString() : string.Empty,
358: WorkMode = columns.Contains("WorkMode") ? dataRow[columns.IndexOf("WorkMode")].ToString() : string.Empty,
359: ADDITIONALINFO = columns.Contains("ADDITIONALINFO") ? dataRow[columns.IndexOf("ADDITIONALINFO")].ToString() : string.Empty,
360: CRTID = columns.Contains("CRTID") ? dataRow[columns.IndexOf("CRTID")].ToString() : string.Empty,
361: CRTADDR = columns.Contains("CRTADDR") ? dataRow[columns.IndexOf("CRTADDR")].ToString() : string.Empty,
362: CRTTEL = columns.Contains("CRTTEL") ? dataRow[columns.IndexOf("CRTTEL")].ToString() : string.Empty,
363: CRTDATE = columns.Contains("CRTDATE") ? dataRow[columns.IndexOf("CRTDATE")].ToString() : string.Empty,
364: REMARK = columns.Contains("REMARK") ? dataRow[columns.IndexOf("REMARK")].ToString() : string.Empty,
365: TYPE = columns.Contains("TYPE") ? dataRow[columns.IndexOf("TYPE")].ToString() : string.Empty,
366: NERATELIST = columns.Contains("NERATELIST") ? dataRow[columns.IndexOf("NERATELIST")].ToString() : string.Empty,
367: NEPROV = columns.Contains("NEPROV") ? dataRow[columns.IndexOf("NEPROV")].ToString() : string.Empty,
368: TOPXY = columns.Contains("TOPXY") ? dataRow[columns.IndexOf("TOPXY")].ToString() : string.Empty,
369: EMSID = columns.Contains("EMSID") ? dataRow[columns.IndexOf("EMSID")].ToString() : string.Empty,
370: ALIAS = columns.Contains("ALIAS") ? dataRow[columns.IndexOf("ALIAS")].ToString() : string.Empty,
371: PCBVER = columns.Contains("PCBVER") ? dataRow[columns.IndexOf("PCBVER")].ToString() : string.Empty,
372: MAINTAINID = columns.Contains("MAINTAINID") ? dataRow[columns.IndexOf("MAINTAINID")].ToString() : string.Empty,
373: MAINTAINADDR = columns.Contains("MAINTAINADDR") ? dataRow[columns.IndexOf("MAINTAINADDR")].ToString() : string.Empty,
374: MAINTAINTEL = columns.Contains("MAINTAINTEL") ? dataRow[columns.IndexOf("MAINTAINTEL")].ToString() : string.Empty,
375: REGISTERSTAT = columns.Contains("REGISTERSTAT") ? dataRow[columns.IndexOf("REGISTERSTAT")].ToString() : string.Empty,
376: };
377:
378: nddOnt = Ia.Ngn.Cl.Model.Business.Default.NddOntFromHuaweiEmsAccessNameFormat(devDev);
379: if (nddOnt != null) newDev.Access = (from a in db.Accesses where a.Id == nddOnt.Access.Id select a).SingleOrDefault();
380:
381: if (dev == null)
382: {
383: devByDev = (from d in devList where d.DEV == devDev select d).SingleOrDefault();
384:
385: if (devByDev == null)
386: {
387: newDev.Created = newDev.Updated = DateTime.UtcNow.AddHours(3);
388:
389: db.EmsDevs.Add(newDev);
390:
391: insertedItemCount++;
392: }
393: else
394: {
395: throw new Exception("Ia.Ngn.Cl.Model.Data.Huawei.Dev.Update(): There is alreay a Dev with the same name: " + devDev + " but different Id. You should check the database and maybe delete the current, old dev entry. ");
396: }
397: }
398: else // update
399: {
400: // below: copy values from newDev to dev
401:
402: if (dev.Update(newDev))
403: {
404: db.EmsDevs.Attach(dev);
405: db.Entry(dev).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
406:
407: updatedItemCount++;
408: }
409: }
410:
411: itemIdList.Add(id); // keep at the end
412: }
413:
414: // below: this function will remove values that were not present in the reading
415: if (devList.Count > 0)
416: {
417: foreach (Ia.Ngn.Cl.Model.Huawei.EmsDev de in devList)
418: {
419: if (!itemIdList.Contains(de.Id))
420: {
421: dev = (from ed in db.EmsDevs where ed.Id == de.Id select ed).SingleOrDefault();
422:
423: db.EmsDevs.Remove(dev);
424:
425: deletedItemCount++;
426: }
427: }
428: }
429: }
430: else
431: {
432: // below: remove all values since reading was empty
433:
434: if (devList.Count > 0)
435: {
436: foreach (Ia.Ngn.Cl.Model.Huawei.EmsDev de in devList)
437: {
438: dev = (from ed in db.EmsDevs where ed.Id == de.Id select ed).SingleOrDefault();
439:
440: db.EmsDevs.Remove(dev);
441:
442: deletedItemCount++;
443: }
444: }
445: }
446: }
447: else
448: {
449: result.AddWarning("LST-DEV (" + response.Ctag + "): Ia.Ngn.Cl.Model.Data.Huawei.Dev.Update() Unknown parameters in command: " + queryCommand);
450: }
451:
452: try
453: {
454: db.SaveChanges();
455: }
456: catch (Exception ex)
457: {
458:
459: }
460: }
461:
462: if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
463: else isUpdated = false;
464:
465: result.AddSuccess("LST-DEV (" + response.Ctag + "): (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
466: }
467: else
468: {
469: result.AddWarning("LST-DEV (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
470: }
471: }
472: else
473: {
474: result.AddWarning("LST-DEV (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
475: }
476:
477: return isUpdated;
478: }
479:
480: ////////////////////////////////////////////////////////////////////////////
481:
482: /// <summary>
483: ///
484: /// </summary>
485: public static bool UpdateResultCode(int emsDevDid, Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode resultCode)
486: {
487: // similar to Ia.Ngn.Cl.Model.Data.Huawei.Ont.UpdateResultCode();
488: bool isUpdated;
489:
490: using (var db = new Ia.Ngn.Cl.Model.Ngn())
491: {
492: if (emsDevDid > 0)
493: {
494: var updatedDev = (from o in db.EmsDevs where o.DID == emsDevDid select o).SingleOrDefault();
495:
496: if (updatedDev != null)
497: {
498: if (updatedDev.ResultCode != (long)resultCode)
499: {
500: updatedDev.ResultCode = (long)resultCode;
501: updatedDev.Updated = DateTime.UtcNow.AddHours(3);
502:
503: db.EmsDevs.Attach(updatedDev);
504: db.Entry(updatedDev).Property(u => u.ResultCode).IsModified = true;
505: db.Entry(updatedDev).Property(u => u.Updated).IsModified = true;
506:
507: db.SaveChanges();
508:
509: isUpdated = true;
510: //result.AddSuccess("EmsDevs.ResultCode updated. ");
511: }
512: else
513: {
514: isUpdated = false;
515: // result.AddWarning("Warning: EmsDevs.ResultCode value was not updated because its the same. ");
516: }
517: }
518: else
519: {
520: isUpdated = false;
521: // result.AddError("Error: updatedDev is null. ");
522: }
523: }
524: else
525: {
526: isUpdated = false;
527: }
528: }
529:
530: return isUpdated;
531: }
532:
533: ////////////////////////////////////////////////////////////////////////////
534:
535: /// <summary>
536: ///
537: /// </summary>
538: public static List<Ia.Ngn.Cl.Model.Huawei.EmsDev> List()
539: {
540: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> list;
541:
542: using (var db = new Ia.Ngn.Cl.Model.Ngn())
543: {
544: list = (from ed in db.EmsDevs select ed).AsNoTracking().ToList();
545: }
546:
547: return list;
548: }
549:
550: ////////////////////////////////////////////////////////////////////////////
551:
552: /// <summary>
553: ///
554: /// </summary>
555: public static List<string> DevList()
556: {
557: List<string> list;
558:
559: using (var db = new Ia.Ngn.Cl.Model.Ngn())
560: {
561: list = (from ed in db.EmsDevs select ed.DEV).ToList();
562: }
563:
564: return list;
565: }
566:
567: ////////////////////////////////////////////////////////////////////////////
568:
569: /// <summary>
570: ///
571: /// </summary>
572: public static List<Ia.Ngn.Cl.Model.Huawei.EmsDev> ListByMA5616DevType()
573: {
574: return ListByDevType("MA5616");
575: }
576:
577: ////////////////////////////////////////////////////////////////////////////
578:
579: /// <summary>
580: ///
581: /// </summary>
582: public static List<Ia.Ngn.Cl.Model.Huawei.EmsDev> ListByDevType(string devType)
583: {
584: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> list;
585:
586: using (var db = new Ia.Ngn.Cl.Model.Ngn())
587: {
588: list = (from ed in db.EmsDevs where ed.DT == devType select ed).ToList();
589: }
590:
591: return list;
592: }
593:
594: ////////////////////////////////////////////////////////////////////////////
595:
596: /// <summary>
597: ///
598: /// </summary>
599: public static Ia.Ngn.Cl.Model.Huawei.EmsDev Read(int id)
600: {
601: Ia.Ngn.Cl.Model.Huawei.EmsDev item;
602:
603: using (var db = new Ia.Ngn.Cl.Model.Ngn())
604: {
605: item = (from ed in db.EmsDevs where ed.Id == id select ed).SingleOrDefault();
606: }
607:
608: return item;
609: }
610:
611: ////////////////////////////////////////////////////////////////////////////
612:
613: /// <summary>
614: ///
615: /// </summary>
616: public static Ia.Ngn.Cl.Model.Huawei.EmsDev ReadByEmsName(string emsName)
617: {
618: Ia.Ngn.Cl.Model.Huawei.EmsDev item;
619:
620: using (var db = new Ia.Ngn.Cl.Model.Ngn())
621: {
622: item = (from ed in db.EmsDevs where ed.DEV == emsName select ed).SingleOrDefault();
623: }
624:
625: return item;
626: }
627:
628: ////////////////////////////////////////////////////////////////////////////
629:
630: /// <summary>
631: ///
632: /// </summary>
633: public static Ia.Ngn.Cl.Model.Huawei.EmsDev ReadByDev(string dev)
634: {
635: Ia.Ngn.Cl.Model.Huawei.EmsDev item;
636:
637: using (var db = new Ia.Ngn.Cl.Model.Ngn())
638: {
639: item = (from ed in db.EmsDevs where ed.DEV == dev select ed).SingleOrDefault();
640: }
641:
642: return item;
643: }
644:
645: ////////////////////////////////////////////////////////////////////////////
646:
647: /// <summary>
648: ///
649: /// </summary>
650: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type ReadTypeByDev(string dev)
651: {
652: Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type type;
653:
654: if (Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevToTypeDictionary.ContainsKey(dev))
655: {
656: type = devToTypeDictionary[dev];
657: }
658: else type = Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Unknown;
659:
660: return type;
661: }
662:
663: ////////////////////////////////////////////////////////////////////////////
664:
665: /// <summary>
666: ///
667: /// </summary>
668: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type ReadTypeByDid(int did)
669: {
670: Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type type;
671:
672: var d = DidToTypeDictionary;
673:
674: type = (d.ContainsKey(did)) ? d[did] : Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Unknown;
675:
676: return type;
677: }
678:
679: ////////////////////////////////////////////////////////////////////////////
680:
681: /// <summary>
682: ///
683: /// </summary>
684: public static Ia.Ngn.Cl.Model.Huawei.EmsDev ReadByDid(int did)
685: {
686: Ia.Ngn.Cl.Model.Huawei.EmsDev item;
687:
688: using (var db = new Ia.Ngn.Cl.Model.Ngn())
689: {
690: item = (from ed in db.EmsDevs where ed.DID == did select ed).SingleOrDefault();
691: }
692:
693: return item;
694: }
695:
696: ////////////////////////////////////////////////////////////////////////////
697:
698: /// <summary>
699: ///
700: /// </summary>
701: public static Ia.Ngn.Cl.Model.Huawei.EmsDev ReadByAccessId(string accessId)
702: {
703: Ia.Ngn.Cl.Model.Huawei.EmsDev item;
704:
705: using (var db = new Ia.Ngn.Cl.Model.Ngn())
706: {
707: item = (from ed in db.EmsDevs where ed.Access != null && ed.Access.Id == accessId select ed).SingleOrDefault();
708: }
709:
710: return item;
711: }
712:
713: ////////////////////////////////////////////////////////////////////////////
714:
715: /// <summary>
716: /// Return Devs with similar names
717: /// </summary>
718: public static List<Ia.Ngn.Cl.Model.Huawei.EmsDev> RedundantDevList()
719: {
720: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> devs;
721:
722: using (var db = new Ia.Ngn.Cl.Model.Ngn())
723: {
724: // select * from EmsDevs ed1 left outer join EmsDevs ed2 on ed1.DEV = ed2.DEV where ed1.Id <> ed2.Id
725:
726: devs = (from ed1 in db.EmsDevs
727: join ed2 in db.EmsDevs on ed1.DEV equals ed2.DEV
728: where ed2.DID != ed2.DID
729: select ed1).AsNoTracking().ToList();
730: }
731:
732: return devs;
733: }
734:
735: ////////////////////////////////////////////////////////////////////////////
736:
737: /// <summary>
738: ///
739: /// </summary>
740: public static List<Ia.Ngn.Cl.Model.Huawei.EmsDev> OltDevList()
741: {
742: var oltDtType = new List<string>() { "MA5600T", "MA5603T" };
743: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> list;
744:
745: list = new List<Ia.Ngn.Cl.Model.Huawei.EmsDev>();
746:
747: using (var db = new Ia.Ngn.Cl.Model.Ngn())
748: {
749: list = (from ed in db.EmsDevs
750: where oltDtType.Contains(ed.DT) && ed.DEV.Contains("OLT")
751: select ed).ToList();
752: }
753:
754: return list;
755: }
756:
757: ////////////////////////////////////////////////////////////////////////////
758:
759: /// <summary>
760: ///
761: /// </summary>
762: public static List<string> OltDevDevList()
763: {
764: var list = new List<string>();
765:
766: var oltDevList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.OltDevList();
767:
768: foreach (var dev in oltDevList)
769: {
770: list.Add(dev.DEV);
771: }
772:
773: return list;
774: }
775:
776: ////////////////////////////////////////////////////////////////////////////
777:
778: /// <summary>
779: ///
780: /// </summary>
781: public static List<Ia.Ngn.Cl.Model.Huawei.EmsDev> MsanDevList()
782: {
783: List<Ia.Ngn.Cl.Model.Huawei.EmsDev> list;
784:
785: using (var db = new Ia.Ngn.Cl.Model.Ngn())
786: {
787: list = (from ed in db.EmsDevs where ed.DEV.Contains("_MSAN_") select ed).AsNoTracking().ToList();
788: }
789:
790: return list;
791: }
792:
793: ////////////////////////////////////////////////////////////////////////////
794:
795: /// <summary>
796: ///
797: /// </summary>
798: public static List<string> MsanDevDevList()
799: {
800: List<string> list;
801:
802: using (var db = new Ia.Ngn.Cl.Model.Ngn())
803: {
804: list = (from ed in db.EmsDevs where ed.DEV.Contains("_MSAN_") select ed.DEV).AsNoTracking().ToList();
805: }
806:
807: return list;
808: }
809:
810: ////////////////////////////////////////////////////////////////////////////
811:
812: /// <summary>
813: ///
814: /// </summary>
815: public static List<int> MsanDevDidList()
816: {
817: List<int> list;
818:
819: using (var db = new Ia.Ngn.Cl.Model.Ngn())
820: {
821: list = (from ed in db.EmsDevs where ed.DEV.Contains("_MSAN_") select ed.DID).ToList();
822: }
823:
824: return list;
825: }
826:
827: ////////////////////////////////////////////////////////////////////////////
828:
829: /// <summary>
830: ///
831: /// </summary>
832: public static Dictionary<int, int> MsanDidToSiteIdDictionary()
833: {
834: Dictionary<int, int> dictionary;
835:
836: var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
837:
838: dictionary = new Dictionary<int, int>();
839:
840: foreach (var msanDev in msanDevList)
841: {
842: dictionary[msanDev.Did] = msanDev.Msan.Site.Id;
843: }
844:
845: return dictionary;
846: }
847:
848: ////////////////////////////////////////////////////////////////////////////
849:
850: /// <summary>
851: ///
852: /// </summary>
853: public static Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, List<int>> MsanSiteToDidListDictionary()
854: {
855: var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
856:
857: var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, List<int>>();
858:
859: foreach (var msanDev in msanDevList)
860: {
861: var site = msanDev.Msan.Site;
862:
863: if (!dictionary.ContainsKey(site)) dictionary[site] = new List<int>();
864:
865: dictionary[site].Add(msanDev.Did);
866: }
867:
868: return dictionary;
869: }
870:
871: ////////////////////////////////////////////////////////////////////////////
872:
873: /// <summary>
874: ///
875: /// </summary>
876: public static Dictionary<int, List<int>> MsanSiteIdToDidListDictionary()
877: {
878: Dictionary<int, List<int>> dictionary;
879:
880: var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
881:
882: dictionary = new Dictionary<int, List<int>>();
883:
884: foreach (var msanDev in msanDevList)
885: {
886: var id = msanDev.Msan.Site.Id;
887:
888: if (!dictionary.ContainsKey(id)) dictionary[id] = new List<int>();
889:
890: dictionary[id].Add(msanDev.Did);
891: }
892:
893: return dictionary;
894: }
895:
896: ////////////////////////////////////////////////////////////////////////////
897:
898: /// <summary>
899: ///
900: /// </summary>
901: public static Dictionary<int, int> MsanSiteIdToCapacityDictionary()
902: {
903: Dictionary<int, int> dictionary;
904:
905: var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
906:
907: dictionary = new Dictionary<int, int>();
908:
909: foreach (var msanDev in msanDevList)
910: {
911: var id = msanDev.Msan.Site.Id;
912:
913: if (!dictionary.ContainsKey(id)) dictionary[id] = 0;
914:
915: dictionary[id] += msanDev.Capacity;
916: }
917:
918: return dictionary;
919: }
920:
921: ////////////////////////////////////////////////////////////////////////////
922:
923: /// <summary>
924: ///
925: /// </summary>
926: public static bool NullifyAccessIdByAccessId(string accessId, out string result)
927: {
928: bool b;
929: int numberOfRecordsWhereAccessIsNullified;
930: Ia.Ngn.Cl.Model.Huawei.EmsDev dev;
931:
932: b = false;
933: numberOfRecordsWhereAccessIsNullified = 0;
934:
935: using (var db = new Ia.Ngn.Cl.Model.Ngn())
936: {
937: // --update EmsOnts set Access_Id = null where Access_Id = '1040101010040004'
938: //var query = (from eo in db.EmsOnts where eo.Access.Id == accessId select eo).ToList();
939:
940: //foreach (var v in query)
941: //{
942: dev = (from o in db.EmsDevs where o.Access.Id == accessId select o).Include(u => u.Access).FirstOrDefault(); //.SingleOrDefault();
943:
944: if (dev != null)
945: {
946: dev.Access = null;
947: dev.Updated = DateTime.UtcNow.AddHours(3);
948:
949: db.EmsDevs.Attach(dev);
950: db.Entry(dev).Property(u => u.Updated).IsModified = true;
951:
952: db.SaveChanges();
953:
954: numberOfRecordsWhereAccessIsNullified++;
955: }
956: //}
957:
958: b = true;
959: }
960:
961: result = "Number of records where access is nullified: " + numberOfRecordsWhereAccessIsNullified;
962:
963: return b;
964: }
965:
966: ////////////////////////////////////////////////////////////////////////////
967:
968: /// <summary>
969: ///
970: /// </summary>
971: public static string EmsDevDevByEmsDevDid(int did)
972: {
973: string s;
974: var didToDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DidToDevDictionary;
975:
976: if (didToDevDictionary.ContainsKey(did)) s = didToDevDictionary[did];
977: else s = string.Empty;
978:
979: return s;
980: }
981:
982: ////////////////////////////////////////////////////////////////////////////
983: ////////////////////////////////////////////////////////////////////////////
984:
985: /// <summary>
986: ///
987: /// </summary>
988: public static string ToSimpleTextString(Ia.Ngn.Cl.Model.Huawei.EmsDev emsDev)
989: {
990: StringBuilder sb;
991:
992: sb = new StringBuilder();
993:
994: sb.AppendLine("DID: " + emsDev.DID);
995: sb.AppendLine("DEV: " + emsDev.DEV);
996: sb.AppendLine("DEVIP: " + emsDev.DEVIP);
997: sb.AppendLine("DT: " + emsDev.DT);
998: sb.AppendLine("DVER: " + emsDev.DVER);
999: sb.AppendLine("DSTAT: " + emsDev.DSTAT);
return sb.ToString();
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
}