Public general use code classes and xml files that we've compiled and used over the years:
Access Management System (AMS) support class for Nokia's Fixed Telecommunications Network (FTN) business model.
1: using System;
2: using System.Collections;
3: using System.Collections.Generic;
4: using System.Configuration;
5: using System.Data;
6: using System.Linq;
7: using System.Text.RegularExpressions;
8: using System.Threading.Tasks;
9:
10: namespace Ia.Ftn.Cl.Models.Business.Nokia
11: {
12: ////////////////////////////////////////////////////////////////////////////
13:
14: /// <summary publish="true">
15: /// Access Management System (AMS) support class for Nokia's Fixed Telecommunications Network (FTN) business model.
16: /// </summary>
17: ///
18: /// "AppSettings": {
19: /// "AmsServerHost": "********",
20: /// "AmsServerPort": "****",
21: /// "AmsServerActUser": "ACT-USER:{amsName}:********:{ctag}::********;",
22: /// "AmsServerCancUser": "CANC-USER:{amsName}:********:{ctag};"
23: /// }
24: ///
25: /// <remarks>
26: /// Copyright © 2007-2024 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
27: /// </remarks>
28: public class Ams
29: {
30: // below: access data for Nokia AMS
31: private const string textToSkipInTelnetEndReceive = "IP 0\r\n<";
32: private static string lastSentCommand;
33: private static string keepAliveCurrentAmsName = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.NokiaOltAmsNameList.PickRandom();
34:
35: private static readonly Procedure serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure = new Ia.Ftn.Cl.Models.Business.Procedure(24, Ia.Ftn.Cl.Models.Business.Provision._ServiceOntToCreateAndToDeleteInEmsOntSipInfoOrVoipPstnUserListFromThePastNHourList);
36: private static readonly Procedure serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure = new Ia.Ftn.Cl.Models.Business.Procedure(0, Ia.Ftn.Cl.Models.Business.Provision._ServiceOntToCreateAndToDeleteInEmsOntSipInfoOrVoipPstnUserListFromThePastNHourList);
37:
38: private static readonly Dictionary<string, int> associateServiceIdAndPortBetweenCreateAndReadDictionary = new Dictionary<string, int>();
39:
40: private static Dictionary<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont, bool> eventDictionary = new Dictionary<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont, bool>();
41:
42: private static readonly Queue<string> priorityAmsCommandQueue = new Queue<string>();
43: private static Queue<string> amsCommandQueue = new Queue<string>();
44: private static readonly Queue<string> amsCreateOntCommandQueue = new Queue<string>();
45:
46: private static Ia.Ftn.Cl.Models.Client.Nokia.Ams ams = new Ia.Ftn.Cl.Models.Client.Nokia.Ams();
47:
48: private static List<string> priorityServiceList = new List<string>();
49:
50: /// <summary/>
51: public enum AmsOpcode
52: {
53: /// <summary/>
54: RtrvHdr,
55:
56: /// <summary/>
57: RtrvOnt,
58:
59: /// <summary/>
60: InitSys,
61:
62: /// <summary/>
63: RtrvServiceVoip,
64:
65: /// <summary/>
66: RtrvOntPots,
67:
68: /// <summary/>
69: RtrvAlmPon,
70:
71: /// <summary/>
72: EdOntDesc1,
73:
74: /// <summary/>
75: EdOntDesc1Annul,
76:
77: /// <summary/>
78: EdOntPotsCustinfo
79: }
80:
81: /// <summary/>
82: public enum BellcoreState
83: {
84: /// <summary/>
85: Undefined = 0,
86:
87: /// <summary/>
88: IsNr = 1,
89:
90: /// <summary/>
91: OosAu,
92:
93: /// <summary/>
94: OosMa,
95:
96: /// <summary/>
97: OosAuma
98: };
99:
100: /// <summary/>
101: public static string Host { get { return Ia.Cl.Models.ApplicationConfiguration.GetSetting("AppSettings:AmsServerHost"); } }
102:
103: /// <summary/>
104: public static int Port { get { return int.Parse(Ia.Cl.Models.ApplicationConfiguration.GetSetting("AppSettings:AmsServerPort")); } }
105:
106: /// <summary/>
107: public static string ActUser(string amsName)
108: {
109: return PrepareCtaggedCommand(Ia.Cl.Models.ApplicationConfiguration.GetSetting("AppSettings:AmsServerActUser").Replace("{amsName}", amsName));
110: }
111:
112: /// <summary/>
113: public static string CancUser(string amsName)
114: {
115: return PrepareCtaggedCommand(Ia.Cl.Models.ApplicationConfiguration.GetSetting("AppSettings:AmsServerCancUser").Replace("{amsName}", amsName));
116: }
117:
118: /// <summary/>
119: public static string TextToSkipInTelnetEndReceive { get { return textToSkipInTelnetEndReceive; } }
120:
121: ////////////////////////////////////////////////////////////////////////////
122:
123: /// <summary>
124: ///
125: /// </summary>
126: public Ams()
127: {
128: }
129:
130: ////////////////////////////////////////////////////////////////////////////
131:
132: /// <summary>
133: ///
134: /// </summary>
135: public static void Connect(out Ia.Cl.Models.Result result)
136: {
137: if (ams != null && !ams.IsConnected)
138: {
139: result = ams.Connect();
140: }
141: else
142: {
143: result = new Ia.Cl.Models.Result();
144:
145: result.AddWarning("Warning: ams is already connected.");
146: }
147: }
148:
149: ////////////////////////////////////////////////////////////////////////////
150:
151: /// <summary>
152: ///
153: /// </summary>
154: public static void Disconnect(out Ia.Cl.Models.Result result)
155: {
156: if (ams != null && ams.IsConnected)
157: {
158: result = ams.Disconnect();
159: }
160: else
161: {
162: result = new Ia.Cl.Models.Result();
163:
164: result.AddWarning("Warning: ams is already disconnected.");
165: }
166: }
167:
168: ////////////////////////////////////////////////////////////////////////////
169:
170: /// <summary>
171: ///
172: /// </summary>
173: public static void Login()
174: {
175: foreach (string amsName in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.NokiaOltAmsNameList)
176: {
177: ams.SendQueue.Enqueue(Ia.Ftn.Cl.Models.Business.Nokia.Ams.ActUser(amsName));
178: }
179: }
180:
181: ////////////////////////////////////////////////////////////////////////////
182:
183: /// <summary>
184: ///
185: /// </summary>
186: public static void Logout()
187: {
188: foreach (string amsName in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.NokiaOltAmsNameList)
189: {
190: ams.SendQueue.Enqueue(Ia.Ftn.Cl.Models.Business.Nokia.Ams.CancUser(amsName));
191: }
192: }
193:
194: ////////////////////////////////////////////////////////////////////////////
195:
196: /// <summary>
197: ///
198: /// </summary>
199: public static Queue<string> ReceiveQueue
200: {
201: get
202: {
203: return ams.ReceiveQueue;
204: }
205: }
206:
207: ////////////////////////////////////////////////////////////////////////////
208:
209: /// <summary>
210: ///
211: /// </summary>
212: public static Queue<string> SendQueue
213: {
214: get
215: {
216: return ams.SendQueue;
217: }
218: }
219:
220: ////////////////////////////////////////////////////////////////////////////
221:
222: /// <summary>
223: ///
224: /// </summary>
225: public static bool IsConnected
226: {
227: get
228: {
229: return (ams != null && ams.IsConnected);
230: }
231: }
232:
233: ////////////////////////////////////////////////////////////////////////////
234:
235: /// <summary>
236: ///
237: /// </summary>
238: public static bool IsLoggedIn
239: {
240: get
241: {
242: return ams.IsLoggedIn;
243: }
244: }
245:
246: ////////////////////////////////////////////////////////////////////////////
247: ////////////////////////////////////////////////////////////////////////////
248:
249: /// <summary>
250: ///
251: /// </summary>
252: public static Ia.Cl.Models.Result ManageReceiveQueue()
253: {
254: bool isUpdated;
255: string rowString, formattedString;
256: Ia.Cl.Models.Result updateDatabaseWithAmsCommandOutputResult;
257:
258: var result = new Ia.Cl.Models.Result();
259:
260: try
261: {
262: while (ReceiveQueue.Count > 0)
263: {
264: rowString = ReceiveQueue.Dequeue();
265:
266: formattedString = Ia.Cl.Models.Telnet.FormatAndCleanData(rowString);
267:
268: isUpdated = Ia.Ftn.Cl.Models.Business.Nokia.Ams.UpdateDatabaseWithAmsCommandOutput(formattedString, out updateDatabaseWithAmsCommandOutputResult);
269:
270: if (updateDatabaseWithAmsCommandOutputResult.IsSuccessful && !updateDatabaseWithAmsCommandOutputResult.HasWarning)
271: {
272: result.AddSuccess(updateDatabaseWithAmsCommandOutputResult.Message + ": formattedString: [" + formattedString + "]");
273: }
274: else
275: {
276: result.AddError("ManageReceiveQueue(): formattedString: [" + formattedString + "]");
277: }
278:
279: if (result.IsSuccessful)
280: {
281: AnalyzeReceivedData(formattedString);
282: }
283: else
284: {
285: }
286: }
287: }
288: catch (Exception ex)
289: {
290: result.AddError("ManageReceiveQueue: Exception: " + ex.Message);
291: }
292:
293: return result;
294: }
295:
296: ////////////////////////////////////////////////////////////////////////////
297:
298: /// <summary>
299: ///
300: /// </summary>
301: private static void AnalyzeReceivedData(string data)
302: {
303: string lastSentCommandWithoutSemiColon;
304:
305: //lastCommandEchoedBack = true;
306:
307: if (data.Contains("COMPLD"))
308: {
309: if (lastSentCommand != null)
310: {
311: lastSentCommandWithoutSemiColon = lastSentCommand.Replace(";", "");
312:
313: // below: detect the activation of user
314: // debug
315: //activated = true;
316: //if (lastSentCommand == Ia.Ftn.Cl.Model.Business.Nokia.Ams.ActUser(olt.AmsName)) activated = true;
317: //else if (lastSentCommand == Ia.Ftn.Cl.Model.Business.Nokia.Ams.CancUser(olt.AmsName)) activated = false;
318:
319: /*
320: if (data.Contains(lastSentCommandWithoutSemiColon)) lastCommandEchoedBack = true;
321: else
322: {
323: //lastCommandEchoBackCounter = 5;
324: lastCommandEchoedBack = false;
325: }
326: */
327: }
328: }
329: else if (data.Contains("DENY")) { }
330: else if (data.Contains(Ia.Ftn.Cl.Models.Business.Nokia.Ams.TextToSkipInTelnetEndReceive)) { }
331: else if (data == "\r\n<") { }
332: /*
333: else
334: {
335: lastCommandEchoBackCounter = 5;
336: lastCommandEchoedBack = false;
337: }
338: */
339: }
340:
341: ////////////////////////////////////////////////////////////////////////////
342:
343: /// <summary>
344: ///
345: /// </summary>
346: public static string ManageSendQueue(out Ia.Cl.Models.Result result)
347: {
348: var command = string.Empty;
349: result = new Ia.Cl.Models.Result();
350:
351: try
352: {
353: if (ams.SendQueue.Count > 0)
354: {
355: command = ams.SendQueue.Dequeue();
356:
357: result = ams.Send(command);
358: }
359: }
360: catch (Exception ex)
361: {
362: result.AddError("ManageSendQueue(): Exception: " + ex.Message);
363: }
364:
365: return result.IsSuccessful ? command : string.Empty;
366: }
367:
368: ////////////////////////////////////////////////////////////////////////////
369:
370: /// <summary>
371: ///
372: /// </summary>
373: public static Ia.Cl.Models.Result ManageSynchronizationBetweenAccessAndSwitchPast24Hours()
374: {
375: // See: ManageSynchronizationBetweenAccessAndSwitchPastHour(), ManageSynchronizationBetweenAccessAndSwitchPast24Hours(), ManageSynchronizationBetweenAccessAndSwitch()
376:
377: Ia.Ftn.Cl.Models.Business.Procedure.Process process;
378:
379: var result = new Ia.Cl.Models.Result();
380:
381: process = serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.NextProcess(priorityServiceList);
382:
383: if (priorityServiceList.Count > 50) priorityServiceList.Clear();
384:
385: if (process.Type != Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.None)
386: {
387: if (process.Type == Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.Create)
388: {
389: result.AddSuccess("create: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.ProgressCounterString);
390:
391: //CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(process.Service, process.Ont, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
392: }
393: else if (process.Type == Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.Read)
394: {
395: result.AddSuccess("read: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.ProgressCounterString);
396:
397: //ReadOntSipInfoOrVoipPstnUser(process.Service, process.Ont, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
398: }
399: else if (process.Type == Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.Delete)
400: {
401: result.AddSuccess("delete: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.ProgressCounterString);
402:
403: //_ = VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(process.Service, process.Ont, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
404: }
405: else result.AddError("sync: undefined procedure");
406:
407: // Ia.Ftn.Cl.Model.Data.MessageQueue.SecretaryApplication.Updated() is in Ia.Ftn.Cl.Model.Business.Nokia.Ams.UpdateDatabaseWithEmsCommandOutput();
408: }
409: else result.AddWarning("sync: undefined"); // nothing to create or delete");
410:
411: return result;
412: }
413:
414: ////////////////////////////////////////////////////////////////////////////
415:
416: /// <summary>
417: ///
418: /// </summary>
419: public static Ia.Cl.Models.Result ManageSynchronizationBetweenAccessAndSwitch()
420: {
421: // See: ManageSynchronizationBetweenAccessAndSwitchPastHour(), ManageSynchronizationBetweenAccessAndSwitchPast24Hours(), ManageSynchronizationBetweenAccessAndSwitch()
422:
423: Ia.Ftn.Cl.Models.Business.Procedure.Process process;
424:
425: var result = new Ia.Cl.Models.Result();
426:
427: // problem: I have put empty new List<string>() here because there is an exception: System.Exception: Undefined function
428: process = serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.NextProcess(new List<string>());
429:
430: if (process.Type != Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.None)
431: {
432: if (process.Type == Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.Create)
433: {
434: result.AddSuccess("create: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.ProgressCounterString);
435:
436: //CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(process.Service, process.Ont, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
437: }
438: else if (process.Type == Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.Read)
439: {
440: result.AddSuccess("read: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.ProgressCounterString);
441:
442: //ReadOntSipInfoOrVoipPstnUser(process.Service, process.Ont, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
443: }
444: else if (process.Type == Ia.Ftn.Cl.Models.Business.Procedure.ProcessType.Delete)
445: {
446: result.AddSuccess("delete: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.ProgressCounterString);
447:
448: //_ = VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(process.Service, process.Ont, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
449: }
450: else result.AddError("sync: undefined procedure");
451:
452: // Ia.Ftn.Cl.Model.Data.MessageQueue.SecretaryApplication.Updated() is in Ia.Ftn.Cl.Model.Business.Nokia.Ams.UpdateDatabaseWithEmsCommandOutput();
453: }
454: else result.AddWarning("sync: undefined"); // nothing to create or delete");
455:
456: return result;
457: }
458:
459: ////////////////////////////////////////////////////////////////////////////
460: ////////////////////////////////////////////////////////////////////////////
461:
462: /*
463: ////////////////////////////////////////////////////////////////////////////
464: ////////////////////////////////////////////////////////////////////////////
465:
466: /// <summary>
467: ///
468: /// </summary>
469: public static void CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, string accessName, int port, out Ia.Cl.Models.Result result)
470: {
471: int serviceType;
472: string serviceId;
473: Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
474:
475: result = new Ia.Cl.Models.Result();
476:
477: serviceType = Ia.Ftn.Cl.Model.Business.Service.ServiceType.ImsService;
478:
479: try
480: {
481: if (!string.IsNullOrEmpty(service))
482: {
483: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
484: {
485: serviceId = Ia.Ftn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
486:
487: if (!string.IsNullOrEmpty(accessName))
488: {
489: nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
490:
491: if (nddOnt != null)
492: {
493: Ia.Ftn.Cl.Model.Business.Nokia.Ams.CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, nddOnt, port, ref result);
494: }
495: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
496: }
497: else result.AddError("AccessName null or empty.");
498: }
499: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
500: }
501: else result.AddError("Service null or empty.");
502: }
503: catch (Exception ex)
504: {
505: result.AddError("Exception: " + ex.ToString() + ".");
506: }
507: }
508:
509: ////////////////////////////////////////////////////////////////////////////
510:
511: /// <summary>
512: ///
513: /// </summary>
514: public static void CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, int port, ref Ia.Cl.Models.Result result)
515: {
516: Ia.Ftn.Cl.Model.Business.Nokia.Default.FnSnPnPort fnSnPnPort;
517: Ia.Ftn.Cl.Model.Business.Nokia.Dev.MduDev mduDev;
518: Ia.Ftn.Cl.Model.Ont ont;
519:
520: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
521: {
522: if (nddOnt != null)
523: {
524: if (Ia.Ftn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
525: {
526: ont = Ia.Ftn.Cl.Model.Data.Nokia.Ont.ReadIncludeAccess(nddOnt.Id);
527:
528: if (ont != null)
529: {
530: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
531: {
532: if (ont.FamilyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
533: {
534: var accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
535:
536: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
537: {
538: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
539:
540: var vacantFnSnPnList = Ia.Ftn.Cl.Model.Data.Nokia.Ams.VacantMduFnSnPnForOntList(mduDev, ont);
541:
542: if (vacantFnSnPnList.Count > 0)
543: {
544: if (port != Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
545: {
546: fnSnPnPort = vacantFnSnPnList.Where(f => f.Port == port).SingleOrDefault();
547: }
548: else fnSnPnPort = Ia.Ftn.Cl.Model.Data.Nokia.Ams.NextVacantMduFnSnPnForOnt(mduDev, ont);
549:
550: if (fnSnPnPort != null)
551: {
552: var emsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
553:
554: if (emsVoipPstnUserList.Count == 0)
555: {
556: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendCreateVoipPstnUser(ems, mduDev, nddOnt, service, fnSnPnPort.Sn, fnSnPnPort.Pn);
557:
558: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
559: {
560: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendCreateVoipPstnAccount(ems, mduDev, nddOnt, service, fnSnPnPort.Sn, fnSnPnPort.Pn);
561: }
562:
563: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, mduDev);
564:
565: associateServiceIdAndPortBetweenCreateAndReadDictionary[service] = fnSnPnPort.Port;
566:
567: result.AddSuccess("command(s) sent...");
568: }
569: else result.AddError("emsVoipPstnUserList count != 0. Value must be zero before the operation is executed for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
570: }
571: else result.AddError("MDU sn and/or tel is invalid or does not exist.");
572: }
573: else result.AddError("vacantFnSnPnList.Count is 0. There are no vacant ports in MDU.");
574: }
575: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
576: }
577: else // SFU
578: {
579: var vacantList = Ia.Ftn.Cl.Model.Data.Nokia.Ams.VacantTelForOntList(ont);
580:
581: if (port != Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
582: {
583: port = vacantList.Contains(port) ? port : Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
584: }
585: else port = Ia.Ftn.Cl.Model.Data.Nokia.Ams.NextVacantTelForOnt(ont);
586:
587: if (port != Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
588: {
589: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendCreateOntSipInfo(ems, nddOnt, service, port);
590:
591: // Don't use SAVE-DEV here
592: //Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, ont.EmsPort.EmsBoard.EmsDev);
593:
594: associateServiceIdAndPortBetweenCreateAndReadDictionary[service] = port;
595:
596: result.AddSuccess("command(s) sent...");
597: }
598: else result.AddError("port is invalid or does not exist.");
599: }
600: }
601: else result.AddError("OLT is not SIP, its H.248.");
602: }
603: else result.AddError("ont is null, does not exist for access: " + nddOnt.Access.Name + ".");
604: }
605: else result.AddError("access is not in an allowed to be provisioned OLT: " + nddOnt.Access.Name + ".");
606: }
607: else result.AddError("nddOnt is null, does not exist for service: " + service + ".");
608: }
609: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
610: }
611:
612: ////////////////////////////////////////////////////////////////////////////
613:
614: /// <summary>
615: ///
616: /// </summary>
617: public static void ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, out Ia.Cl.Models.Result result)
618: {
619: ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, string.Empty, Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, out result);
620: }
621:
622: ////////////////////////////////////////////////////////////////////////////
623:
624: /// <summary>
625: ///
626: /// </summary>
627: public static void ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, string accessName, int port, out Ia.Cl.Models.Result result)
628: {
629: int serviceType;
630: string serviceId;
631:
632: result = new Ia.Cl.Models.Result();
633:
634: serviceType = Ia.Ftn.Cl.Model.Business.Service.ServiceType.ImsService;
635:
636: try
637: {
638: if (!string.IsNullOrEmpty(service))
639: {
640: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
641: {
642: serviceId = Ia.Ftn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
643:
644: if (!string.IsNullOrEmpty(accessName))
645: {
646: var nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
647:
648: if (nddOnt != null)
649: {
650: Ia.Ftn.Cl.Model.Business.Nokia.Ams.ReadOntSipInfoOrVoipPstnUser(service, nddOnt, port, ref result);
651: }
652: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
653: }
654: else
655: {
656: Ia.Ftn.Cl.Model.Business.Nokia.Ams.ReadOntSipInfoOrVoipPstnUser(service, null, port, ref result);
657: }
658: }
659: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
660: }
661: else result.AddError("Service null or empty.");
662: }
663: catch (Exception ex)
664: {
665: result.AddError("Exception: " + ex.ToString() + ".");
666: }
667: }
668:
669: ////////////////////////////////////////////////////////////////////////////
670:
671: /// <summary>
672: ///
673: /// </summary>
674: public static void ReadOntSipInfoOrVoipPstnUser(string service, Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, int port, ref Ia.Cl.Models.Result result)
675: {
676: Ia.Ftn.Cl.Model.Business.Nokia.Dev.MduDev mduDev;
677: Ia.Ftn.Cl.Model.Ont ont;
678:
679: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
680: {
681: if (nddOnt != null)
682: {
683: ont = Ia.Ftn.Cl.Model.Data.Nokia.Ont.Read(nddOnt.Id);
684:
685: if (ont != null)
686: {
687: if (ont.FamilyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
688: {
689: var accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
690:
691: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
692: {
693: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
694:
695: if (port != Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
696: {
697: var fnSnPnPort = mduDev.PossibleFnSnPnPortList.Where(f => f.Port == port).SingleOrDefault();
698:
699: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
700: }
701: else if (associateServiceIdAndPortBetweenCreateAndReadDictionary.ContainsKey(service))
702: {
703: port = associateServiceIdAndPortBetweenCreateAndReadDictionary[service];
704:
705: var fnSnPnPort = mduDev.PossibleFnSnPnPortList.Where(f => f.Port == port).SingleOrDefault();
706:
707: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
708: }
709: else
710: {
711: foreach (var fnSnPnPort in mduDev.PossibleFnSnPnPortList)
712: {
713: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
714: }
715: }
716:
717: result.AddSuccess("command(s) sent...");
718: }
719: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
720: }
721: else // SFU
722: {
723: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadOntSipInfo(ems, nddOnt);
724:
725: result.AddSuccess("command(s) sent...");
726: }
727: }
728: else result.AddError("ont is null, does not exist for access: " + nddOnt.Access.Name + ".");
729: }
730: else
731: {
732: var emsOntSipInfoList = Ia.Ftn.Cl.Model.Data.Nokia.OntSipInfo.ReadByServiceIncludeEmsOntAndAccess(service);
733:
734: if (emsOntSipInfoList.Count > 0)
735: {
736: // SFU
737:
738: foreach (var emsOntSipInfo in emsOntSipInfoList)
739: {
740: ont = emsOntSipInfo.EmsOnt;
741:
742: if (ont.Access != null)
743: {
744: nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
745:
746: if (nddOnt != null)
747: {
748: if (Ia.Ftn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
749: {
750: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
751: {
752: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadOntSipInfo(ems, nddOnt);
753:
754: result.AddSuccess("command(s) sent...");
755: }
756: else result.AddError("OLT is not SIP, its H.248.");
757: }
758: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
759: }
760: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
761: }
762: else result.AddError("ont.Access is null for service " + service + ".");
763: }
764: }
765:
766:
767: var emsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
768:
769: if (emsVoipPstnUserList.Count > 0)
770: {
771: // MDU
772:
773: foreach (var emsVoipPstnUser in emsVoipPstnUserList)
774: {
775: ont = emsVoipPstnUser.EmsOnt;
776:
777: if (ont.Access != null)
778: {
779: nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
780:
781: if (nddOnt != null)
782: {
783: if (Ia.Ftn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
784: {
785: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
786: {
787: if (ont.FamilyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
788: {
789: var accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
790:
791: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
792: {
793: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
794:
795: foreach (var fnSnPnPort in mduDev.PossibleFnSnPnPortList)
796: {
797: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
798:
799: result.AddSuccess("command(s) sent...");
800: }
801: }
802: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
803: }
804: else result.AddError("ONT family type is not MDU.");
805: }
806: else result.AddError("OLT is not SIP, its H.248.");
807: }
808: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
809: }
810: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
811: }
812: else result.AddError("ont.Access is null for service " + service + ".");
813: }
814:
815:
816: var msanEmsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByMsanService(service);
817:
818: if (msanEmsVoipPstnUserList.Count > 0)
819: {
820: // MSAN
821:
822: foreach (var emsVoipPstnUser in msanEmsVoipPstnUserList)
823: {
824: ReadVoipPstnUser(emsVoipPstnUser.DID, emsVoipPstnUser.FN, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
825: }
826:
827: result.AddSuccess("command(s) sent...");
828: }
829: }
830: }
831: }
832: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
833: }
834:
835: ////////////////////////////////////////////////////////////////////////////
836:
837: /// <summary>
838: ///
839: /// </summary>
840: public static string DeleteOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, string accessName, int port, out Ia.Cl.Models.Result result)
841: {
842: int serviceType;
843: string serviceId, vacatedAccessName;
844: Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont vacatedNddOnt;
845:
846: result = new Ia.Cl.Models.Result();
847:
848: serviceType = Ia.Ftn.Cl.Model.Business.Service.ServiceType.ImsService;
849:
850: vacatedAccessName = string.Empty;
851:
852: try
853: {
854: if (!string.IsNullOrEmpty(service))
855: {
856: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
857: {
858: serviceId = Ia.Ftn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
859:
860: if (!string.IsNullOrEmpty(accessName))
861: {
862: var nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
863:
864: if (nddOnt != null)
865: {
866: vacatedNddOnt = Ia.Ftn.Cl.Model.Business.Nokia.Ams.VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(service, nddOnt, port, ref result);
867:
868: vacatedAccessName = (vacatedNddOnt != null) ? vacatedNddOnt.Access.Name : string.Empty;
869: }
870: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
871: }
872: else if (port == Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
873: {
874: vacatedNddOnt = Ia.Ftn.Cl.Model.Business.Nokia.Ams.VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(service, null, port, ref result);
875:
876: vacatedAccessName = (vacatedNddOnt != null) ? vacatedNddOnt.Access.Name : string.Empty;
877: }
878: else result.AddError("accessName is empty or null and port is not PortUndefinedOrInvalidOrUnknown. NCE does not know how to handle vacation where nddOnt is null and port is defined.");
879: }
880: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
881: }
882: else result.AddError("Service null or empty.");
883: }
884: catch (Exception ex)
885: {
886: result.AddError("Exception: " + ex.ToString() + ".");
887: }
888:
889: return vacatedAccessName;
890: }
891:
892: ////////////////////////////////////////////////////////////////////////////
893:
894: /// <summary>
895: ///
896: /// </summary>
897: public static Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(string service, Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, int port, ref Ia.Cl.Models.Result result)
898: {
899: Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Ont vacatedNddOnt;
900: Ia.Ftn.Cl.Model.Business.Nokia.Dev.MduDev mduDev;
901: Ia.Ftn.Cl.Model.Ont ont;
902:
903: vacatedNddOnt = nddOnt;
904:
905: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
906: {
907: if (nddOnt != null)
908: {
909: if (Ia.Ftn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
910: {
911: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
912: {
913: ont = Ia.Ftn.Cl.Model.Data.Nokia.Ont.ReadIncludeAccess(nddOnt.Id);
914:
915: if (ont.FamilyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
916: {
917: var accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
918:
919: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
920: {
921: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
922:
923: if (port == Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
924: {
925: var emsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
926:
927: foreach (var emsVoipPstnUser in emsVoipPstnUserList)
928: {
929: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
930: {
931: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
932: }
933:
934: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
935:
936: result.AddSuccess("command(s) sent...");
937: }
938: }
939: else
940: {
941: var fnSnPnPort = mduDev.PossibleFnSnPnPortList.Where(f => f.Port == port).SingleOrDefault();
942:
943: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
944: {
945: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, mduDev, nddOnt, service, mduDev.FirstFnSnPnPort.Sn, fnSnPnPort.Pn);
946: }
947:
948: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, mduDev, nddOnt, service, mduDev.FirstFnSnPnPort.Sn, fnSnPnPort.Pn);
949:
950: result.AddSuccess("command(s) sent...");
951: }
952:
953: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, mduDev);
954: }
955: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service " + service + " and access " + nddOnt.Access.Name + ".");
956: }
957: else // SFU
958: {
959: if (port == Ia.Ftn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
960: {
961: var emsOntSipInfoList = Ia.Ftn.Cl.Model.Data.Nokia.OntSipInfo.ReadByService(service);
962:
963: foreach (var emsOntSipInfo in emsOntSipInfoList)
964: {
965: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateOntSipInfo(ems, nddOnt, service, emsOntSipInfo.TEL);
966: }
967:
968: result.AddSuccess("command(s) sent...");
969: }
970: else
971: {
972: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateOntSipInfo(ems, nddOnt, service, port);
973:
974: result.AddSuccess("command(s) sent...");
975: }
976: }
977: }
978: else result.AddError("OLT is not SIP, its H.248.");
979: }
980: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
981: }
982: else
983: {
984: var emsOntSipInfoList = Ia.Ftn.Cl.Model.Data.Nokia.OntSipInfo.ReadByServiceIncludeEmsOntAndAccess(service);
985:
986: if (emsOntSipInfoList.Count > 0)
987: {
988: // SFU
989:
990: foreach (var emsOntSipInfo in emsOntSipInfoList)
991: {
992: ont = emsOntSipInfo.EmsOnt;
993:
994: if (ont.Access != null)
995: {
996: nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
997:
998: if (nddOnt != null)
999: {
1000: if (Ia.Ftn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
1001: {
1002: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
1003: {
1004: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateOntSipInfo(ems, nddOnt, service, emsOntSipInfo.TEL);
1005:
1006: result.AddSuccess("command(s) sent...");
1007: }
1008: else result.AddError("OLT is not SIP, its H.248.");
1009: }
1010: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
1011: }
1012: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
1013:
1014: vacatedNddOnt = nddOnt;
1015: }
1016: else result.AddError("ont.Access is null for service " + service + ".");
1017: }
1018: }
1019:
1020:
1021: var emsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
1022:
1023: if (emsVoipPstnUserList.Count > 0)
1024: {
1025: // MDU
1026:
1027: foreach (var emsVoipPstnUser in emsVoipPstnUserList)
1028: {
1029: ont = emsVoipPstnUser.EmsOnt;
1030:
1031: if (ont.Access != null)
1032: {
1033: nddOnt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
1034:
1035: if (nddOnt != null)
1036: {
1037: if (Ia.Ftn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
1038: {
1039: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
1040: {
1041: if (ont.FamilyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
1042: {
1043: var accessNameToMduDevDictionary = Ia.Ftn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
1044:
1045: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
1046: {
1047: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
1048:
1049: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
1050: {
1051: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
1052: }
1053:
1054: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
1055:
1056: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, mduDev);
1057:
1058: result.AddSuccess("command(s) sent...");
1059: }
1060: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
1061: }
1062: else result.AddError("ONT family type is not MDU.");
1063: }
1064: else result.AddError("OLT is not SIP, its H.248.");
1065: }
1066: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
1067: }
1068: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
1069:
1070: vacatedNddOnt = nddOnt;
1071: }
1072: else result.AddError("ont.Access is null for service " + service + ".");
1073: }
1074: }
1075: else
1076: {
1077: var msanEmsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByMsanService(service);
1078:
1079: if (msanEmsVoipPstnUserList.Count > 0)
1080: {
1081: // MSAN
1082:
1083: foreach (var emsVoipPstnUser in msanEmsVoipPstnUserList)
1084: {
1085: DeleteVoipPstnUserAndOrVacateVoipPstnAccount(emsVoipPstnUser.DID, emsVoipPstnUser.FN, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
1086: }
1087:
1088: result.AddSuccess("command(s) sent...");
1089: }
1090: else result.AddWarning("Could not find service " + service + ".");
1091: }
1092: }
1093: }
1094: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
1095:
1096: return vacatedNddOnt;
1097: }
1098:
1099: ////////////////////////////////////////////////////////////////////////////
1100:
1101: /// <summary>
1102: ///
1103: /// </summary>
1104: public static List<Ia.Ftn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic> DeleteMsanVoipPstnUser2(string service, out Ia.Cl.Models.Result result)
1105: {
1106: Ia.Ftn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic lic;
1107:
1108: result = new Ia.Cl.Models.Result();
1109:
1110: var licList = new List<Ia.Ftn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic>();
1111:
1112: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
1113: {
1114: var msanEmsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByMsanService(service);
1115:
1116: if (msanEmsVoipPstnUserList.Count > 0)
1117: {
1118: // MSAN
1119:
1120: foreach (var emsVoipPstnUser in msanEmsVoipPstnUserList)
1121: {
1122: DeleteVoipPstnUserAndOrVacateVoipPstnAccount(emsVoipPstnUser.DID, emsVoipPstnUser.FN, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
1123:
1124: lic = Ia.Ftn.Cl.Model.Data.Nokia.Default.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUser.Id);
1125:
1126: licList.Add(lic);
1127: }
1128:
1129: result.AddSuccess("command(s) sent...");
1130: }
1131: else result.AddWarning("Could not find service " + service + ".");
1132: }
1133: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
1134:
1135: return licList;
1136: }
1137:
1138: ////////////////////////////////////////////////////////////////////////////
1139:
1140: /// <summary>
1141: ///
1142: /// </summary>
1143: public static void DeleteVoipPstnUserAndOrVacateVoipPstnAccount(string dev, int fn, int sn, int pn)
1144: {
1145: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, dev, fn, sn, pn);
1146:
1147: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, dev, fn, sn, pn);
1148:
1149: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, dev);
1150: }
1151:
1152: ////////////////////////////////////////////////////////////////////////////
1153:
1154: /// <summary>
1155: ///
1156: /// </summary>
1157: private static void DeleteVoipPstnUserAndOrVacateVoipPstnAccount(int did, int fn, int sn, int pn)
1158: {
1159: var dev = Ia.Ftn.Cl.Model.Data.Nokia.Dev.DidToDevDictionary[did];
1160:
1161: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, dev, fn, sn, pn);
1162:
1163: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, dev, fn, sn, pn);
1164:
1165: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, dev);
1166: }
1167:
1168: ////////////////////////////////////////////////////////////////////////////
1169: ////////////////////////////////////////////////////////////////////////////
1170:
1171: /// <summary>
1172: ///
1173: /// </summary>
1174: public static Ia.Cl.Models.Result CreateMsanVoipPstnUser(string msanDevId, int fn, int sn, int pn, string service)
1175: {
1176: Ia.Ftn.Cl.Model.Business.Nokia.Default.FnSnPnPort fnSnPn;
1177:
1178: var result = new Ia.Cl.Models.Result();
1179:
1180: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
1181: {
1182: var msanDev = (from m in Ia.Ftn.Cl.Model.Data.Nokia.Default.MsanDevList where m.Id == msanDevId select m).Single();
1183:
1184: var vacantFnSnPnList = Ia.Ftn.Cl.Model.Data.Nokia.Ams.VacantMsanFnSnPnListForMsanDev(msanDev);
1185:
1186: if (vacantFnSnPnList.Count > 0)
1187: {
1188: fnSnPn = vacantFnSnPnList.Where(f => f.Fn == fn && f.Sn == sn && f.Pn == pn).SingleOrDefault();
1189:
1190: if (fnSnPn == null) fnSnPn = Ia.Ftn.Cl.Model.Data.Nokia.Ams.NextVacantMsanFnSnPnForMsanDev(msanDev);
1191:
1192: if (fnSnPn != null)
1193: {
1194: var emsVoipPstnUserList = Ia.Ftn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
1195:
1196: if (emsVoipPstnUserList.Count == 0)
1197: {
1198: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendCreateMsanVoipPstnUser(ems, msanDev, fnSnPn.Fn, fnSnPn.Sn, fnSnPn.Pn, service);
1199:
1200: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, msanDev);
1201:
1202: result.AddSuccess("command(s) sent...");
1203: }
1204: else result.AddError("emsVoipPstnUserList count != 0. Value must be zero before the operation is executed for service: " + service + ".");
1205: }
1206: else result.AddError("MDU sn and/or tel is invalid or does not exist.");
1207: }
1208: else result.AddError("vacantFnSnPnList.Count is 0. There are no vacant ports in MSAN.");
1209: }
1210: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
1211:
1212: return result;
1213: }
1214:
1215: ////////////////////////////////////////////////////////////////////////////
1216:
1217: /// <summary>
1218: ///
1219: /// </summary>
1220: public static void ReadVoipPstnUser(string dev, int fn, int sn, int pn)
1221: {
1222: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, dev, sn, pn);
1223: }
1224:
1225: ////////////////////////////////////////////////////////////////////////////
1226:
1227: /// <summary>
1228: ///
1229: /// </summary>
1230: public static void ReadMsanVoipPstnUser(Ia.Ftn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic lic)
1231: {
1232: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, lic.MsanDevDev, lic.Sn, lic.Pn);
1233: }
1234:
1235: ////////////////////////////////////////////////////////////////////////////
1236:
1237: /// <summary>
1238: ///
1239: /// </summary>
1240: public static void ReadVoipPstnUser(string service)
1241: {
1242: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, service);
1243: }
1244:
1245: ////////////////////////////////////////////////////////////////////////////
1246:
1247: /// <summary>
1248: ///
1249: /// </summary>
1250: private static void ReadVoipPstnUser(int did, int fn, int sn, int pn)
1251: {
1252: var dev = Ia.Ftn.Cl.Model.Data.Nokia.Dev.DidToDevDictionary[did];
1253:
1254: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, dev, sn, pn);
1255: }
1256:
1257: ////////////////////////////////////////////////////////////////////////////
1258:
1259: /// <summary>
1260: ///
1261: /// </summary>
1262: public static void DeleteVoipPstnUser(string dev, int fn, int sn, int pn)
1263: {
1264: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, dev, fn, sn, pn);
1265:
1266: Ia.Ftn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, dev);
1267: }
1268:
1269: ////////////////////////////////////////////////////////////////////////////
1270:
1271: /// <summary>
1272: ///
1273: /// </summary>
1274: public static List<Ia.Ftn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic> DeleteMsanVoipPstnUser(string service, out Ia.Cl.Models.Result result)
1275: {
1276: var licList = new List<Ia.Ftn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic>();
1277:
1278: result = new Ia.Cl.Models.Result();
1279:
1280: try
1281: {
1282: if (!string.IsNullOrEmpty(service))
1283: {
1284: if (Ia.Ftn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
1285: {
1286: licList = Ia.Ftn.Cl.Model.Business.Nokia.Nce.DeleteMsanVoipPstnUser2(service, out result);
1287: }
1288: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
1289: }
1290: else result.AddError("Service null or empty.");
1291: }
1292: catch (Exception ex)
1293: {
1294: result.AddError("Exception: " + ex.ToString() + ".");
1295: }
1296:
1297: return licList;
1298: }
1299: */
1300:
1301: ////////////////////////////////////////////////////////////////////////////
1302: ////////////////////////////////////////////////////////////////////////////
1303:
1304: /// <summary>
1305: ///
1306: /// </summary>
1307: public static Ia.Cl.Models.Result ResetOntInEventsWithClassOntAndCauseInactAndSeverityNotClInLast24HoursList()
1308: {
1309: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont ont;
1310: List<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont> ontResetSentList;
1311: Dictionary<string, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont> ontIdToOntDictionary;
1312:
1313: var result = new Ia.Cl.Models.Result();
1314:
1315: ontResetSentList = new List<Cl.Models.Business.NetworkDesignDocument.Ont>();
1316:
1317: var events = Ia.Ftn.Cl.Models.Data.Event.EventWithClassOntAndCauseInactAndLastRecordSeverityNotClAndOntAccessNotNullInLast24HoursList();
1318: ontIdToOntDictionary = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntIdToOntDictionary;
1319:
1320: if (events.Count > 0)
1321: {
1322: foreach (var @event in events)
1323: {
1324: if (ontIdToOntDictionary.ContainsKey(@event.Ont.Id))
1325: {
1326: ont = ontIdToOntDictionary[@event.Ont.Id];
1327:
1328: if (!eventDictionary.ContainsKey(ont))
1329: {
1330: eventDictionary[ont] = false;
1331: }
1332: }
1333: }
1334: }
1335: else
1336: {
1337:
1338: }
1339:
1340: foreach (KeyValuePair<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont, bool> kvp in eventDictionary)
1341: {
1342: if (!kvp.Value)
1343: {
1344: ams.SendQueue.Enqueue(Ia.Ftn.Cl.Models.Business.Nokia.Ams.ResetOntCommand(kvp.Key));
1345:
1346: if (result.IsSuccessful) ontResetSentList.Add(kvp.Key);
1347: }
1348: }
1349:
1350: return result;
1351: }
1352:
1353: ////////////////////////////////////////////////////////////////////////////
1354:
1355: /// <summary>
1356: /// Enqueue all ONTs within the eventDictionary to make sure we read their state after the reset
1357: /// </summary>
1358: public static void EnqueueOntWithinEventDictionary()
1359: {
1360: foreach (KeyValuePair<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont, bool> kvp in eventDictionary)
1361: {
1362: //if (!kvp.Value)
1363: //{
1364: // this will read all reset ONT all day until eventDictionary is cleared.
1365: // eventDictionary[kvp.Value] = true;
1366:
1367: Ia.Ftn.Cl.Models.Data.MessageQueue.SecretaryApplication.Enqueue(Ia.Ftn.Cl.Models.Business.MessageQueue.Application.AmsApplication, Ia.Ftn.Cl.Models.Business.MessageQueue.Process.ReadAccess, kvp.Key.Access.Name);
1368: //}
1369: }
1370:
1371: // reset events dictionary
1372: eventDictionary.Clear();
1373: }
1374:
1375: ////////////////////////////////////////////////////////////////////////////
1376:
1377: /// <summary>
1378: ///
1379: /// </summary>
1380: public static async Task<Ia.Cl.Models.Result> ManageMessageQueue()
1381: {
1382: var result = new Ia.Cl.Models.Result();
1383:
1384: var count = await Ia.Ftn.Cl.Models.Data.MessageQueue.AmsApplication.CountAsync;
1385:
1386: if (count > 0)
1387: {
1388: var message = await Ia.Ftn.Cl.Models.Data.MessageQueue.AmsApplication.DequeueAsync;
1389:
1390: if (message != null)
1391: {
1392: if (message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.ReadAccess)
1393: {
1394: SendQueueEnqueueReadOnt(message.AccessName, out result);
1395: }
1396: else if (message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.ResetAccess)
1397: {
1398: SendQueueEnqueueResetOnt(message.AccessName, out result);
1399: }
1400: else if (message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.CreateReadServiceAccessPort || message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.CreateReadNceOrAmsServiceAccessPort)
1401: {
1402: var service = message.Service;
1403: var accessName = message.AccessName;
1404: var port = (message.Port > 0) ? message.Port : Ia.Ftn.Cl.Models.Business.Default.PortUndefinedOrInvalidOrUnknown;
1405:
1406: var nddOnt = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntByAccessName(accessName);
1407:
1408: if (nddOnt != null)
1409: {
1410: if (nddOnt.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.Nokia)
1411: {
1412: //Ia.Ftn.Cl.Model.Business.Nokia.Nce.CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, accessName, port, out Ia.Cl.Models.Result createResult);
1413:
1414: //Ia.Ftn.Cl.Model.Business.Nokia.Nce.ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, accessName, port, out Ia.Cl.Models.Result readResult);
1415:
1416: result.AddSuccess("Create/Read: " + service + "|" + accessName + "|" + port + ": " + " Hu-No SIP undefined"); // createResult.Message + "," + readResult.Message);
1417:
1418: if (!priorityServiceList.Contains(service)) priorityServiceList.Add(service);
1419: }
1420: else result.AddError("Access vendor is not Nokia. Access name: " + accessName + ".");
1421: }
1422: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
1423: }
1424: else if (message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.DeleteReadServiceAccess || message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.DeleteReadNceOrAmsServiceAccessPort)
1425: {
1426: var service = message.Service;
1427: var accessName = message.AccessName;
1428: var port = (message.Port > 0) ? message.Port : Ia.Ftn.Cl.Models.Business.Default.PortUndefinedOrInvalidOrUnknown;
1429:
1430: var nddOnt = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntByAccessName(accessName);
1431:
1432: if (nddOnt != null)
1433: {
1434: if (nddOnt.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.Nokia)
1435: {
1436: //var vacatedAccessName = Ia.Ftn.Cl.Model.Business.Nokia.Nce.DeleteOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, accessName, port, out Ia.Cl.Models.Result deleteResult);
1437:
1438: //Ia.Ftn.Cl.Model.Business.Nokia.Nce.ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, vacatedAccessName, port, out Ia.Cl.Models.Result readResult);
1439:
1440: result.AddSuccess("Delete/Read: " + service + "|" + accessName + "|" + port + ": " + " Hu-No SIP undefined"); // + deleteResult.Message + "," + readResult.Message);
1441:
1442: if (!priorityServiceList.Contains(service)) priorityServiceList.Add(service);
1443: }
1444: else result.AddError("Access vendor is not Nokia. Access name: " + accessName + ".");
1445: }
1446: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
1447: }
1448: else if (message.Process == Ia.Ftn.Cl.Models.Business.MessageQueue.Process.ActiveApplicationRunningPermissionState)
1449: {
1450: Ia.Ftn.Cl.Models.Business.Default.PermitActiveApplicationsToRun = message.State;
1451:
1452: result.AddSuccess("PermitActiveApplicationsToRun: " + message.State);
1453: }
1454: else
1455: {
1456: throw new ArgumentOutOfRangeException("MessageQueue process " + message.Process.ToString() + " is undefined");
1457: }
1458:
1459: result.AddSuccess(message.AccessName);
1460: }
1461: else
1462: {
1463: }
1464: }
1465:
1466: return result;
1467: }
1468:
1469: ////////////////////////////////////////////////////////////////////////////
1470:
1471: /// <summary>
1472: ///
1473: /// </summary>
1474: public static string ManageProperly()
1475: {
1476: var command = Ia.Ftn.Cl.Models.Business.Nokia.Ams.ProperlySelectedSingleAmsCommandToManageOntVoipPotsNetworkElements();
1477:
1478: ams.SendQueue.Enqueue(command);
1479:
1480: return command;
1481: }
1482:
1483: ////////////////////////////////////////////////////////////////////////////
1484:
1485: /// <summary>
1486: ///
1487: /// </summary>
1488: public static void KeepAliveOltAmsNameListItem()
1489: {
1490: keepAliveCurrentAmsName = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.NokiaOltAmsNameList.NextOf(keepAliveCurrentAmsName);
1491:
1492: ams.SendQueue.Enqueue(Ia.Ftn.Cl.Models.Business.Nokia.Ams.AmsKeepAliveCommand(keepAliveCurrentAmsName));
1493:
1494: /*
1495: foreach (string amsName in Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.IsNrNokiaOltAmsNameList)
1496: {
1497: sendQueue.Enqueue(Ia.Ftn.Cl.Model.Business.Nokia.Ams.AmsKeepAliveCommand(amsName));
1498: }
1499: */
1500: }
1501:
1502: ////////////////////////////////////////////////////////////////////////////
1503: ////////////////////////////////////////////////////////////////////////////
1504:
1505: /// <summary>
1506: ///
1507: /// </summary>
1508: public static void SendQueueEnqueueReadOnt(string input, out Ia.Cl.Models.Result result)
1509: {
1510: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor accessVendor;
1511: List<string> amsCommandList;
1512:
1513: result = new Ia.Cl.Models.Result();
1514:
1515: if (!string.IsNullOrEmpty(input))
1516: {
1517: if (input.Length > 0)
1518: {
1519: input = input.Trim();
1520: input = input.ToUpper();
1521:
1522: if (Regex.IsMatch(input, @"^[a-zA-Z]{3}\s+\d{1,3}\s+\d{1,3}$") || Regex.IsMatch(input, @"^[a-zA-Z]{3}\.\d{1,3}\.\d{1,3}$") || Regex.IsMatch(input, @"^[a-zA-Z]{3}\/\d{1,3}\/\d{1,3}$"))
1523: {
1524: if (Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.AccessNameIsWithinAllowedOntList(input, out string accessName))
1525: {
1526: accessVendor = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.AccessVendorByAccessName(accessName);
1527:
1528: if (accessVendor == Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.Nokia)
1529: {
1530: amsCommandList = Ia.Ftn.Cl.Models.Business.Nokia.Ams.AmsCommandsToRetrieveOntVoipPotsForASingleOntWithDefinedFamilyTypeAndForItIfThisSingleOntDefinedInNddDocumentList(accessName);
1531:
1532: if (amsCommandList != null && amsCommandList.Count > 0)
1533: {
1534: if (Ia.Ftn.Cl.Models.Business.Nokia.Ams.IsConnected /*&& activated && !receivingData*/)
1535: {
1536: foreach (string s in amsCommandList)
1537: {
1538: //telnet.Send(s);
1539: ams.SendQueue.Enqueue(s);
1540: }
1541: }
1542:
1543: result.AddSuccess(accessName);
1544: }
1545: }
1546: else
1547: {
1548: result.AddError("SendQueueEnqueueReadOnt(): Error: access [" + accessName + "] is not a valid Nokia access ONT.");
1549: }
1550: }
1551: else
1552: {
1553: result.AddError("SendQueueEnqueueReadOnt(): Error: input AccessName [" + accessName + "] is not within allowed ONT list.");
1554: }
1555: }
1556: else
1557: {
1558: result.AddError("SendQueueEnqueueReadOnt(): Error: input: [" + input + "] is not a valid OntName or AccessName.");
1559: }
1560: }
1561: else
1562: {
1563: result.AddError("SendQueueEnqueueReadOnt(): Error: input is empty.");
1564: }
1565: }
1566: else
1567: {
1568: result.AddError("SendQueueEnqueueReadOnt(): Error: input is null or empty.");
1569: }
1570: }
1571:
1572: ////////////////////////////////////////////////////////////////////////////
1573:
1574: /// <summary>
1575: ///
1576: /// </summary>
1577: public static void SendQueueEnqueueResetOnt(string input, out Ia.Cl.Models.Result result)
1578: {
1579: string amsCommand;
1580: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor accessVendor;
1581: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt;
1582: //List<string> amsCommandList;
1583:
1584: result = new Ia.Cl.Models.Result();
1585:
1586: if (!string.IsNullOrEmpty(input))
1587: {
1588: if (input.Length > 0)
1589: {
1590: input = input.Trim();
1591: input = input.ToUpper();
1592:
1593: if (Regex.IsMatch(input, @"^[a-zA-Z]{3}\s+\d{1,3}\s+\d{1,3}$") || Regex.IsMatch(input, @"^[a-zA-Z]{3}\.\d{1,3}\.\d{1,3}$") || Regex.IsMatch(input, @"^[a-zA-Z]{3}\/\d{1,3}\/\d{1,3}$"))
1594: {
1595: if (Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.AccessNameIsWithinAllowedOntList(input, out string accessName))
1596: {
1597: accessVendor = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.AccessVendorByAccessName(accessName);
1598:
1599: nddOnt = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntByAccessName(accessName);
1600:
1601: if (accessVendor == Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.Nokia)
1602: {
1603: amsCommand = Ia.Ftn.Cl.Models.Business.Nokia.Ams.ResetOntCommand(nddOnt);
1604:
1605: if (!string.IsNullOrEmpty(amsCommand))
1606: {
1607: ams.SendQueue.Enqueue(amsCommand);
1608: result.AddSuccess(accessName);
1609: }
1610: }
1611: else
1612: {
1613: result.AddError("SendQueueEnqueueResetOnt(): Error: access [" + accessName + "] is not a valid Nokia access ONT.");
1614: }
1615: }
1616: else
1617: {
1618: result.AddError("SendQueueEnqueueResetOnt(): Error: input AccessName [" + accessName + "] is not within allowed ONT list.");
1619: }
1620: }
1621: else
1622: {
1623: result.AddError("SendQueueEnqueueResetOnt(): Error: input: [" + input + "] is not a valid OntName or AccessName.");
1624: }
1625: }
1626: else
1627: {
1628: result.AddError("SendQueueEnqueueResetOnt(): Error: input is empty.");
1629: }
1630: }
1631: else
1632: {
1633: result.AddError("SendQueueEnqueueResetOnt(): Error: input is null or empty.");
1634: }
1635: }
1636:
1637: ////////////////////////////////////////////////////////////////////////////
1638: ////////////////////////////////////////////////////////////////////////////
1639:
1640: /// <summary>
1641: ///
1642: /// </summary>
1643: private static List<string> PrepareCtaggedCommand(List<string> commandList)
1644: {
1645: List<string> ctaggedCommandList;
1646:
1647: if (commandList.Count > 0)
1648: {
1649: ctaggedCommandList = new List<string>(commandList.Count);
1650:
1651: foreach (string command in commandList)
1652: {
1653: ctaggedCommandList.Add(PrepareCtaggedCommand(command));
1654: }
1655: }
1656: else ctaggedCommandList = new List<string>();
1657:
1658: return ctaggedCommandList;
1659: }
1660:
1661: ////////////////////////////////////////////////////////////////////////////
1662:
1663: /// <summary>
1664: ///
1665: /// </summary>
1666: private static string PrepareCtaggedCommand(string command)
1667: {
1668: string ctaggedCommand, ctag;
1669:
1670: if (command.Contains("{ctag}"))
1671: {
1672: ctag = Ia.Cl.Models.Default.RandomNumber(6);
1673: // CTAG: The value of the CTAG is a non-zero integer of up to six characters.
1674: // CTAG comes before ; or ::
1675:
1676: Ia.Ftn.Cl.Models.Data.Nokia.Ams.CorrelationTagDictionary[ctag] = command;
1677:
1678: ctaggedCommand = command.Replace("{ctag}", ctag);
1679: }
1680: else
1681: {
1682: ctaggedCommand = string.Empty;
1683: }
1684:
1685: return ctaggedCommand;
1686: }
1687:
1688: ////////////////////////////////////////////////////////////////////////////
1689: ////////////////////////////////////////////////////////////////////////////
1690:
1691: /// <summary>
1692: ///
1693: /// </summary>
1694: public static string AmsKeepAliveCommand(string amsName)
1695: {
1696: return FormatAmsCommand(AmsOpcode.RtrvHdr, amsName);
1697: }
1698:
1699: ////////////////////////////////////////////////////////////////////////////
1700:
1701: /// <summary>
1702: ///
1703: /// </summary>
1704: public static string ResetOntCommand(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont ont)
1705: {
1706: return FormatAmsOntCommand(AmsOpcode.InitSys, ont);
1707: }
1708:
1709: ////////////////////////////////////////////////////////////////////////////
1710:
1711: /// <summary>
1712: ///
1713: /// </summary>
1714: public static string AmsCommandOfARandomAmsKeepAlive()
1715: {
1716: var amsName = (from o in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OltList
1717: where o.Odf.Vendor == Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.Nokia
1718: select o.AmsName).ToList().PickRandom();
1719:
1720: var command = FormatAmsCommand(AmsOpcode.RtrvHdr, amsName);
1721:
1722: return command;
1723: }
1724:
1725: ////////////////////////////////////////////////////////////////////////////
1726:
1727: /// <summary>
1728: ///
1729: /// </summary>
1730: public static void EnqueuePriorityAmsCommandQueue(string command)
1731: {
1732: priorityAmsCommandQueue.Enqueue(command);
1733: }
1734:
1735: ////////////////////////////////////////////////////////////////////////////
1736:
1737: /// <summary>
1738: ///
1739: /// </summary>
1740: public static void EnqueuePriorityAmsCommandQueue(List<string> amsCommandList)
1741: {
1742: if (amsCommandList != null && amsCommandList.Count > 0)
1743: {
1744: foreach (string s in amsCommandList) priorityAmsCommandQueue.Enqueue(s);
1745: }
1746: }
1747:
1748: ////////////////////////////////////////////////////////////////////////////
1749:
1750: /// <summary>
1751: ///
1752: /// </summary>
1753: public static string ProperlySelectedSingleAmsCommandToManageOntVoipPotsNetworkElements()
1754: {
1755: string command;
1756: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt;
1757: List<string> list;
1758:
1759: command = null;
1760:
1761: if (priorityAmsCommandQueue.Count > 0)
1762: {
1763: command = priorityAmsCommandQueue.Dequeue();
1764: }
1765: else
1766: {
1767: /*
1768: if (false && command == null && randomPercent < 60)
1769: {
1770: if (amsCreateOntCommandQueue.Count == 0)
1771: {
1772: olt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.NokiaOltList.Where(o => o.StateId == (int)Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.BellcoreState.IsNr).PickRandom();
1773:
1774: list = AmsCommandsToPreprovisionOntThatAreNotProvisionedAsDefinedInNddDocumentWithinAnOltList(olt, true, false, out count);
1775:
1776: amsCreateOntCommandQueue = new Queue<string>(list);
1777: }
1778:
1779: if (amsCreateOntCommandQueue.Count > 0) command = amsCreateOntCommandQueue.Dequeue();
1780: }
1781: */
1782:
1783: if (amsCommandQueue.Count == 0)
1784: {
1785: //olt = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.NokiaOltList.Where(o => o.StateId == (int)Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.BellcoreState.IsNr).PickRandom();
1786: olt = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.NokiaOltList.PickRandom();
1787:
1788: list = Ia.Ftn.Cl.Models.Business.Nokia.Ams.AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyType_AmsCommandsToRetrieveOntsDefinedInNddDocument_AmsCommandsToUpdateAndDisplayOntDescriptionWithItsAccessName_AmsCommandsToUpdateOntOntPotsCustomerWithItsConnectedServiceNumberList(olt);
1789:
1790: amsCommandQueue = new Queue<string>(list);
1791: }
1792:
1793: if (amsCommandQueue.Count > 0) command = amsCommandQueue.Dequeue();
1794:
1795: if (command == null) command = AmsCommandOfARandomAmsKeepAlive();
1796: }
1797:
1798: return command;
1799: }
1800:
1801: ////////////////////////////////////////////////////////////////////////////
1802:
1803: /// <summary>
1804: ///
1805: /// </summary>
1806: private static List<string> FormatAmsRtrvCommand(AmsOpcode amsOpcode, string position)
1807: {
1808: return FormatAmsRtrvCommand(amsOpcode, 0, position);
1809: }
1810:
1811: ////////////////////////////////////////////////////////////////////////////
1812:
1813: /// <summary>
1814: ///
1815: /// </summary>
1816: private static List<string> FormatAmsRtrvCommand(AmsOpcode amsOpcode, Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType, string position)
1817: {
1818: // Use this command with variable number of parameters
1819: string command, amsName;
1820: List<string> list;
1821:
1822: command = null;
1823:
1824: list = new List<string>(10);
1825:
1826: if (!string.IsNullOrEmpty(position))
1827: {
1828: AmsNameAndCardPortOntSquenceFromOntPosition(position, out amsName, out string pon);
1829:
1830: if (amsOpcode == AmsOpcode.RtrvOnt)
1831: {
1832: command = "RTRV-ONT:" + amsName + ":ONT-1-1-" + pon + ";";
1833: list.Add(command);
1834: }
1835: else if (amsOpcode == AmsOpcode.RtrvServiceVoip)
1836: {
1837: command = "RTRV-SERVICE-VOIP:" + amsName + ":VOIP-1-1-" + pon + "-1;";
1838: list.Add(command);
1839: }
1840: else if (amsOpcode == AmsOpcode.RtrvOntPots)
1841: {
1842: foreach (string ontPotsCardPort in Ia.Ftn.Cl.Models.Business.Nokia.Ont.PossiblePotsCardPortConfigurationForOntFamilyTypeList(familyType))
1843: {
1844: command = "RTRV-ONTPOTS:" + amsName + ":ONTPOTS-1-1-" + pon + "-" + ontPotsCardPort + ";";
1845: list.Add(command);
1846: }
1847: }
1848: }
1849:
1850: return list;
1851: }
1852:
1853: ////////////////////////////////////////////////////////////////////////////
1854:
1855: /// <summary>
1856: ///
1857: /// </summary>
1858: private static string FormatAmsOntCommand(AmsOpcode amsOpcode, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont ont)
1859: {
1860: string command;
1861:
1862: command = string.Empty;
1863:
1864: if (!string.IsNullOrEmpty(ont.Position))
1865: {
1866: AmsNameAndCardPortOntSquenceFromOntPosition(ont.Position, out string amsName, out string pon);
1867:
1868: if (amsOpcode == AmsOpcode.EdOntDesc1)
1869: {
1870: command = "ED-ONT:" + amsName + @":ONT-1-1-" + pon + "::::DESC1=" + ont.Access.Name + @":;";
1871: // ED-ONT:ESH-1-1:ONT-1-1-2-2-26::::DESC1=ESH.4.26:;
1872: }
1873: else if (amsOpcode == AmsOpcode.EdOntDesc1Annul)
1874: {
1875: //command = "ED-ONT:" + amsName + @":ONT-1-1-" + pon + "::::DESC1=:;"; // this has no effect on ONT DESC1
1876: // ED-ONT:ESH-1-1:ONT-1-1-2-2-26::::DESC1=:;
1877:
1878: command = "ED-ONT:" + amsName + @":ONT-1-1-" + pon + "::::DESC1=NULL:;"; // you must send NULL to change ONT DESC1
1879: // ED-ONT:ESH-1-1:ONT-1-1-2-2-26::::DESC1=NULL:;
1880: }
1881: else if (amsOpcode == AmsOpcode.InitSys)
1882: {
1883: command = "INIT-SYS:" + amsName + @":ONT-1-1-" + pon + ":::6;";
1884: // INIT-SYS:SHD-SUR-LAG17:ONT-1-1-1-1-1:::6;
1885: }
1886: }
1887:
1888: return command;
1889: }
1890:
1891: ////////////////////////////////////////////////////////////////////////////
1892:
1893: /// <summary>
1894: ///
1895: /// </summary>
1896: private static List<string> FormatAmsOntOntPotsCommandList(AmsOpcode amsOpcode, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont ont, Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType, string termination, string customerInformation)
1897: {
1898: string command;
1899: List<string> list;
1900:
1901: list = new List<string>(10);
1902:
1903: if (!string.IsNullOrEmpty(ont.Position))
1904: {
1905: AmsNameAndCardPortOntSquenceFromOntPosition(ont.Position, out string amsName, out string pon);
1906:
1907: termination = termination.Replace("td", "");
1908:
1909: if (int.TryParse(termination, out int td))
1910: {
1911: Ia.Ftn.Cl.Models.Business.Nokia.Ont.ReturnOntPotsCardAndPortFromFamilyTypeAndTd(familyType, td, out int card, out int port);
1912:
1913: if (amsOpcode == AmsOpcode.EdOntPotsCustinfo)
1914: {
1915: if (!string.IsNullOrEmpty(customerInformation))
1916: {
1917: command = "ED-ONTPOTS:" + amsName + @":ONTPOTS-1-1-" + pon + "-" + card + "-" + port + "::::CUSTINFO=" + customerInformation + @":;";
1918: // ED-ONTPOTS:ESH-1-1:ONTPOTS-1-1-1-1-1-2-1::::CUSTINFO=23632222:;\n";
1919: }
1920: else
1921: {
1922: command = "ED-ONTPOTS:" + amsName + @":ONTPOTS-1-1-" + pon + "-" + card + "-" + port + "::::CUSTINFO=NULL:;";
1923: // ED-ONTPOTS:ESH-1-1:ONTPOTS-1-1-1-1-1-2-1::::CUSTINFO=NULL:;\n";
1924: }
1925:
1926: list.Add(command);
1927: }
1928: }
1929: }
1930:
1931: return list;
1932: }
1933:
1934: ////////////////////////////////////////////////////////////////////////////
1935:
1936: /// <summary>
1937: ///
1938: /// </summary>
1939: private static string FormatAmsCommand(AmsOpcode amsOpcode, string amsName)
1940: {
1941: string command;
1942:
1943: if (amsOpcode == AmsOpcode.RtrvAlmPon)
1944: {
1945: command = "RTRV-ALM-PON:" + amsName + ":ALL:::MN,,NSA;";
1946:
1947: }
1948: else if (amsOpcode == AmsOpcode.RtrvHdr)
1949: {
1950: command = "RTRV-HDR:" + amsName + ":;";
1951: }
1952: else command = null;
1953:
1954: return command;
1955: }
1956:
1957: ////////////////////////////////////////////////////////////////////////////
1958:
1959: /// <summary>
1960: ///
1961: /// </summary>
1962: private static void AmsNameAndCardPortOntSquenceFromOntServiceHsiPosition(string ontPosition, out string amsName, out string cardPortOntCardPortServiceSequence)
1963: {
1964: Match match;
1965:
1966: // SUR-1-1-1-1-1-1-1-1;
1967: match = Regex.Match(ontPosition, @"([a-zA-Z]{3}\-\d{1,2}\-\d{1,2})\-(\d{1,2}\-\d{1,2}\-\d{1,2}\-\d{1,2}\-\d{1,2}\-\d{1,2})");
1968:
1969: amsName = match.Groups[1].Value;
1970: cardPortOntCardPortServiceSequence = match.Groups[2].Value;
1971: }
1972:
1973: ////////////////////////////////////////////////////////////////////////////
1974:
1975: /// <summary>
1976: ///
1977: /// </summary>
1978: private static void AmsNameAndCardPortOntSquenceFromOntPosition(string ontPosition, out string amsName, out string pon)
1979: {
1980: Match match;
1981:
1982: if (!string.IsNullOrEmpty(ontPosition))
1983: {
1984: // SBN-ARD-Lag1-1-1-1;
1985: match = Regex.Match(ontPosition, @"^([\w\d\-]+)\-(\d{1,2}\-\d{1,2}\-\d{1,2})$");
1986:
1987: if (match.Success)
1988: {
1989: amsName = match.Groups[1].Value;
1990: pon = match.Groups[2].Value;
1991: }
1992: else
1993: {
1994: amsName = string.Empty;
1995: pon = string.Empty;
1996: }
1997: }
1998: else
1999: {
2000: amsName = string.Empty;
2001: pon = string.Empty;
2002: }
2003: }
2004:
2005: ////////////////////////////////////////////////////////////////////////////
2006:
2007: /// <summary>
2008: /// Extract OLT Id, Card, Port, and ONT from ONT Position
2009: /// </summary>
2010: [Obsolete]
2011: public static void OltIdCardPortOntFromOntPosition(string ontPosition, out int oltId, out int card, out int port, out int ont)
2012: {
2013: string amsName;
2014: Match match;
2015:
2016: if (!string.IsNullOrEmpty(ontPosition))
2017: {
2018: // SBN-ARD-Lag1-1-1-1;
2019: match = Regex.Match(ontPosition, @"^([\w\d\-]+)\-(\d{1,2})\-(\d{1,2})\-(\d{1,2})$");
2020:
2021: if (match.Success)
2022: {
2023: amsName = match.Groups[1].Value;
2024: card = int.Parse(match.Groups[2].Value);
2025: port = int.Parse(match.Groups[3].Value);
2026: ont = int.Parse(match.Groups[4].Value);
2027:
2028: oltId = (from o in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OltList
2029: where o.AmsName == amsName
2030: select o.Id).FirstOrDefault();
2031: }
2032: else
2033: {
2034: amsName = string.Empty;
2035: card = port = ont = 0;
2036:
2037: oltId = 0;
2038: }
2039: }
2040: else
2041: {
2042: amsName = string.Empty;
2043: card = port = ont = 0;
2044:
2045: oltId = 0;
2046: }
2047: }
2048:
2049: ////////////////////////////////////////////////////////////////////////////
2050:
2051: /// <summary>
2052: ///
2053: /// </summary>
2054: public static string OntPositionFromAmsNameAndCardPortOntSquence(string amsName, string cardPortOnt)
2055: {
2056: string ontPosition;
2057:
2058: ontPosition = amsName + "-" + cardPortOnt;
2059:
2060: return ontPosition;
2061: }
2062:
2063: ////////////////////////////////////////////////////////////////////////////
2064:
2065: /// <summary>
2066: ///
2067: /// </summary>
2068: public static List<string> AmsCommandsToUpdateOntDescriptionWithItsAccessNameList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt)
2069: {
2070: string accessName, ontId, ontDescription1;
2071: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt;
2072: List<string> list;
2073:
2074: var ontIdToOntAccessNameDictionary = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntIdToOntAccessNameDictionary;
2075:
2076: var ontIdToDescription1ForNonNullAccessDictionary = Ia.Ftn.Cl.Models.Data.Nokia.Ont.IdToDescription1ForNonNullAccessDictionary;
2077:
2078: var ontIdToDescription1ForNullAccessDictionary = Ia.Ftn.Cl.Models.Data.Nokia.Ont.IdToDescription1ForNullAccessDictionary;
2079:
2080: //var ontIdWithNullAccessHashtable = Ia.Ftn.Cl.Model.Data.Nokia.Ont.IdWithNullAccessHashtable;
2081:
2082: var ontIdToOntDictionary = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntIdToOntDictionary;
2083:
2084: list = new List<string>();
2085:
2086: // insert descriptions for missing entries
2087: if (ontIdToDescription1ForNonNullAccessDictionary.Count > 0)
2088: {
2089: foreach (KeyValuePair<string, string> kvp in ontIdToDescription1ForNonNullAccessDictionary) //Ia.Ftn.Cl.Model.Ont ont in ontList)
2090: {
2091: ontId = kvp.Key;
2092: ontDescription1 = kvp.Value;
2093:
2094: if (ontIdToOntAccessNameDictionary.ContainsKey(ontId))
2095: {
2096: accessName = ontIdToOntAccessNameDictionary[ontId];
2097:
2098: if (ontDescription1 != accessName)
2099: {
2100: nddOnt = ontIdToOntDictionary[ontId];
2101:
2102: if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
2103: {
2104: list.Add(Ia.Ftn.Cl.Models.Business.Nokia.Ams.FormatAmsOntCommand(AmsOpcode.EdOntDesc1, nddOnt));
2105: }
2106: }
2107: else
2108: {
2109: }
2110: }
2111: }
2112: }
2113:
2114: // delete descriptions ONTs with missing access info
2115: if (ontIdToDescription1ForNullAccessDictionary.Count > 0)
2116: {
2117: foreach (KeyValuePair<string, string> kvp in ontIdToDescription1ForNullAccessDictionary)
2118: {
2119: ontId = kvp.Key;
2120: ontDescription1 = kvp.Value;
2121:
2122: if (!string.IsNullOrEmpty(ontDescription1))
2123: {
2124: if (ontIdToOntDictionary.ContainsKey(ontId))
2125: {
2126: nddOnt = ontIdToOntDictionary[ontId];
2127:
2128: if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
2129: {
2130: list.Add(Ia.Ftn.Cl.Models.Business.Nokia.Ams.FormatAmsOntCommand(AmsOpcode.EdOntDesc1Annul, nddOnt));
2131: }
2132: }
2133: }
2134: }
2135: }
2136:
2137: return list.ToList();
2138: }
2139:
2140: ////////////////////////////////////////////////////////////////////////////
2141:
2142: /// <summary>
2143: ///
2144: /// </summary>
2145: public static List<string> AmsCommandsToUpdateCustInfoWithServiceNumberInOntOntPotsList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt)
2146: {
2147: List<string> list;
2148: Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType;
2149: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt;
2150:
2151: var ontIdToOntDictionary = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntIdToOntDictionary;
2152:
2153: var ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList = Ia.Ftn.Cl.Models.Data.Nokia.Ams.OntOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList();
2154:
2155: list = new List<string>(ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList.Count);
2156:
2157: // insert descriptions for missing entries
2158: if (ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList.Count > 0)
2159: {
2160: foreach (var ontOntPotsService in ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList)
2161: {
2162: if (ontIdToOntDictionary.ContainsKey(ontOntPotsService.OntId))
2163: {
2164: nddOnt = ontIdToOntDictionary[ontOntPotsService.OntId];
2165:
2166: if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
2167: {
2168: familyType = (Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType)ontOntPotsService.OntFamilyTypeId;
2169:
2170: list.AddRange(Ia.Ftn.Cl.Models.Business.Nokia.Ams.FormatAmsOntOntPotsCommandList(AmsOpcode.EdOntPotsCustinfo, nddOnt, familyType, ontOntPotsService.Termination, ontOntPotsService.Service));
2171: }
2172: }
2173: }
2174: }
2175:
2176: var ontOntPotsCustomerExistsButSubPartyIsNullServiceList = Ia.Ftn.Cl.Models.Data.Nokia.Ams.OntOntPotsCustomerExistsButSubPartyIsNullServiceList();
2177:
2178: // delete descriptions of non existant entries
2179: if (ontOntPotsCustomerExistsButSubPartyIsNullServiceList.Count > 0)
2180: {
2181: foreach (var oops in ontOntPotsCustomerExistsButSubPartyIsNullServiceList)
2182: {
2183: if (ontIdToOntDictionary.ContainsKey(oops.OntId))
2184: {
2185: nddOnt = ontIdToOntDictionary[oops.OntId];
2186:
2187: if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
2188: {
2189: list.Add(Ia.Ftn.Cl.Models.Business.Nokia.Ams.FormatAmsOntCommand(AmsOpcode.EdOntDesc1Annul, nddOnt));
2190: }
2191: }
2192: }
2193: }
2194:
2195: return list;
2196: }
2197:
2198: ////////////////////////////////////////////////////////////////////////////
2199:
2200: /// <summary>
2201: ///
2202: /// </summary>
2203: public static List<string> AmsCommandsToPreprovisionAllOntsAsDefinedInNddDocumentWithinOltList(int oltId, bool edServiceVoipIsOos, out int count)
2204: {
2205: List<string> l, list;
2206: List<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont> nddOntList;
2207:
2208: count = 0;
2209: list = null;
2210:
2211: nddOntList = (from o in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntList where o.Pon.PonGroup.Olt.Id == oltId select o).ToList();
2212:
2213: if (nddOntList != null && nddOntList.Count > 0)
2214: {
2215: list = new List<string>(nddOntList.Count);
2216:
2217: foreach (Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt in nddOntList)
2218: {
2219: l = Ia.Ftn.Cl.Models.Business.Nokia.Ams.CommandsToPreprovisionOntWithinOlt(nddOnt, edServiceVoipIsOos);
2220:
2221: list.AddRange(l);
2222: count++;
2223: }
2224: }
2225: else
2226: {
2227: }
2228:
2229: return list;
2230: }
2231:
2232: ////////////////////////////////////////////////////////////////////////////
2233:
2234: /// <summary>
2235: ///
2236: /// </summary>
2237: public static List<string> AmsCommandsToPreprovisionOntThatAreNotProvisionedAsDefinedInNddDocumentWithinAnOltList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt, bool includeDisplayCommand, bool edServiceVoipIsOos, out int count)
2238: {
2239: List<string> l, list;
2240: List<string> ontIdList;
2241: List<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont> nddOntList;
2242:
2243: count = 0;
2244: list = null;
2245:
2246: using (var db = new Ia.Ftn.Cl.Db())
2247: {
2248: nddOntList = (from o in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntList where o.Pon.PonGroup.Olt.Id == olt.Id select o).ToList();
2249:
2250: ontIdList = Ia.Ftn.Cl.Models.Data.Nokia.Ont.IdList(olt.Id); //.ReadListByOltId(olt.Id);
2251:
2252: if (nddOntList != null && nddOntList.Count > 0)
2253: {
2254: list = new List<string>(nddOntList.Count);
2255:
2256: foreach (Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt in nddOntList)
2257: {
2258: if (!ontIdList.Contains(nddOnt.Id))
2259: {
2260: l = Ia.Ftn.Cl.Models.Business.Nokia.Ams.CommandsToPreprovisionOntWithinOlt(nddOnt, edServiceVoipIsOos);
2261: list.AddRange(l);
2262:
2263: if (includeDisplayCommand)
2264: {
2265: l = Ia.Ftn.Cl.Models.Business.Nokia.Ams.AmsCommandsToRetrieveOntVoipPotsForSingleOntsWithDefinedFamilyTypeList(nddOnt.Access.Name);
2266: list.AddRange(l);
2267: }
2268:
2269: count++;
2270: }
2271: }
2272: }
2273: }
2274:
2275: return list;
2276: }
2277:
2278: ////////////////////////////////////////////////////////////////////////////
2279:
2280: /// <summary>
2281: ///
2282: /// </summary>
2283: public static List<string> AmsCommandsToRetrieveOntVoipPotsForASingleOntWithDefinedFamilyTypeAndForItIfThisSingleOntDefinedInNddDocumentList(string accessName)
2284: {
2285: //Random r;
2286: List<string> l1, l2, list;
2287:
2288: //r = new Random();
2289:
2290: l1 = AmsCommandToRetrieveSingleOntDefinedInNddDocumentList(accessName);
2291:
2292: l2 = AmsCommandsToRetrieveOntVoipPotsForSingleOntsWithDefinedFamilyTypeList(accessName);
2293:
2294: list = new List<string>(l1.Count + l2.Count);
2295:
2296: foreach (var item in l1) list.Add(item);
2297: foreach (var item in l2) list.Add(item);
2298:
2299: return list.Distinct().ToList();
2300: }
2301:
2302: ////////////////////////////////////////////////////////////////////////////
2303:
2304: /// <summary>
2305: ///
2306: /// </summary>
2307: public static List<string> AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeAndForOtherOntsDefinedInNddDocumentList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt)
2308: {
2309: List<string> l1, l2, list;
2310:
2311: l1 = AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeList(olt);
2312:
2313: l2 = AmsCommandsToRetrieveOntsDefinedInNddDocumentList(olt);
2314:
2315: list = new List<string>(l1.Count + l2.Count);
2316:
2317: foreach (var item in l1) list.Add(item);
2318: foreach (var item in l2) list.Add(item);
2319:
2320: return list.Distinct().Shuffle().ToList();
2321: }
2322:
2323: ////////////////////////////////////////////////////////////////////////////
2324:
2325: /// <summary>
2326: ///
2327: /// </summary>
2328: public static List<string> AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyType_AmsCommandsToRetrieveOntsDefinedInNddDocument_AmsCommandsToUpdateAndDisplayOntDescriptionWithItsAccessName_AmsCommandsToUpdateOntOntPotsCustomerWithItsConnectedServiceNumberList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt)
2329: {
2330: HashSet<string> hashSet1, hashSet2, hashSet3, hashSet4, hashSet;
2331:
2332: hashSet1 = new HashSet<string>(AmsCommandsToUpdateOntDescriptionWithItsAccessNameList(olt));
2333:
2334: hashSet2 = new HashSet<string>(AmsCommandsToUpdateCustInfoWithServiceNumberInOntOntPotsList(olt));
2335:
2336: hashSet3 = new HashSet<string>(AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeList(olt));
2337:
2338: hashSet4 = new HashSet<string>(AmsCommandsToRetrieveOntsDefinedInNddDocumentList(olt));
2339:
2340: hashSet = new HashSet<string>(hashSet1);
2341: hashSet.UnionWith(hashSet2);
2342: hashSet.UnionWith(hashSet3);
2343: hashSet.UnionWith(hashSet4);
2344:
2345: return hashSet.ToList(); //.Shuffle().ToList();
2346: }
2347:
2348: ////////////////////////////////////////////////////////////////////////////
2349:
2350: /// <summary>
2351: ///
2352: /// </summary>
2353: private static List<string> AmsCommandToRetrieveSingleOntDefinedInNddDocumentList(string accessName)
2354: {
2355: List<string> list;
2356: Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType;
2357: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt;
2358:
2359: list = new List<string>(5); // 5 is max number of commands from this function
2360:
2361: if (!string.IsNullOrEmpty(accessName))
2362: {
2363: nddOnt = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntByAccessName(accessName);
2364:
2365: if (nddOnt != null)
2366: {
2367: familyType = Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Sfu;
2368:
2369: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, nddOnt.Position));
2370: }
2371: }
2372:
2373: return list;
2374: }
2375:
2376: ////////////////////////////////////////////////////////////////////////////
2377:
2378: /// <summary>
2379: ///
2380: /// </summary>
2381: private static List<string> AmsCommandsToRetrieveOntsDefinedInNddDocumentList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt)
2382: {
2383: Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType;
2384: List<string> list;
2385: List<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont> ontList;
2386:
2387: ontList = (from o in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntList where o.Pon.PonGroup.Olt.Id == olt.Id select o).ToList();
2388:
2389: familyType = Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Sfu;
2390:
2391: list = new List<string>(ontList.Count);
2392:
2393: foreach (Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont ont in ontList)
2394: {
2395: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, ont.Position));
2396: }
2397:
2398: return list;
2399: }
2400:
2401: ////////////////////////////////////////////////////////////////////////////
2402:
2403: /// <summary>
2404: ///
2405: /// </summary>
2406: private static List<string> AmsCommandsToRetrieveOntVoipPotsForSingleOntsWithDefinedFamilyTypeList(string accessName)
2407: {
2408: List<string> list;
2409: Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType;
2410: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt;
2411: Ia.Ftn.Cl.Models.Ont ont;
2412:
2413: list = new List<string>(5); // 5 is max number of commands from this function
2414:
2415: if (!string.IsNullOrEmpty(accessName))
2416: {
2417: nddOnt = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntByAccessName(accessName);
2418:
2419: if (nddOnt != null)
2420: {
2421: ont = Ia.Ftn.Cl.Models.Data.Nokia.Ont.Read(nddOnt.Id);
2422:
2423: if (ont != null)
2424: {
2425: familyType = (Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType)ont.FamilyTypeId;
2426:
2427: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, nddOnt.Position));
2428: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvServiceVoip, familyType, nddOnt.Position));
2429: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOntPots, familyType, nddOnt.Position));
2430: }
2431: }
2432: }
2433:
2434: return list;
2435: }
2436:
2437: ////////////////////////////////////////////////////////////////////////////
2438:
2439: /// <summary>
2440: ///
2441: /// </summary>
2442: private static List<string> AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeList(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt)
2443: {
2444: Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType familyType;
2445: Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt;
2446: List<string> list;
2447: Dictionary<string, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont> ontIdToOntDictionary;
2448: List<Ia.Ftn.Cl.Models.Ont> ontList;
2449:
2450: ontList = Ia.Ftn.Cl.Models.Data.Nokia.Ont.NonNullAccessList(olt.Id);
2451:
2452: ontIdToOntDictionary = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntIdToOntDictionary;
2453:
2454: list = new List<string>(ontList.Count);
2455:
2456: foreach (Ia.Ftn.Cl.Models.Ont ont in ontList)
2457: {
2458: familyType = (Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType)ont.FamilyTypeId;
2459:
2460: if (ontIdToOntDictionary.ContainsKey(ont.Id))
2461: {
2462: nddOnt = ontIdToOntDictionary[ont.Id];
2463:
2464: //if (ont.Access != null) access is already non null
2465: //{
2466: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, nddOnt.Position));
2467: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvServiceVoip, familyType, nddOnt.Position));
2468: list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOntPots, familyType, nddOnt.Position));
2469: //}
2470: }
2471: }
2472:
2473: return list;
2474: }
2475:
2476: ////////////////////////////////////////////////////////////////////////////
2477:
2478: /// <summary>
2479: ///
2480: /// </summary>
2481: public static ArrayList AmsCommandsToRetrieveNewOntAlarmsForOltArrayList()
2482: {
2483: ArrayList amsCommandArrayList;
2484:
2485: amsCommandArrayList = new ArrayList(Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OltList.Count);
2486:
2487: foreach (var olt in Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OltList)
2488: {
2489: amsCommandArrayList.Add(FormatAmsCommand(AmsOpcode.RtrvAlmPon, olt.AmsName));
2490: }
2491:
2492: return amsCommandArrayList;
2493: }
2494:
2495: ////////////////////////////////////////////////////////////////////////////
2496:
2497: /// <summary>
2498: ///
2499: /// </summary>
2500: public static ArrayList AmsCommandsToUpdateOntServiceDescriptionWithItsIspNameArrayList()
2501: {
2502: ArrayList amsCommandArrayList;
2503:
2504: amsCommandArrayList = new ArrayList(100);
2505:
2506: return amsCommandArrayList;
2507: }
2508:
2509: /*
2510: ////////////////////////////////////////////////////////////////////////////
2511:
2512: /// <summary>
2513: ///
2514: /// </summary>
2515: public static int PositionOfHsiServiceForCardAndPortAndOntFamilyType(int card, int port, Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType familyType)
2516: {
2517: int position;
2518:
2519: if (familyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Sfu || familyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Gfu || familyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Soho)
2520: {
2521: position = port;
2522: }
2523: else if (familyType == Ia.Ftn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
2524: {
2525: position = (card - 1) * 4 + port;
2526: }
2527: else position = 0;
2528:
2529: return position;
2530: }
2531: */
2532:
2533: ////////////////////////////////////////////////////////////////////////////
2534:
2535: /// <summary>
2536: ///
2537: /// </summary>
2538: public static bool UpdateDatabaseWithAmsCommandOutput(string rowData, out Ia.Cl.Models.Result result)
2539: {
2540: bool isUpdated;
2541: int readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
2542: string accessId, ontId, ontPosition;
2543: string line, amsName, cardPortOnt;
2544: DateTime eventTime;
2545: Match match;
2546: MatchCollection matchCollection;
2547: Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState state;
2548:
2549: //ponNameToPonIdHashtable = Ia.Ftn.Cl.Model.Data.NetworkDesignDocument.PonNameToPonIdHashtable;
2550:
2551: isUpdated = false;
2552: readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
2553: result = new Ia.Cl.Models.Result();
2554: //result.Content = rowData;
2555:
2556: // below: remove all '\' characters from rowData and reset NULL comments to ""
2557: rowData = rowData.Replace(@"\", "");
2558: rowData = rowData.Replace(@"NULL", "");
2559:
2560: if (rowData.Contains("RTRV-ONT:"))
2561: {
2562: #region RTRV-ONT
2563: Ia.Ftn.Cl.Models.Ont ont, dataOnt;
2564:
2565: /*
2566: SUR-1-1 08-07-10 09:35:07
2567: M 0 COMPLD
2568: / * RTRV-ONT:SUR-1-1:ONT-1-1-1-1-1&ONT-1-1-1-1-10&ONT-1-1-1-1-2&ONT-1-1-1 * /
2569: / * -1-3&ONT-1-1-1-1-4&ONT-1-1-1-1-5&ONT-1-1-1-1-6&ONT-1-1-1-1-7&ONT-1-1- * /
2570: / * 1-1-8&ONT-1-1-1-1-9 * /
2571: "ONT-1-1-1-1-1::BTRYBKUP=NO,BERINT=8000,DESC1="SLA.1.1",
2572: DESC2="all is well",PROVVERSION="*",SERNUM=ALCLA0A1A5F8,
2573: SUBSLOCID="WILDCARD",SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,
2574: SCHEDPROFID=1,SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,
2575: POWERSHEDPROFNM="NULL",ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,
2576: SWVERACT=3FE50853AFMA07,SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,
2577: EQUIPID=BVM3G00CRAO420EB ,NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:
2578: IS-NR"
2579: "ONT-1-1-1-1-10::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2580: PROVVERSION="*",SERNUM=ALCLA0A1A479,SUBSLOCID="WILDCARD",
2581: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2582: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2583: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
2584: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2585: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2586: "ONT-1-1-1-1-2::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2587: PROVVERSION="*",SERNUM=ALCLA0A261BB,SUBSLOCID="WILDCARD",
2588: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2589: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2590: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
2591: SWVERPSV=3FE50853AAAA22,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2592: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2593: */
2594:
2595: // below: information from the definition of "RTRV-ONT" in "AMS TL1 Commands Reference"
2596:
2597: /*
2598: IP 0
2599: <
2600:
2601: SUR-1-1 08-07-10 09:35:07
2602: M 0 COMPLD
2603: / * RTRV-ONT:SUR-1-1:ONT-1-1-1-1-1&ONT-1-1-1-1-10&ONT-1-1-1-1-2&ONT-1-1-1 * /
2604: / * -1-3&ONT-1-1-1-1-4&ONT-1-1-1-1-5&ONT-1-1-1-1-6&ONT-1-1-1-1-7&ONT-1-1- * /
2605: / * 1-1-8&ONT-1-1-1-1-9 * /
2606: "ONT-1-1-1-1-1::BTRYBKUP=NO,BERINT=8000,DESC1="SLA.1.1",
2607: DESC2="all is well",PROVVERSION="*",SERNUM=ALCLA0A1A5F8,
2608: SUBSLOCID="WILDCARD",SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,
2609: SCHEDPROFID=1,SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,
2610: POWERSHEDPROFNM="NULL",ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,
2611: SWVERACT=3FE50853AFMA07,SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,
2612: EQUIPID=BVM3G00CRAO420EB ,NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:
2613: IS-NR"
2614: "ONT-1-1-1-1-10::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2615: PROVVERSION="*",SERNUM=ALCLA0A1A479,SUBSLOCID="WILDCARD",
2616: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2617: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2618: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
2619: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2620: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2621: "ONT-1-1-1-1-2::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2622: PROVVERSION="*",SERNUM=ALCLA0A261BB,SUBSLOCID="WILDCARD",
2623: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2624: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2625: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
2626: SWVERPSV=3FE50853AAAA22,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2627: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2628:
2629: / * More Output Follows * /
2630: >
2631:
2632: SUR-1-1 08-07-10 09:35:07
2633: M 0 COMPLD
2634: / * RTRV-ONT:SUR-1-1:ONT-1-1-1-1-1&ONT-1-1-1-1-10&ONT-1-1-1-1-2&ONT-1-1-1-1-3&ONT-1-1-1-1-4&ONT-1-1-1-1-5&ONT-1-1-1-1-6&ONT-1-1-1-1-7&ONT-1-1-1-1-8&ONT-1-1-1-1-9 * /
2635: "ONT-1-1-1-1-3::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2636: PROVVERSION="*",SERNUM=ALCLA0A1C9BC,SUBSLOCID="WILDCARD",
2637: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2638: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2639: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
2640: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2641: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2642: "ONT-1-1-1-1-4::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2643: PROVVERSION="*",SERNUM=ALCLA0A1A47A,SUBSLOCID="WILDCARD",
2644: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2645: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2646: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
2647: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2648: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2649: "ONT-1-1-1-1-5::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2650: PROVVERSION="*",SERNUM=ALCLA0A1AE44,SUBSLOCID="WILDCARD",
2651: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2652: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2653: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
2654: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2655: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2656:
2657: / * More Output Follows * /
2658: >
2659:
2660: SUR-1-1 08-07-10 09:35:08
2661: M 0 COMPLD
2662: / * RTRV-ONT:SUR-1-1:ONT-1-1-1-1-1&ONT-1-1-1-1-10&ONT-1-1-1-1-2&ONT-1-1-1-1-3&ONT-1-1-1-1-4&ONT-1-1-1-1-5&ONT-1-1-1-1-6&ONT-1-1-1-1-7&ONT-1-1-1-1-8&ONT-1-1-1-1-9 * /
2663: "ONT-1-1-1-1-6::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2664: PROVVERSION="*",SERNUM=ALCLA0A1BE26,SUBSLOCID="WILDCARD",
2665: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2666: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2667: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
2668: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2669: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2670: "ONT-1-1-1-1-7::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2671: PROVVERSION="*",SERNUM=ALCLA0A1C94B,SUBSLOCID="WILDCARD",
2672: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2673: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2674: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
2675: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2676: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2677: "ONT-1-1-1-1-8::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2678: PROVVERSION="*",SERNUM=ALCLA0A1A484,SUBSLOCID="WILDCARD",
2679: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2680: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2681: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
2682: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2683: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2684:
2685: / * More Output Follows * /
2686: >
2687:
2688: SUR-1-1 08-07-10 09:35:08
2689: M 0 COMPLD
2690: / * RTRV-ONT:SUR-1-1:ONT-1-1-1-1-1&ONT-1-1-1-1-10&ONT-1-1-1-1-2&ONT-1-1-1-1-3&ONT-1-1-1-1-4&ONT-1-1-1-1-5&ONT-1-1-1-1-6&ONT-1-1-1-1-7&ONT-1-1-1-1-8&ONT-1-1-1-1-9 * /
2691: "ONT-1-1-1-1-9::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
2692: PROVVERSION="*",SERNUM=ALCLA0A1A43E,SUBSLOCID="WILDCARD",
2693: SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
2694: SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
2695: ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
2696: SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
2697: NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
2698: ;
2699: */
2700:
2701: // below: read OntPosition
2702: match = Regex.Match(rowData, @"RTRV-ONT:([\w\d\-]+)", RegexOptions.Singleline);
2703:
2704: amsName = match.Groups[1].Value;
2705:
2706: match = Regex.Match(rowData, @"ONT-1-1-(\d{1,2}-\d{1,2}-\d{1,2})::(.+?):\s*(IS-NR|OOS-AU|OOS-MA|OOS-AUMA)", RegexOptions.Singleline);
2707:
2708: if (match.Success)
2709: {
2710: cardPortOnt = match.Groups[1].Value;
2711:
2712: line = match.Groups[2].Value;
2713:
2714: ontId = Ia.Ftn.Cl.Models.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
2715:
2716: if (!string.IsNullOrEmpty(ontId))
2717: {
2718: dataOnt = new Ia.Ftn.Cl.Models.Ont();
2719:
2720: dataOnt.Id = ontId;
2721: dataOnt.BatteryBackupAvailable = (Ia.Cl.Models.Default.Match(line, @"BTRYBKUP=(\w+)") == "YES") ? true : false;
2722: dataOnt.Description1 = Ia.Cl.Models.Default.Match(line, @"DESC1=""([^""]{1,64})""");
2723: dataOnt.Description2 = Ia.Cl.Models.Default.Match(line, @"DESC2=""([^""]{1,64})""");
2724: dataOnt.Serial = Ia.Cl.Models.Default.Match(line, @"SERNUM=(\w{12})");
2725: dataOnt.PlannedSoftware = Ia.Cl.Models.Default.Match(line, @"SWVERPLND=""(auto|AUTO|\w{14})""");
2726: dataOnt.ActiveSoftware = Ia.Cl.Models.Default.Match(line, @"SWVERACT=(\w{14})");
2727: dataOnt.PassiveSoftware = Ia.Cl.Models.Default.Match(line, @"SWVERPSV=(\w{14})");
2728: dataOnt.FamilyTypeId = (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyTypeIdFromActiveSoftwareAndPlannedSoftware(dataOnt.ActiveSoftware, dataOnt.PlannedSoftware);
2729: dataOnt.VendorId = Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Vendor.VendorIdFromName(Ia.Cl.Models.Default.Match(line, @"VENDORID=(\w+)"));
2730: dataOnt.EquipmentId = Ia.Cl.Models.Default.Match(line, @"EQUIPID=(\w{16})");
2731:
2732: switch (match.Groups[3].Value)
2733: {
2734: case "IS-NR": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.IsNr; break;
2735: case "OOS-AU": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosAu; break;
2736: case "OOS-MA": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosMa; break;
2737: case "OOS-AUMA": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosAuma; break;
2738: default: state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.Undefined; break;
2739: }
2740:
2741: dataOnt.StateId = (int)state;
2742:
2743: using (var db = new Ia.Ftn.Cl.Db())
2744: {
2745: accessId = Ia.Ftn.Cl.Models.Business.Access.AccessId(ontId);
2746:
2747: if (accessId != null) dataOnt.Access = (from a in db.Accesses where a.Id == accessId select a).SingleOrDefault();
2748:
2749: ont = (from o in db.Onts where o.Id == dataOnt.Id select o).SingleOrDefault();
2750:
2751: if (ont == null)
2752: {
2753: dataOnt.Created = dataOnt.Updated = DateTime.UtcNow.AddHours(3);
2754:
2755: db.Onts.Add(dataOnt);
2756:
2757: insertedItemCount++;
2758: }
2759: else
2760: {
2761: existingItemCount++;
2762:
2763: if (ont.Update(dataOnt))
2764: {
2765: db.Onts.Attach(ont);
2766: db.Entry(ont).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
2767:
2768: updatedItemCount++;
2769: }
2770: }
2771:
2772: db.SaveChanges();
2773: }
2774: }
2775: else
2776: {
2777: result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
2778: }
2779: }
2780: else
2781: {
2782: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
2783: }
2784: #endregion
2785: }
2786: else if (rowData.Contains("ED-ONT:"))
2787: {
2788: #region ED-ONT
2789: Ia.Ftn.Cl.Models.Ont ont, dataOnt;
2790:
2791: /*
2792: SUR-5-2 14-11-23 05:22:08
2793: M 0 COMPLD
2794: / * ED-ONT:SUR-5-2:ONT-1-1-1-2-6::::DESC1=ZAH.2.6: * /
2795:
2796: M 0 COMPLD
2797: / * ED-ONT:QRW-SLB-LAG2:ONT-1-1-3-2-10:98499:::DESC1=QRW.33.10: * /
2798: ;
2799: */
2800:
2801: // below: read OntPosition
2802: match = Regex.Match(rowData, @"ED-ONT:([\w\d\-]+)", RegexOptions.Singleline);
2803:
2804: amsName = match.Groups[1].Value;
2805:
2806: match = Regex.Match(rowData, @"ONT-1-1-(\d{1,2}-\d{1,2}-\d{1,2}):\d{0,6}:::(.+?):", RegexOptions.Singleline);
2807:
2808: if (match.Success)
2809: {
2810: cardPortOnt = match.Groups[1].Value;
2811:
2812: line = match.Groups[2].Value;
2813:
2814: ontId = Ia.Ftn.Cl.Models.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
2815:
2816: if (!string.IsNullOrEmpty(ontId))
2817: {
2818: dataOnt = new Ia.Ftn.Cl.Models.Ont();
2819:
2820: dataOnt.Id = ontId;
2821: dataOnt.Description1 = Ia.Cl.Models.Default.Match(line, @"DESC1=(.{1,64})");
2822: dataOnt.Description2 = Ia.Cl.Models.Default.Match(line, @"DESC2=(.{1,64})");
2823:
2824: using (var db = new Ia.Ftn.Cl.Db())
2825: {
2826: ont = (from o in db.Onts where o.Id == dataOnt.Id select o).SingleOrDefault();
2827:
2828: if (ont == null)
2829: {
2830: // below: Don't create a new ONT in this ED-ONT function
2831: //dataOnt.Created = dataOnt.Updated = DateTime.UtcNow.AddHours(3);
2832:
2833: //db.Onts.Add(dataOnt);
2834:
2835: insertedItemCount++;
2836: }
2837: else
2838: {
2839: existingItemCount++;
2840:
2841: if (ont.Update(dataOnt))
2842: {
2843: db.Onts.Attach(ont);
2844: db.Entry(ont).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
2845:
2846: updatedItemCount++;
2847: }
2848: }
2849:
2850: db.SaveChanges();
2851: }
2852: }
2853: else
2854: {
2855: result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
2856: }
2857: }
2858: else
2859: {
2860: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
2861: }
2862: #endregion
2863: }
2864: else if (rowData.Contains("RTRV-SERVICE-VOIP:"))
2865: {
2866: #region RTRV-SERVICE-VOIP
2867:
2868: string ontServiceVoipId;
2869: int card;
2870: Ia.Ftn.Cl.Models.OntServiceVoip ontServiceVoip, dataOntServiceVoip;
2871:
2872: // below: information from the definition of "RTRV-SERVICE-VOIP" in "AMS TL1 Commands Reference"
2873:
2874: /*
2875:
2876: SUR-1-1 08-07-09 09:43:13
2877: M 0 COMPLD
2878: / * RTRV-SERVICE-VOIP:SUR-1-1:VOIP-1-1-1-1-1-1&VOIP-1-1-1-1-10-1&VOIP-1-1 * /
2879: / * -1-1-2-1&VOIP-1-1-1-1-3-1&VOIP-1-1-1-1-4-1&VOIP-1-1-1-1-5-1&VOIP-1-1- * /
2880: / * 1-1-6-1&VOIP-1-1-1-1-7-1&VOIP-1-1-1-1-8-1&VOIP-1-1-1-1-9-1 * /
2881: "VOIP-1-1-1-1-1-1::BWPROFUPID=1,BWPROFUPNM=VOIP,BWPROFDNID=1,
2882: BWPROFDNNM=VOIP,PQPROFID=1,PQPROFNM=VOIPPQ,AESENABLE=DISABLE,SVLAN=10,
2883: IPADDRLOC=10.3.144.1,NETMASKLOC=255.255.248.0,DEFROUTER=10.3.151.254,
2884: IPADDRMGC=10.255.251.5,IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,
2885: VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=kuwait.xml,CLIENTID="",
2886: CUSTOMERID="",SECRETID=,SECRETK=,IPSECENABLE=DISABLED,CONFMETH=FTPSERVER,
2887: SPGPROFID=0,SPGPROFNM="",SPGUNAME="",SPGPWD="",SPGREALM="",
2888: SRCVLANID=0:IS-NR"
2889: "VOIP-1-1-1-1-10-1::BWPROFUPID=1,BWPROFUPNM=VOIP,BWPROFDNID=1,
2890: BWPROFDNNM=VOIP,PQPROFID=1,PQPROFNM=VOIPPQ,AESENABLE=DISABLE,SVLAN=10,
2891: IPADDRLOC=10.3.144.10,NETMASKLOC=255.255.248.0,DEFROUTER=10.3.151.254,
2892: IPADDRMGC=10.255.251.5,IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,
2893: VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=kuwait.xml,CLIENTID="",
2894: CUSTOMERID="",SECRETID=,SECRETK=,IPSECENABLE=DISABLED,CONFMETH=FTPSERVER,
2895: SPGPROFID=0,SPGPROFNM="",SPGUNAME="",SPGPWD="",SPGREALM="",
2896: SRCVLANID=0:IS-NR"
2897: "VOIP-1-1-1-1-2-1::BWPROFUPID=1,BWPROFUPNM=VOIP,BWPROFDNID=1,
2898: BWPROFDNNM=VOIP,PQPROFID=1,PQPROFNM=VOIPPQ,AESENABLE=DISABLE,SVLAN=10,
2899: IPADDRLOC=10.3.144.2,NETMASKLOC=255.255.248.0,DEFROUTER=10.3.151.254,
2900: IPADDRMGC=10.255.251.5,IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,
2901: VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=kuwait.xml,CLIENTID="",
2902: CUSTOMERID="",SECRETID=,SECRETK=,IPSECENABLE=DISABLED,CONFMETH=FTPSERVER,
2903: SPGPROFID=0,SPGPROFNM="",SPGUNAME="",SPGPWD="",SPGREALM="",
2904: SRCVLANID=0:IS-NR"
2905:
2906: / * More Output Follows * /
2907: >
2908: */
2909:
2910: // below: read OntPosition
2911: match = Regex.Match(rowData, @"RTRV-SERVICE-VOIP:([\w\d\-]+)", RegexOptions.Singleline);
2912:
2913: amsName = match.Groups[1].Value;
2914:
2915: match = Regex.Match(rowData, @"VOIP-1-1-(\d{1,2}-\d{1,2}-\d{1,2})-(\d{1,2})::(.+?):\s*(IS-NR|OOS-AU|OOS-MA|OOS-AUMA)", RegexOptions.Singleline);
2916:
2917: if (match.Success)
2918: {
2919: cardPortOnt = match.Groups[1].Value;
2920: card = int.Parse(match.Groups[2].Value);
2921:
2922: line = match.Groups[3].Value;
2923:
2924: ontId = Ia.Ftn.Cl.Models.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
2925:
2926: if (!string.IsNullOrEmpty(ontId))
2927: {
2928: ontServiceVoipId = Ia.Ftn.Cl.Models.Business.Nokia.OntServiceVoip.OntServiceVoipId(ontId, card);
2929:
2930: dataOntServiceVoip = new Ia.Ftn.Cl.Models.OntServiceVoip();
2931:
2932: dataOntServiceVoip.Id = ontServiceVoipId;
2933:
2934: dataOntServiceVoip.ConfiguratinFile = Ia.Cl.Models.Default.Match(line, @"CONFIGFILE=(\w{1,}\.xml)");
2935: dataOntServiceVoip.Customer = Ia.Cl.Models.Default.Match(line, @"CUSTOMERID=""([^""]{1,62})""");
2936: dataOntServiceVoip.FtpIp = Ia.Cl.Models.Default.Match(line, @"IPADDRFTP=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
2937: dataOntServiceVoip.Ip = Ia.Cl.Models.Default.Match(line, @"IPADDRLOC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
2938: dataOntServiceVoip.Label = Ia.Cl.Models.Default.Match(line, @"LABEL=""([^""]{1,80})""");
2939: dataOntServiceVoip.MgcIp = Ia.Cl.Models.Default.Match(line, @"IPADDRMGC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
2940: dataOntServiceVoip.MgcSecondaryIp = Ia.Cl.Models.Default.Match(line, @"IPADDRMGCSEC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
2941:
2942: switch (match.Groups[4].Value)
2943: {
2944: case "IS-NR": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.IsNr; break;
2945: case "OOS-AU": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosAu; break;
2946: case "OOS-MA": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosMa; break;
2947: case "OOS-AUMA": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosAuma; break;
2948: default: state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.Undefined; break;
2949: }
2950:
2951: dataOntServiceVoip.StateId = (int)state;
2952:
2953: dataOntServiceVoip.Svlan = int.Parse(Ia.Cl.Models.Default.Match(line, @"SVLAN=(\d{1,3})"));
2954:
2955: using (var db = new Ia.Ftn.Cl.Db())
2956: {
2957: dataOntServiceVoip.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
2958:
2959: ontServiceVoip = (from osv in db.OntServiceVoips where osv.Id == dataOntServiceVoip.Id select osv).SingleOrDefault();
2960:
2961: if (ontServiceVoip == null)
2962: {
2963: dataOntServiceVoip.Created = dataOntServiceVoip.Updated = DateTime.UtcNow.AddHours(3);
2964:
2965: db.OntServiceVoips.Add(dataOntServiceVoip);
2966:
2967: insertedItemCount++;
2968: }
2969: else
2970: {
2971: existingItemCount++;
2972:
2973: if (ontServiceVoip.Update(dataOntServiceVoip))
2974: {
2975: db.OntServiceVoips.Attach(ontServiceVoip);
2976: db.Entry(ontServiceVoip).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
2977:
2978: updatedItemCount++;
2979: }
2980: }
2981:
2982: db.SaveChanges();
2983: }
2984: }
2985: else
2986: {
2987: result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
2988: }
2989: }
2990: else
2991: {
2992: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
2993: }
2994: #endregion
2995: }
2996: else if (rowData.Contains("RTRV-ONTPOTS:"))
2997: {
2998: #region RTRV-ONTPOTS
2999:
3000: string ontOntPotsId;
3001: int card, port, svlan;
3002: Ia.Ftn.Cl.Models.OntOntPots ontOntPots, dataOntOntPots;
3003:
3004: // below: information from the definition of "RTRV-ONTPOTS" in "AMS TL1 Commands Reference"
3005:
3006: /*
3007: * ;RTRV-ONTPOTS:SUR-1-1:ONTPOTS-1-1-1-1-1-2-1;
3008:
3009: SUR-1-1 14-03-13 08:15:46
3010: M 0 COMPLD
3011: /* RTRV-ONTPOTS:SUR-1-1:ONTPOTS-1-1-1-1-1-2-1 * /
3012: "ONTPOTS-1-1-1-1-1-2-1::VOIPSERV=1,TERMID=td1,POTSDSCP=46,POTSPWR=0,
3013: CALLHIST=DISABLED,PWROVERRIDE=FALSE,SIPMSGTOTH=0,BRRPKTLOSSTH=0,XJTTRTH=0,
3014: RXGAIN=0,TXGAIN=0:IS-NR"
3015: ;
3016: */
3017:
3018: // below: read OntPosition
3019: match = Regex.Match(rowData, @"RTRV-ONTPOTS:([\w\d\-]+)", RegexOptions.Singleline);
3020:
3021: amsName = match.Groups[1].Value;
3022:
3023: match = Regex.Match(rowData, @"ONTPOTS-1-1-(\d{1,2}-\d{1,2}-\d{1,2})-(\d{1,2})-(\d{1,2})::(.+?):\s*(IS-NR|OOS-AU|OOS-MA|OOS-AUMA)", RegexOptions.Singleline);
3024:
3025: if (match.Success)
3026: {
3027: cardPortOnt = match.Groups[1].Value;
3028: card = int.Parse(match.Groups[2].Value);
3029: port = int.Parse(match.Groups[3].Value);
3030:
3031: line = match.Groups[4].Value;
3032:
3033: ontId = Ia.Ftn.Cl.Models.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
3034:
3035: if (!string.IsNullOrEmpty(ontId))
3036: {
3037: if (card >= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MinimumCardValue && card <= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MaximumCardValue && port >= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MinimumPortValue && port <= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MaximumPortValue)
3038: {
3039: ontOntPotsId = Ia.Ftn.Cl.Models.Business.Nokia.OntOntPots.OntOntPotsId(ontId, card, port);
3040:
3041: dataOntOntPots = new Ia.Ftn.Cl.Models.OntOntPots();
3042:
3043: dataOntOntPots.Id = ontOntPotsId;
3044:
3045: dataOntOntPots.Card = card;
3046: dataOntOntPots.Customer = Ia.Cl.Models.Default.Match(line, @"CUSTINFO=(\w{1,80})");
3047: dataOntOntPots.Port = port;
3048:
3049: switch (match.Groups[5].Value)
3050: {
3051: case "IS-NR": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.IsNr; break;
3052: case "OOS-AU": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosAu; break;
3053: case "OOS-MA": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosMa; break;
3054: case "OOS-AUMA": state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.OosAuma; break;
3055: default: state = Ia.Ftn.Cl.Models.Business.Nokia.Ams.BellcoreState.Undefined; break;
3056: }
3057:
3058: dataOntOntPots.StateId = (int)state;
3059:
3060: if (int.TryParse(Ia.Cl.Models.Default.Match(line, @"SVLAN=(\d{1,3})"), out svlan)) dataOntOntPots.Svlan = svlan;
3061:
3062: dataOntOntPots.Termination = Ia.Cl.Models.Default.Match(line, @"TERMID=(\w{1,20})");
3063: dataOntOntPots.Tn = Ia.Cl.Models.Default.Match(line, @"TN=(\w{1,16})");
3064: dataOntOntPots.VoipClientIp = Ia.Cl.Models.Default.Match(line, @"VOIPCLIENTADDR=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
3065:
3066: using (var db = new Ia.Ftn.Cl.Db())
3067: {
3068: dataOntOntPots.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
3069:
3070: ontOntPots = (from oop in db.OntOntPots where oop.Id == dataOntOntPots.Id select oop).SingleOrDefault();
3071:
3072: if (ontOntPots == null)
3073: {
3074: dataOntOntPots.Created = dataOntOntPots.Updated = DateTime.UtcNow.AddHours(3);
3075:
3076: db.OntOntPots.Add(dataOntOntPots);
3077:
3078: insertedItemCount++;
3079: }
3080: else
3081: {
3082: existingItemCount++;
3083:
3084: if (ontOntPots.Update(dataOntOntPots))
3085: {
3086: db.OntOntPots.Attach(ontOntPots);
3087: db.Entry(ontOntPots).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
3088:
3089: updatedItemCount++;
3090: }
3091: }
3092:
3093: db.SaveChanges();
3094: }
3095: }
3096: else
3097: {
3098: result.AddError(@"Card and/or port value is invalid: card:" + card + ", port:" + port);
3099: }
3100: }
3101: else
3102: {
3103: result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
3104: }
3105: }
3106: else
3107: {
3108: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
3109: }
3110:
3111: #endregion
3112: }
3113: else if (rowData.Contains("ED-ONTPOTS:"))
3114: {
3115: #region ED-ONTPOTS
3116:
3117: string ontOntPotsId;
3118: int card, port;
3119: Ia.Ftn.Cl.Models.OntOntPots ontOntPots, dataOntOntPots;
3120:
3121: /* ED-ONTPOTS:SUL-1-1:ONTPOTS-1-1-9-1-1-2-1:14614:::CUSTINFO=24977777: */
3122: /* ED-ONTPOTS:SJA-JHR-LAG14:ONTPOTS-1-1-1-6-4-0-0:2425:::CUSTINFO=24531914: */
3123:
3124: // below: read OntPosition
3125: match = Regex.Match(rowData, @"ED-ONTPOTS:([\w\d\-]+)", RegexOptions.Singleline);
3126:
3127: amsName = match.Groups[1].Value;
3128:
3129: match = Regex.Match(rowData, @"ONTPOTS-1-1-(\d{1,2}-\d{1,2}-\d{1,2})-(\d{1,2})-(\d{1,2}):(.+?):", RegexOptions.Singleline);
3130:
3131: if (match.Success)
3132: {
3133: cardPortOnt = match.Groups[1].Value;
3134: card = int.Parse(match.Groups[2].Value);
3135: port = int.Parse(match.Groups[3].Value);
3136:
3137: line = match.Groups[4].Value;
3138:
3139: ontId = Ia.Ftn.Cl.Models.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
3140:
3141: if (!string.IsNullOrEmpty(ontId))
3142: {
3143: if (card >= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MinimumCardValue && card <= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MaximumCardValue && port >= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MinimumPortValue && port <= Ia.Ftn.Cl.Models.Business.Nokia.Ont.MaximumPortValue)
3144: {
3145: ontOntPotsId = Ia.Ftn.Cl.Models.Business.Nokia.OntOntPots.OntOntPotsId(ontId, card, port);
3146:
3147: dataOntOntPots = new Ia.Ftn.Cl.Models.OntOntPots();
3148:
3149: dataOntOntPots.Id = ontOntPotsId;
3150:
3151: dataOntOntPots.Card = card;
3152: dataOntOntPots.Customer = Ia.Cl.Models.Default.Match(line, @"CUSTINFO=(\w{1,80})");
3153: dataOntOntPots.Port = port;
3154:
3155: using (var db = new Ia.Ftn.Cl.Db())
3156: {
3157: dataOntOntPots.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
3158:
3159: ontOntPots = (from oop in db.OntOntPots where oop.Id == dataOntOntPots.Id select oop).SingleOrDefault();
3160:
3161: if (ontOntPots == null)
3162: {
3163: dataOntOntPots.Created = dataOntOntPots.Updated = DateTime.UtcNow.AddHours(3);
3164:
3165: db.OntOntPots.Add(dataOntOntPots);
3166:
3167: insertedItemCount++;
3168: }
3169: else
3170: {
3171: existingItemCount++;
3172:
3173: if (ontOntPots.Update(dataOntOntPots))
3174: {
3175: db.OntOntPots.Attach(ontOntPots);
3176: db.Entry(ontOntPots).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
3177:
3178: updatedItemCount++;
3179: }
3180: }
3181:
3182: db.SaveChanges();
3183: }
3184: }
3185: else
3186: {
3187: result.AddError(@"Card and/or port value is invalid: card:" + card + ", port:" + port);
3188: }
3189: }
3190: else
3191: {
3192: result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
3193: }
3194: }
3195: else
3196: {
3197: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
3198: }
3199:
3200: #endregion
3201: }
3202: else if (rowData.Contains("RTRV-ALM-PON:"))
3203: {
3204: // Note: this RTRV-ALM-PON: commnad is never issued by code actally. New ONTs are detected below (see "REPT ALM") as part of regular events
3205: #region RTRV-ALM-PON
3206:
3207: Ia.Ftn.Cl.Models.Event @event;
3208:
3209: // below: important, remove all ''' char from string
3210: rowData = rowData.Replace(@"'", "");
3211:
3212: // below: read eventTime and amsName
3213: // QRW-1-1 14-03-31 06:15:20
3214: match = Regex.Match(rowData, @"([\w\d\-]+) ((\d{2})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}))", RegexOptions.Singleline);
3215:
3216: amsName = match.Groups[1].Value;
3217: eventTime = DateTime.ParseExact(match.Groups[2].Captures[0].Value, "yy-MM-dd HH:mm:ss", null);
3218:
3219: // old "PON-1-1-9-2,PON:MN,NEWONT,NSA,,,,: \"SERNUM =ALCLA0A2D17A, SLID =DEFAULT,\""
3220: // old matchCollection = Regex.Matches(rowData, @"""(PON-\d{1,2}-\d{1,2}-\d{1,2}-\d{1,2}),PON:MN,NEWONT,NSA,,,,:\s*\r\n\s*""(SERNUM\s*=\s*(ALCL\w{8}), SLID\s*=\s*DEFAULT,)""""", RegexOptions.Singleline);
3221:
3222: /*
3223: "PON-1-1-10-3:CL,NEWONT,NSA,5-26,23-8-36,,:,
3224: "SERNUM =ALCLA0A22564, SLID =DEFAULT ,
3225: LOID = , USRATE =1.25g""
3226: */
3227:
3228: matchCollection = Regex.Matches(rowData, @"""(PON-\d{1,2}-\d{1,2}-\d{1,2}-\d{1,2}):(CL|MN),NEWONT,NSA,\d{1,2}-\d{1,2},\d{1,2}-\d{1,2}-\d{1,2},,:,\s*\r\n\s*""(SERNUM\s*=\s*(ALCL\w{8}),\s*SLID\s*=\s*DEFAULT\s*,)\s*\r\n\s*.+?""""", RegexOptions.Singleline);
3229:
3230: if (matchCollection.Count > 0)
3231: {
3232: using (var db = new Ia.Ftn.Cl.Db())
3233: {
3234: foreach (Match m in matchCollection)
3235: {
3236: if (m.Success)
3237: {
3238: @event = new Ia.Ftn.Cl.Models.Event();
3239:
3240: @event.Aid = m.Groups[1].Value;
3241: @event.Cause = "NEWONT";
3242: @event.Class = "ONT";
3243: @event.Detail = m.Groups[3].Value;
3244: @event.EventTime = eventTime;
3245: @event.NodeTime = null;
3246: @event.Number = 0;
3247: @event.SeverityEffect = "NSA";
3248: @event.Severity = m.Groups[2].Value;
3249: @event.System = amsName;
3250: @event.TypeId = 0;
3251:
3252: @event.Created = @event.Updated = DateTime.UtcNow.AddHours(3);
3253: db.Events.Add(@event);
3254:
3255: insertedItemCount++;
3256: }
3257: }
3258:
3259: db.SaveChanges();
3260: }
3261: }
3262: else
3263: {
3264: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
3265: }
3266:
3267: #endregion
3268: }
3269: else if (rowData.Contains("REPT ALM"))
3270: {
3271: #region REPT ALM
3272:
3273: string _class, aid;
3274: Ia.Ftn.Cl.Models.Event @event;
3275:
3276: // below: important, remove all ''' char from string
3277: rowData = rowData.Replace(@"'", "");
3278:
3279: // SUR-1-2 08-07-18 11:24:06 * 491 REPT ALM ONT "ONT-1-1-9-2-5:MN,INACT,SA,7-18,11-24-6:\"ONT is inactive\"" ;
3280:
3281: /*
3282: SLA-SUR-LAG16 18-06-24 18:21:01
3283: A 37211 REPT ALM ONT
3284: "ONT-1-1-5-9-20:CL,DG,SA,6-24,18-21-1:
3285: "Received Dying Gasp indication from ONT","
3286: ; */
3287: // old: match = Regex.Match(rowData, @"([\w\d\-]+) ((\d{2})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}))\r\n(.{1,10})\s+(\d{1,6}) REPT (ALM|EVT|ALM ENV|SW) (\w{1,20})\r\n\s+""(\w{1,20})-(\d{1,2})-(\d{1,2})-([^:]+?):(CR|MJ|MN|CL),(\w{1,20}),(SA|NSA|NR|Ind NR),((\d{1,2})-(\d{1,2})),((\d{1,2})-(\d{1,2})-(\d{1,2})).*:[\r\n\s]*""(.+?)""[,]{0,1}""\r\n;", RegexOptions.Singleline);
3288: match = Regex.Match(rowData, @"([\w\d\-]+) ((\d{2})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}))\r\n(.{1,10})\s+(\d{1,6}) REPT (ALM|EVT|ALM ENV|SW) (\w{1,20})\r\n\s+""(\w{1,20})-(\d{1,2})-(\d{1,2})-([^:]+?):(CR|MJ|MN|CL),(\w{1,20}),(SA|NSA|NR|Ind NR),((\d{1,2})-(\d{1,2})),((\d{1,2})-(\d{1,2})-(\d{1,2})).*:.*[\r\n\s]*""(.+?)""[,]{0,1}""\r\n;", RegexOptions.Singleline);
3289:
3290: if (match.Success)
3291: {
3292: amsName = match.Groups[1].Value;
3293:
3294: _class = match.Groups[12].Captures[0].Value;
3295: aid = match.Groups[13].Captures[0].Value + "-" + match.Groups[14].Captures[0].Value + "-" + match.Groups[15].Captures[0].Value + "-" + match.Groups[16].Captures[0].Value;
3296:
3297: ontPosition = CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(amsName, _class, aid);
3298: ontId = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OntIdByPosition(ontPosition);
3299:
3300: @event = new Ia.Ftn.Cl.Models.Event();
3301:
3302: @event.Aid = aid;
3303: @event.Cause = match.Groups[18].Captures[0].Value;
3304: @event.Class = _class;
3305: @event.Detail = match.Groups[27].Captures[0].Value.Replace(@"""", "");
3306: @event.EventTime = DateTime.ParseExact(match.Groups[2].Captures[0].Value, "yy-MM-dd HH:mm:ss", null);
3307: @event.NodeTime = DateTime.ParseExact(match.Groups[3].Captures[0].Value + "-" + match.Groups[21].Captures[0].Value.PadLeft(2, '0') + "-" + match.Groups[22].Captures[0].Value.PadLeft(2, '0') + " " + match.Groups[24].Captures[0].Value.PadLeft(2, '0') + ":" + match.Groups[25].Captures[0].Value.PadLeft(2, '0') + ":" + match.Groups[26].Captures[0].Value.PadLeft(2, '0'), "yy-MM-dd HH:mm:ss", null);
3308: @event.Number = int.Parse(match.Groups[10].Captures[0].Value);
3309: @event.SeverityEffect = match.Groups[19].Captures[0].Value;
3310: @event.Severity = match.Groups[17].Captures[0].Value;
3311: @event.System = amsName;
3312: @event.TypeId = 0;
3313:
3314: using (var db = new Ia.Ftn.Cl.Db())
3315: {
3316: if (ontId != null) @event.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
3317:
3318: @event.Created = @event.Updated = DateTime.UtcNow.AddHours(3);
3319: db.Events.Add(@event);
3320:
3321: insertedItemCount++;
3322:
3323: db.SaveChanges();
3324: }
3325: }
3326: else
3327: {
3328: result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: REPT ALM [" + rowData + "] was not matched.");
3329: }
3330:
3331: #endregion
3332: }
3333:
3334: if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
3335: else isUpdated = false;
3336:
3337: result.AddSuccess("(" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
3338:
3339: return isUpdated;
3340: }
3341:
3342: ////////////////////////////////////////////////////////////////////////////
3343:
3344: /// <summary>
3345: ///
3346: /// </summary>
3347: private static string CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(string amsName, string _class, string aid)
3348: {
3349: /*
3350: --BRGPORT BRGPORT-1-1-11-2-6-1-1
3351: --PON PON-1-1-13-1
3352: --EQPT LT-1-1-14
3353: --ONTPOTS ONTPOTS-1-1-8-1-17-2-2
3354: --ONTVOIP VOIP-1-1-13-2-22-1
3355: --ONT ONT-1-1-13-1-10
3356: --ONTENET ONTENET-1-1-2-1-20-1-1
3357: --ONTCARD ONTCARD-1-1-9-2-8-1
3358: --ONTHSI HSI-1-1-2-1-8-1-2-2
3359: */
3360:
3361: string ontPosition;
3362: Match match;
3363:
3364: ontPosition = string.Empty;
3365:
3366: if (!string.IsNullOrEmpty(aid) && !string.IsNullOrEmpty(_class))
3367: {
3368: if (_class == "BRGPORT")
3369: {
3370: // BRGPORT BRGPORT-1-1-11-2-6-1-1
3371: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3372:
3373: if (match.Success)
3374: {
3375: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3376: }
3377: else
3378: {
3379: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3380: }
3381: }
3382: else if (_class == "PON")
3383: {
3384: // PON PON-1-1-13-1
3385: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3386:
3387: if (match.Success)
3388: {
3389: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-1"; // I will assign the first ONT in the PON as indication to the PON
3390: }
3391: else
3392: {
3393: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3394: }
3395: }
3396: else if (_class == "EQPT")
3397: {
3398: // EQPT LT-1-1-14
3399: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3400:
3401: if (match.Success)
3402: {
3403: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-1"; // I will assign the first PON ONT in the PON as indication to the PON
3404: }
3405: else
3406: {
3407: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3408: }
3409: }
3410: else if (_class == "ONTPOTS")
3411: {
3412: // ONTPOTS ONTPOTS-1-1-8-1-17-2-2
3413: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3414:
3415: if (match.Success)
3416: {
3417: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3418: }
3419: else
3420: {
3421: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3422: }
3423: }
3424: else if (_class == "ONTVOIP")
3425: {
3426: // ONTVOIP VOIP-1-1-13-2-22-1
3427: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3428:
3429: if (match.Success)
3430: {
3431: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3432: }
3433: else
3434: {
3435: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3436: }
3437: }
3438: else if (_class == "ONT")
3439: {
3440: // ONT ONT-1-1-13-1-10
3441: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3442:
3443: if (match.Success)
3444: {
3445: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3446: }
3447: else
3448: {
3449: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3450: }
3451: }
3452: else if (_class == "ONTENET")
3453: {
3454: // ONTENET ONTENET-1-1-2-1-20-1-1
3455: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3456:
3457: if (match.Success)
3458: {
3459: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3460: }
3461: else
3462: {
3463: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3464: }
3465: }
3466: else if (_class == "ONTCARD")
3467: {
3468: // ONTCARD ONTCARD-1-1-9-2-8-1
3469: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3470:
3471: if (match.Success)
3472: {
3473: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3474: }
3475: else
3476: {
3477: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3478: }
3479: }
3480: else if (_class == "ONTHSI")
3481: {
3482: // ONTHSI HSI-1-1-2-1-8-1-2-2
3483: match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
3484:
3485: if (match.Success)
3486: {
3487: ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
3488: }
3489: else
3490: {
3491: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
3492: }
3493: }
3494: else
3495: {
3496: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + ". Class is unknown.") { };
3497: }
3498: }
3499: else
3500: {
3501: throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): aid and/or class are null.") { };
3502: }
3503:
3504: return ontPosition;
3505: }
3506:
3507: ////////////////////////////////////////////////////////////////////////////
3508:
3509: /// <summary>
3510: ///
3511: /// </summary>
3512: public bool AddPot(string td)
3513: {
3514: bool b;
3515:
3516: b = true;
3517:
3518:
3519: return b;
3520: }
3521:
3522: ////////////////////////////////////////////////////////////////////////////
3523:
3524: /// <summary>
3525: ///
3526: /// </summary>
3527: public static string CommandsToDeleteAndCreateServiceVoipUsingNdd(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt, Ia.Ftn.Cl.Models.Ont ont, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
3528: {
3529: string sa, cardPortOnt, voipServiceState;
3530:
3531: sa = string.Empty;
3532:
3533: foreach (Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.PonGroup ponGroup in olt.PonGroupList)
3534: {
3535: cardPortOnt = nddOnt.CardSlot + "-" + nddOnt.Port + "-" + nddOnt.InternalNumber;
3536:
3537: if (edServiceVoipIsOos) voipServiceState = "OOS";
3538: else voipServiceState = "IS";
3539:
3540: sa = @"
3541: # Delete then create VOIP and associated ONTPOTS: " + nddOnt.Access.Name + @" " + nddOnt.Position;
3542:
3543: if (ont != null)
3544: {
3545: if (ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Sfu || ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Gfu || ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Undefined)
3546: {
3547: sa += @"
3548:
3549: # Delete ONTPOTS
3550: ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4:::::OOS;
3551: DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4::;
3552:
3553: # Delete VOIP
3554: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
3555: DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
3556:
3557: # Create VOIP
3558: ENT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1::::BWPROFUPID=1,BWPROFDNID=1,PQPROFID=1,LABEL=" + nddOnt.Access.Name + @",SVLAN=" /*+ ponGroup.Olt.Vlan*/ + @",IPADDRLOC=" + nddOnt.Ip + @",NETMASKLOC=" + nddOnt.MgcSubnetMask + @",DEFROUTER=" + ponGroup.GatewayIp + @",IPADDRMGC=" + nddOnt.MgcIp + @",IPADDRMGCSEC=" + nddOnt.MgcSecondaryIp + @",VOIPMODE=SSH248,CONFIGFILE=" + olt.Odf.Router.Oams.FirstOrDefault().ConfigFile + @":IS;
3559:
3560: # Create ONTPOTS
3561: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
3562: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
3563: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
3564: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
3565:
3566: # VOIP service state
3567: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3568:
3569:
3570: ";
3571: }
3572: else if (ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Soho)
3573: {
3574: sa += @"
3575:
3576: # Delete ONTPOTS
3577: ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8:::::OOS;
3578: DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8::;
3579:
3580: # Delete VOIP
3581: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
3582: DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
3583:
3584: # Create VOIP
3585: ENT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1::::BWPROFUPID=1,BWPROFDNID=1,PQPROFID=1,LABEL=" + nddOnt.Access.Name + @",SVLAN=" /*+ ponGroup.Vlan*/ + @",IPADDRLOC=" + nddOnt.Ip + @",NETMASKLOC=" + nddOnt.MgcSubnetMask + @",DEFROUTER=" + ponGroup.GatewayIp + @",IPADDRMGC=" + nddOnt.MgcIp + @",IPADDRMGCSEC=" + nddOnt.MgcSecondaryIp + @",VOIPMODE=SSH248,CONFIGFILE=" + olt.Odf.Router.Oams.FirstOrDefault().ConfigFile + @":IS;
3586:
3587: # Create ONTPOTS
3588: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
3589: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
3590: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
3591: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
3592: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td5:IS;
3593: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td6:IS;
3594: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td7:IS;
3595: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td8:IS;
3596:
3597: # VOIP service state
3598: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3599:
3600:
3601: ";
3602: }
3603: else if (ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Mdu || ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Gmdu)
3604: {
3605: sa += @"
3606:
3607: # Delete ONTPOTS
3608: ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1&&-8:::::OOS;
3609: ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8:::::OOS;
3610: ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1&&-8:::::OOS;
3611: DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1&&-8::;
3612: DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8::;
3613: DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1&&-8::;
3614:
3615: # Delete VOIP
3616: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
3617: DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
3618:
3619: # Create VOIP
3620: ENT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1::::BWPROFUPID=8,BWPROFDNID=8,PQPROFID=1,AESENABLE=DISABLE,LABEL=" + nddOnt.Access.Name + @",SVLAN=" /*+ ponGroup.Vlan*/ + @",IPADDRLOC=" + nddOnt.Ip + @",NETMASKLOC=" + nddOnt.MgcSubnetMask + @",DEFROUTER=" + ponGroup.GatewayIp + @",IPADDRMGC=" + nddOnt.MgcIp + @",IPADDRMGCSEC=" + nddOnt.MgcSecondaryIp + @",IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=" + olt.Odf.Router.Oams.FirstOrDefault().ConfigFile + @":IS;
3621:
3622: # Create ONTPOTS
3623: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1::::VOIPSERV=1,TERMID=td1:IS;
3624: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-2::::VOIPSERV=1,TERMID=td2:IS;
3625: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-3::::VOIPSERV=1,TERMID=td3:IS;
3626: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-4::::VOIPSERV=1,TERMID=td4:IS;
3627: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-5::::VOIPSERV=1,TERMID=td13:IS;
3628: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-6::::VOIPSERV=1,TERMID=td14:IS;
3629: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-7::::VOIPSERV=1,TERMID=td15:IS;
3630: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-8::::VOIPSERV=1,TERMID=td16:IS;
3631:
3632: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td5:IS;
3633: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td6:IS;
3634: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td7:IS;
3635: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td8:IS;
3636: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td17:IS;
3637: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td18:IS;
3638: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td19:IS;
3639: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td20:IS;
3640:
3641: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1::::VOIPSERV=1,TERMID=td9:IS;
3642: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-2::::VOIPSERV=1,TERMID=td10:IS;
3643: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-3::::VOIPSERV=1,TERMID=td11:IS;
3644: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-4::::VOIPSERV=1,TERMID=td12:IS;
3645: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-5::::VOIPSERV=1,TERMID=td21:IS;
3646: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-6::::VOIPSERV=1,TERMID=td22:IS;
3647: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-7::::VOIPSERV=1,TERMID=td23:IS;
3648: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-8::::VOIPSERV=1,TERMID=td24:IS;
3649:
3650: # VOIP service state
3651: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3652:
3653:
3654: ";
3655: }
3656: else
3657: {
3658: throw new Exception("Unknown familyType") { };
3659: }
3660: }
3661: else
3662: {
3663:
3664: sa = @"
3665: # Delete then create VOIP and associated ONTPOTS: " + nddOnt.Access.Name + @" " + nddOnt.Position;
3666:
3667: sa += @"
3668: # ONT does not have an associated Access to it.";
3669:
3670: sa += @"
3671:
3672: # Delete ONTPOTS
3673: ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4:::::OOS;
3674: DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4::;
3675:
3676: # Delete VOIP
3677: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
3678: DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
3679:
3680: # Create VOIP
3681: ENT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1::::BWPROFUPID=1,BWPROFDNID=1,PQPROFID=1,LABEL=" + nddOnt.Access.Name + @",SVLAN=" /*+ ponGroup.Vlan*/ + @",IPADDRLOC=" + nddOnt.Ip + @",NETMASKLOC=" + nddOnt.MgcSubnetMask + @",DEFROUTER=" + ponGroup.GatewayIp + @",IPADDRMGC=" + nddOnt.MgcIp + @",IPADDRMGCSEC=" + nddOnt.MgcSecondaryIp + @",VOIPMODE=SSH248,CONFIGFILE=" + olt.Odf.Router.Oams.FirstOrDefault().ConfigFile + @":IS;
3682:
3683: # Create ONTPOTS
3684: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
3685: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
3686: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
3687: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
3688:
3689: # VOIP service state
3690: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3691:
3692:
3693: ";
3694: }
3695: }
3696:
3697: return sa;
3698: }
3699:
3700: ////////////////////////////////////////////////////////////////////////////
3701:
3702: /// <summary>
3703: ///
3704: /// </summary>
3705: public static string CommandsToCreateOntPots(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Olt olt, Ia.Ftn.Cl.Models.Ont ont, Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
3706: {
3707: string sa, cardPortOnt, voipServiceState;
3708:
3709: cardPortOnt = nddOnt.CardSlot + "-" + nddOnt.Port + "-" + nddOnt.InternalNumber;
3710:
3711: if (edServiceVoipIsOos) voipServiceState = "OOS";
3712: else voipServiceState = "IS";
3713:
3714: sa = @"
3715: # Create ONTPOTS: " + ont.Access.Name + @" " + ont.Access.Position;
3716:
3717: if (ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Sfu || ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Gfu)
3718: {
3719: sa += @"
3720:
3721: # Create ONTPOTS
3722: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
3723: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
3724: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
3725: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
3726:
3727: # VOIP service state
3728: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3729:
3730:
3731: ";
3732: }
3733: else if (ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Soho)
3734: {
3735: sa += @"
3736:
3737: # Create ONTPOTS
3738: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
3739: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
3740: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
3741: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
3742: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td5:IS;
3743: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td6:IS;
3744: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td7:IS;
3745: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td8:IS;
3746:
3747: # VOIP service state
3748: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3749:
3750:
3751: ";
3752: }
3753: else if (ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Mdu || ont.FamilyTypeId == (int)Ia.Ftn.Cl.Models.Business.Nokia.Ont.FamilyType.Gmdu)
3754: {
3755: sa += @"
3756:
3757: # Create ONTPOTS
3758: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1::::VOIPSERV=1,TERMID=td1:IS;
3759: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-2::::VOIPSERV=1,TERMID=td2:IS;
3760: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-3::::VOIPSERV=1,TERMID=td3:IS;
3761: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-4::::VOIPSERV=1,TERMID=td4:IS;
3762: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-5::::VOIPSERV=1,TERMID=td13:IS;
3763: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-6::::VOIPSERV=1,TERMID=td14:IS;
3764: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-7::::VOIPSERV=1,TERMID=td15:IS;
3765: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-8::::VOIPSERV=1,TERMID=td16:IS;
3766:
3767: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td5:IS;
3768: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td6:IS;
3769: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td7:IS;
3770: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td8:IS;
3771: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td17:IS;
3772: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td18:IS;
3773: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td19:IS;
3774: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td20:IS;
3775:
3776: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1::::VOIPSERV=1,TERMID=td9:IS;
3777: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-2::::VOIPSERV=1,TERMID=td10:IS;
3778: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-3::::VOIPSERV=1,TERMID=td11:IS;
3779: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-4::::VOIPSERV=1,TERMID=td12:IS;
3780: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-5::::VOIPSERV=1,TERMID=td21:IS;
3781: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-6::::VOIPSERV=1,TERMID=td22:IS;
3782: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-7::::VOIPSERV=1,TERMID=td23:IS;
3783: ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-8::::VOIPSERV=1,TERMID=td24:IS;
3784:
3785: # VOIP service state
3786: ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
3787:
3788:
3789: ";
3790: }
3791: else
3792: {
3793: sa += @"
3794:
3795: # Unknown FamilyType
3796:
3797:
3798: ";
3799: }
3800:
3801: return sa;
3802: }
3803:
3804: ////////////////////////////////////////////////////////////////////////////
3805:
3806: /// <summary>
3807: ///
3808: /// </summary>
3809: public static List<string> CommandsToPreprovisionOntWithinOlt(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
3810: {
3811: string cardPortOnt, voipServiceState;
3812: List<string> list;
3813:
3814: list = new List<string>();
3815:
3816: if (edServiceVoipIsOos) voipServiceState = "OOS";
3817: else voipServiceState = "IS";
3818:
3819: cardPortOnt = nddOnt.CardSlot + "-" + nddOnt.Port + "-" + nddOnt.InternalNumber;
3820:
3821: //list.Add("# Preprovision an empty ONT on the network: " + nddOnt.Access.Name + @" " + nddOnt.Position + " (" + nddOnt.Ip + @");");
3822: list.Add("ENT-ONT:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONT-1-1-" + cardPortOnt + @"::::SWVERPLND=" + Ia.Ftn.Cl.Models.Data.Nokia.Ams.PlannedSoftware + @",DESC1=" + nddOnt.Access.Name + @",DESC2=""NULL"":OOS;");
3823:
3824: //list.Add("# Provision the VOIP service;");
3825: list.Add("ENT-ONTCARD:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTCARD-1-1-" + cardPortOnt + @"-2:::POTS::IS;");
3826: list.Add("ENT-ONTCARD:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTCARD-1-1-" + cardPortOnt + @"-1:::10_100BASET::IS;");
3827: list.Add("ENT-ONTENET:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTENET-1-1-" + cardPortOnt + @"-1-1::::SESSPROFID=1,MAXMACNUM=4:IS;");
3828: list.Add("ENT-ONTENET:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTENET-1-1-" + cardPortOnt + @"-1-2::::SESSPROFID=1,MAXMACNUM=4:IS;");
3829: list.Add("ENT-SERVICE-VOIP:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1::::BWPROFUPID=1,BWPROFDNID=1,PQPROFID=1,SVLAN=" /*+ nddOnt.Pon.PonGroup.Olt.Vlan*/ + @",IPADDRLOC=" + nddOnt.Ip + @",NETMASKLOC=" + nddOnt.MgcSubnetMask + @",DEFROUTER=" + nddOnt.Pon.PonGroup.GatewayIp + @",IPADDRMGC=" + nddOnt.MgcIp + @",IPADDRMGCSEC=" + nddOnt.MgcSecondaryIp + @",VOIPMODE=SSH248,CONFIGFILE=kuwait.xml:IS;");
3830: list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;");
3831: list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;");
3832: list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;");
3833: list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;");
3834:
3835: //list.Add("# VOIP service state");
3836: list.Add("ED-SERVICE-VOIP:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";");
3837:
3838: return list;
3839: }
3840:
3841: ////////////////////////////////////////////////////////////////////////////
3842:
3843: /// <summary>
3844: ///
3845: /// </summary>
3846: public static string CommandsToPreprovisionOntWithinOltUsingConfigureCommand(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
3847: {
3848: string sa, rackSubCardPortOnt;//, voipServiceState;
3849:
3850: //if (edServiceVoipIsOos) voipServiceState = "OOS";
3851: //else voipServiceState = "IS";
3852:
3853: rackSubCardPortOnt = nddOnt.Rack + "/" + nddOnt.Sub + "/" + nddOnt.CardSlot + "/" + nddOnt.Port + "/" + nddOnt.InternalNumber;
3854:
3855: sa = @"
3856: configure equipment ont slot " + rackSubCardPortOnt + @"/1 planned-card-type 10_100base plndnumdataports 2 plndnumvoiceports 0
3857: configure equipment ont slot " + rackSubCardPortOnt + @"/2 planned-card-type pots plndnumdataports 0 plndnumvoiceports 4
3858: configure qos interface ont:" + rackSubCardPortOnt + @" us-num-queue 8
3859: configure qos interface " + rackSubCardPortOnt + @"/voip upstream-queue 5 bandwidth-profile name:VOICE bandwidth-sharing ont-sharing
3860: configure bridge port " + rackSubCardPortOnt + @"/voip max-unicast-mac 8
3861: configure bridge port " + rackSubCardPortOnt + @"/voip vlan-id " /*+ nddOnt.Pon.PonGroup.Olt.Vlan*/ + @"
3862: configure bridge port " + rackSubCardPortOnt + @"/voip pvid " /*+ nddOnt.Pon.PonGroup.Olt.Vlan*/ + @"
3863: configure voice ont service " + rackSubCardPortOnt + @"/1 voip-mode softswitch-h248 mgc-ip-addr " + nddOnt.MgcIp + @" sec-mgc-ip-addr " + nddOnt.MgcSecondaryIp + @" conf-file-name " + nddOnt.Pon.PonGroup.Olt.Odf.Router.Oams.First().ConfigFile + @" ip-address " + nddOnt.Ip + @" net-mask 255.255.248.0 default-router " + nddOnt.Pon.PonGroup.GatewayIp + @" vlan " /*+ nddOnt.Pon.PonGroup.Olt.Vlan*/ + @"
3864:
3865: ";
3866:
3867: return sa;
3868: }
3869:
3870: ////////////////////////////////////////////////////////////////////////////
3871: ////////////////////////////////////////////////////////////////////////////
3872: }
3873:
3874: ////////////////////////////////////////////////////////////////////////////
3875: ////////////////////////////////////////////////////////////////////////////
3876: }
- AccessController (Ia.Ftn.Api.Wa.Controllers) : Access API Controller class of Fixed Telecommunications Network (FTN) model.
- AuthorizationHeaderHandler () : AuthorizationHeaderHandler class of Fixed Telecommunications Network (FTN) model.
- Default2Controller (Ia.Ftn.Api.Wa.Controllers) : Default API Controller class of Fixed Telecommunications Network (FTN) model.
- EncryptionController (Ia.Ftn.Api.Wa.Controllers) : Cryptography, Encryption Controller
- MaintenanceController (Ia.Ftn.Api.Wa.Controllers) : Maintenance API Controller class of Fixed Telecommunications Network (FTN) model.
- ServiceController (Ia.Ftn.Api.Wa.Controllers) : Service API Controller class of Fixed Telecommunications Network (FTN) model.
- ServiceRequestAdministrativeIssueController (Ia.Ftn.Api.Wa.Controllers) : Service Request Administrative Issue API Controller class of Fixed Telecommunications Network (FTN) model.
- ServiceRequestController (Ia.Ftn.Api.Wa.Controllers) : Service Request API Controller class of Fixed Telecommunications Network (FTN) model.
- ServiceRequestTypeController (Ia.Ftn.Api.Wa.Controllers) : Service Request Type API Controller class of Fixed Telecommunications Network (FTN) model.
- Mouse (Ia.Cl.Model) : Windows mouse movements and properties control support class.
- Winapi (Ia.Cl.Model) : WINAPI click events support class.
- Identity (Ia.Ftn.Cl.Models) : ASP.NET Identity support class.
- Access (Ia.Ftn.Cl.Models) : Access Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ApplicationOperator (Ia.Cl.Models) : ApplicationOperator
- Access (Ia.Ftn.Cl.Models.Business) : Access support class for Fixed Telecommunications Network (FTN) business model.
- AccessIdNddOntEmsInformation (Ia.Ftn.Cl.Models.Business) : Access Id Access name DEV FN SN PN ONT Id ONT IP Service Port support class of Fixed Telecommunications Network (FTN) business model.
- Address (Ia.Ftn.Cl.Models.Business) : Address Framework class for Fixed Telecommunications Network (FTN) business model.
- Administration (Ia.Ftn.Cl.Models.Business) : Administration support class of Fixed Telecommunications Network (FTN) business model.
- Default (Ia.Ftn.Cl.Models.Business.Application) : Default Application network information support class for the Fixed Telecommunications Network business model
- Authority (Ia.Ftn.Cl.Models.Business) : Authority support class of Fixed Telecommunications Network (FTN) business model.
- Configuration (Ia.Ftn.Cl.Models.Business) : Configuration Framework class for Fixed Telecommunications Network (FTN) business model.
- Contact (Ia.Ftn.Cl.Models.Business) : Contact support class of Fixed Telecommunications Network (FTN) business model.
- Default (Ia.Ftn.Cl.Models.Business) : Default general support class of Fixed Telecommunications Network (FTN) business model.
- Axe (Ia.Ftn.Cl.Models.Business.Ericsson) : Ericsson AXE support class of Fixed Telecommunications Network (FTN) business model.
- Subscriber (Ia.Ftn.Cl.Models.Business.Ericsson) : AXE Subscriber support class for Fixed Telecommunications Network (FTN) business model.
- Heartbeat (Ia.Ftn.Cl.Models.Business) : Heartbeat information support class for the Fixed Telecommunications Network business model
- Asbr (Ia.Ftn.Cl.Models.Business.Huawei) : AGCF Users (ASBR) support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- Board (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's Board support class of Fixed Telecommunications Network (FTN) business model.
- Default (Ia.Ftn.Cl.Models.Business.Huawei) : Defaul general support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- Dev (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's Dev support class of Fixed Telecommunications Network (FTN) business model.
- Ems (Ia.Ftn.Cl.Models.Business.Huawei) : Element Management System (EMS) support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- Ims (Ia.Ftn.Cl.Models.Business.Huawei) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Huawei's Fixed Telecommunications Network (FTN) business model
- Mgw (Ia.Ftn.Cl.Models.Business.Huawei) : Media Gateway (MGW) support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- Nce (Ia.Ftn.Cl.Models.Business.Huawei) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Huawei's Fixed Telecommunications Network (FTN) business model
- Ont (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's Ont support class of Fixed Telecommunications Network (FTN) business model.
- OntSipInfo (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's EMS ONT SIP Info support class of Fixed Telecommunications Network (FTN) business model.
- Onu (Ia.Ngn.Cl.Model.Business.Huawei) : Huawei's ONU support class of Next Generation Network'a (NGN's) business model.
- Owsbr (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's OwSbr Entity Framework class for Fixed Telecommunications Network (FTN) business model.
- Port (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's Port support class of Fixed Telecommunications Network (FTN) business model.
- Sbr (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's Sbr Entity Framework class for Fixed Telecommunications Network (FTN) business model.
- Seruattr (Ia.Ftn.Cl.Models.Business.Huawei) : SERUATTR Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- SoftX (Ia.Ftn.Cl.Models.Business.Huawei) : U2020 Northbound Interface IP (SoftX) support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- Sps (Ia.Ftn.Cl.Models.Business.Huawei) : Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) business model.
- Vag (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's EMS VAG Entity Framework class for Fixed Telecommunications Network (FTN) business model.
- VoipPstnUser (Ia.Ftn.Cl.Models.Business.Huawei) : Huawei's EMS VOIP PSTN User support class of Fixed Telecommunications Network (FTN) business model.
- Ims (Ia.Ftn.Cl.Models.Business) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Fixed Telecommunications Network (FTN) business model
- Ip (Ia.Ftn.Cl.Models.Business) : IP support class of Fixed Telecommunications Network (FTN) business model.
- Mail (Ia.Ftn.Cl.Models.Business) : Mail process support class of Fixed Telecommunications Network (FTN) business model.
- Default (Ia.Ftn.Cl.Models.Business.Maintenance) : Default maintenance network information support class for the Fixed Telecommunications Network business model
- Find (Ia.Ftn.Cl.Models.Business.Maintenance) : Find subscriber and network information support class for the Fixed Telecommunications Network business model
- Script (Ia.Ftn.Cl.Models.Business.Maintenance) : Script support class for Fixed Telecommunications Network (FTN) class library model.
- Task (Ia.Ftn.Cl.Models.Business.Maintenance) : Execute backend task support class for the Fixed Telecommunications Network business model
- DatabaseInformation (Ia.Ftn.Mdaa.Cl.Models.Business) : DatabaseInformation support class for Ministry Database Analysis Application business model.
- Default (Ia.Ftn.Cl.Models.Business.Mdaa) : Default mdaa network information support class for the Fixed Telecommunications Network business model
- MinistryDatabase (Ia.Ftn.Cl.Models.Business.Mdaa) : MinistryDatabase support class for Fixed Telecommunications Network (FTN) business model.
- TableInformation (Ia.Ftn.Mdaa.Cl.Models.Business) : TableInformation support class for Ministry Database Analysis Application business model.
- MessageQueue (Ia.Ftn.Cl.Models.Business) : MessageQueue support class for Fixed Telecommunications Network (FTN) business model.
- Migration (Ia.Ftn.Cl.Models.Business) : Migration support class of Fixed Telecommunications Network (FTN) business model.
- NetworkDesignDocument (Ia.Ftn.Cl.Models.Business) : Network Design Document support class for Fixed Telecommunications Network (FTN) business model.
- AgcfEndpoint (Ia.Ftn.Cl.Models.Business.Nokia) : AGCF Endpoint support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- AgcfGatewayRecord (Ia.Ftn.Cl.Models.Business.Nokia) : AGCF Gateway Records support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- AgcfGatewayTable (Ia.Ftn.Cl.Models.Business.Nokia) : AGCF Gateway Table support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- Ams (Ia.Ftn.Cl.Models.Business.Nokia) : Access Management System (AMS) support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- AmsTransaction (Ia.Ftn.Cl.Models.Nokia.Business) : Nokia AmsTransaction Entity Framework class for Fixed Telecommunications Network (FTN) business model.
- Ims (Ia.Ftn.Cl.Models.Business.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- Ont (Ia.Ftn.Cl.Models.Business.Nokia) : ONT support class of Fixed Telecommunications Network (FTN) Nokia business model.
- OntOntPots (Ia.Ftn.Cl.Models.Business.Nokia) : ONT-ONTPOTS support class of Fixed Telecommunications Network (FTN) Nokia business model.
- OntServiceHsi (Ia.Ngn.Cl.Model.Business.Nokia) : ONT-SERVICEHSI support class of Next Generation Network'a (NGN's) Nokia business model.
- OntServiceVoip (Ia.Ftn.Cl.Models.Business.Nokia) : ONT-SERVICEVOIP support class of Fixed Telecommunications Network (FTN) Nokia business model.
- Sdc (Ia.Ftn.Cl.Models.Business.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- SubParty (Ia.Ftn.Cl.Models.Business.Nokia) : SubParty support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- Subscriber (Ia.Ftn.Cl.Models.Business.Nokia) : Subscriber support class for Nokia's Fixed Telecommunications Network (FTN) business model.
- Procedure (Ia.Ftn.Cl.Models.Business) : Provision support class of Fixed Telecommunications Network (FTN) business model.
- Provision (Ia.Ftn.Cl.Models.Business) : Provision support class of Fixed Telecommunications Network (FTN) business model.
- Report (Ia.Ftn.Cl.Models.Business) : Report support class of Fixed Telecommunications Network (FTN) business model.
- Secretary (Ia.Ftn.Cl.Models.Business) : Secretary support class of Fixed Telecommunications Network (FTN) business model.
- Service (Ia.Ftn.Cl.Models.Business) : Service support class of Fixed Telecommunications Network (FTN) business model.
- Service2 (Ia.Ftn.Cl.Models.Business) : Service Entity Framework class for Fixed Telecommunications Network (FTN) business model.
- ServiceAddress (Ia.Ftn.Cl.Models.Business) : ServiceAddress Framework class for Fixed Telecommunications Network (FTN) business model.
- ServiceRequest (Ia.Ftn.Cl.Models.Business) : Service Request support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestAdministrativeIssue (Ia.Ftn.Cl.Models.Business) : Service Request Administrative Issue support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestHistory (Ia.Ftn.Cl.Models.Business) : Service Request History support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestHsi (Ia.Ngn.Cl.Model.Business) : Service Request Hsi support class of Next Generation Network'a (NGN's) business model.
- ServiceRequestOnt (Ia.Ftn.Cl.Models.Business) : Service Request Ont support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestOntDetail (Ia.Ftn.Cl.Models.Business) : Service Request Ont Detail support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestService (Ia.Ftn.Cl.Models.Business) : Service Request Service support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestStatisticalVariable (Ia.Ftn.Cl.Models.Business) : ServiceRequestStatisticalVariable support class of Fixed Telecommunications Network (FTN) business model.
- ServiceRequestType (Ia.Ftn.Cl.Models.Business) : Service Request Type support class of Fixed Telecommunications Network (FTN) business model.
- ServiceSerialRequestService (Ia.Ftn.Cl.Models.Business) : Service Serial Request Service support class of Fixed Telecommunications Network (FTN) business model.
- ServiceServiceRequestOnt (Ia.Ftn.Cl.Models.Business) : ServiceServiceRequestOnt support class for Fixed Telecommunications Network (FTN) business model.
- Ewsd (Ia.Ftn.Cl.Models.Business.Siemens) : Nokia's Siemens EWSD support class of Fixed Telecommunications Network (FTN) business model.
- Subscriber (Ia.Ftn.Cl.Models.Business.Siemens) : EWSD Subscriber support class for Fixed Telecommunications Network (FTN) business model.
- Transction (Ia.Ftn.Cl.Models.Business) : Transction support class of Fixed Telecommunications Network (FTN) business model.
- Axe (Ia.Ftn.Cl.Models.Client.Ericsson) : Ericsson's AXE support class for Ericsson's PSTN Exchange Migration to Fixed Telecommunications Network (FTN) client model.
- Ems (Ia.Ftn.Cl.Models.Client.Huawei) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) client support class for Huawei's Fixed Telecommunications Network (FTN) EMS client model.
- Ims (Ia.Ftn.Cl.Models.Client.Huawei) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) client support class for Huawei's Fixed Telecommunications Network (FTN) client model.
- SoftX (Ia.Ftn.Cl.Models.Client.Huawei) : U2020 Northbound Interface IP (SoftX) support class for Huawei's Fixed Telecommunications Network (FTN) client model.
- Sps (Ia.Ftn.Cl.Models.Client.Huawei) : Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) SPS client model.
- Ams (Ia.Ftn.Cl.Models.Client.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) client support class for Nokia's Fixed Telecommunications Network (FTN) AMS client model.
- Ims (Ia.Ftn.Cl.Models.Client.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) client support class for Nokia's Fixed Telecommunications Network (FTN) client model.
- Sdc (Ia.Ftn.Cl.Models.Client.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) client support class for Nokia's Fixed Telecommunications Network (FTN) client model.
- TelnetModel (Ia.Ftn.Cl.Models.Client) : This class encapsulates the Model part of the Model-View-Controller design pattern, and is used by samples that utilize the PowerTCP Telnet component (part of the Emulation for .NET and Telnet for .NET products). This class can be added to additional applications without the need for cut-and-paste. Note that because this class is used in both the Emulation and Telnet product samples, a compile-time directive indicates which namespace to use (Dart.Emulation or Dart.Telnet).
- Contact (Ia.Ftn.Cl.Models) : Contact Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Access (Ia.Ftn.Cl.Models.Data) : Access support class for Fixed Telecommunications Network (FTN) data model.
- Administration (Ia.Ftn.Cl.Models.Data) : Administration support class for Fixed Telecommunications Network (FTN) data model.
- Contact (Ia.Ftn.Cl.Models.Data) : Contact Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- Default (Ia.Ftn.Cl.Models.Data) : Default support class for Fixed Telecommunications Network (FTN) data model.
- Axe (Ia.Ftn.Cl.Models.Data.Ericsson) : Ericsson AXE support class of Fixed Telecommunications Network (FTN) data model.
- Subscriber (Ia.Ftn.Cl.Models.Data.Ericsson) : AXE Subscriber support class for Fixed Telecommunications Network (FTN) data model.
- Event (Ia.Ftn.Cl.Models.Data) : Nokia AMS Event support class for Fixed Telecommunications Network (FTN) data model.
- Guide (Ia.Ftn.Cl.Models.Data) : Guide support class for Fixed Telecommunications Network (FTN) data model.
- Help (Ia.Ftn.Cl.Models.Data) : Help class for Fixed Telecommunications Network (FTN) data model.
- Asbr (Ia.Ftn.Cl.Models.Data.Huawei) : AGCF Users (ASBR) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- Board (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's Board support class of Fixed Telecommunications Network (FTN) data model.
- Default (Ia.Ftn.Cl.Models.Data.Huawei) : Defaul general support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- Dev (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's Dev support class of Fixed Telecommunications Network (FTN) data model.
- Ems (Ia.Ftn.Cl.Models.Data.Huawei) : Access Management System (AMS) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- Ims (Ia.Ftn.Cl.Models.Data.Huawei) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Huawei's Fixed Telecommunications Network (FTN) data model
- Mgw (Ia.Ftn.Cl.Models.Data.Huawei) : Media Gateway (MGW) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- Ont (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's Ont support class of Fixed Telecommunications Network (FTN) data model.
- OntSipInfo (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's EMS ONT SIP INFO support class of Fixed Telecommunications Network (FTN) data model.
- Onu (Ia.Ngn.Cl.Model.Data.Huawei) : Huawei ONU support class for Next Generation Network (NGN) data model.
- Owsbr (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's Owsbr Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- Port (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's Port support class of Fixed Telecommunications Network (FTN) data model.
- Sbr (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's Sbr Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- Seruattr (Ia.Ftn.Cl.Models.Data.Huawei) : SERUATTR Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- SoftX (Ia.Ftn.Cl.Models.Data.Huawei) : U2020 Northbound Interface IP (SoftX) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- Sps (Ia.Ftn.Cl.Models.Data.Huawei) : Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
- Vag (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's EMS VAG Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- VoipPstnUser (Ia.Ftn.Cl.Models.Data.Huawei) : Huawei's EMS VOIP PSTN User support class of Fixed Telecommunications Network (FTN) data model.
- Ims (Ia.Ftn.Cl.Models.Data) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Fixed Telecommunications Network (FTN) data model
- Mail (Ia.Ftn.Cl.Models.Data) : Mail class for Fixed Telecommunications Network (FTN) data model.
- Cache (Ia.Ngn.Cl.Model.Data.Maintenance) : Cache support class for the Next Generation Network data model
- Find (Ia.Ftn.Cl.Models.Data.Maintenance) : Find subscriber and network information support class for the Fixed Telecommunications Network data model
- MinistryDatabase (Ia.Ftn.Cl.Models.Data) : MinistryDatabase support class for Fixed Telecommunications Network (FTN) data model.
- MessageQueue (Ia.Ftn.Cl.Models.Data) : MessageQueue support class for Fixed Telecommunications Network (FTN) data model.
- Migration (Ia.Ftn.Cl.Models.Data) : Migration support class of Fixed Telecommunications Network (FTN) data model.
- Miscellaneous (Ia.Ftn.Cl.Models.Data) : Miscellaneous Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- NetworkDesignDocument (Ia.Ftn.Cl.Models.Data) : Network Design Document support class for Fixed Telecommunications Network (FTN) data model.
- AgcfEndpoint (Ia.Ftn.Cl.Models.Data.Nokia) : AGCF Endpoint support class for Nokia data model.
- AgcfGatewayRecord (Ia.Ftn.Cl.Models.Data.Nokia) : AGCF Gateway Records support class for Nokia data model.
- Ams (Ia.Ftn.Cl.Models.Data.Nokia) : Access Management System (AMS) support class for Nokia data model.
- AmsTransaction (Ia.Ftn.Cl.Models.Data.Nokia) : Nokia AmsTransaction Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- Default (Ia.Ftn.Cl.Models.Data.Nokia) : Defaul general support class for Nokia's Fixed Telecommunications Network (FTN) data model.
- Ims (Ia.Ftn.Cl.Models.Data.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Nokia's Fixed Telecommunications Network (FTN) data model.
- Ont (Ia.Ftn.Cl.Models.Data.Nokia) : ONT support class for Fixed Telecommunications Network (FTN) Nokia data model.
- OntOntPots (Ia.Ftn.Cl.Models.Data.Nokia) : ONT-ONTPOTS support class for Fixed Telecommunications Network (FTN) Nokia data model.
- OntServiceHsi (Ia.Ngn.Cl.Model.Data.Nokia) : ONT-SERVICEHSI support class for Next Generation Network (NGN) Nokia data model.
- OntServiceVoip (Ia.Ftn.Cl.Models.Data.Nokia) : ONT-SERVICEVOIP support class for Fixed Telecommunications Network (FTN) Nokia data model.
- Sdc (Ia.Ftn.Cl.Models.Data.Nokia) : Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Nokia's Fixed Telecommunications Network (FTN) data model.
- SubParty (Ia.Ftn.Cl.Models.Data.Nokia) : SubParty support class for Nokia's Fixed Telecommunications Network (FTN) data model.
- Subscriber (Ia.Ftn.Cl.Models.Data.Nokia) : Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) data model.
- Pots (Ia.Ftn.Cl.Models.Data) : POTS legacy support class for Fixed Telecommunications Network (FTN) data model.
- Provision (Ia.Ftn.Cl.Models.Data) : Provision support class for Fixed Telecommunications Network (FTN) data model.
- Report (Ia.Ftn.Cl.Models.Data) : Report support class for Fixed Telecommunications Network (FTN) data model.
- ReportHistory (Ia.Ftn.Cl.Models.Data) : Report History support class for Fixed Telecommunications Network (FTN) data model.
- Secretary (Ia.Ftn.Cl.Models.Data) : Secretary support class of Fixed Telecommunications Network (FTN) data model.
- Service (Ia.Ftn.Cl.Models.Data) : Service support class for Fixed Telecommunications Network (FTN) data model.
- Service2 (Ia.Ftn.Cl.Models.Data) : Service support class for Fixed Telecommunications Network (FTN) data model.
- ServiceExemption (Ia.Ftn.Cl.Models.Data) : ServiceExemption Framework class for Fixed Telecommunications Network (FTN) data model.
- ServiceInitialState (Ia.Ngn.Cl.Model.Data) : Service Initial State Framework class for Next Generation Network (NGN) data model.
- ServiceRequest (Ia.Ftn.Cl.Models.Data) : Service Request support class for Fixed Telecommunications Network (FTN) data model.
- ServiceRequestAdministrativeIssue (Ia.Ftn.Cl.Models.Data) : Service Request Administrative Issue support class for Fixed Telecommunications Network (FTN) data model.
- ServiceRequestHistory (Ia.Ftn.Cl.Models.Data) : Service Request History support class for Fixed Telecommunications Network (FTN) data model.
- ServiceRequestHsi (Ia.Ngn.Cl.Model.Data) : Service Request Hsi support class for Next Generation Network (NGN) data model.
- ServiceRequestOnt (Ia.Ftn.Cl.Models.Data) : Service Request Ont support class for Fixed Telecommunications Network (FTN) data model.
- ServiceRequestOntDetail (Ia.Ftn.Cl.Models.Data) : Service Request Ont Detail support class for Fixed Telecommunications Network (FTN) data model.
- ServiceRequestService (Ia.Ftn.Cl.Models.Data) : Service Request Service support class for Fixed Telecommunications Network (FTN) data model.
- ServiceRequestType (Ia.Ftn.Cl.Models.Data) : Service Request Type support class for Fixed Telecommunications Network (FTN) data model.
- Ewsd (Ia.Ftn.Cl.Models.Data.Siemens) : Nokia's Siemens EWSD support class of Fixed Telecommunications Network (FTN) data model.
- Subscriber (Ia.Ftn.Cl.Models.Data.Siemens) : EWSD Subscriber support class for Fixed Telecommunications Network (FTN) data model.
- StaffIdentityUser (Ia.Ftn.Cl.Models.Data) : Staff Support Class for Fixed Telecommunications Network (FTN) Ia.Ftn.Cl.Models.Data Model.
- Transaction (Ia.Ftn.Cl.Models.Data) : Transaction support class for Fixed Telecommunications Network (FTN) data model.
- AxeSubscriber (Ia.Ftn.Cl.Models.Ericsson) : AXE Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Event (Ia.Ftn.Cl.Models) : Event Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Asbr (Ia.Ftn.Cl.Models.Huawei) : Huawei's AGCF Users (ASBR) Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsBoard (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS Board Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsDev (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS Dev Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsOnt (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS Ont Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsOntSipInfo (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS ONT SIP INFO Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsPort (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS Port Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsVag (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS VAG Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EmsVoipPstnUser (Ia.Ftn.Cl.Models.Huawei) : Huawei's EMS VOIP PSTN User Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Mgw (Ia.Ftn.Cl.Models.Huawei) : Huawei's Media Gateway (MGW) Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Msan (Ia.Ngn.Cl.Model.Huawei) : Huawei's Msan Entity Framework class for Next Generation Network (NGN) entity model.
- Onu (Ia.Ngn.Cl.Model.Huawei) : Huawei's ONU Entity Framework class for Next Generation Network (NGN) entity model.
- Owsbr (Ia.Ftn.Cl.Models.Huawei) : Huawei's Owsbr Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Sbr (Ia.Ftn.Cl.Models.Huawei) : Huawei's Sbr Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Seruattr (Ia.Ftn.Cl.Models.Huawei) : SERUATTR Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) entity model.
- Inventory (Ia.Ftn.Cl.Models) : Inventory Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- LogicalCircuit (Ia.Ngn.Cl.Models) : Logical-Circuit Entity Framework class for Next Generation Network (NGN) entity model.
- Miscellaneous (Ia.Ftn.Cl.Models) : Miscellaneous Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- NddPon (Ia.Ngn.Cl.Models.NetworkDesignDocument) : Network Design Document support class for Next Generation Network (NGN) entity model.
- AgcfEndpoint (Ia.Ftn.Cl.Models.Nokia) : AGCF Endpoint Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- AgcfGatewayRecord (Ia.Ftn.Cl.Models.Nokia) : AGCF Gateway Record Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- AlInitialInstallation (Ia.Ngn.Cl.Model.AlcatelLucent) : Alcatel-Lucent Initial Installation Entity Framework class for Next Generation Network (NGN) entity model.
- AmsTransaction (Ia.Ftn.Cl.Models.Nokia) : Nokia AmsTransaction Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- SubParty (Ia.Ftn.Cl.Models.Nokia) : SubParty Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Subscriber (Ia.Ftn.Cl.Models.Nokia) : Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Ont (Ia.Ftn.Cl.Models) : ONT Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- OntOntPots (Ia.Ftn.Cl.Models) : ONT-ONTPOTS Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- OntServiceHsi (Ia.Ngn.Cl.Models) : ONT-SERVICEHSI Entity Framework class for Next Generation Network (NGN) entity model.
- OntServiceVoip (Ia.Ftn.Cl.Models) : ONT-SERVICEVOIP Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Report (Ia.Ftn.Cl.Models) : Report Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ReportHistory (Ia.Ftn.Cl.Models) : Report History Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Service2 (Ia.Ftn.Cl.Models) : Service Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceExemption (Ia.Ftn.Cl.Models) : ServiceExemption Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceInitialState (Ia.Ngn.Cl.Models) : Service Initial State Entity Framework class for Next Generation Network (NGN) entity model.
- ServiceRequest (Ia.Ftn.Cl.Models) : Service Request Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceRequestAdministrativeIssue (Ia.Ftn.Cl.Models) : Service Request Administrative Issue Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceRequestHistory (Ia.Ftn.Cl.Models) : Service Request History Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceRequestHsi (Ia.Ngn.Cl.Models) : Service Request Hsi Entity Framework class for Next Generation Network (NGN) entity model.
- ServiceRequestOnt (Ia.Ftn.Cl.Models) : Service Request Ont Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceRequestOntDetail (Ia.Ftn.Cl.Models) : Service Request Ont Detail Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceRequestService (Ia.Ftn.Cl.Models) : Service Request Service Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- ServiceRequestType (Ia.Ftn.Cl.Models) : Service Request Type Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- EwsdSubscriber (Ia.Ftn.Cl.Models.Siemens) : EWSD Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- StaffIdentityUser (Ia.Ftn.Cl.Models) : Staff Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Chat (Ia.Ftn.Cl.Models.Telegram) : Telegram Chat/Group/User support class of Fixed Telecommunications Network (FTN) business and data model.
- Transaction (Ia.Ftn.Cl.Models) : Transaction Entity Framework class for Fixed Telecommunications Network (FTN) entity model.
- Access (Ia.Ftn.Cl.Models.Ui) : Access support class for Fixed Telecommunications Network (FTN) ui model.
- Default (Ia.Ftn.Cl.Models.Ui.Administration) : Administration support class for Fixed Telecommunications Network (FTN) ui model.
- Framework (Ia.Ftn.Cl.Models.Ui.Administration) : Network Design Document support class for Fixed Telecommunications Network (FTN) UI model.
- Default (Ia.Ftn.Cl.Models.Ui) : Default support class for Fixed Telecommunications Network (FTN) ui model.
- Subscriber (Ia.Ftn.Cl.Models.Ui.Ericsson) : AXE Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- EmsOnt (Ia.Ftn.Cl.Models.Ui.Huawei) : Huawei's EMS Ont Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- Sbr (Ia.Ftn.Cl.Models.Ui.Huawei) : Huawei's Sbr Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- InventoryForDataGridView (Ia.Ftn.Cl.Models.Ui) : Inventory For DataGridView support class for Fixed Telecommunications Network (FTN) ui model.
- Mail (Ia.Ftn.Cl.Models.Ui) : Mail process support class of Fixed Telecommunications Network (FTN) UI model.
- AccessFamilyTypeAreaBlock (Ia.Ftn.Cl.Models.Ui.Maintenance) : Maintenance support class for Fixed Telecommunications Network (FTN) ui model.
- Find (Ia.Ftn.Cl.Models.Ui.Maintenance) : Find subscriber and network information support class for the Fixed Telecommunications Network ui model
- Ams (Ia.Ftn.Cl.Models.Ui.Maintenance.Transaction) : Ams support class for Fixed Telecommunications Network (FTN) ui model.
- Default (Ia.Ftn.Cl.Models.Ui.Maintenance.Report) : Maintenance Report data support class for the Fixed Telecommunications Network ui model
- NetworkDesignDocument (Ia.Ftn.Cl.Models.Ui) : Network Design Document support class for Fixed Telecommunications Network (FTN) UI model.
- AgcfEndpoint (Ia.Ftn.Cl.Models.Ui.Nokia) : AGCF Endpoint Entity Framework class for Fixed Telecommunications Network (FTN) ui model.
- AgcfGatewayRecord (Ia.Ftn.Cl.Models.Ui.Nokia) : AGCF Gateway Record Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- SubParty (Ia.Ftn.Cl.Models.Ui.Nokia) : SubParty Entity Framework class for Fixed Telecommunications Network (FTN) ui model.
- Subscriber (Ia.Ftn.Cl.Models.Ui.Nokia) : Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) ui model.
- Performance (Ia.Ftn.Cl.Models.Ui) : Performance support class for Fixed Telecommunications Network (FTN) ui model.
- Access (Ia.Ftn.Cl.Models.Ui.Provision) : Access support class for Fixed Telecommunications Network (FTN) ui model.
- Report (Ia.Ftn.Cl.Models.Ui) : Report support class for Fixed Telecommunications Network (FTN) ui model.
- ReportAccessServiceRequest (Ia.Ftn.Cl.Models.Ui) : Report Access Service Request support class for Fixed Telecommunications Network (FTN) ui model.
- Service2 (Ia.Ftn.Cl.Models.Ui) : Service class for Fixed Telecommunications Network (FTN) UI model.
- ServiceAccessFlatTermId (Ia.Ftn.Cl.Models.Ui) : ServiceAccessFlatTermId support class for Fixed Telecommunications Network (FTN) ui model.
- ServiceAreaSymbolServiceRequestTypeIdServiceRequestTypeValue (Ia.Ftn.Cl.Models.Ui) : ServiceRequest ServiceRequestService Access Statistic support class for Fixed Telecommunications Network (FTN) ui model.
- ServiceCustomerAddressAccessStatisticalAccessName (Ia.Ftn.Cl.Models.Ui) : ServiceRequest ServiceRequestService Access Statistic support class for Fixed Telecommunications Network (FTN) ui model.
- ServiceRequestAdministrativeIssue (Ia.Ftn.Cl.Models.Ui) : Service Request Administrative Issue Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- ServiceRequestService (Ia.Ftn.Cl.Models.Ui) : Service Request Service Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- Subscriber (Ia.Ftn.Cl.Models.Ui.Siemens) : EWSD Subscriber Entity Framework class for Fixed Telecommunications Network (FTN) UI model.
- Text (Ia.Ftn.Cl.Models.Ui) : Text support class for Fixed Telecommunications Network (FTN) ui model.
- AboutController (Ia.Ftn.Wa.Controllers) :
- AccountController (Ia.Ftn.Wa.Controllers) :
- AdministrationController (Ia.Ftn.Wa.Controllers) :
- AlarmController (Ia.Ftn.Wa.Controllers) :
- ApplicationController (Ia.Ftn.Wa.Controllers) :
- ContactController (Ia.Ftn.Wa.Controllers) :
- HelpController (Ia.Ftn.Wa.Controllers) :
- HomeController (Ia.Ftn.Wa.Controllers) :
- IdentityController (Ia.Ftn.Wa.Controllers) :
- InventoryController (Ia.Ftn.Wa.Controllers) :
- LegalController (Ia.Ftn.Wa.Controllers) :
- MaintenanceController (Ia.Ftn.Wa.Controllers) :
- MaintenanceEventController (Ia.Ftn.Wa.Controllers) :
- MaintenanceReportController (Ia.Ftn.Wa.Controllers) :
- MaintenanceScriptController (Ia.Ftn.Wa.Controllers) :
- ProvisionController (Ia.Ftn.Wa.Controllers) :
- ServiceController (Ia.Ftn.Wa.Controllers) :
- AccessNetwork (Ia.Ftn.Wa.Models.Administration) :
- AccessNetworkViewModel (Ia.Ftn.Wa.Models.Administration) :
- AreaReadiness (Ia.Ftn.Wa.Models.Administration) :
- AreaReadinessViewModel (Ia.Ftn.Wa.Models.Administration) :
- IndexViewModel (Ia.Ftn.Wa.Models.Administration) :
- Kpi (Ia.Ftn.Wa.Models.Administration) :
- KpiViewModel (Ia.Ftn.Wa.Models.Administration) :
- Sdc (Ia.Ftn.Wa.Models.Administration) :
- SdcViewModel (Ia.Ftn.Wa.Models.Administration) :
- ServiceRequestAdministrativeIssue (Ia.Ftn.Wa.Models.Administration) :
- ServiceRequestAdministrativeIssueViewModel (Ia.Ftn.Wa.Models.Administration) :
- ServiceStatus (Ia.Ftn.Wa.Models.Administration) :
- ServiceStatusViewModel (Ia.Ftn.Wa.Models.Administration) :
- StaffViewModel (Ia.Ftn.Wa.Models.Administration) :
- Statistics (Ia.Ftn.Wa.Models.Administration) :
- StatisticsViewModel (Ia.Ftn.Wa.Models.Administration) :
- AlarmViewModel (Ia.Ftn.Wa.Models.Alarm) :
- Index (Ia.Ftn.Wa.Models.Alarm) :
- ApplicationViewModel (Ia.Ftn.Wa.Models.Application) :
- IdentityViewModel (Ia.Ftn.Wa.Models.Application) :
- Index (Ia.Ftn.Wa.Models.Application) :
- Index2 (Ia.Ftn.Wa.Models.Application) :
- Administration (Ia.Ftn.Wa.Models.Business) : Administration support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- Contact (Ia.Ftn.Wa.Models.Business) : Contact support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- Default (Ia.Ftn.Wa.Models.Business) : Administration support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- Script (Ia.Ftn.Wa.Models.Business.Maintenance) : Script support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- Index (Ia.Ftn.Wa.Models.Contact) : Contact support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- ContactViewModel (Ia.Ftn.Wa.Models.Contact) :
- Administration (Ia.Ftn.Wa.Models.Data) : Administration support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- Script (Ia.Ftn.Wa.Models.Data) : Script support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- ErrorViewModel (Ia.Ftn.Wa.Models) :
- ChangePasswordViewModel (Ia.Ftn.Wa.Models.IdentityViewModels) :
- LoginViewModel (Ia.Ftn.Wa.Models.Identity) :
- ResetPasswordViewModel (Ia.Ftn.Wa.Models.IdentityViewModels) :
- Access (Ia.Ftn.Wa.Models.Maintenance) :
- AccessViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Bulk (Ia.Ftn.Wa.Models.Maintenance) :
- BulkViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- FieldTnmdSupplier (Ia.Ftn.Wa.Models.Maintenance) :
- FieldTnmdSupplierViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Find (Ia.Ftn.Wa.Models.Maintenance) :
- FindViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Index (Ia.Ftn.Wa.Models.Maintenance) :
- Integrity (Ia.Ftn.Wa.Models.Maintenance) :
- IntegrityViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- List (Ia.Ftn.Wa.Models.Maintenance) :
- ListViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- MaintenanceEventViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- MaintenanceViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Performance (Ia.Ftn.Wa.Models.Maintenance) :
- PerformanceViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Report (Ia.Ftn.Wa.Models.Maintenance) :
- ReportViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Script (Ia.Ftn.Wa.Models.Maintenance) :
- ScriptViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Sync (Ia.Ftn.Wa.Models.Maintenance) :
- SyncViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Table (Ia.Ftn.Wa.Models.Maintenance) :
- TableViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- Transaction (Ia.Ftn.Wa.Models.Maintenance) :
- TransactionViewModel (Ia.Ftn.Wa.Models.Maintenance) :
- MenuViewModel (Ia.Ftn.Wa.Models) :
- ParameterViewModel (Ia.Ftn.Wa.Models) :
- Mail (Ia.Ftn.Wa.Models.Provision.Access) :
- MailViewModel (Ia.Ftn.Wa.Models.Provision.Access) :
- Manage (Ia.Ftn.Wa.Models.Provision.Access) :
- ManageViewModel (Ia.Ftn.Wa.Models.Provision.Access) :
- Service (Ia.Ftn.Wa.Models.Provision.Access) :
- ServiceViewModel (Ia.Ftn.Wa.Models.Provision.Access) :
- Lic (Ia.Ftn.Wa.Models.Provision) :
- LicViewModel (Ia.Ftn.Wa.Models.Provision) :
- Manage (Ia.Ftn.Wa.Models.Provision.Migration) :
- ManageViewModel (Ia.Ftn.Wa.Models.Provision.Migration) :
- Service (Ia.Ftn.Wa.Models.Provision) :
- ServiceExemption (Ia.Ftn.Wa.Models.Provision) :
- ServiceExemptionViewModel (Ia.Ftn.Wa.Models.Provision) :
- ServiceRequest (Ia.Ftn.Wa.Models.Provision) :
- ServiceRequestServiceAccess (Ia.Ftn.Wa.Models.Provision) :
- ServiceRequestServiceAccessViewModel (Ia.Ftn.Wa.Models.Provision) :
- ServiceRequestViewModel (Ia.Ftn.Wa.Models.Provision) :
- ServiceViewModel (Ia.Ftn.Wa.Models.Provision) :
- QrCodeViewModel (Ia.Ftn.Wa.Models) :
- Default (Ia.Ftn.Wa.Models.Ui) : Default support class for Fixed Telecommunications Network (FTN) web application (Intranet) model.
- ServiceAndroidApplicationTrekCountry (Ia.Ftn.Wa.Models.Ui) :
- Mouse (Ia.Cl.Model) : Windows mouse movements and properties control support class.
- Winapi (Ia.Cl.Model) : WINAPI click events support class.
- HomeController (Ia.Hsb.DrugOnCall.Wa.Controllers) :
- ErrorViewModel (Ia.Hsb.DrugOnCall.Wa.Models) :
- HomeViewModel (Ia.Hsb.DrugOnCall.Wa.Models) :
- Ui (Ia.Hsb.DrugOnCall.Wa.Models) :
- HomeController (Ia.Hsb.Pregnalact.Wa.Controllers) :
- ErrorViewModel (Ia.Hsb.Pregnalact.Wa.Models) :
- HomeViewModel (Ia.Hsb.Pregnalact.Wa.Models) :
- Ui (Ia.Hsb.Pregnalact.Wa.Models) :
- AgentController (Ia.Api.Wa.Controllers) : Agent API Controller class.
- AuthorizationHeaderHandler () :
- DefaultController (Ia.Api.Wa.Controllers) : Default API Controller class.
- GeoIpController (Ia.Api.Wa.Controllers) : GeoIp API Controller class of Internet Application project model.
- HeartbeatController (Ia.Api.Wa.Controllers) : Heartbeat API Controller class.
- HomeController (Ia.Api.Wa.Controllers) :
- PacketController (Ia.Api.Wa.Controllers) : Packet API Controller class.
- TempController (Ia.Api.Wa.Controllers.Db) : DB Temp API Controller class.
- TraceController (Ia.Api.Wa.Controllers) : Trace API Controller class.
- WeatherController (Ia.Api.Wa.Controllers) : OpenWeatherMap API Controller class.
- WebhookController (Ia.Api.Wa.Controllers) : Webhook API Controller class.
- Ui (Ia.Api.Wa.Models) :
- WeatherForecast (Ia.Api.Wa.Models) :
- Webhook (Ia.Api.Wa.Models) :
- HomeController (Ia.Cdn.Wa.Controllers) :
- ErrorViewModel (Ia.Cdn.Wa.Models) :
- ApplicationDbContext (Ia.Cl) :
- ApplicationUser (Ia.Cl) :
- Db (Ia.Cl) :
- DynamicSiteMapProvider () : Sitemap support class.
- Enumeration () : Enumeration class. Extends enumeration to class like behaviour.
- Extention () : Extention methods for different class objects.
- Agent (Ia.Cl.Models) : Agent model
- ApplicationConfiguration (Ia.Cl.Models) : ApplicationConfiguration class.
- Authentication (Ia.Cl.Model) : Manage and verify user logging and passwords. The administrator will define the user's password and logging website. The service will issue a true of false according to authentication.
- Storage (Ia.Cl.Model.Azure) : Azure Cloud related support functions.
- Default (Ia.Cl.Model.Business.Nfc) : Default NFC Near-Field Communication (NFC) Support Business functions
- Inventory (Ia.Cl.Model.Business.Nfc) : Inventory NFC Near-Field Communication (NFC) Support Business functions
- Tag (Ia.Cl.Model.Business.Nfc) : TAG NFC Near-Field Communication (NFC) Support Business functions
- Country (Ia.Cl.Models) : Country geographic coordinates and standard UN naming conventions.
- Germany (Ia.Cl.Models) : German cities and states.
- Kuwait (Ia.Cl.Models) : Kuwait provinces, cities, and areas.
- SaudiArabia (Ia.Cl.Models) : Saudi Arabia provinces, cities, and areas.
- Encryption (Ia.Cl.Models.Cryptography) : Symmetric Key Algorithm (Rijndael/AES) to encrypt and decrypt data.
- Default (Ia.Cl.Models.Data) : Support class for data model
- Default (Ia.Cl.Model.Data.Nfc) : Default NFC Near-Field Communication (NFC) Support Data functions
- Inventory (Ia.Cl.Model.Data.Nfc) : Inventory NFC Near-Field Communication (NFC) Support Data functions
- Project (Ia.Cl.Model.Nfc.Data) : Project Support class for NFC data model
- Tag (Ia.Cl.Model.Data.Nfc) : TAG NFC Near-Field Communication (NFC) Support Data functions
- Msmq (Ia.Cl.Model.Db) : MSMQ Database support class. This handles storing and retrieving MSMQ storage.
- MySql (Ia.Model.Db) : MySQL supporting class.
- Object (Ia.Cl.Model.Db) : Object entity class
- Odbc (Ia.Cl.Model.Db) : ODBC support class.
- OleDb (Ia.Cl.Models.Db) : OLEDB support class
- Oracle (Ia.Cl.Models.Db) : Oracle support class.
- Sqlite (Ia.Cl.Models.Db) : SQLite support class.
- SqlServer (Ia.Cl.Models.Db) : SQL Server support class.
- SqlServerCe (Ia.Cs.Db) : SQL Server CE support class.
- Temp (Ia.Cl.Models.Db) : Temporary Storage support class.
- Text (Ia.Cl.Models.Db) : Text Database support class. This handles storing and retrieving text storage.
- Xml (Ia.Cl.Models.Db) : XML Database support class. This handles storing and retrieving XDocument storage.
- Default (Ia.Cl.Models) : General use static class of common functions used by most applications.
- Gv (Ia.Cl.Models.Design) : ASP.NET design related support class.
- File (Ia.Cl.Models) : File manipulation related support class.
- Ftp (Ia.Cl.Models) : A wrapper class for .NET 2.0 FTP
- Location (Ia.Cl.Models.Geography) : Geographic location related function, location, coordinates (latitude, longitude), bearing, degree and radian conversions, CMap value for resolution, and country geographic info-IP from MaxMind.
- GeoIp (Ia.Cl.Models) : GeoIp class of Internet Application project model.
- Gmail (Ia.Cl.Models) : Gmail API support class
- StaticMap (Ia.Cl.Models.Google) : Google support class.
- Drive (Ia.Cl.Models.Google) : Google Drive Directory and File support class.
- Heartbeat (Ia.Cl.Models) : Heartbeat class.
- Hijri (Ia.Cl.Model) : Hijri date handler class.
- Html (Ia.Cl.Models) : Handle HTML encoding, decoding functions.
- HtmlHelper (Ia.Cl.Models) : HtmlHelper for ASP.Net Core.
- Http (Ia.Cl.Models) : Contains functions that relate to posting and receiving data from remote Internet/Intranet pages
- Identity (Ia.Cl.Models) : ASP.NET Identity support class.
- Image (Ia.Cl.Models) : Image processing support class.
- Imap (Ia.Cl.Models) : IMAP Server Support Class
- Language (Ia.Cl.Models) : Language related support class including langauge list and codes.
- Individual (Ia.Cl.Model.Life) : Individual object.
- Main (Ia.Cl.Models.Life) : General base class for life entities. Make it link through delegates to create and update database objects.
- Log (Ia.Cl.Models) : Log file support class.
- Mouse (Ia.Cl.Models) : Windows mouse movements and properties control support class.
- Newspaper (Ia.Cl.Models) : Newspaper and publication display format support class.
- Inventory (Ia.Cl.Model.Nfc) : Inventory NFC Near-Field Communication (NFC) Support Entity functions
- Tag (Ia.Cl.Model.Nfc) : TAG NFC Near-Field Communication (NFC) Support Entity functions
- Ocr (Ia.Cl.Models) : Handles OCR operations.
- Packet (Ia.Cl.Models) : Packet model
- PrayerTime (Ia.Cl.Models) : Prayer times support class.
- Punycode (Ia.Cl.Models) : Punycode support class.
- QrCode (Ia.Cl.Models) : QR Code support class.
- RabbitMq (Ia.Cl.Models) : RabbitMQ Messaging and Streaming Broker Support Class.
- Result (Ia.Cl.Models) : Result support class.
- Seo (Ia.Cl.Models) : Search Engine Optimization (SEO) support class.
- Sms (Ia.Cl.Models) : SMS API service support class.
- Smtp (Ia.Cl.Models) : SMTP Server Support Class
- Socket (Ia.Cl.Models) : Search Engine Optimization (SEO) support class.
- Sound (Ia.Cl.Models) : Sound support class.
- Stopwatch (Ia.Cl.Models) : Stopwatch model
- TagHelper (Ia.Cl.Models) : TagHelper for ASP.Net Core.
- Telnet (Ia.Cl.Models) : Telnet communication support class.
- Trace (Ia.Cl.Models) : Trace function to try to identifiy a user using IP addresses, cookies, and session states.
- Default (Ia.Cl.Models.Ui) : Default support UI class
- Upload (Ia.Cl.Model) : Handle file uploading functions.
- Utf8 (Ia.Cl.Models) : Handle UTF8 issues.
- Weather (Ia.Cl.Models) : Weather class
- Winapi (Ia.Cl.Models) : WINAPI click events support class.
- Word (Ia.Cl.Models) : Word object.
- Twitter (Ia.Cl.Models) : Twitter API support class.
- Xml (Ia.Cl.Models) : XML support class.
- Zip (Ia.Cl.Models) : Zip
- AboutController (Ia.Wa.Controllers) :
- AccountController (Ia.Wa.Controllers) :
- ApplicationController (Ia.Wa.Controllers) :
- ContactController (Ia.Wa.Controllers) :
- HelpController (Ia.Wa.Controllers) :
- HomeController (Ia.Wa.Controllers) :
- IdentityController (Ia.Wa.Controllers) :
- LegalController (Ia.Wa.Controllers) :
- LibraryController (Ia.Wa.Controllers) :
- ManageController (Ia.Wa.Controllers) :
- NetworkController (Ia.Wa.Controllers) :
- NgossController (Ia.Wa.Controllers) :
- PortfolioController (Ia.Wa.Controllers) :
- ServiceController (Ia.Wa.Controllers) :
- ServiceDesignChartController (Ia.Wa.Controllers) :
- ServiceDesignController (Ia.Wa.Controllers) :
- ServiceMAndroidController (Ia.Wa.Controllers) :
- ServiceMController (Ia.Wa.Controllers) :
- ServiceMIosController (Ia.Wa.Controllers) :
- ServiceNfcController (Ia.Wa.Controllers) :
- SmsController (Ia.Wa.Controllers) :
- ExternalLoginConfirmationViewModel (Ia.Wa.Models.AccountViewModels) :
- ForgotPasswordViewModel (Ia.Wa.Models.AccountViewModels) :
- LoginViewModel (Ia.Wa.Models.AccountViewModels) :
- RegisterViewModel (Ia.Wa.Models.AccountViewModels) :
- ResetPasswordViewModel (Ia.Wa.Models.AccountViewModels) :
- SendCodeViewModel (Ia.Wa.Models.AccountViewModels) :
- UseRecoveryCodeViewModel (Ia.Wa.Models.AccountViewModels) :
- VerifyAuthenticatorCodeViewModel (Ia.Wa.Models.AccountViewModels) :
- VerifyCodeViewModel (Ia.Wa.Models.AccountViewModels) :
- Default (Ia.Wa.Models.Business) :
- ContactViewModel (Ia.Wa.Models) :
- Default (Ia.Wa.Models.Data) :
- Portfolio (Ia.Wa.Models.Data) :
- ErrorViewModel (Ia.Wa.Models) :
- AddPhoneNumberViewModel (Ia.Wa.Models.ManageViewModels) :
- ChangePasswordViewModel (Ia.Wa.Models.ManageViewModels) :
- ConfigureTwoFactorViewModel (Ia.Wa.Models.ManageViewModels) :
- DisplayRecoveryCodesViewModel (Ia.Wa.Models.ManageViewModels) :
- FactorViewModel (Ia.Wa.Models.ManageViewModels) :
- IndexViewModel (Ia.Wa.Models.ManageViewModels) :
- ManageLoginsViewModel (Ia.Wa.Models.ManageViewModels) :
- RemoveLoginViewModel (Ia.Wa.Models.ManageViewModels) :
- SetPasswordViewModel (Ia.Wa.Models.ManageViewModels) :
- VerifyPhoneNumberViewModel (Ia.Wa.Models.ManageViewModels) :
- MenuViewModel (Ia.Wa.Models) :
- ParameterViewModel (Ia.Wa.Models) :
- QrCodeViewModel (Ia.Wa.Models) :
- Default (Ia.Wa.Models.Ui) :
- ServiceAndroidApplicationTrekCountry (Ia.Wa.Models.Ui) :
- AuthMessageSender (IdentitySample.Services) :
- DefaultController (Ia.Ngn.Cl.Model.Api.Controller) : Service Suspension API Controller class of Next Generation Network'a (NGN's) model.
- KoranController (Ia.Islamic.Koran.Cl.Model.Api.Controller) : Koran API Controller class of Islamic Koran Reference Network project model.
- PrayerTimeController (Ia.Islamic.Koran.Cl.Model.Api.Controller) : Prayer Time API Controller class of Islamic Koran Reference Network project model.
- ApplicationController (Ia.Islamic.Koran.Belief.Wa.Controllers) :
- HomeController (Ia.Islamic.Koran.Belief.Wa.Controllers) :
- ApplicationViewModel (Ia.Islamic.Koran.Belief.Wa.Models) :
- Business (Ia.Islamic.Koran.Belief.Wa.Models) : Koran Reference Network support functions: Business model
- ErrorViewModel (Ia.Islamic.Koran.Belief.Wa.Models) :
- HomeViewModel (Ia.Islamic.Koran.Belief.Wa.Models) :
- VerseCheckboxViewModel (Ia.Islamic.Koran.Belief.Wa.Models) :
- KoranDbContext (Ia.Islamic.Cl) : Koran Reference Network Data Context
- Default (Ia.Islamic.Cl.Model.Business) : Koran Reference Network Class Library support functions: Business model
- PrayerTime (Ia.Islamic.Koran.Cl.Model.Business) : Prayer Time Business class of Islamic Koran Reference Network project model.
- Word (Ia.Islamic.Cl.Model.Business) : Koran Reference Network Class Library support functions: business model
- Chapter (Ia.Islamic.Cl.Model.Data) : Koran Reference Network Class Library support functions: data model
- Default (Ia.Islamic.Cl.Model.Data) : Koran Reference Network Class Library support functions: Data model
- Koran (Ia.Islamic.Cl.Model.Data) : Koran Reference Network Class Library support functions: data model
- Verse (Ia.Islamic.Cl.Model.Data) : Koran Reference Network Class Library support functions: data model
- VerseTopic (Ia.Islamic.Cl.Model.Data) : Koran Reference Network Class Library support functions: data model
- Chapter (Ia.Islamic.Cl.Model) : Chapter Koran Reference Network Class Library support functions: Entity model
- Koran (Ia.Islamic.Cl.Model) : Koran Koran Reference Network Class Library support functions: Entity model
- Verse (Ia.Islamic.Cl.Model) : Verse Koran Reference Network Class Library support functions: Entity model
- VerseTopic (Ia.Islamic.Cl.Model) : VerseTopic Koran Reference Network Class Library support functions: Entity model
- Word (Ia.Islamic.Cl.Model) : Word Koran Reference Network Class Library support functions: Entity model
- WordVerse (Ia.Islamic.Cl.Model) : WordVerse Koran Reference Network Class Library support functions: Entity model
- Translation (Ia.Islamic.Cl.Model) : Koran Reference Network Class Library support functions: Data model
- VerseTopicUi (Ia.Islamic.Cl.Model.Ui) : Koran Reference Network Class Library support functions: UI model
- HomeController (Ia.Islamic.Koran.Wa.Controllers) :
- KoranController (Ia.Islamic.Koran.Wa.Controllers) :
- Default (Ia.Islamic.Koran.Wa.Model.Business) :
- ErrorViewModel (Ia.Islamic.Koran.Wa.Models) :
- KoranViewModel (Ia.Islamic.Koran.Wa.Models) :
- Default (Ia.Islamic.Koran.Wa.Models.Ui) :
- Default (Ia.Islamic.Koran.Wfa.Model.Business) : Koran Reference Network Windows Form support functions: Business model
- Preparation (Ia.Islamic.Koran.Wfa.Model.Business) : Koran Reference Network Windows Form support functions: Business model
- Default (Ia.Islamic.Koran.Wfa.Model.Data) : Koran Reference Network Windows Form support functions: Data model
- Kanji (Ia.Learning.Cl.Models.Business) : Kanji business support class
- Kanji (Ia.Learning.Cl.Models.Data) : Kanji support class
- Default (Ia.Learning.Cl.Models) : Default data support functions
- MoeBook (Ia.Learning.Cl.Models) : Ministry of Education Books support class for Learning data model.
- Default (Ia.Learning.Cl.Models.Ui) :
- Business (Ia.Learning.Kafiya.Models) : Default business support class.
- Data (Ia.Learning.Kafiya.Models) : Default data support class.
- HomeController (Ia.Learning.Manhag.Wa.Controllers) :
- ErrorViewModel (Ia.Learning.Manhag.Wa.Models) :
- IndexViewModel (Ia.Learning.Manhag.Wa.Models.Home) :
- DefaultController (Ia.Learning.Kanji.Wa.Controllers) :
- Default (Ia.Learning.Kanji.Models.Business) : Default business support class.
- Index (Ia.Learning.Kanji.Wa.Models.Default) :
- IndexViewModel (Ia.Learning.Kanji.Wa.Models.Default) :
- ErrorViewModel (Ia.Learning.Kanji.Wa.Models) :
- Default (Ia.Simple.Cl.Models.Business.SmartDeals) :
- Category (Ia.Simple.Cl.Models.Data.SmartDeals) :
- Default (Ia.Simple.Cl.Models.Data.SmartDeals) :
- Product (Ia.Simple.Cl.Models.Data.SmartDeals) :
- HomeController (Ia.Statistics.Cdn.Wa.Controllers) :
- Default (Ia.Statistics.Cl.Models.Boutiqaat) : Structure of the boutiqaat.com website.
- Category (Ia.Statistics.Cl.Models) :
- Default (Ia.Statistics.Cl.Models.Dabdoob) : Structure of the dabdoob.com website.
- Default (Ia.Statistics.Cl.Models) :
- Default (Ia.Statistics.Cl.Models.EnglishBookshop) : Structure of the theenglishbookshop.com website.
- Default (Ia.Statistics.Cl.Models.FantasyWorldToys) : Structure of the fantasyworldtoys.com website.
- Default (Ia.Statistics.Cl.Models.HsBookstore) : Structure of the hsbookstore.com website.
- Default (Ia.Statistics.Cl.Models.LuluHypermarket) : Structure of the lulutypermarket.com website.
- Default (Ia.Statistics.Cl.Models.Natureland) : Structure of the natureland.net website.
- Product (Ia.Statistics.Cl.Models) :
- ProductPriceSpot (Ia.Statistics.Cl.Models) :
- ProductPriceStockQuantitySold (Ia.Statistics.Cl.Models) :
- ProductStockSpot (Ia.Statistics.Cl.Models) :
- Site (Ia.Statistics.Cl.Models) : Site support class for Optical Fiber Network (OFN) data model.
- Default (Ia.Statistics.Cl.Models.SultanCenter) : Structure of the sultan-center.com website.
- Default (Ia.Statistics.Cl.Models.Taw9eel) : Structure of the taw9eel.com website.
- WebDriverExtensions () :
- AboutController (Ia.Statistics.Wa.Controllers) :
- ContactController (Ia.Statistics.Wa.Controllers) :
- HelpController (Ia.Statistics.Wa.Controllers) :
- HomeController (Ia.Statistics.Wa.Controllers) :
- IdentityController (Ia.Statistics.Wa.Controllers) :
- LegalController (Ia.Statistics.Wa.Controllers) :
- ListController (Ia.Statistics.Wa.Controllers) :
- SearchController (Ia.Statistics.Wa.Controllers) :
- ServiceController (Ia.Statistics.Wa.Controllers) :
- Default (Ia.Statistics.Wa.Models.Business) :
- ContactViewModel (Ia.Statistics.Wa.Models) :
- Default (Ia.Statistics.Wa.Models.Data) :
- ErrorViewModel (Ia.Statistics.Wa.Models) :
- Index (Ia.Statistics.Wa.Models.Home) :
- IndexViewModel (Ia.Statistics.Wa.Models.Home) :
- ProductViewModel (Ia.Statistics.Wa.Models.List) :
- Default (Ia.Statistics.Wa.Models.Ui) :
- ServiceAndroidApplicationTrekCountry (Ia.Statistics.Wa.Models.Ui) :
- DefaultController (Ia.TentPlay.Api.Wa.Controllers) : Trek API Controller class of Tent Play's model.
- ApplicationDbContext (Ia.TentPlay) :
- Db (Ia.TentPlay) :
- Default (Ia.TentPlay.Cl.Models.Business) : Support class for TentPlay business model
- Default (Ia.TentPlay.Cl.Models.Business.Trek) : Support class for TentPlay Trek business model
- Feature (Ia.TentPlay.Cl.Models.Business.Trek) : Feature class for TentPlay Trek business model
- FeatureClass (Ia.TentPlay.Cl.Models.Business.Trek) : FeatureClass Support class for TentPlay Trek business model
- FeatureClassDistanceToCapital (Ia.TentPlay.Cl.Models.Business.Trek) : FeatureClassDistanceToCapital Support class for TentPlay business model
- FeatureDesignation (Ia.TentPlay.Cl.Models.Business.Trek) : FeatureClass Support class for TentPlay Trek business model
- FeatureName (Ia.TentPlay.Cl.Models.Business.Trek) : Support class for TentPlay Trek business model
- CompanyInformation (Ia.TentPlay.Cl.Models.Data) : CompanyInformation Support class for TentPlay data model
- Default (Ia.TentPlay.Cl.Models.Data) : Support class for TentPlay data model
- ApplicationInformation (Ia.TentPlay.Cl.Models.Data.Trek) : ApplicationInformation Support class for TentPlay Trek data model
- Default (Ia.TentPlay.Cl.Models.Data.Trek) : Default class for TentPlay Trek data model
- Feature (Ia.TentPlay.Cl.Models.Data.Trek) : Feature Support class for TentPlay entity data
- FeatureClass (Ia.TentPlay.Cl.Models.Data.Trek) : FeatureClass Support class for TentPlay Trek business model
- FeatureDesignation (Ia.TentPlay.Cl.Models.Data.Trek) : FeatureDesignation Support class for TentPlay Trek data model
- NgaCountryWaypoint (Ia.TentPlay.Cl.Models.Data.Trek) : NgaCountryWaypoint Support class for TentPlay Waypoint entity data
- Score (Ia.TentPlay.Cl.Models.Memorise) : Score entity functions
- Feature (Ia.TentPlay.Cl.Models.Trek) : Feature Support class for TentPlay entity model
- FeatureDesignation (Ia.TentPlay.Cl.Models.Trek) : FeatureDesignation Support class for TentPlay Trek entity model
- ApplicationInformation (Ia.TentPlay.Cl.Models.Memorise) : ApplicationInformation Support class for TentPlay Memorise model
- Default (Ia.TentPlay.Cl.Models.Memorise) : Default class for TentPlay Memorise data model
- German (Ia.TentPlay.Cl.Models.Memorise) : German class
- Kana (Ia.TentPlay.Cl.Models.Memorise) : Kana class
- Kanji (Ia.TentPlay.Cl.Models.Memorise) : Kanji class
- Math (Ia.TentPlay.Cl.Models.Memorise) : Math Class
- MorseCode (Ia.TentPlay.Cl.Models.Memorise) : Morse code class
- PhoneticAlphabet (Ia.TentPlay.Cl.Models.Memorise) : Phonetic Alphabet
- Russian (Ia.TentPlay.Cl.Models.Memorise) : Russian class
- Test (Ia.TentPlay.Cl.Models.Memorise) : Test Class
- Default (Ia.TentPlay.Cl.Models.Ui.Trek) : Default class for TentPlay Trek UI model
- AboutController (Ia.TentPlay.Wa.Controllers) :
- ContactController (Ia.TentPlay.Wa.Controllers) :
- HelpController (Ia.TentPlay.Wa.Controllers) :
- HomeController (Ia.TentPlay.Wa.Controllers) :
- LegalController (Ia.TentPlay.Wa.Controllers) :
- MemoriseController (Ia.TentPlay.Wa.Controllers) :
- TradeController (Ia.TentPlay.Wa.Controllers) :
- TrekController (Ia.TentPlay.Wa.Controllers) :
- ErrorViewModel (Ia.TentPlay.Wa.Models) :
- TrekViewModel (Ia.TentPlay.Wa.Models) :
- Default (Ia.TentPlay.Wa.Models.Ui) :