1: using System;
2: using System.Collections;
3: using System.Collections.Generic;
4: using System.Linq;
5: using Microsoft.EntityFrameworkCore;
6:
7: namespace Ia.Ngn.Cl.Model.Data.Nokia
8: {
9: ////////////////////////////////////////////////////////////////////////////
10:
11: /// <summary publish="true">
12: /// AGCF Gateway Records support class for Nokia data model.
13: /// </summary>
14: ///
15: /// <remarks>
16: /// Copyright � 2014-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 AgcfGatewayRecord
29: {
30: private static Dictionary<int, string> idToIp1Dictionary;
31: private static DateTime idToIp1DictionaryTimestamp = DateTime.MinValue;
32:
33: private static readonly object objectLock = new object();
34:
35: /// <summary>
36: /// 1360 COM WebAPI User Guide 255-400-419R3.X
37: /// ngfs-agcfgatewayrecord-v2(rtrv,ent,ed,dlt)
38: /// </summary>
39: public AgcfGatewayRecord() { }
40:
41: ////////////////////////////////////////////////////////////////////////////
42:
43: /// <summary>
44: ///
45: /// </summary>
46: public static bool Create(Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord, out string result)
47: {
48: bool b;
49:
50: b = false;
51: result = string.Empty;
52:
53: using (var db = new Ia.Ngn.Cl.Model.Ngn())
54: {
55: agcfGatewayRecord.Created = agcfGatewayRecord.Updated = DateTime.UtcNow.AddHours(3);
56:
57: db.AgcfGatewayRecords.Add(agcfGatewayRecord);
58: db.SaveChanges();
59:
60: b = true;
61: }
62:
63: return b;
64: }
65:
66: ////////////////////////////////////////////////////////////////////////////
67:
68: /// <summary>
69: ///
70: /// </summary>
71: public static Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord Read(int id)
72: {
73: Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
74:
75: using (var db = new Ia.Ngn.Cl.Model.Ngn())
76: {
77: agcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.Id == id select gr).SingleOrDefault();
78: }
79:
80: return agcfGatewayRecord;
81: }
82:
83: ////////////////////////////////////////////////////////////////////////////
84:
85: /// <summary>
86: ///
87: /// </summary>
88: public static Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord ReadByGwId(int gwId)
89: {
90: Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
91:
92: using (var db = new Ia.Ngn.Cl.Model.Ngn())
93: {
94: agcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.GwId == gwId select gr).SingleOrDefault();
95: }
96:
97: return agcfGatewayRecord;
98: }
99:
100: ////////////////////////////////////////////////////////////////////////////
101:
102: /// <summary>
103: ///
104: /// </summary>
105: public static Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord Read(string ip)
106: {
107: Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
108:
109: using (var db = new Ia.Ngn.Cl.Model.Ngn())
110: {
111: agcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.IP1 == ip select gr).SingleOrDefault();
112: }
113:
114: return agcfGatewayRecord;
115: }
116:
117: ////////////////////////////////////////////////////////////////////////////
118:
119: /// <summary>
120: ///
121: /// </summary>
122: public static bool Update(Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord, out string result)
123: {
124: bool b;
125:
126: b = false;
127: result = string.Empty;
128:
129: using (var db = new Ia.Ngn.Cl.Model.Ngn())
130: {
131: agcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.Id == agcfGatewayRecord.Id select gr).SingleOrDefault();
132:
133: agcfGatewayRecord.Updated = DateTime.UtcNow.AddHours(3);
134:
135: db.AgcfGatewayRecords.Attach(agcfGatewayRecord);
136:
137: db.Entry(agcfGatewayRecord).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
138: db.SaveChanges();
139:
140: b = true;
141: }
142:
143: return b;
144: }
145:
146: ////////////////////////////////////////////////////////////////////////////
147:
148: /// <summary>
149: ///
150: /// </summary>
151: public static bool Delete(int id, out string result)
152: {
153: bool b;
154:
155: b = false;
156: result = string.Empty;
157:
158: using (var db = new Ia.Ngn.Cl.Model.Ngn())
159: {
160: var v = (from gr in db.AgcfGatewayRecords where gr.Id == id select gr).FirstOrDefault();
161:
162: db.AgcfGatewayRecords.Remove(v);
163: db.SaveChanges();
164:
165: b = true;
166: }
167:
168: return b;
169: }
170:
171: ////////////////////////////////////////////////////////////////////////////
172:
173: /// <summary>
174: ///
175: /// </summary>
176: public static List<int> ReadGwIdList()
177: {
178: List<int> gwIdlist;
179:
180: using (var db = new Ia.Ngn.Cl.Model.Ngn())
181: {
182: gwIdlist = (from gr in db.AgcfGatewayRecords
183: orderby gr.GwId ascending
184: select gr.GwId).ToList();
185: }
186:
187: return gwIdlist;
188: }
189:
190: ////////////////////////////////////////////////////////////////////////////
191:
192: /// <summary>
193: ///
194: /// </summary>
195: public static List<int> ReadUnusedGwIdList()
196: {
197: List<int> gwIdlist, allPossibleGwIdList, unusedGwIdlist;
198:
199: using (var db = new Ia.Ngn.Cl.Model.Ngn())
200: {
201: gwIdlist = (from gr in db.AgcfGatewayRecords
202: orderby gr.GwId ascending
203: select gr.GwId).ToList();
204: }
205:
206: allPossibleGwIdList = Ia.Ngn.Cl.Model.Data.Nokia.Ims.AllPossibleGatewayIdList;
207:
208: // below: extract the GwId in allPossibleGwIdList that are not in gwIdlist
209: unusedGwIdlist = allPossibleGwIdList.Except(gwIdlist).ToList();
210:
211: return unusedGwIdlist;
212: }
213:
214: ////////////////////////////////////////////////////////////////////////////
215:
216: /// <summary>
217: ///
218: /// </summary>
219: public static int GwIdFromIp(string ip)
220: {
221: int gwId;
222:
223: using (var db = new Ia.Ngn.Cl.Model.Ngn())
224: {
225: gwId = (from gr in db.AgcfGatewayRecords
226: where gr.IP1 == ip
227: select gr.GwId).SingleOrDefault();
228: }
229:
230: return gwId;
231: }
232:
233: ////////////////////////////////////////////////////////////////////////////
234:
235: /// <summary>
236: ///
237: /// </summary>
238: public static int GwIdFromPartyId(string partyId)
239: {
240: int gatewayId;
241:
242: using (var db = new Ia.Ngn.Cl.Model.Ngn())
243: {
244: /*
245: * this query sometimes becomes slow. Note that:
246: *
247: gatewayId = (from gr in db.AgcfGatewayRecords
248: join ep in db.AgcfEndpoints on gr.Id equals ep.AgcfGatewayRecord.Id
249: join sp in db.SubParties on ep.Id equals sp.AgcfEndpoint.Id
250: join s in db.Subscribers on sp.Id equals s.SubParty.Id
251: where s.PartyId == partyId
252: select gr.GwId).SingleOrDefault();
253:
254: * In SubParty, Id is PartyId (see Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId())
255: * And in Subscribers, Id is PartyId (see Ia.Ngn.Cl.Model.Nokia.Subscriber.SubscriberId())
256: */
257: gatewayId = (from gr in db.AgcfGatewayRecords
258: join ep in db.AgcfEndpoints on gr.Id equals ep.AgcfGatewayRecord.Id
259: join sp in db.SubParties on ep.Id equals sp.AgcfEndpoint.Id
260: //join s in db.Subscribers on sp.Id equals s.SubParty.Id
261: //where s.PartyId == partyId
262: where sp.Id == partyId
263: select gr.GwId).SingleOrDefault();
264: }
265:
266: return gatewayId;
267: }
268:
269: ////////////////////////////////////////////////////////////////////////////
270:
271: /// <summary>
272: ///
273: /// </summary>
274: public static string IpFromGatewayId(int gatewayId)
275: {
276: string ip;
277:
278: using (var db = new Ia.Ngn.Cl.Model.Ngn())
279: {
280: ip = (from gr in db.AgcfGatewayRecords
281: where gr.GwId == gatewayId
282: select gr.IP1).SingleOrDefault();
283: }
284:
285: return ip;
286: }
287:
288: ////////////////////////////////////////////////////////////////////////////
289:
290: /// <summary>
291: ///
292: /// </summary>
293: public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> List()
294: {
295: List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList;
296:
297: using (var db = new Ia.Ngn.Cl.Model.Ngn())
298: {
299: agcfGatewayRecordList = (from gr in db.AgcfGatewayRecords select gr).AsNoTracking().ToList();
300: }
301:
302: return agcfGatewayRecordList;
303: }
304:
305: ////////////////////////////////////////////////////////////////////////////
306:
307: /// <summary>
308: ///
309: /// </summary>
310: public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> List(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
311: {
312: List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ngnOntList;
313: List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList;
314:
315: // below: NGN ONT list
316: ngnOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
317: where o.Pon.PonGroup.Olt.Id == olt.Id
318: select o).ToList();
319:
320: using (var db = new Ia.Ngn.Cl.Model.Ngn())
321: {
322: // below: AgcfGatewayRecord list
323: agcfGatewayRecordList = (from a in db.AgcfGatewayRecords select a).AsNoTracking().ToList();
324: }
325:
326: agcfGatewayRecordList = (from gr in agcfGatewayRecordList
327: join no in ngnOntList on gr.IP1 equals no.Ip
328: select gr).ToList();
329:
330: return agcfGatewayRecordList;
331: }
332:
333: ////////////////////////////////////////////////////////////////////////////
334:
335: /// <summary>
336: ///
337: /// </summary>
338: public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> List(List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt> oltList)
339: {
340: List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ngnOntList;
341: List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList;
342:
343: // below: NGN ONT list
344: ngnOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
345: where oltList.Any(u => u.Id == o.Pon.PonGroup.Olt.Id)
346: select o).ToList();
347:
348: using (var db = new Ia.Ngn.Cl.Model.Ngn())
349: {
350: // below: AgcfGatewayRecord list
351: agcfGatewayRecordList = (from a in db.AgcfGatewayRecords select a).AsNoTracking().ToList();
352: }
353:
354: agcfGatewayRecordList = (from gr in agcfGatewayRecordList
355: join no in ngnOntList on gr.IP1 equals no.Ip
356: select gr).ToList();
357:
358: return agcfGatewayRecordList;
359: }
360:
361: ////////////////////////////////////////////////////////////////////////////
362:
363: /// <summary>
364: ///
365: /// </summary>
366: public static List<string> IpList()
367: {
368: List<string> list;
369:
370: using (var db = new Ia.Ngn.Cl.Model.Ngn())
371: {
372: list = (from gr in db.AgcfGatewayRecords
373: orderby gr.IP1 ascending
374: select gr.IP1).AsNoTracking().Distinct().ToList();
375: }
376:
377: return list;
378: }
379:
380: ////////////////////////////////////////////////////////////////////////////
381:
382: /// <summary>
383: ///
384: /// </summary>
385: public static Dictionary<string, string> IpDictionary
386: {
387: get
388: {
389: Dictionary<string, string> ipListDictionary;
390:
391: using (var db = new Ia.Ngn.Cl.Model.Ngn())
392: {
393: ipListDictionary = (from a in db.AgcfGatewayRecords
394: select a.IP1).AsNoTracking().ToDictionary(n => n, n => n);
395: }
396:
397: return ipListDictionary;
398: }
399: }
400:
401: ////////////////////////////////////////////////////////////////////////////
402:
403: /// <summary>
404: ///
405: /// </summary>
406: public static Dictionary<string, string> IpToMateExternalIPAddrDictionary
407: {
408: get
409: {
410: Dictionary<string, string> dictionary;
411:
412: using (var db = new Ia.Ngn.Cl.Model.Ngn())
413: {
414: dictionary = (from a in db.AgcfGatewayRecords
415: select a).AsNoTracking().ToDictionary(n => n.IP1, n => n.MateExternalIPAddr);
416: }
417:
418: return dictionary;
419: }
420: }
421:
422: ////////////////////////////////////////////////////////////////////////////
423:
424: /// <summary>
425: ///
426: /// </summary>
427: public static SortedList AgcfGatewayRecordIpListNotInNetworkDesignDocument
428: {
429: get
430: {
431: SortedList sl;
432: Dictionary<string, string> ipDictionary, nddIpDictionary;
433:
434: ipDictionary = IpDictionary;
435: nddIpDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIpDictionary;
436:
437: sl = new SortedList(ipDictionary.Count + nddIpDictionary.Count);
438:
439: foreach (KeyValuePair<string, string> kvp in ipDictionary)
440: {
441: if (!nddIpDictionary.ContainsKey(kvp.Key))
442: {
443: if (!sl.ContainsKey(kvp.Key)) sl.Add(kvp.Key, "1");
444: }
445: }
446:
447: return sl;
448: }
449: }
450:
451: ////////////////////////////////////////////////////////////////////////////
452:
453: /// <summary>
454: ///
455: /// </summary>
456: public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> ListByMateExternalIPAddr(string mateExternalIPAddr)
457: {
458: List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList;
459:
460: using (var db = new Ia.Ngn.Cl.Model.Ngn())
461: {
462: // below: AgcfGatewayRecord list
463: agcfGatewayRecordList = (from a in db.AgcfGatewayRecords
464: where a.MateExternalIPAddr == mateExternalIPAddr
465: select a).AsNoTracking().ToList();
466: }
467:
468: return agcfGatewayRecordList;
469: }
470:
471: ////////////////////////////////////////////////////////////////////////////
472:
473: /// <summary>
474: ///
475: /// </summary>
476: public static List<string> IpWithinAgcfGatewayRecordsThatDoNotBelongToNetworkDesignDocumentList()
477: {
478: List<string> list;
479:
480: list = new List<string>();
481:
482: var w = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIpDictionary;
483:
484: foreach (KeyValuePair<string, string> kvp in Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.IpDictionary)
485: {
486: if (!w.ContainsKey(kvp.Key)) list.Add(kvp.Key);
487: }
488:
489: return list;
490: }
491:
492: ////////////////////////////////////////////////////////////////////////////
493: ////////////////////////////////////////////////////////////////////////////
494: }
495:
496: ////////////////////////////////////////////////////////////////////////////
497: ////////////////////////////////////////////////////////////////////////////
498: }