1: using Ia.Ngn.Cl.Model.Data;
2: using System;
3: using System.Collections;
4: using System.Collections.Generic;
5: using System.Configuration;
6: using System.Data;
7: using System.Linq;
8: using System.Text.RegularExpressions;
9:
10: namespace Ia.Ngn.Cl.Model.Business.Nokia
11: {
12: ////////////////////////////////////////////////////////////////////////////
13:
14: /// <summary publish="true">
15: /// Access Management System (AMS) support class for Nokia's Optical Fiber Network (OFN) business model.
16: /// </summary>
17: ///
18: /// <value>
19: /// <appSettings>
20: /// <add key="amsServerHost" value="*" />
21: /// <add key="amsServerPort" value="*" />
22: /// <add key="amsServerActUser" value="ACT-USER:{amsName}:*:::*;" />
23: /// <add key="amsServerCancUser" value="CANC-USER:{amsName}:*:;" />
24: /// </appSettings>
25: /// </value>
26: ///
27: /// <remarks>
28: /// Copyright © 2007-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
29: ///
30: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
31: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
32: ///
33: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
34: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
35: ///
36: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
37: ///
38: /// Copyright notice: This notice may not be removed or altered from any source distribution.
39: /// </remarks>
40: public class Ams
41: {
42: // below: access data for Nokia AMS
43: private const string textToSkipInTelnetEndReceive = "IP 0\r\n<";
44: private static string lastSentCommand, receiveString;
45: private static string keepAliveCurrentAmsName = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltAmsNameList.PickRandom();
46:
47: private static readonly Procedure serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure = new Ia.Ngn.Cl.Model.Business.Procedure(24, Ia.Ngn.Cl.Model.Business.Provision._ServiceOntToCreateAndToDeleteInEmsOntSipInfoOrVoipPstnUserListFromThePastNHourList);
48: private static readonly Procedure serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure = new Ia.Ngn.Cl.Model.Business.Procedure(0, Ia.Ngn.Cl.Model.Business.Provision._ServiceOntToCreateAndToDeleteInEmsOntSipInfoOrVoipPstnUserListFromThePastNHourList);
49:
50: private static readonly Dictionary<string, int> associateServiceIdAndPortBetweenCreateAndReadDictionary = new Dictionary<string, int>();
51:
52: private static Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont, bool> eventDictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont, bool>();
53:
54: private static readonly Queue<string> priorityAmsCommandQueue = new Queue<string>();
55: private static Queue<string> amsCommandQueue = new Queue<string>();
56: private static readonly Queue<string> amsCreateOntCommandQueue = new Queue<string>();
57:
58: private static Ia.Ngn.Cl.Model.Client.Nokia.Ams ams = new Ia.Ngn.Cl.Model.Client.Nokia.Ams();
59:
60: private static List<string> priorityServiceList = new List<string>();
61:
62: /// <summary/>
63: public enum AmsOpcode
64: {
65: RtrvHdr, RtrvOnt, InitSys, RtrvServiceVoip, RtrvOntPots, RtrvAlmPon, EdOntDesc1, EdOntDesc1Annul, EdOntPotsCustinfo
66: }
67:
68: /// <summary/>
69: public enum BellcoreState { Undefined = 0, IsNr = 1, OosAu, OosMa, OosAuma };
70:
71: /// <summary/>
72: public static string Host { get { return ConfigurationManager.AppSettings["amsServerHost"].ToString(); } }
73:
74: /// <summary/>
75: public static int Port { get { return int.Parse(ConfigurationManager.AppSettings["amsServerPort"].ToString()); } }
76:
77: /// <summary/>
78: public static string ActUser(string amsName)
79: {
80: return PrepareCtaggedCommand(ConfigurationManager.AppSettings["amsServerActUser"].ToString().Replace("{amsName}", amsName));
81: }
82:
83: /// <summary/>
84: public static string CancUser(string amsName)
85: {
86: return PrepareCtaggedCommand(ConfigurationManager.AppSettings["amsServerCancUser"].ToString().Replace("{amsName}", amsName));
87: }
88:
89: /// <summary/>
90: public static string TextToSkipInTelnetEndReceive { get { return textToSkipInTelnetEndReceive; } }
91:
92: ////////////////////////////////////////////////////////////////////////////
93:
94: /// <summary>
95: ///
96: /// </summary>
97: public Ams()
98: {
99: }
100:
101: ////////////////////////////////////////////////////////////////////////////
102:
103: /// <summary>
104: ///
105: /// </summary>
106: public static void Connect(out Ia.Cl.Model.Result result)
107: {
108: if (ams != null && !ams.IsConnected)
109: {
110: ams.Connect(out result);
111: }
112: else
113: {
114: result = new Ia.Cl.Model.Result();
115:
116: result.AddWarning("Warning: ams is already connected.");
117: }
118: }
119:
120: ////////////////////////////////////////////////////////////////////////////
121:
122: /// <summary>
123: ///
124: /// </summary>
125: public static void Disconnect(out Ia.Cl.Model.Result result)
126: {
127: if (ams != null && ams.IsConnected)
128: {
129: ams.Disconnect(out result);
130: }
131: else
132: {
133: result = new Ia.Cl.Model.Result();
134:
135: result.AddWarning("Warning: ams is already disconnected.");
136: }
137: }
138:
139: ////////////////////////////////////////////////////////////////////////////
140:
141: /// <summary>
142: ///
143: /// </summary>
144: public static void Login()
145: {
146: foreach (string amsName in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltAmsNameList)
147: {
148: ams.SendQueue.Enqueue(Ia.Ngn.Cl.Model.Business.Nokia.Ams.ActUser(amsName));
149: }
150: }
151:
152: ////////////////////////////////////////////////////////////////////////////
153:
154: /// <summary>
155: ///
156: /// </summary>
157: public static void Logout()
158: {
159: foreach (string amsName in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltAmsNameList)
160: {
161: ams.SendQueue.Enqueue(Ia.Ngn.Cl.Model.Business.Nokia.Ams.CancUser(amsName));
162: }
163: }
164:
165: ////////////////////////////////////////////////////////////////////////////
166:
167: /// <summary>
168: ///
169: /// </summary>
170: public static Queue<string> ReceiveQueue
171: {
172: get
173: {
174: return ams.ReceiveQueue;
175: }
176: }
177:
178: ////////////////////////////////////////////////////////////////////////////
179:
180: /// <summary>
181: ///
182: /// </summary>
183: public static Queue<string> SendQueue
184: {
185: get
186: {
187: return ams.SendQueue;
188: }
189: }
190:
191: ////////////////////////////////////////////////////////////////////////////
192:
193: /// <summary>
194: ///
195: /// </summary>
196: public static bool IsConnected
197: {
198: get
199: {
200: return ams != null && ams.IsConnected;
201: }
202: }
203:
204: ////////////////////////////////////////////////////////////////////////////
205:
206: /// <summary>
207: ///
208: /// </summary>
209: public static bool IsLoggedIn
210: {
211: get
212: {
213: return ams.IsLoggedIn;
214: }
215: }
216:
217: ////////////////////////////////////////////////////////////////////////////
218:
219: /// <summary>
220: ///
221: /// </summary>
222: public static void Dispose()
223: {
224: ams.Dispose();
225: }
226:
227: ////////////////////////////////////////////////////////////////////////////
228: ////////////////////////////////////////////////////////////////////////////
229:
230: /// <summary>
231: ///
232: /// </summary>
233: public static Ia.Cl.Model.Result ManageReceiveQueue()
234: {
235: bool isUpdated;
236: string rowString, formattedString;
237: Ia.Cl.Model.Result updateDatabaseWithAmsCommandOutputResult;
238:
239: var result = new Ia.Cl.Model.Result();
240:
241: try
242: {
243: while (ReceiveQueue.Count > 0)
244: {
245: rowString = ReceiveQueue.Dequeue();
246:
247: formattedString = Ia.Cl.Model.Telnet.FormatAndCleanData(rowString);
248:
249: isUpdated = Ia.Ngn.Cl.Model.Business.Nokia.Ams.UpdateDatabaseWithAmsCommandOutput(formattedString, out updateDatabaseWithAmsCommandOutputResult);
250:
251: if (updateDatabaseWithAmsCommandOutputResult.IsSuccessful && !updateDatabaseWithAmsCommandOutputResult.HasWarning)
252: {
253: result.AddSuccess(updateDatabaseWithAmsCommandOutputResult.Message);
254: }
255: else
256: {
257: result.AddError("ManageReceiveQueue(): rowString: [" + rowString + "]");
258: }
259:
260: if (result.IsSuccessful)
261: {
262: AnalyzeReceivedData(formattedString);
263: }
264: else
265: {
266: }
267: }
268: }
269: catch (Exception ex)
270: {
271: result.AddError("ManageReceiveQueue: Exception: " + ex.Message);
272: }
273:
274: return result;
275: }
276:
277: ////////////////////////////////////////////////////////////////////////////
278:
279: /// <summary>
280: ///
281: /// </summary>
282: private static void AnalyzeReceivedData(string data)
283: {
284: string lastSentCommandWithoutSemiColon;
285:
286: //lastCommandEchoedBack = true;
287:
288: if (data.Contains("COMPLD"))
289: {
290: if (lastSentCommand != null)
291: {
292: lastSentCommandWithoutSemiColon = lastSentCommand.Replace(";", "");
293:
294: // below: detect the activation of user
295: // debug
296: //activated = true;
297: //if (lastSentCommand == Ia.Ngn.Cl.Model.Business.Nokia.Ams.ActUser(olt.AmsName)) activated = true;
298: //else if (lastSentCommand == Ia.Ngn.Cl.Model.Business.Nokia.Ams.CancUser(olt.AmsName)) activated = false;
299:
300: /*
301: if (data.Contains(lastSentCommandWithoutSemiColon)) lastCommandEchoedBack = true;
302: else
303: {
304: //lastCommandEchoBackCounter = 5;
305: lastCommandEchoedBack = false;
306: }
307: */
308: }
309: }
310: else if (data.Contains("DENY")) { }
311: else if (data.Contains(Ia.Ngn.Cl.Model.Business.Nokia.Ams.TextToSkipInTelnetEndReceive)) { }
312: else if (data == "\r\n<") { }
313: /*
314: else
315: {
316: lastCommandEchoBackCounter = 5;
317: lastCommandEchoedBack = false;
318: }
319: */
320: }
321:
322: ////////////////////////////////////////////////////////////////////////////
323:
324: /// <summary>
325: ///
326: /// </summary>
327: public static string ManageSendQueue(out Ia.Cl.Model.Result result)
328: {
329: var command = string.Empty;
330: result = new Ia.Cl.Model.Result();
331:
332: try
333: {
334: if (ams.SendQueue.Count > 0)
335: {
336: command = ams.SendQueue.Dequeue();
337:
338: ams.Send(command, out Ia.Cl.Model.Result r);
339:
340: if (r.IsSuccessful) result.AddSuccess(r.Message);
341: else result.AddError(r.Message);
342: }
343: }
344: catch (Exception ex)
345: {
346: result.AddError("ManageSendQueue(): Exception: " + ex.Message);
347: }
348:
349: return result.IsSuccessful ? command : string.Empty;
350: }
351:
352: ////////////////////////////////////////////////////////////////////////////
353:
354: /// <summary>
355: ///
356: /// </summary>
357: public static Ia.Cl.Model.Result ManageSynchronizationBetweenAccessAndSwitchPast24Hours()
358: {
359: // See: ManageSynchronizationBetweenAccessAndSwitchPastHour(), ManageSynchronizationBetweenAccessAndSwitchPast24Hours(), ManageSynchronizationBetweenAccessAndSwitch()
360:
361: Ia.Ngn.Cl.Model.Business.Procedure.Process process;
362:
363: var result = new Ia.Cl.Model.Result();
364:
365: process = serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.NextProcess(priorityServiceList);
366:
367: if (priorityServiceList.Count > 50) priorityServiceList.Clear();
368:
369: if (process.Type != Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.None)
370: {
371: if (process.Type == Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.Create)
372: {
373: result.AddSuccess("create: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.ProgressCounterString);
374:
375: //CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(process.Service, process.Ont, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
376: }
377: else if (process.Type == Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.Read)
378: {
379: result.AddSuccess("read: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.ProgressCounterString);
380:
381: //ReadOntSipInfoOrVoipPstnUser(process.Service, process.Ont, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
382: }
383: else if (process.Type == Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.Delete)
384: {
385: result.AddSuccess("delete: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserOfServiceFromThePast24HourProcedure.ProgressCounterString);
386:
387: //_ = VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(process.Service, process.Ont, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
388: }
389: else result.AddError("sync: undefined procedure. ");
390:
391: // Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Updated() is in Ia.Ngn.Cl.Model.Business.Nokia.Ams.UpdateDatabaseWithEmsCommandOutput();
392: }
393: else result.AddWarning("sync: undefined"); // nothing to create or delete");
394:
395: return result;
396: }
397:
398: ////////////////////////////////////////////////////////////////////////////
399:
400: /// <summary>
401: ///
402: /// </summary>
403: public static Ia.Cl.Model.Result ManageSynchronizationBetweenAccessAndSwitch()
404: {
405: // See: ManageSynchronizationBetweenAccessAndSwitchPastHour(), ManageSynchronizationBetweenAccessAndSwitchPast24Hours(), ManageSynchronizationBetweenAccessAndSwitch()
406:
407: Ia.Ngn.Cl.Model.Business.Procedure.Process process;
408:
409: var result = new Ia.Cl.Model.Result();
410:
411: // problem: I have put empty new List<string>() here because there is an exception: System.Exception: Undefined function
412: process = serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.NextProcess(new List<string>());
413:
414: if (process.Type != Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.None)
415: {
416: if (process.Type == Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.Create)
417: {
418: result.AddSuccess("create: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.ProgressCounterString);
419:
420: //CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(process.Service, process.Ont, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
421: }
422: else if (process.Type == Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.Read)
423: {
424: result.AddSuccess("read: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.ProgressCounterString);
425:
426: //ReadOntSipInfoOrVoipPstnUser(process.Service, process.Ont, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
427: }
428: else if (process.Type == Ia.Ngn.Cl.Model.Business.Procedure.ProcessType.Delete)
429: {
430: result.AddSuccess("delete: " + process.ServiceId + " " + serviceOntToCreateOrDeleteInEmsOntSipInfoOrVoipPstnUserProcedure.ProgressCounterString);
431:
432: //_ = VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(process.Service, process.Ont, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, ref result);
433: }
434: else result.AddError("sync: undefined procedure. ");
435:
436: // Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Updated() is in Ia.Ngn.Cl.Model.Business.Nokia.Ams.UpdateDatabaseWithEmsCommandOutput();
437: }
438: else result.AddWarning("sync: undefined"); // nothing to create or delete");
439:
440: return result;
441: }
442:
443: ////////////////////////////////////////////////////////////////////////////
444: ////////////////////////////////////////////////////////////////////////////
445:
446: /*
447: ////////////////////////////////////////////////////////////////////////////
448: ////////////////////////////////////////////////////////////////////////////
449:
450: /// <summary>
451: ///
452: /// </summary>
453: public static void CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, string accessName, int port, out Ia.Cl.Model.Result result)
454: {
455: int serviceType;
456: string serviceId;
457: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
458:
459: result = new Ia.Cl.Model.Result();
460:
461: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
462:
463: try
464: {
465: if (!string.IsNullOrEmpty(service))
466: {
467: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
468: {
469: serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
470:
471: if (!string.IsNullOrEmpty(accessName))
472: {
473: nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
474:
475: if (nddOnt != null)
476: {
477: Ia.Ngn.Cl.Model.Business.Nokia.Ams.CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, nddOnt, port, ref result);
478: }
479: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
480: }
481: else result.AddError("AccessName null or empty.");
482: }
483: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
484: }
485: else result.AddError("Service null or empty.");
486: }
487: catch (Exception ex)
488: {
489: result.AddError("Exception: " + ex.ToString() + ".");
490: }
491: }
492:
493: ////////////////////////////////////////////////////////////////////////////
494:
495: /// <summary>
496: ///
497: /// </summary>
498: public static void CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, int port, ref Ia.Cl.Model.Result result)
499: {
500: Ia.Ngn.Cl.Model.Business.Nokia.Default.FnSnPnPort fnSnPnPort;
501: Ia.Ngn.Cl.Model.Business.Nokia.Dev.MduDev mduDev;
502: Ia.Ngn.Cl.Model.Ont ont;
503:
504: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
505: {
506: if (nddOnt != null)
507: {
508: if (Ia.Ngn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
509: {
510: ont = Ia.Ngn.Cl.Model.Data.Nokia.Ont.ReadIncludeAccess(nddOnt.Id);
511:
512: if (ont != null)
513: {
514: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
515: {
516: if (ont.FamilyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
517: {
518: var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
519:
520: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
521: {
522: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
523:
524: var vacantFnSnPnList = Ia.Ngn.Cl.Model.Data.Nokia.Ams.VacantMduFnSnPnForOntList(mduDev, ont);
525:
526: if (vacantFnSnPnList.Count > 0)
527: {
528: if (port != Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
529: {
530: fnSnPnPort = vacantFnSnPnList.Where(f => f.Port == port).SingleOrDefault();
531: }
532: else fnSnPnPort = Ia.Ngn.Cl.Model.Data.Nokia.Ams.NextVacantMduFnSnPnForOnt(mduDev, ont);
533:
534: if (fnSnPnPort != null)
535: {
536: var emsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
537:
538: if (emsVoipPstnUserList.Count == 0)
539: {
540: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendCreateVoipPstnUser(ems, mduDev, nddOnt, service, fnSnPnPort.Sn, fnSnPnPort.Pn);
541:
542: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
543: {
544: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendCreateVoipPstnAccount(ems, mduDev, nddOnt, service, fnSnPnPort.Sn, fnSnPnPort.Pn);
545: }
546:
547: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, mduDev);
548:
549: associateServiceIdAndPortBetweenCreateAndReadDictionary[service] = fnSnPnPort.Port;
550:
551: result.AddSuccess("command(s) sent...");
552: }
553: else result.AddError("emsVoipPstnUserList count != 0. Value must be zero before the operation is executed for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
554: }
555: else result.AddError("MDU sn and/or tel is invalid or does not exist.");
556: }
557: else result.AddError("vacantFnSnPnList.Count is 0. There are no vacant ports in MDU.");
558: }
559: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
560: }
561: else // SFU
562: {
563: var vacantList = Ia.Ngn.Cl.Model.Data.Nokia.Ams.VacantTelForOntList(ont);
564:
565: if (port != Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
566: {
567: port = vacantList.Contains(port) ? port : Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
568: }
569: else port = Ia.Ngn.Cl.Model.Data.Nokia.Ams.NextVacantTelForOnt(ont);
570:
571: if (port != Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
572: {
573: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendCreateOntSipInfo(ems, nddOnt, service, port);
574:
575: // Don't use SAVE-DEV here
576: //Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, ont.EmsPort.EmsBoard.EmsDev);
577:
578: associateServiceIdAndPortBetweenCreateAndReadDictionary[service] = port;
579:
580: result.AddSuccess("command(s) sent...");
581: }
582: else result.AddError("port is invalid or does not exist.");
583: }
584: }
585: else result.AddError("OLT is not SIP, its H.248.");
586: }
587: else result.AddError("ont is null, does not exist for access: " + nddOnt.Access.Name + ".");
588: }
589: else result.AddError("access is not in an allowed to be provisioned OLT: " + nddOnt.Access.Name + ".");
590: }
591: else result.AddError("nddOnt is null, does not exist for service: " + service + ".");
592: }
593: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
594: }
595:
596: ////////////////////////////////////////////////////////////////////////////
597:
598: /// <summary>
599: ///
600: /// </summary>
601: public static void ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, out Ia.Cl.Model.Result result)
602: {
603: ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, string.Empty, Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown, out result);
604: }
605:
606: ////////////////////////////////////////////////////////////////////////////
607:
608: /// <summary>
609: ///
610: /// </summary>
611: public static void ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, string accessName, int port, out Ia.Cl.Model.Result result)
612: {
613: int serviceType;
614: string serviceId;
615:
616: result = new Ia.Cl.Model.Result();
617:
618: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
619:
620: try
621: {
622: if (!string.IsNullOrEmpty(service))
623: {
624: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
625: {
626: serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
627:
628: if (!string.IsNullOrEmpty(accessName))
629: {
630: var nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
631:
632: if (nddOnt != null)
633: {
634: Ia.Ngn.Cl.Model.Business.Nokia.Ams.ReadOntSipInfoOrVoipPstnUser(service, nddOnt, port, ref result);
635: }
636: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
637: }
638: else
639: {
640: Ia.Ngn.Cl.Model.Business.Nokia.Ams.ReadOntSipInfoOrVoipPstnUser(service, null, port, ref result);
641: }
642: }
643: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
644: }
645: else result.AddError("Service null or empty.");
646: }
647: catch (Exception ex)
648: {
649: result.AddError("Exception: " + ex.ToString() + ".");
650: }
651: }
652:
653: ////////////////////////////////////////////////////////////////////////////
654:
655: /// <summary>
656: ///
657: /// </summary>
658: public static void ReadOntSipInfoOrVoipPstnUser(string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, int port, ref Ia.Cl.Model.Result result)
659: {
660: Ia.Ngn.Cl.Model.Business.Nokia.Dev.MduDev mduDev;
661: Ia.Ngn.Cl.Model.Ont ont;
662:
663: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
664: {
665: if (nddOnt != null)
666: {
667: ont = Ia.Ngn.Cl.Model.Data.Nokia.Ont.Read(nddOnt.Id);
668:
669: if (ont != null)
670: {
671: if (ont.FamilyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
672: {
673: var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
674:
675: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
676: {
677: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
678:
679: if (port != Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
680: {
681: var fnSnPnPort = mduDev.PossibleFnSnPnPortList.Where(f => f.Port == port).SingleOrDefault();
682:
683: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
684: }
685: else if (associateServiceIdAndPortBetweenCreateAndReadDictionary.ContainsKey(service))
686: {
687: port = associateServiceIdAndPortBetweenCreateAndReadDictionary[service];
688:
689: var fnSnPnPort = mduDev.PossibleFnSnPnPortList.Where(f => f.Port == port).SingleOrDefault();
690:
691: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
692: }
693: else
694: {
695: foreach (var fnSnPnPort in mduDev.PossibleFnSnPnPortList)
696: {
697: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
698: }
699: }
700:
701: result.AddSuccess("command(s) sent...");
702: }
703: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
704: }
705: else // SFU
706: {
707: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadOntSipInfo(ems, nddOnt);
708:
709: result.AddSuccess("command(s) sent...");
710: }
711: }
712: else result.AddError("ont is null, does not exist for access: " + nddOnt.Access.Name + ".");
713: }
714: else
715: {
716: var emsOntSipInfoList = Ia.Ngn.Cl.Model.Data.Nokia.OntSipInfo.ReadByServiceIncludeEmsOntAndAccess(service);
717:
718: if (emsOntSipInfoList.Count > 0)
719: {
720: // SFU
721:
722: foreach (var emsOntSipInfo in emsOntSipInfoList)
723: {
724: ont = emsOntSipInfo.EmsOnt;
725:
726: if (ont.Access != null)
727: {
728: nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
729:
730: if (nddOnt != null)
731: {
732: if (Ia.Ngn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
733: {
734: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
735: {
736: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadOntSipInfo(ems, nddOnt);
737:
738: result.AddSuccess("command(s) sent...");
739: }
740: else result.AddError("OLT is not SIP, its H.248.");
741: }
742: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
743: }
744: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
745: }
746: else result.AddError("ont.Access is null for service " + service + ".");
747: }
748: }
749:
750:
751: var emsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
752:
753: if (emsVoipPstnUserList.Count > 0)
754: {
755: // MDU
756:
757: foreach (var emsVoipPstnUser in emsVoipPstnUserList)
758: {
759: ont = emsVoipPstnUser.EmsOnt;
760:
761: if (ont.Access != null)
762: {
763: nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
764:
765: if (nddOnt != null)
766: {
767: if (Ia.Ngn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
768: {
769: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
770: {
771: if (ont.FamilyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
772: {
773: var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
774:
775: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
776: {
777: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
778:
779: foreach (var fnSnPnPort in mduDev.PossibleFnSnPnPortList)
780: {
781: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, mduDev.Dev, fnSnPnPort.Sn, fnSnPnPort.Pn);
782:
783: result.AddSuccess("command(s) sent...");
784: }
785: }
786: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
787: }
788: else result.AddError("ONT family type is not MDU.");
789: }
790: else result.AddError("OLT is not SIP, its H.248.");
791: }
792: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
793: }
794: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
795: }
796: else result.AddError("ont.Access is null for service " + service + ".");
797: }
798:
799:
800: var msanEmsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByMsanService(service);
801:
802: if (msanEmsVoipPstnUserList.Count > 0)
803: {
804: // MSAN
805:
806: foreach (var emsVoipPstnUser in msanEmsVoipPstnUserList)
807: {
808: ReadVoipPstnUser(emsVoipPstnUser.DID, emsVoipPstnUser.FN, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
809: }
810:
811: result.AddSuccess("command(s) sent...");
812: }
813: }
814: }
815: }
816: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
817: }
818:
819: ////////////////////////////////////////////////////////////////////////////
820:
821: /// <summary>
822: ///
823: /// </summary>
824: public static string DeleteOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(string service, string accessName, int port, out Ia.Cl.Model.Result result)
825: {
826: int serviceType;
827: string serviceId, vacatedAccessName;
828: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont vacatedNddOnt;
829:
830: result = new Ia.Cl.Model.Result();
831:
832: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
833:
834: vacatedAccessName = string.Empty;
835:
836: try
837: {
838: if (!string.IsNullOrEmpty(service))
839: {
840: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
841: {
842: serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
843:
844: if (!string.IsNullOrEmpty(accessName))
845: {
846: var nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
847:
848: if (nddOnt != null)
849: {
850: vacatedNddOnt = Ia.Ngn.Cl.Model.Business.Nokia.Ams.VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(service, nddOnt, port, ref result);
851:
852: vacatedAccessName = (vacatedNddOnt != null) ? vacatedNddOnt.Access.Name : string.Empty;
853: }
854: else result.AddError("NDD ONT is null for access name: " + accessName + ".");
855: }
856: else if (port == Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
857: {
858: vacatedNddOnt = Ia.Ngn.Cl.Model.Business.Nokia.Ams.VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(service, null, port, ref result);
859:
860: vacatedAccessName = (vacatedNddOnt != null) ? vacatedNddOnt.Access.Name : string.Empty;
861: }
862: 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.");
863: }
864: else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
865: }
866: else result.AddError("Service null or empty.");
867: }
868: catch (Exception ex)
869: {
870: result.AddError("Exception: " + ex.ToString() + ".");
871: }
872:
873: return vacatedAccessName;
874: }
875:
876: ////////////////////////////////////////////////////////////////////////////
877:
878: /// <summary>
879: ///
880: /// </summary>
881: public static Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont VacateOntSipInfoOrDeleteVoipPstnUserAndOrVacateVoipPstnAccount(string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, int port, ref Ia.Cl.Model.Result result)
882: {
883: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont vacatedNddOnt;
884: Ia.Ngn.Cl.Model.Business.Nokia.Dev.MduDev mduDev;
885: Ia.Ngn.Cl.Model.Ont ont;
886:
887: vacatedNddOnt = nddOnt;
888:
889: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
890: {
891: if (nddOnt != null)
892: {
893: if (Ia.Ngn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
894: {
895: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
896: {
897: ont = Ia.Ngn.Cl.Model.Data.Nokia.Ont.ReadIncludeAccess(nddOnt.Id);
898:
899: if (ont.FamilyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
900: {
901: var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
902:
903: if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
904: {
905: mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
906:
907: if (port == Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
908: {
909: var emsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
910:
911: foreach (var emsVoipPstnUser in emsVoipPstnUserList)
912: {
913: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
914: {
915: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
916: }
917:
918: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
919:
920: result.AddSuccess("command(s) sent...");
921: }
922: }
923: else
924: {
925: var fnSnPnPort = mduDev.PossibleFnSnPnPortList.Where(f => f.Port == port).SingleOrDefault();
926:
927: if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
928: {
929: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, mduDev, nddOnt, service, mduDev.FirstFnSnPnPort.Sn, fnSnPnPort.Pn);
930: }
931:
932: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, mduDev, nddOnt, service, mduDev.FirstFnSnPnPort.Sn, fnSnPnPort.Pn);
933:
934: result.AddSuccess("command(s) sent...");
935: }
936:
937: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, mduDev);
938: }
939: else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service " + service + " and access " + nddOnt.Access.Name + ".");
940: }
941: else // SFU
942: {
943: if (port == Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown)
944: {
945: var emsOntSipInfoList = Ia.Ngn.Cl.Model.Data.Nokia.OntSipInfo.ReadByService(service);
946:
947: foreach (var emsOntSipInfo in emsOntSipInfoList)
948: {
949: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateOntSipInfo(ems, nddOnt, service, emsOntSipInfo.TEL);
950: }
951:
952: result.AddSuccess("command(s) sent...");
953: }
954: else
955: {
956: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateOntSipInfo(ems, nddOnt, service, port);
957:
958: result.AddSuccess("command(s) sent...");
959: }
960: }
961: }
962: else result.AddError("OLT is not SIP, its H.248.");
963: }
964: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
965: }
966: else
967: {
968: var emsOntSipInfoList = Ia.Ngn.Cl.Model.Data.Nokia.OntSipInfo.ReadByServiceIncludeEmsOntAndAccess(service);
969:
970: if (emsOntSipInfoList.Count > 0)
971: {
972: // SFU
973:
974: foreach (var emsOntSipInfo in emsOntSipInfoList)
975: {
976: ont = emsOntSipInfo.EmsOnt;
977:
978: if (ont.Access != null)
979: {
980: nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
981:
982: if (nddOnt != null)
983: {
984: if (Ia.Ngn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
985: {
986: if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
987: {
988: Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateOntSipInfo(ems, nddOnt, service, emsOntSipInfo.TEL);
989:
990: result.AddSuccess("command(s) sent...");
991: }
992: else result.AddError("OLT is not SIP, its H.248.");
993: }
994: else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
995: }
996: else result.AddError("nddOnt is null, does not exist for service " + service + ".");
997:
998: vacatedNddOnt = nddOnt;
999: }
else result.AddError("ont.Access is null for service " + service + ".");
}
}
var emsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
if (emsVoipPstnUserList.Count > 0)
{
// MDU
foreach (var emsVoipPstnUser in emsVoipPstnUserList)
{
ont = emsVoipPstnUser.EmsOnt;
if (ont.Access != null)
{
nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByOntAccessId(ont.Access.Id);
if (nddOnt != null)
{
if (Ia.Ngn.Cl.Model.Business.Service.OltIsWithinAllowedToBeProvisionedOrMigratedOltList(nddOnt.Pon.PonGroup.Olt))
{
if (nddOnt.Pon.PonGroup.Olt.IsSip == true)
{
if (ont.FamilyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
{
var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Default.AccessNameToMduDevDictionary;
if (accessNameToMduDevDictionary.ContainsKey(nddOnt.Access.Name))
{
mduDev = accessNameToMduDevDictionary[nddOnt.Access.Name];
if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
}
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, mduDev, nddOnt, service, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, mduDev);
result.AddSuccess("command(s) sent...");
}
else result.AddError("ont.FamilyType is MDU but AccessNameToMduDevDictionary does not contain key: " + nddOnt.Access.Name + " for service: " + service + ", and access: " + nddOnt.Access.Name + ".");
}
else result.AddError("ONT family type is not MDU.");
}
else result.AddError("OLT is not SIP, its H.248.");
}
else result.AddError("nddOnt.Access.Name " + nddOnt.Access.Name + " is not in an allowed to be provisioned OLT.");
}
else result.AddError("nddOnt is null, does not exist for service " + service + ".");
vacatedNddOnt = nddOnt;
}
else result.AddError("ont.Access is null for service " + service + ".");
}
}
else
{
var msanEmsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByMsanService(service);
if (msanEmsVoipPstnUserList.Count > 0)
{
// MSAN
foreach (var emsVoipPstnUser in msanEmsVoipPstnUserList)
{
DeleteVoipPstnUserAndOrVacateVoipPstnAccount(emsVoipPstnUser.DID, emsVoipPstnUser.FN, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
}
result.AddSuccess("command(s) sent...");
}
else result.AddWarning("Could not find service " + service + ".");
}
}
}
else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
return vacatedNddOnt;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic> DeleteMsanVoipPstnUser2(string service, out Ia.Cl.Model.Result result)
{
Ia.Ngn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic lic;
result = new Ia.Cl.Model.Result();
var licList = new List<Ia.Ngn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic>();
if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
{
var msanEmsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByMsanService(service);
if (msanEmsVoipPstnUserList.Count > 0)
{
// MSAN
foreach (var emsVoipPstnUser in msanEmsVoipPstnUserList)
{
DeleteVoipPstnUserAndOrVacateVoipPstnAccount(emsVoipPstnUser.DID, emsVoipPstnUser.FN, emsVoipPstnUser.SN, emsVoipPstnUser.PN);
lic = Ia.Ngn.Cl.Model.Data.Nokia.Default.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUser.Id);
licList.Add(lic);
}
result.AddSuccess("command(s) sent...");
}
else result.AddWarning("Could not find service " + service + ".");
}
else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
return licList;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void DeleteVoipPstnUserAndOrVacateVoipPstnAccount(string dev, int fn, int sn, int pn)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, dev, fn, sn, pn);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, dev, fn, sn, pn);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, dev);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static void DeleteVoipPstnUserAndOrVacateVoipPstnAccount(int did, int fn, int sn, int pn)
{
var dev = Ia.Ngn.Cl.Model.Data.Nokia.Dev.DidToDevDictionary[did];
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendVacateVoipPstnAccount(ems, dev, fn, sn, pn);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, dev, fn, sn, pn);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, dev);
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Ia.Cl.Model.Result CreateMsanVoipPstnUser(string msanDevId, int fn, int sn, int pn, string service)
{
Ia.Ngn.Cl.Model.Business.Nokia.Default.FnSnPnPort fnSnPn;
var result = new Ia.Cl.Model.Result();
if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
{
var msanDev = (from m in Ia.Ngn.Cl.Model.Data.Nokia.Default.MsanDevList where m.Id == msanDevId select m).Single();
var vacantFnSnPnList = Ia.Ngn.Cl.Model.Data.Nokia.Ams.VacantMsanFnSnPnListForMsanDev(msanDev);
if (vacantFnSnPnList.Count > 0)
{
fnSnPn = vacantFnSnPnList.Where(f => f.Fn == fn && f.Sn == sn && f.Pn == pn).SingleOrDefault();
if (fnSnPn == null) fnSnPn = Ia.Ngn.Cl.Model.Data.Nokia.Ams.NextVacantMsanFnSnPnForMsanDev(msanDev);
if (fnSnPn != null)
{
var emsVoipPstnUserList = Ia.Ngn.Cl.Model.Data.Nokia.VoipPstnUser.ReadByService(service);
if (emsVoipPstnUserList.Count == 0)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendCreateMsanVoipPstnUser(ems, msanDev, fnSnPn.Fn, fnSnPn.Sn, fnSnPn.Pn, service);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, msanDev);
result.AddSuccess("command(s) sent...");
}
else result.AddError("emsVoipPstnUserList count != 0. Value must be zero before the operation is executed for service: " + service + ".");
}
else result.AddError("MDU sn and/or tel is invalid or does not exist.");
}
else result.AddError("vacantFnSnPnList.Count is 0. There are no vacant ports in MSAN.");
}
else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
return result;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void ReadVoipPstnUser(string dev, int fn, int sn, int pn)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, dev, sn, pn);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void ReadMsanVoipPstnUser(Ia.Ngn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic lic)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, lic.MsanDevDev, lic.Sn, lic.Pn);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void ReadVoipPstnUser(string service)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, service);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static void ReadVoipPstnUser(int did, int fn, int sn, int pn)
{
var dev = Ia.Ngn.Cl.Model.Data.Nokia.Dev.DidToDevDictionary[did];
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendReadVoipPstnUser(ems, dev, sn, pn);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void DeleteVoipPstnUser(string dev, int fn, int sn, int pn)
{
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendDeleteVoipPstnUser(ems, dev, fn, sn, pn);
Ia.Ngn.Cl.Model.Data.Nokia.Ams.SendSaveDev(ems, dev);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic> DeleteMsanVoipPstnUser(string service, out Ia.Cl.Model.Result result)
{
var licList = new List<Ia.Ngn.Cl.Model.Business.Nokia.Dev.MsanDev.Lic>();
result = new Ia.Cl.Model.Result();
try
{
if (!string.IsNullOrEmpty(service))
{
if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
{
licList = Ia.Ngn.Cl.Model.Business.Nokia.Nce.DeleteMsanVoipPstnUser2(service, out result);
}
else result.AddError("Service number " + service + " does not belong to allowed domain lists.");
}
else result.AddError("Service null or empty.");
}
catch (Exception ex)
{
result.AddError("Exception: " + ex.ToString() + ".");
}
return licList;
}
*/
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Ia.Cl.Model.Result ResetOntInEventsWithClassOntAndCauseInactAndSeverityNotClInLast24HoursList()
{
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont ont;
List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ontResetSentList;
Dictionary<string, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ontIdToOntDictionary;
var result = new Ia.Cl.Model.Result();
ontResetSentList = new List<Cl.Model.Business.NetworkDesignDocument.Ont>();
var events = Ia.Ngn.Cl.Model.Data.Event.EventWithClassOntAndCauseInactAndLastRecordSeverityNotClAndOntAccessNotNullInLast24HoursList();
ontIdToOntDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIdToOntDictionary;
if (events.Count > 0)
{
foreach (var @event in events)
{
if (ontIdToOntDictionary.ContainsKey(@event.Ont.Id))
{
ont = ontIdToOntDictionary[@event.Ont.Id];
if (!eventDictionary.ContainsKey(ont))
{
eventDictionary[ont] = false;
}
}
}
}
else
{
}
foreach (KeyValuePair<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont, bool> kvp in eventDictionary)
{
if (!kvp.Value)
{
ams.SendQueue.Enqueue(Ia.Ngn.Cl.Model.Business.Nokia.Ams.ResetOntCommand(kvp.Key));
if (result.IsSuccessful) ontResetSentList.Add(kvp.Key);
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Enqueue all ONTs within the eventDictionary to make sure we read their state after the reset
/// </summary>
public static void EnqueueOntWithinEventDictionary()
{
foreach (KeyValuePair<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont, bool> kvp in eventDictionary)
{
//if (!kvp.Value)
//{
// this will read all reset ONT all day until eventDictionary is cleared.
// eventDictionary[kvp.Value] = true;
Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.AmsApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ReadAccess, kvp.Key.Access.Name);
//}
}
// reset events dictionary
eventDictionary.Clear();
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Ia.Cl.Model.Result ManageMsmqQueue()
{
var result = new Ia.Cl.Model.Result();
var queueCount = Ia.Ngn.Cl.Model.Data.Msmq.AmsApplication.Count;
if (queueCount > 0)
{
var message = Ia.Ngn.Cl.Model.Data.Msmq.AmsApplication.Dequeue;
if (message.Process == Ia.Ngn.Cl.Model.Business.Msmq.Process.ReadAccess)
{
SendQueueEnqueueReadOnt(message.AccessName, out result);
}
else if (message.Process == Ia.Ngn.Cl.Model.Business.Msmq.Process.ResetAccess)
{
SendQueueEnqueueResetOnt(message.AccessName, out result);
}
else if (message.Process == Ia.Ngn.Cl.Model.Business.Msmq.Process.CreateReadServiceAccessPort || message.Process == Ia.Ngn.Cl.Model.Business.Msmq.Process.CreateReadNceOrAmsServiceAccessPort)
{
var service = message.Service;
var accessName = message.AccessName;
var port = (message.Port > 0) ? message.Port : Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
var nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
if (nddOnt != null)
{
if (nddOnt.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
{
//Ia.Ngn.Cl.Model.Business.Nokia.Nce.CreateOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, accessName, port, out Ia.Cl.Model.Result createResult);
//Ia.Ngn.Cl.Model.Business.Nokia.Nce.ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, accessName, port, out Ia.Cl.Model.Result readResult);
result.AddSuccess("Create/Read: " + service + "|" + accessName + "|" + port + ": " + " Hu-No SIP undefined"); // createResult.Message + "," + readResult.Message);
if (!priorityServiceList.Contains(service)) priorityServiceList.Add(service);
}
else result.AddError("Access vendor is not Nokia. Access name: " + accessName + ".");
}
else result.AddError("NDD ONT is null for access name: " + accessName + ".");
}
else if (message.Process == Ia.Ngn.Cl.Model.Business.Msmq.Process.DeleteReadServiceAccess || message.Process == Ia.Ngn.Cl.Model.Business.Msmq.Process.DeleteReadNceOrAmsServiceAccessPort)
{
var service = message.Service;
var accessName = message.AccessName;
var port = (message.Port > 0) ? message.Port : Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
var nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
if (nddOnt != null)
{
if (nddOnt.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
{
//var vacatedAccessName = Ia.Ngn.Cl.Model.Business.Nokia.Nce.DeleteOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, accessName, port, out Ia.Cl.Model.Result deleteResult);
//Ia.Ngn.Cl.Model.Business.Nokia.Nce.ReadOntSipInfoOrVoipPstnUserAndOrVoipPstnAccount(service, vacatedAccessName, port, out Ia.Cl.Model.Result readResult);
result.AddSuccess("Delete/Read: " + service + "|" + accessName + "|" + port + ": " + " Hu-No SIP undefined"); // + deleteResult.Message + "," + readResult.Message);
if (!priorityServiceList.Contains(service)) priorityServiceList.Add(service);
}
else result.AddError("Access vendor is not Nokia. Access name: " + accessName + ".");
}
else result.AddError("NDD ONT is null for access name: " + accessName + ".");
}
else
{
throw new ArgumentOutOfRangeException("MSMQ process " + message.Process.ToString() + " is undefined");
}
result.AddSuccess(message.AccessName);
}
return result;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string ManageProperly()
{
var command = Ia.Ngn.Cl.Model.Business.Nokia.Ams.ProperlySelectedSingleAmsCommandToManageOntVoipPotsNetworkElements();
ams.SendQueue.Enqueue(command);
return command;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void KeepAliveOltAmsNameListItem()
{
keepAliveCurrentAmsName = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltAmsNameList.NextOf(keepAliveCurrentAmsName);
ams.SendQueue.Enqueue(Ia.Ngn.Cl.Model.Business.Nokia.Ams.AmsKeepAliveCommand(keepAliveCurrentAmsName));
/*
foreach (string amsName in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.IsNrNokiaOltAmsNameList)
{
sendQueue.Enqueue(Ia.Ngn.Cl.Model.Business.Nokia.Ams.AmsKeepAliveCommand(amsName));
}
*/
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void SendQueueEnqueueReadOnt(string input, out Ia.Cl.Model.Result result)
{
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor accessVendor;
List<string> amsCommandList;
result = new Ia.Cl.Model.Result();
if (!string.IsNullOrEmpty(input))
{
if (input.Length > 0)
{
input = input.Trim();
input = input.ToUpper();
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}$"))
{
if (Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.AccessNameIsWithinAllowedOntList(input, out string accessName))
{
accessVendor = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.AccessVendorByAccessName(accessName);
if (accessVendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
{
amsCommandList = Ia.Ngn.Cl.Model.Business.Nokia.Ams.AmsCommandsToRetrieveOntVoipPotsForASingleOntWithDefinedFamilyTypeAndForItIfThisSingleOntDefinedInNddDocumentList(accessName);
if (amsCommandList != null && amsCommandList.Count > 0)
{
if (Ia.Ngn.Cl.Model.Business.Nokia.Ams.IsConnected /*&& activated && !receivingData*/)
{
foreach (string s in amsCommandList)
{
//telnet.Send(s);
ams.SendQueue.Enqueue(s);
}
}
result.AddSuccess(accessName);
}
}
else
{
result.AddError("SendQueueEnqueueReadOnt(): Error: access [" + accessName + "] is not a valid Nokia access ONT.");
}
}
else
{
result.AddError("SendQueueEnqueueReadOnt(): Error: input AccessName [" + accessName + "] is not within allowed ONT list.");
}
}
else
{
result.AddError("SendQueueEnqueueReadOnt(): Error: input: [" + input + "] is not a valid OntName or AccessName.");
}
}
else
{
result.AddError("SendQueueEnqueueReadOnt(): Error: input is empty.");
}
}
else
{
result.AddError("SendQueueEnqueueReadOnt(): Error: input is null or empty.");
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void SendQueueEnqueueResetOnt(string input, out Ia.Cl.Model.Result result)
{
string amsCommand;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor accessVendor;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
//List<string> amsCommandList;
result = new Ia.Cl.Model.Result();
if (!string.IsNullOrEmpty(input))
{
if (input.Length > 0)
{
input = input.Trim();
input = input.ToUpper();
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}$"))
{
if (Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.AccessNameIsWithinAllowedOntList(input, out string accessName))
{
accessVendor = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.AccessVendorByAccessName(accessName);
nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
if (accessVendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
{
amsCommand = Ia.Ngn.Cl.Model.Business.Nokia.Ams.ResetOntCommand(nddOnt);
if (!string.IsNullOrEmpty(amsCommand))
{
ams.SendQueue.Enqueue(amsCommand);
result.AddSuccess(accessName);
}
}
else
{
result.AddError("SendQueueEnqueueResetOnt(): Error: access [" + accessName + "] is not a valid Nokia access ONT.");
}
}
else
{
result.AddError("SendQueueEnqueueResetOnt(): Error: input AccessName [" + accessName + "] is not within allowed ONT list.");
}
}
else
{
result.AddError("SendQueueEnqueueResetOnt(): Error: input: [" + input + "] is not a valid OntName or AccessName.");
}
}
else
{
result.AddError("SendQueueEnqueueResetOnt(): Error: input is empty.");
}
}
else
{
result.AddError("SendQueueEnqueueResetOnt(): Error: input is null or empty.");
}
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> PrepareCtaggedCommand(List<string> commandList)
{
List<string> ctaggedCommandList;
if (commandList.Count > 0)
{
ctaggedCommandList = new List<string>(commandList.Count);
foreach (string command in commandList)
{
ctaggedCommandList.Add(PrepareCtaggedCommand(command));
}
}
else ctaggedCommandList = new List<string>();
return ctaggedCommandList;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static string PrepareCtaggedCommand(string command)
{
string ctaggedCommand, ctag;
if (command.Contains("{ctag}"))
{
ctag = Ia.Cl.Model.Default.RandomNumber(6);
// CTAG: The value of the CTAG is a non-zero integer of up to six characters.
// CTAG comes before ; or ::
Ia.Ngn.Cl.Model.Data.Nokia.Ams.CorrelationTagDictionary[ctag] = command;
ctaggedCommand = command.Replace("{ctag}", ctag);
}
else
{
ctaggedCommand = string.Empty;
}
return ctaggedCommand;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string AmsKeepAliveCommand(string amsName)
{
return FormatAmsCommand(AmsOpcode.RtrvHdr, amsName);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string ResetOntCommand(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont ont)
{
return FormatAmsOntCommand(AmsOpcode.InitSys, ont);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string AmsCommandOfARandomAmsKeepAlive()
{
var amsName = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList
where o.Odf.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia
select o.AmsName).ToList().PickRandom();
var command = FormatAmsCommand(AmsOpcode.RtrvHdr, amsName);
return command;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void EnqueuePriorityAmsCommandQueue(string command)
{
priorityAmsCommandQueue.Enqueue(command);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static void EnqueuePriorityAmsCommandQueue(List<string> amsCommandList)
{
if (amsCommandList != null && amsCommandList.Count > 0)
{
foreach (string s in amsCommandList) priorityAmsCommandQueue.Enqueue(s);
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string ProperlySelectedSingleAmsCommandToManageOntVoipPotsNetworkElements()
{
string command;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt;
List<string> list;
command = null;
if (priorityAmsCommandQueue.Count > 0)
{
command = priorityAmsCommandQueue.Dequeue();
}
else
{
/*
if (false && command == null && randomPercent < 60)
{
if (amsCreateOntCommandQueue.Count == 0)
{
olt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltList.Where(o => o.StateId == (int)Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.BellcoreState.IsNr).PickRandom();
list = AmsCommandsToPreprovisionOntThatAreNotProvisionedAsDefinedInNddDocumentWithinAnOltList(olt, true, false, out count);
amsCreateOntCommandQueue = new Queue<string>(list);
}
if (amsCreateOntCommandQueue.Count > 0) command = amsCreateOntCommandQueue.Dequeue();
}
*/
if (amsCommandQueue.Count == 0)
{
//olt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltList.Where(o => o.StateId == (int)Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.BellcoreState.IsNr).PickRandom();
olt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.NokiaOltList.PickRandom();
list = Ia.Ngn.Cl.Model.Business.Nokia.Ams.AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyType_AmsCommandsToRetrieveOntsDefinedInNddDocument_AmsCommandsToUpdateAndDisplayOntDescriptionWithItsAccessName_AmsCommandsToUpdateOntOntPotsCustomerWithItsConnectedServiceNumberList(olt);
amsCommandQueue = new Queue<string>(list);
}
if (amsCommandQueue.Count > 0) command = amsCommandQueue.Dequeue();
if (command == null) command = AmsCommandOfARandomAmsKeepAlive();
}
return command;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> FormatAmsRtrvCommand(AmsOpcode amsOpcode, string position)
{
return FormatAmsRtrvCommand(amsOpcode, 0, position);
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> FormatAmsRtrvCommand(AmsOpcode amsOpcode, Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType, string position)
{
// Use this command with variable number of parameters
string command, amsName;
List<string> list;
command = null;
list = new List<string>(10);
if (!string.IsNullOrEmpty(position))
{
AmsNameAndCardPortOntSquenceFromOntPosition(position, out amsName, out string pon);
if (amsOpcode == AmsOpcode.RtrvOnt)
{
command = "RTRV-ONT:" + amsName + ":ONT-1-1-" + pon + ";";
list.Add(command);
}
else if (amsOpcode == AmsOpcode.RtrvServiceVoip)
{
command = "RTRV-SERVICE-VOIP:" + amsName + ":VOIP-1-1-" + pon + "-1;";
list.Add(command);
}
else if (amsOpcode == AmsOpcode.RtrvOntPots)
{
foreach (string ontPotsCardPort in Ia.Ngn.Cl.Model.Business.Nokia.Ont.PossiblePotsCardPortConfigurationForOntFamilyTypeList(familyType))
{
command = "RTRV-ONTPOTS:" + amsName + ":ONTPOTS-1-1-" + pon + "-" + ontPotsCardPort + ";";
list.Add(command);
}
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static string FormatAmsOntCommand(AmsOpcode amsOpcode, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont ont)
{
string command;
command = string.Empty;
if (!string.IsNullOrEmpty(ont.Position))
{
AmsNameAndCardPortOntSquenceFromOntPosition(ont.Position, out string amsName, out string pon);
if (amsOpcode == AmsOpcode.EdOntDesc1)
{
command = "ED-ONT:" + amsName + @":ONT-1-1-" + pon + "::::DESC1=" + ont.Access.Name + @":;";
// ED-ONT:ESH-1-1:ONT-1-1-2-2-26::::DESC1=ESH.4.26:;
}
else if (amsOpcode == AmsOpcode.EdOntDesc1Annul)
{
//command = "ED-ONT:" + amsName + @":ONT-1-1-" + pon + "::::DESC1=:;"; // this has no effect on ONT DESC1
// ED-ONT:ESH-1-1:ONT-1-1-2-2-26::::DESC1=:;
command = "ED-ONT:" + amsName + @":ONT-1-1-" + pon + "::::DESC1=NULL:;"; // you must send NULL to change ONT DESC1
// ED-ONT:ESH-1-1:ONT-1-1-2-2-26::::DESC1=NULL:;
}
else if (amsOpcode == AmsOpcode.InitSys)
{
command = "INIT-SYS:" + amsName + @":ONT-1-1-" + pon + ":::6;";
// INIT-SYS:SHD-SUR-LAG17:ONT-1-1-1-1-1:::6;
}
}
return command;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> FormatAmsOntOntPotsCommandList(AmsOpcode amsOpcode, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont ont, Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType, string termination, string customerInformation)
{
string command;
List<string> list;
list = new List<string>(10);
if (!string.IsNullOrEmpty(ont.Position))
{
AmsNameAndCardPortOntSquenceFromOntPosition(ont.Position, out string amsName, out string pon);
termination = termination.Replace("td", "");
if (int.TryParse(termination, out int td))
{
Ia.Ngn.Cl.Model.Business.Nokia.Ont.ReturnOntPotsCardAndPortFromFamilyTypeAndTd(familyType, td, out int card, out int port);
if (amsOpcode == AmsOpcode.EdOntPotsCustinfo)
{
if (!string.IsNullOrEmpty(customerInformation))
{
command = "ED-ONTPOTS:" + amsName + @":ONTPOTS-1-1-" + pon + "-" + card + "-" + port + "::::CUSTINFO=" + customerInformation + @":;";
// ED-ONTPOTS:ESH-1-1:ONTPOTS-1-1-1-1-1-2-1::::CUSTINFO=23632222:;\n";
}
else
{
command = "ED-ONTPOTS:" + amsName + @":ONTPOTS-1-1-" + pon + "-" + card + "-" + port + "::::CUSTINFO=NULL:;";
// ED-ONTPOTS:ESH-1-1:ONTPOTS-1-1-1-1-1-2-1::::CUSTINFO=NULL:;\n";
}
list.Add(command);
}
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static string FormatAmsCommand(AmsOpcode amsOpcode, string amsName)
{
string command;
if (amsOpcode == AmsOpcode.RtrvAlmPon)
{
command = "RTRV-ALM-PON:" + amsName + ":ALL:::MN,,NSA;";
}
else if (amsOpcode == AmsOpcode.RtrvHdr)
{
command = "RTRV-HDR:" + amsName + ":;";
}
else command = null;
return command;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static void AmsNameAndCardPortOntSquenceFromOntServiceHsiPosition(string ontPosition, out string amsName, out string cardPortOntCardPortServiceSequence)
{
Match match;
// SUR-1-1-1-1-1-1-1-1;
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})");
amsName = match.Groups[1].Value;
cardPortOntCardPortServiceSequence = match.Groups[2].Value;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static void AmsNameAndCardPortOntSquenceFromOntPosition(string ontPosition, out string amsName, out string pon)
{
Match match;
if (!string.IsNullOrEmpty(ontPosition))
{
// SBN-ARD-Lag1-1-1-1;
match = Regex.Match(ontPosition, @"^([\w\d\-]+)\-(\d{1,2}\-\d{1,2}\-\d{1,2})$");
if (match.Success)
{
amsName = match.Groups[1].Value;
pon = match.Groups[2].Value;
}
else
{
amsName = string.Empty;
pon = string.Empty;
}
}
else
{
amsName = string.Empty;
pon = string.Empty;
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Extract OLT Id, Card, Port, and ONT from ONT Position
/// </summary>
[Obsolete]
public static void OltIdCardPortOntFromOntPosition(string ontPosition, out int oltId, out int card, out int port, out int ont)
{
string amsName;
Match match;
if (!string.IsNullOrEmpty(ontPosition))
{
// SBN-ARD-Lag1-1-1-1;
match = Regex.Match(ontPosition, @"^([\w\d\-]+)\-(\d{1,2})\-(\d{1,2})\-(\d{1,2})$");
if (match.Success)
{
amsName = match.Groups[1].Value;
card = int.Parse(match.Groups[2].Value);
port = int.Parse(match.Groups[3].Value);
ont = int.Parse(match.Groups[4].Value);
oltId = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList
where o.AmsName == amsName
select o.Id).FirstOrDefault();
}
else
{
amsName = string.Empty;
card = port = ont = 0;
oltId = 0;
}
}
else
{
amsName = string.Empty;
card = port = ont = 0;
oltId = 0;
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string OntPositionFromAmsNameAndCardPortOntSquence(string amsName, string cardPortOnt)
{
string ontPosition;
ontPosition = amsName + "-" + cardPortOnt;
return ontPosition;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToUpdateOntDescriptionWithItsAccessNameList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
{
string accessName, ontId, ontDescription1;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
List<string> list;
var ontIdToOntAccessNameDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIdToOntAccessNameDictionary;
var ontIdToDescription1ForNonNullAccessDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Ont.IdToDescription1ForNonNullAccessDictionary;
var ontIdToDescription1ForNullAccessDictionary = Ia.Ngn.Cl.Model.Data.Nokia.Ont.IdToDescription1ForNullAccessDictionary;
//var ontIdWithNullAccessHashtable = Ia.Ngn.Cl.Model.Data.Nokia.Ont.IdWithNullAccessHashtable;
var ontIdToOntDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIdToOntDictionary;
list = new List<string>();
// insert descriptions for missing entries
if (ontIdToDescription1ForNonNullAccessDictionary.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in ontIdToDescription1ForNonNullAccessDictionary) //Ia.Ngn.Cl.Model.Ont ont in ontList)
{
ontId = kvp.Key;
ontDescription1 = kvp.Value;
if (ontIdToOntAccessNameDictionary.ContainsKey(ontId))
{
accessName = ontIdToOntAccessNameDictionary[ontId];
if (ontDescription1 != accessName)
{
nddOnt = ontIdToOntDictionary[ontId];
if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
{
list.Add(Ia.Ngn.Cl.Model.Business.Nokia.Ams.FormatAmsOntCommand(AmsOpcode.EdOntDesc1, nddOnt));
}
}
else
{
}
}
}
}
// delete descriptions ONTs with missing access info
if (ontIdToDescription1ForNullAccessDictionary.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in ontIdToDescription1ForNullAccessDictionary)
{
ontId = kvp.Key;
ontDescription1 = kvp.Value;
if (!string.IsNullOrEmpty(ontDescription1))
{
if (ontIdToOntDictionary.ContainsKey(ontId))
{
nddOnt = ontIdToOntDictionary[ontId];
if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
{
list.Add(Ia.Ngn.Cl.Model.Business.Nokia.Ams.FormatAmsOntCommand(AmsOpcode.EdOntDesc1Annul, nddOnt));
}
}
}
}
}
return list.ToList();
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToUpdateCustInfoWithServiceNumberInOntOntPotsList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
{
List<string> list;
Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
var ontIdToOntDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIdToOntDictionary;
var ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList = Ia.Ngn.Cl.Model.Data.Nokia.Ams.OntOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList();
list = new List<string>(ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList.Count);
// insert descriptions for missing entries
if (ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList.Count > 0)
{
foreach (var ontOntPotsService in ontOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList)
{
if (ontIdToOntDictionary.ContainsKey(ontOntPotsService.OntId))
{
nddOnt = ontIdToOntDictionary[ontOntPotsService.OntId];
if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
{
familyType = (Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType)ontOntPotsService.OntFamilyTypeId;
list.AddRange(Ia.Ngn.Cl.Model.Business.Nokia.Ams.FormatAmsOntOntPotsCommandList(AmsOpcode.EdOntPotsCustinfo, nddOnt, familyType, ontOntPotsService.Termination, ontOntPotsService.Service));
}
}
}
}
var ontOntPotsCustomerExistsButSubPartyIsNullServiceList = Ia.Ngn.Cl.Model.Data.Nokia.Ams.OntOntPotsCustomerExistsButSubPartyIsNullServiceList();
// delete descriptions of non existant entries
if (ontOntPotsCustomerExistsButSubPartyIsNullServiceList.Count > 0)
{
foreach (var oops in ontOntPotsCustomerExistsButSubPartyIsNullServiceList)
{
if (ontIdToOntDictionary.ContainsKey(oops.OntId))
{
nddOnt = ontIdToOntDictionary[oops.OntId];
if (nddOnt.Pon.PonGroup.Olt.Id == olt.Id)
{
list.Add(Ia.Ngn.Cl.Model.Business.Nokia.Ams.FormatAmsOntCommand(AmsOpcode.EdOntDesc1Annul, nddOnt));
}
}
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToPreprovisionAllOntsAsDefinedInNddDocumentWithinOltList(int oltId, bool edServiceVoipIsOos, out int count)
{
List<string> l, list;
List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> nddOntList;
count = 0;
list = null;
nddOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList where o.Pon.PonGroup.Olt.Id == oltId select o).ToList();
if (nddOntList != null && nddOntList.Count > 0)
{
list = new List<string>(nddOntList.Count);
foreach (Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt in nddOntList)
{
l = Ia.Ngn.Cl.Model.Business.Nokia.Ams.CommandsToPreprovisionOntWithinOlt(nddOnt, edServiceVoipIsOos);
list.AddRange(l);
count++;
}
}
else
{
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToPreprovisionOntThatAreNotProvisionedAsDefinedInNddDocumentWithinAnOltList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt, bool includeDisplayCommand, bool edServiceVoipIsOos, out int count)
{
List<string> l, list;
List<string> ontIdList;
List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> nddOntList;
count = 0;
list = null;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
nddOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList where o.Pon.PonGroup.Olt.Id == olt.Id select o).ToList();
ontIdList = Ia.Ngn.Cl.Model.Data.Nokia.Ont.IdList(olt.Id); //.ReadListByOltId(olt.Id);
if (nddOntList != null && nddOntList.Count > 0)
{
list = new List<string>(nddOntList.Count);
foreach (Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt in nddOntList)
{
if (!ontIdList.Contains(nddOnt.Id))
{
l = Ia.Ngn.Cl.Model.Business.Nokia.Ams.CommandsToPreprovisionOntWithinOlt(nddOnt, edServiceVoipIsOos);
list.AddRange(l);
if (includeDisplayCommand)
{
l = Ia.Ngn.Cl.Model.Business.Nokia.Ams.AmsCommandsToRetrieveOntVoipPotsForSingleOntsWithDefinedFamilyTypeList(nddOnt.Access.Name);
list.AddRange(l);
}
count++;
}
}
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToRetrieveOntVoipPotsForASingleOntWithDefinedFamilyTypeAndForItIfThisSingleOntDefinedInNddDocumentList(string accessName)
{
//Random r;
List<string> l1, l2, list;
//r = new Random();
l1 = AmsCommandToRetrieveSingleOntDefinedInNddDocumentList(accessName);
l2 = AmsCommandsToRetrieveOntVoipPotsForSingleOntsWithDefinedFamilyTypeList(accessName);
list = new List<string>(l1.Count + l2.Count);
foreach (var item in l1) list.Add(item);
foreach (var item in l2) list.Add(item);
return list.Distinct().ToList();
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeAndForOtherOntsDefinedInNddDocumentList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
{
List<string> l1, l2, list;
l1 = AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeList(olt);
l2 = AmsCommandsToRetrieveOntsDefinedInNddDocumentList(olt);
list = new List<string>(l1.Count + l2.Count);
foreach (var item in l1) list.Add(item);
foreach (var item in l2) list.Add(item);
return list.Distinct().Shuffle().ToList();
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyType_AmsCommandsToRetrieveOntsDefinedInNddDocument_AmsCommandsToUpdateAndDisplayOntDescriptionWithItsAccessName_AmsCommandsToUpdateOntOntPotsCustomerWithItsConnectedServiceNumberList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
{
HashSet<string> hashSet1, hashSet2, hashSet3, hashSet4, hashSet;
hashSet1 = new HashSet<string>(AmsCommandsToUpdateOntDescriptionWithItsAccessNameList(olt));
hashSet2 = new HashSet<string>(AmsCommandsToUpdateCustInfoWithServiceNumberInOntOntPotsList(olt));
hashSet3 = new HashSet<string>(AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeList(olt));
hashSet4 = new HashSet<string>(AmsCommandsToRetrieveOntsDefinedInNddDocumentList(olt));
hashSet = new HashSet<string>(hashSet1);
hashSet.UnionWith(hashSet2);
hashSet.UnionWith(hashSet3);
hashSet.UnionWith(hashSet4);
return hashSet.ToList(); //.Shuffle().ToList();
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> AmsCommandToRetrieveSingleOntDefinedInNddDocumentList(string accessName)
{
List<string> list;
Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
list = new List<string>(5); // 5 is max number of commands from this function
if (!string.IsNullOrEmpty(accessName))
{
nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
if (nddOnt != null)
{
familyType = Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Sfu;
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, nddOnt.Position));
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> AmsCommandsToRetrieveOntsDefinedInNddDocumentList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
{
Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType;
List<string> list;
List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ontList;
ontList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList where o.Pon.PonGroup.Olt.Id == olt.Id select o).ToList();
familyType = Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Sfu;
list = new List<string>(ontList.Count);
foreach (Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont ont in ontList)
{
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, ont.Position));
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> AmsCommandsToRetrieveOntVoipPotsForSingleOntsWithDefinedFamilyTypeList(string accessName)
{
List<string> list;
Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
Ia.Ngn.Cl.Model.Ont ont;
list = new List<string>(5); // 5 is max number of commands from this function
if (!string.IsNullOrEmpty(accessName))
{
nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntByAccessName(accessName);
if (nddOnt != null)
{
ont = Ia.Ngn.Cl.Model.Data.Nokia.Ont.Read(nddOnt.Id);
if (ont != null)
{
familyType = (Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType)ont.FamilyTypeId;
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, nddOnt.Position));
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvServiceVoip, familyType, nddOnt.Position));
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOntPots, familyType, nddOnt.Position));
}
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static List<string> AmsCommandsToRetrieveOntVoipPotsForOntsWithDefinedFamilyTypeList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
{
Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType;
Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
List<string> list;
Dictionary<string, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ontIdToOntDictionary;
List<Ia.Ngn.Cl.Model.Ont> ontList;
ontList = Ia.Ngn.Cl.Model.Data.Nokia.Ont.NonNullAccessList(olt.Id);
ontIdToOntDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIdToOntDictionary;
list = new List<string>(ontList.Count);
foreach (Ia.Ngn.Cl.Model.Ont ont in ontList)
{
familyType = (Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType)ont.FamilyTypeId;
if (ontIdToOntDictionary.ContainsKey(ont.Id))
{
nddOnt = ontIdToOntDictionary[ont.Id];
//if (ont.Access != null) access is already non null
//{
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOnt, familyType, nddOnt.Position));
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvServiceVoip, familyType, nddOnt.Position));
list.AddRange(FormatAmsRtrvCommand(AmsOpcode.RtrvOntPots, familyType, nddOnt.Position));
//}
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static ArrayList AmsCommandsToRetrieveNewOntAlarmsForOltArrayList()
{
ArrayList amsCommandArrayList;
amsCommandArrayList = new ArrayList(Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList.Count);
foreach (var olt in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList)
{
amsCommandArrayList.Add(FormatAmsCommand(AmsOpcode.RtrvAlmPon, olt.AmsName));
}
return amsCommandArrayList;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static ArrayList AmsCommandsToUpdateOntServiceDescriptionWithItsIspNameArrayList()
{
ArrayList amsCommandArrayList;
amsCommandArrayList = new ArrayList(100);
return amsCommandArrayList;
}
/*
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static int PositionOfHsiServiceForCardAndPortAndOntFamilyType(int card, int port, Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType familyType)
{
int position;
if (familyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Sfu || familyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Gfu || familyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Soho)
{
position = port;
}
else if (familyType == Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu)
{
position = (card - 1) * 4 + port;
}
else position = 0;
return position;
}
*/
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static bool UpdateDatabaseWithAmsCommandOutput(string rowData, out Ia.Cl.Model.Result result)
{
bool isUpdated;
int readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
string accessId, ontId, ontPosition;
string line, amsName, cardPortOnt;
DateTime eventTime;
Match match;
MatchCollection matchCollection;
Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState state;
//ponNameToPonIdHashtable = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.PonNameToPonIdHashtable;
isUpdated = false;
readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
result = new Ia.Cl.Model.Result();
//result.Content = rowData;
// below: remove all '\' characters from rowData and reset NULL comments to ""
rowData = rowData.Replace(@"\", "");
rowData = rowData.Replace(@"NULL", "");
if (rowData.Contains("RTRV-ONT:"))
{
#region RTRV-ONT
Ia.Ngn.Cl.Model.Ont ont, dataOnt;
/*
SUR-1-1 08-07-10 09:35:07
M 0 COMPLD
/ * 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 * /
"ONT-1-1-1-1-1::BTRYBKUP=NO,BERINT=8000,DESC1="SLA.1.1",
DESC2="all is well",PROVVERSION="*",SERNUM=ALCLA0A1A5F8,
SUBSLOCID="WILDCARD",SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,
SCHEDPROFID=1,SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,
POWERSHEDPROFNM="NULL",ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,
SWVERACT=3FE50853AFMA07,SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,
EQUIPID=BVM3G00CRAO420EB ,NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:
IS-NR"
"ONT-1-1-1-1-10::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1A479,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
"ONT-1-1-1-1-2::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A261BB,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AAAA22,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
*/
// below: information from the definition of "RTRV-ONT" in "AMS TL1 Commands Reference"
/*
IP 0
<
SUR-1-1 08-07-10 09:35:07
M 0 COMPLD
/ * 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 * /
"ONT-1-1-1-1-1::BTRYBKUP=NO,BERINT=8000,DESC1="SLA.1.1",
DESC2="all is well",PROVVERSION="*",SERNUM=ALCLA0A1A5F8,
SUBSLOCID="WILDCARD",SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,
SCHEDPROFID=1,SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,
POWERSHEDPROFNM="NULL",ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,
SWVERACT=3FE50853AFMA07,SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,
EQUIPID=BVM3G00CRAO420EB ,NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:
IS-NR"
"ONT-1-1-1-1-10::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1A479,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
"ONT-1-1-1-1-2::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A261BB,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AAAA22,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
/ * More Output Follows * /
>
SUR-1-1 08-07-10 09:35:07
M 0 COMPLD
/ * 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 * /
"ONT-1-1-1-1-3::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1C9BC,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
"ONT-1-1-1-1-4::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1A47A,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
"ONT-1-1-1-1-5::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1AE44,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
/ * More Output Follows * /
>
SUR-1-1 08-07-10 09:35:08
M 0 COMPLD
/ * 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 * /
"ONT-1-1-1-1-6::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1BE26,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
"ONT-1-1-1-1-7::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1C94B,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAB01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
"ONT-1-1-1-1-8::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1A484,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
/ * More Output Follows * /
>
SUR-1-1 08-07-10 09:35:08
M 0 COMPLD
/ * 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 * /
"ONT-1-1-1-1-9::BTRYBKUP=NO,BERINT=8000,DESC1="NULL",DESC2="NULL",
PROVVERSION="*",SERNUM=ALCLA0A1A43E,SUBSLOCID="WILDCARD",
SWVERPLND="3FE50853AFMA07",FECUP=DISABLE,SCHEDPROFID=1,
SCHEDPROFNM="defSubSchedProf",POWERSHEDPROFID=0,POWERSHEDPROFNM="NULL",
ONTENABLE=AUTO,EQPTVERNUM=3FE50683ADAA01,SWVERACT=3FE50853AFMA07,
SWVERPSV=3FE50853AFKA03,VENDORID=ALCL,EQUIPID=BVM3G00CRAO420EB ,
NUMSLOTS=2,NUMTCONT=22,NUMTRFSCH=22,NUMPQ=22:IS-NR"
;
*/
// below: read OntPosition
match = Regex.Match(rowData, @"RTRV-ONT:([\w\d\-]+)", RegexOptions.Singleline);
amsName = match.Groups[1].Value;
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);
if (match.Success)
{
cardPortOnt = match.Groups[1].Value;
line = match.Groups[2].Value;
ontId = Ia.Ngn.Cl.Model.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
if (!string.IsNullOrEmpty(ontId))
{
dataOnt = new Ia.Ngn.Cl.Model.Ont();
dataOnt.Id = ontId;
dataOnt.BatteryBackupAvailable = (Ia.Cl.Model.Default.Match(line, @"BTRYBKUP=(\w+)") == "YES") ? true : false;
dataOnt.Description1 = Ia.Cl.Model.Default.Match(line, @"DESC1=""([^""]{1,64})""");
dataOnt.Description2 = Ia.Cl.Model.Default.Match(line, @"DESC2=""([^""]{1,64})""");
dataOnt.Serial = Ia.Cl.Model.Default.Match(line, @"SERNUM=(\w{12})");
dataOnt.PlannedSoftware = Ia.Cl.Model.Default.Match(line, @"SWVERPLND=""(auto|AUTO|\w{14})""");
dataOnt.ActiveSoftware = Ia.Cl.Model.Default.Match(line, @"SWVERACT=(\w{14})");
dataOnt.PassiveSoftware = Ia.Cl.Model.Default.Match(line, @"SWVERPSV=(\w{14})");
dataOnt.FamilyTypeId = (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyTypeIdFromActiveSoftwareAndPlannedSoftware(dataOnt.ActiveSoftware, dataOnt.PlannedSoftware);
dataOnt.VendorId = Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.VendorIdFromName(Ia.Cl.Model.Default.Match(line, @"VENDORID=(\w+)"));
dataOnt.EquipmentId = Ia.Cl.Model.Default.Match(line, @"EQUIPID=(\w{16})");
switch (match.Groups[3].Value)
{
case "IS-NR": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.IsNr; break;
case "OOS-AU": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAu; break;
case "OOS-MA": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosMa; break;
case "OOS-AUMA": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAuma; break;
default: state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.Undefined; break;
}
dataOnt.StateId = (int)state;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
accessId = Ia.Ngn.Cl.Model.Business.Access.AccessId(ontId);
if (accessId != null) dataOnt.Access = (from a in db.Accesses where a.Id == accessId select a).SingleOrDefault();
ont = (from o in db.Onts where o.Id == dataOnt.Id select o).SingleOrDefault();
if (ont == null)
{
dataOnt.Created = dataOnt.Updated = DateTime.UtcNow.AddHours(3);
db.Onts.Add(dataOnt);
insertedItemCount++;
}
else
{
existingItemCount++;
if (ont.Update(dataOnt))
{
db.Onts.Attach(ont);
db.Entry(ont).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
updatedItemCount++;
}
}
db.SaveChanges();
}
}
else
{
result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
}
#endregion
}
else if (rowData.Contains("ED-ONT:"))
{
#region ED-ONT
Ia.Ngn.Cl.Model.Ont ont, dataOnt;
/*
SUR-5-2 14-11-23 05:22:08
M 0 COMPLD
/ * ED-ONT:SUR-5-2:ONT-1-1-1-2-6::::DESC1=ZAH.2.6: * /
M 0 COMPLD
/ * ED-ONT:QRW-SLB-LAG2:ONT-1-1-3-2-10:98499:::DESC1=QRW.33.10: * /
;
*/
// below: read OntPosition
match = Regex.Match(rowData, @"ED-ONT:([\w\d\-]+)", RegexOptions.Singleline);
amsName = match.Groups[1].Value;
match = Regex.Match(rowData, @"ONT-1-1-(\d{1,2}-\d{1,2}-\d{1,2}):\d{0,6}:::(.+?):", RegexOptions.Singleline);
if (match.Success)
{
cardPortOnt = match.Groups[1].Value;
line = match.Groups[2].Value;
ontId = Ia.Ngn.Cl.Model.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
if (!string.IsNullOrEmpty(ontId))
{
dataOnt = new Ia.Ngn.Cl.Model.Ont();
dataOnt.Id = ontId;
dataOnt.Description1 = Ia.Cl.Model.Default.Match(line, @"DESC1=(.{1,64})");
dataOnt.Description2 = Ia.Cl.Model.Default.Match(line, @"DESC2=(.{1,64})");
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
ont = (from o in db.Onts where o.Id == dataOnt.Id select o).SingleOrDefault();
if (ont == null)
{
// below: Don't create a new ONT in this ED-ONT function
//dataOnt.Created = dataOnt.Updated = DateTime.UtcNow.AddHours(3);
//db.Onts.Add(dataOnt);
insertedItemCount++;
}
else
{
existingItemCount++;
if (ont.Update(dataOnt))
{
db.Onts.Attach(ont);
db.Entry(ont).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
updatedItemCount++;
}
}
db.SaveChanges();
}
}
else
{
result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
}
#endregion
}
else if (rowData.Contains("RTRV-SERVICE-VOIP:"))
{
#region RTRV-SERVICE-VOIP
string ontServiceVoipId;
int card;
Ia.Ngn.Cl.Model.OntServiceVoip ontServiceVoip, dataOntServiceVoip;
// below: information from the definition of "RTRV-SERVICE-VOIP" in "AMS TL1 Commands Reference"
/*
SUR-1-1 08-07-09 09:43:13
M 0 COMPLD
/ * RTRV-SERVICE-VOIP:SUR-1-1:VOIP-1-1-1-1-1-1&VOIP-1-1-1-1-10-1&VOIP-1-1 * /
/ * -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- * /
/ * 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 * /
"VOIP-1-1-1-1-1-1::BWPROFUPID=1,BWPROFUPNM=VOIP,BWPROFDNID=1,
BWPROFDNNM=VOIP,PQPROFID=1,PQPROFNM=VOIPPQ,AESENABLE=DISABLE,SVLAN=10,
IPADDRLOC=10.3.144.1,NETMASKLOC=255.255.248.0,DEFROUTER=10.3.151.254,
IPADDRMGC=10.255.251.5,IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,
VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=kuwait.xml,CLIENTID="",
CUSTOMERID="",SECRETID=,SECRETK=,IPSECENABLE=DISABLED,CONFMETH=FTPSERVER,
SPGPROFID=0,SPGPROFNM="",SPGUNAME="",SPGPWD="",SPGREALM="",
SRCVLANID=0:IS-NR"
"VOIP-1-1-1-1-10-1::BWPROFUPID=1,BWPROFUPNM=VOIP,BWPROFDNID=1,
BWPROFDNNM=VOIP,PQPROFID=1,PQPROFNM=VOIPPQ,AESENABLE=DISABLE,SVLAN=10,
IPADDRLOC=10.3.144.10,NETMASKLOC=255.255.248.0,DEFROUTER=10.3.151.254,
IPADDRMGC=10.255.251.5,IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,
VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=kuwait.xml,CLIENTID="",
CUSTOMERID="",SECRETID=,SECRETK=,IPSECENABLE=DISABLED,CONFMETH=FTPSERVER,
SPGPROFID=0,SPGPROFNM="",SPGUNAME="",SPGPWD="",SPGREALM="",
SRCVLANID=0:IS-NR"
"VOIP-1-1-1-1-2-1::BWPROFUPID=1,BWPROFUPNM=VOIP,BWPROFDNID=1,
BWPROFDNNM=VOIP,PQPROFID=1,PQPROFNM=VOIPPQ,AESENABLE=DISABLE,SVLAN=10,
IPADDRLOC=10.3.144.2,NETMASKLOC=255.255.248.0,DEFROUTER=10.3.151.254,
IPADDRMGC=10.255.251.5,IPADDRFTP=0.0.0.0,DHCP=DISABLE,PORTMGC=2944,
VOIPDSCP=24,VOIPMODE=SSH248,CONFIGFILE=kuwait.xml,CLIENTID="",
CUSTOMERID="",SECRETID=,SECRETK=,IPSECENABLE=DISABLED,CONFMETH=FTPSERVER,
SPGPROFID=0,SPGPROFNM="",SPGUNAME="",SPGPWD="",SPGREALM="",
SRCVLANID=0:IS-NR"
/ * More Output Follows * /
>
*/
// below: read OntPosition
match = Regex.Match(rowData, @"RTRV-SERVICE-VOIP:([\w\d\-]+)", RegexOptions.Singleline);
amsName = match.Groups[1].Value;
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);
if (match.Success)
{
cardPortOnt = match.Groups[1].Value;
card = int.Parse(match.Groups[2].Value);
line = match.Groups[3].Value;
ontId = Ia.Ngn.Cl.Model.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
if (!string.IsNullOrEmpty(ontId))
{
ontServiceVoipId = Ia.Ngn.Cl.Model.Business.Nokia.OntServiceVoip.OntServiceVoipId(ontId, card);
dataOntServiceVoip = new Ia.Ngn.Cl.Model.OntServiceVoip();
dataOntServiceVoip.Id = ontServiceVoipId;
dataOntServiceVoip.ConfiguratinFile = Ia.Cl.Model.Default.Match(line, @"CONFIGFILE=(\w{1,}\.xml)");
dataOntServiceVoip.Customer = Ia.Cl.Model.Default.Match(line, @"CUSTOMERID=""([^""]{1,62})""");
dataOntServiceVoip.FtpIp = Ia.Cl.Model.Default.Match(line, @"IPADDRFTP=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
dataOntServiceVoip.Ip = Ia.Cl.Model.Default.Match(line, @"IPADDRLOC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
dataOntServiceVoip.Label = Ia.Cl.Model.Default.Match(line, @"LABEL=""([^""]{1,80})""");
dataOntServiceVoip.MgcIp = Ia.Cl.Model.Default.Match(line, @"IPADDRMGC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
dataOntServiceVoip.MgcSecondaryIp = Ia.Cl.Model.Default.Match(line, @"IPADDRMGCSEC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
switch (match.Groups[4].Value)
{
case "IS-NR": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.IsNr; break;
case "OOS-AU": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAu; break;
case "OOS-MA": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosMa; break;
case "OOS-AUMA": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAuma; break;
default: state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.Undefined; break;
}
dataOntServiceVoip.StateId = (int)state;
dataOntServiceVoip.Svlan = int.Parse(Ia.Cl.Model.Default.Match(line, @"SVLAN=(\d{1,3})"));
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
dataOntServiceVoip.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
ontServiceVoip = (from osv in db.OntServiceVoips where osv.Id == dataOntServiceVoip.Id select osv).SingleOrDefault();
if (ontServiceVoip == null)
{
dataOntServiceVoip.Created = dataOntServiceVoip.Updated = DateTime.UtcNow.AddHours(3);
db.OntServiceVoips.Add(dataOntServiceVoip);
insertedItemCount++;
}
else
{
existingItemCount++;
if (ontServiceVoip.Update(dataOntServiceVoip))
{
db.OntServiceVoips.Attach(ontServiceVoip);
db.Entry(ontServiceVoip).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
updatedItemCount++;
}
}
db.SaveChanges();
}
}
else
{
result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
}
#endregion
}
else if (rowData.Contains("RTRV-ONTPOTS:"))
{
#region RTRV-ONTPOTS
string ontOntPotsId;
int card, port, svlan;
Ia.Ngn.Cl.Model.OntOntPots ontOntPots, dataOntOntPots;
// below: information from the definition of "RTRV-ONTPOTS" in "AMS TL1 Commands Reference"
/*
* ;RTRV-ONTPOTS:SUR-1-1:ONTPOTS-1-1-1-1-1-2-1;
SUR-1-1 14-03-13 08:15:46
M 0 COMPLD
/* RTRV-ONTPOTS:SUR-1-1:ONTPOTS-1-1-1-1-1-2-1 * /
"ONTPOTS-1-1-1-1-1-2-1::VOIPSERV=1,TERMID=td1,POTSDSCP=46,POTSPWR=0,
CALLHIST=DISABLED,PWROVERRIDE=FALSE,SIPMSGTOTH=0,BRRPKTLOSSTH=0,XJTTRTH=0,
RXGAIN=0,TXGAIN=0:IS-NR"
;
*/
// below: read OntPosition
match = Regex.Match(rowData, @"RTRV-ONTPOTS:([\w\d\-]+)", RegexOptions.Singleline);
amsName = match.Groups[1].Value;
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);
if (match.Success)
{
cardPortOnt = match.Groups[1].Value;
card = int.Parse(match.Groups[2].Value);
port = int.Parse(match.Groups[3].Value);
line = match.Groups[4].Value;
ontId = Ia.Ngn.Cl.Model.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
if (!string.IsNullOrEmpty(ontId))
{
if (card >= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MinimumCardValue && card <= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MaximumCardValue && port >= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MinimumPortValue && port <= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MaximumPortValue)
{
ontOntPotsId = Ia.Ngn.Cl.Model.Business.Nokia.OntOntPots.OntOntPotsId(ontId, card, port);
dataOntOntPots = new Ia.Ngn.Cl.Model.OntOntPots();
dataOntOntPots.Id = ontOntPotsId;
dataOntOntPots.Card = card;
dataOntOntPots.Customer = Ia.Cl.Model.Default.Match(line, @"CUSTINFO=(\w{1,80})");
dataOntOntPots.Port = port;
switch (match.Groups[5].Value)
{
case "IS-NR": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.IsNr; break;
case "OOS-AU": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAu; break;
case "OOS-MA": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosMa; break;
case "OOS-AUMA": state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAuma; break;
default: state = Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.Undefined; break;
}
dataOntOntPots.StateId = (int)state;
if (int.TryParse(Ia.Cl.Model.Default.Match(line, @"SVLAN=(\d{1,3})"), out svlan)) dataOntOntPots.Svlan = svlan;
dataOntOntPots.Termination = Ia.Cl.Model.Default.Match(line, @"TERMID=(\w{1,20})");
dataOntOntPots.Tn = Ia.Cl.Model.Default.Match(line, @"TN=(\w{1,16})");
dataOntOntPots.VoipClientIp = Ia.Cl.Model.Default.Match(line, @"VOIPCLIENTADDR=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})");
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
dataOntOntPots.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
ontOntPots = (from oop in db.OntOntPots where oop.Id == dataOntOntPots.Id select oop).SingleOrDefault();
if (ontOntPots == null)
{
dataOntOntPots.Created = dataOntOntPots.Updated = DateTime.UtcNow.AddHours(3);
db.OntOntPots.Add(dataOntOntPots);
insertedItemCount++;
}
else
{
existingItemCount++;
if (ontOntPots.Update(dataOntOntPots))
{
db.OntOntPots.Attach(ontOntPots);
db.Entry(ontOntPots).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
updatedItemCount++;
}
}
db.SaveChanges();
}
}
else
{
result.AddError(@"Card and/or port value is invalid: card:" + card + ", port:" + port);
}
}
else
{
result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
}
#endregion
}
else if (rowData.Contains("ED-ONTPOTS:"))
{
#region ED-ONTPOTS
string ontOntPotsId;
int card, port;
Ia.Ngn.Cl.Model.OntOntPots ontOntPots, dataOntOntPots;
/* ED-ONTPOTS:SUL-1-1:ONTPOTS-1-1-9-1-1-2-1:14614:::CUSTINFO=24977777: */
/* ED-ONTPOTS:SJA-JHR-LAG14:ONTPOTS-1-1-1-6-4-0-0:2425:::CUSTINFO=24531914: */
// below: read OntPosition
match = Regex.Match(rowData, @"ED-ONTPOTS:([\w\d\-]+)", RegexOptions.Singleline);
amsName = match.Groups[1].Value;
match = Regex.Match(rowData, @"ONTPOTS-1-1-(\d{1,2}-\d{1,2}-\d{1,2})-(\d{1,2})-(\d{1,2}):(.+?):", RegexOptions.Singleline);
if (match.Success)
{
cardPortOnt = match.Groups[1].Value;
card = int.Parse(match.Groups[2].Value);
port = int.Parse(match.Groups[3].Value);
line = match.Groups[4].Value;
ontId = Ia.Ngn.Cl.Model.Business.Nokia.Ont.OntId(amsName, cardPortOnt);
if (!string.IsNullOrEmpty(ontId))
{
if (card >= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MinimumCardValue && card <= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MaximumCardValue && port >= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MinimumPortValue && port <= Ia.Ngn.Cl.Model.Business.Nokia.Ont.MaximumPortValue)
{
ontOntPotsId = Ia.Ngn.Cl.Model.Business.Nokia.OntOntPots.OntOntPotsId(ontId, card, port);
dataOntOntPots = new Ia.Ngn.Cl.Model.OntOntPots();
dataOntOntPots.Id = ontOntPotsId;
dataOntOntPots.Card = card;
dataOntOntPots.Customer = Ia.Cl.Model.Default.Match(line, @"CUSTINFO=(\w{1,80})");
dataOntOntPots.Port = port;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
dataOntOntPots.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
ontOntPots = (from oop in db.OntOntPots where oop.Id == dataOntOntPots.Id select oop).SingleOrDefault();
if (ontOntPots == null)
{
dataOntOntPots.Created = dataOntOntPots.Updated = DateTime.UtcNow.AddHours(3);
db.OntOntPots.Add(dataOntOntPots);
insertedItemCount++;
}
else
{
existingItemCount++;
if (ontOntPots.Update(dataOntOntPots))
{
db.OntOntPots.Attach(ontOntPots);
db.Entry(ontOntPots).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
updatedItemCount++;
}
}
db.SaveChanges();
}
}
else
{
result.AddError(@"Card and/or port value is invalid: card:" + card + ", port:" + port);
}
}
else
{
result.AddError("Error in UpdateDatabaseWithAmsCommandOutput(): ontId was null or empty for amsName: [" + amsName + "] and pon: [" + cardPortOnt + "].");
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
}
#endregion
}
else if (rowData.Contains("RTRV-ALM-PON:"))
{
// 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
#region RTRV-ALM-PON
Ia.Ngn.Cl.Model.Event @event;
// below: important, remove all ''' char from string
rowData = rowData.Replace(@"'", "");
// below: read eventTime and amsName
// QRW-1-1 14-03-31 06:15:20
match = Regex.Match(rowData, @"([\w\d\-]+) ((\d{2})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}))", RegexOptions.Singleline);
amsName = match.Groups[1].Value;
eventTime = DateTime.ParseExact(match.Groups[2].Captures[0].Value, "yy-MM-dd HH:mm:ss", null);
// old "PON-1-1-9-2,PON:MN,NEWONT,NSA,,,,: \"SERNUM =ALCLA0A2D17A, SLID =DEFAULT,\""
// 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);
/*
"PON-1-1-10-3:CL,NEWONT,NSA,5-26,23-8-36,,:,
"SERNUM =ALCLA0A22564, SLID =DEFAULT ,
LOID = , USRATE =1.25g""
*/
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);
if (matchCollection.Count > 0)
{
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
foreach (Match m in matchCollection)
{
if (m.Success)
{
@event = new Ia.Ngn.Cl.Model.Event();
@event.Aid = m.Groups[1].Value;
@event.Cause = "NEWONT";
@event.Class = "ONT";
@event.Detail = m.Groups[3].Value;
@event.EventTime = eventTime;
@event.NodeTime = null;
@event.Number = 0;
@event.SeverityEffect = "NSA";
@event.Severity = m.Groups[2].Value;
@event.System = amsName;
@event.TypeId = 0;
@event.Created = @event.Updated = DateTime.UtcNow.AddHours(3);
db.Events.Add(@event);
insertedItemCount++;
}
}
db.SaveChanges();
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: [" + rowData + "] was not matched.");
}
#endregion
}
else if (rowData.Contains("REPT ALM"))
{
#region REPT ALM
string _class, aid;
Ia.Ngn.Cl.Model.Event @event;
// below: important, remove all ''' char from string
rowData = rowData.Replace(@"'", "");
// 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\"" ;
/*
SLA-SUR-LAG16 18-06-24 18:21:01
A 37211 REPT ALM ONT
"ONT-1-1-5-9-20:CL,DG,SA,6-24,18-21-1:
"Received Dying Gasp indication from ONT","
; */
// 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);
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);
if (match.Success)
{
amsName = match.Groups[1].Value;
_class = match.Groups[12].Captures[0].Value;
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;
ontPosition = CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(amsName, _class, aid);
ontId = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIdByPosition(ontPosition);
@event = new Ia.Ngn.Cl.Model.Event();
@event.Aid = aid;
@event.Cause = match.Groups[18].Captures[0].Value;
@event.Class = _class;
@event.Detail = match.Groups[27].Captures[0].Value.Replace(@"""", "");
@event.EventTime = DateTime.ParseExact(match.Groups[2].Captures[0].Value, "yy-MM-dd HH:mm:ss", null);
@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);
@event.Number = int.Parse(match.Groups[10].Captures[0].Value);
@event.SeverityEffect = match.Groups[19].Captures[0].Value;
@event.Severity = match.Groups[17].Captures[0].Value;
@event.System = amsName;
@event.TypeId = 0;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
if (ontId != null) @event.Ont = (from o in db.Onts where o.Id == ontId select o).SingleOrDefault();
@event.Created = @event.Updated = DateTime.UtcNow.AddHours(3);
db.Events.Add(@event);
insertedItemCount++;
db.SaveChanges();
}
}
else
{
result.AddWarning("Warning in UpdateDatabaseWithAmsCommandOutput(): Row data: REPT ALM [" + rowData + "] was not matched.");
}
#endregion
}
if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
else isUpdated = false;
result.AddSuccess("(" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
return isUpdated;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
private static string CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(string amsName, string _class, string aid)
{
/*
--BRGPORT BRGPORT-1-1-11-2-6-1-1
--PON PON-1-1-13-1
--EQPT LT-1-1-14
--ONTPOTS ONTPOTS-1-1-8-1-17-2-2
--ONTVOIP VOIP-1-1-13-2-22-1
--ONT ONT-1-1-13-1-10
--ONTENET ONTENET-1-1-2-1-20-1-1
--ONTCARD ONTCARD-1-1-9-2-8-1
--ONTHSI HSI-1-1-2-1-8-1-2-2
*/
string ontPosition;
Match match;
ontPosition = string.Empty;
if (!string.IsNullOrEmpty(aid) && !string.IsNullOrEmpty(_class))
{
if (_class == "BRGPORT")
{
// BRGPORT BRGPORT-1-1-11-2-6-1-1
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);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "PON")
{
// PON PON-1-1-13-1
match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
if (match.Success)
{
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
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "EQPT")
{
// EQPT LT-1-1-14
match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
if (match.Success)
{
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
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "ONTPOTS")
{
// ONTPOTS ONTPOTS-1-1-8-1-17-2-2
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);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "ONTVOIP")
{
// ONTVOIP VOIP-1-1-13-2-22-1
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);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "ONT")
{
// ONT ONT-1-1-13-1-10
match = Regex.Match(aid, @"^(\w+)-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})-(\d{1,2})$", RegexOptions.Singleline);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "ONTENET")
{
// ONTENET ONTENET-1-1-2-1-20-1-1
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);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "ONTCARD")
{
// ONTCARD ONTCARD-1-1-9-2-8-1
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);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else if (_class == "ONTHSI")
{
// ONTHSI HSI-1-1-2-1-8-1-2-2
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);
if (match.Success)
{
ontPosition = amsName + "-" + int.Parse(match.Groups[4].Value) + "-" + int.Parse(match.Groups[5].Value) + "-" + int.Parse(match.Groups[6].Value);
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + " unmatched.") { };
}
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): class: " + _class + ", aid: " + aid + ". Class is unknown.") { };
}
}
else
{
throw new Exception("CalculateRelaventOntPositionAccordingToAmsNameAndClassAndAid(): aid and/or class are null.") { };
}
return ontPosition;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public bool AddPot(string td)
{
bool b;
b = true;
return b;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string CommandsToDeleteAndCreateServiceVoipUsingNdd(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt, Ia.Ngn.Cl.Model.Ont ont, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
{
string sa, cardPortOnt, voipServiceState;
sa = string.Empty;
foreach (Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.PonGroup ponGroup in olt.PonGroupList)
{
cardPortOnt = nddOnt.CardSlot + "-" + nddOnt.Port + "-" + nddOnt.InternalNumber;
if (edServiceVoipIsOos) voipServiceState = "OOS";
else voipServiceState = "IS";
sa = @"
# Delete then create VOIP and associated ONTPOTS: " + nddOnt.Access.Name + @" " + nddOnt.Position;
if (ont != null)
{
if (ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Sfu || ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Gfu || ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Undefined)
{
sa += @"
# Delete ONTPOTS
ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4:::::OOS;
DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4::;
# Delete VOIP
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
# Create VOIP
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;
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
else if (ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Soho)
{
sa += @"
# Delete ONTPOTS
ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8:::::OOS;
DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8::;
# Delete VOIP
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
# Create VOIP
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;
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td5:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td6:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td7:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td8:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
else if (ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu || ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Gmdu)
{
sa += @"
# Delete ONTPOTS
ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1&&-8:::::OOS;
ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8:::::OOS;
ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1&&-8:::::OOS;
DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1&&-8::;
DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-8::;
DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1&&-8::;
# Delete VOIP
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
# Create VOIP
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;
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-4::::VOIPSERV=1,TERMID=td4:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-5::::VOIPSERV=1,TERMID=td13:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-6::::VOIPSERV=1,TERMID=td14:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-7::::VOIPSERV=1,TERMID=td15:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-8::::VOIPSERV=1,TERMID=td16:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td5:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td6:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td7:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td8:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td17:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td18:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td19:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td20:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1::::VOIPSERV=1,TERMID=td9:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-2::::VOIPSERV=1,TERMID=td10:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-3::::VOIPSERV=1,TERMID=td11:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-4::::VOIPSERV=1,TERMID=td12:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-5::::VOIPSERV=1,TERMID=td21:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-6::::VOIPSERV=1,TERMID=td22:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-7::::VOIPSERV=1,TERMID=td23:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-8::::VOIPSERV=1,TERMID=td24:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
else
{
throw new Exception("Unknown familyType") { };
}
}
else
{
sa = @"
# Delete then create VOIP and associated ONTPOTS: " + nddOnt.Access.Name + @" " + nddOnt.Position;
sa += @"
# ONT does not have an associated Access to it.";
sa += @"
# Delete ONTPOTS
ED-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4:::::OOS;
DLT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1&&-4::;
# Delete VOIP
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::OOS;
DLT-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1;
# Create VOIP
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;
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
}
return sa;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string CommandsToCreateOntPots(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt, Ia.Ngn.Cl.Model.Ont ont, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
{
string sa, cardPortOnt, voipServiceState;
cardPortOnt = nddOnt.CardSlot + "-" + nddOnt.Port + "-" + nddOnt.InternalNumber;
if (edServiceVoipIsOos) voipServiceState = "OOS";
else voipServiceState = "IS";
sa = @"
# Create ONTPOTS: " + ont.Access.Name + @" " + ont.Access.Position;
if (ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Sfu || ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Gfu)
{
sa += @"
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
else if (ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Soho)
{
sa += @"
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td5:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td6:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td7:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td8:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
else if (ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Mdu || ont.FamilyTypeId == (int)Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType.Gmdu)
{
sa += @"
# Create ONTPOTS
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-1::::VOIPSERV=1,TERMID=td1:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-2::::VOIPSERV=1,TERMID=td2:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-3::::VOIPSERV=1,TERMID=td3:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-4::::VOIPSERV=1,TERMID=td4:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-5::::VOIPSERV=1,TERMID=td13:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-6::::VOIPSERV=1,TERMID=td14:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-7::::VOIPSERV=1,TERMID=td15:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-1-8::::VOIPSERV=1,TERMID=td16:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td5:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td6:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td7:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td8:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-5::::VOIPSERV=1,TERMID=td17:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-6::::VOIPSERV=1,TERMID=td18:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-7::::VOIPSERV=1,TERMID=td19:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-8::::VOIPSERV=1,TERMID=td20:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-1::::VOIPSERV=1,TERMID=td9:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-2::::VOIPSERV=1,TERMID=td10:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-3::::VOIPSERV=1,TERMID=td11:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-4::::VOIPSERV=1,TERMID=td12:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-5::::VOIPSERV=1,TERMID=td21:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-6::::VOIPSERV=1,TERMID=td22:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-7::::VOIPSERV=1,TERMID=td23:IS;
ENT-ONTPOTS:" + olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-3-8::::VOIPSERV=1,TERMID=td24:IS;
# VOIP service state
ED-SERVICE-VOIP:" + olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";
";
}
else
{
sa += @"
# Unknown FamilyType
";
}
return sa;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> CommandsToPreprovisionOntWithinOlt(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
{
string cardPortOnt, voipServiceState;
List<string> list;
list = new List<string>();
if (edServiceVoipIsOos) voipServiceState = "OOS";
else voipServiceState = "IS";
cardPortOnt = nddOnt.CardSlot + "-" + nddOnt.Port + "-" + nddOnt.InternalNumber;
//list.Add("# Preprovision an empty ONT on the network: " + nddOnt.Access.Name + @" " + nddOnt.Position + " (" + nddOnt.Ip + @");");
list.Add("ENT-ONT:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONT-1-1-" + cardPortOnt + @"::::SWVERPLND=" + Ia.Ngn.Cl.Model.Data.Nokia.Ams.PlannedSoftware + @",DESC1=" + nddOnt.Access.Name + @",DESC2=""NULL"":OOS;");
//list.Add("# Provision the VOIP service;");
list.Add("ENT-ONTCARD:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTCARD-1-1-" + cardPortOnt + @"-2:::POTS::IS;");
list.Add("ENT-ONTCARD:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTCARD-1-1-" + cardPortOnt + @"-1:::10_100BASET::IS;");
list.Add("ENT-ONTENET:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTENET-1-1-" + cardPortOnt + @"-1-1::::SESSPROFID=1,MAXMACNUM=4:IS;");
list.Add("ENT-ONTENET:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTENET-1-1-" + cardPortOnt + @"-1-2::::SESSPROFID=1,MAXMACNUM=4:IS;");
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;");
list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-1::::VOIPSERV=1,TERMID=td1:IS;");
list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-2::::VOIPSERV=1,TERMID=td2:IS;");
list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-3::::VOIPSERV=1,TERMID=td3:IS;");
list.Add("ENT-ONTPOTS:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":ONTPOTS-1-1-" + cardPortOnt + @"-2-4::::VOIPSERV=1,TERMID=td4:IS;");
//list.Add("# VOIP service state");
list.Add("ED-SERVICE-VOIP:" + nddOnt.Pon.PonGroup.Olt.AmsName + @":VOIP-1-1-" + cardPortOnt + @"-1:::::" + voipServiceState + @";");
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string CommandsToPreprovisionOntWithinOltUsingConfigureCommand(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, bool edServiceVoipIsOos)
{
string sa, rackSubCardPortOnt;//, voipServiceState;
//if (edServiceVoipIsOos) voipServiceState = "OOS";
//else voipServiceState = "IS";
rackSubCardPortOnt = nddOnt.Rack + "/" + nddOnt.Sub + "/" + nddOnt.CardSlot + "/" + nddOnt.Port + "/" + nddOnt.InternalNumber;
sa = @"
configure equipment ont slot " + rackSubCardPortOnt + @"/1 planned-card-type 10_100base plndnumdataports 2 plndnumvoiceports 0
configure equipment ont slot " + rackSubCardPortOnt + @"/2 planned-card-type pots plndnumdataports 0 plndnumvoiceports 4
configure qos interface ont:" + rackSubCardPortOnt + @" us-num-queue 8
configure qos interface " + rackSubCardPortOnt + @"/voip upstream-queue 5 bandwidth-profile name:VOICE bandwidth-sharing ont-sharing
configure bridge port " + rackSubCardPortOnt + @"/voip max-unicast-mac 8
configure bridge port " + rackSubCardPortOnt + @"/voip vlan-id " /*+ nddOnt.Pon.PonGroup.Olt.Vlan*/ + @"
configure bridge port " + rackSubCardPortOnt + @"/voip pvid " /*+ nddOnt.Pon.PonGroup.Olt.Vlan*/ + @"
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*/ + @"
";
return sa;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
}