1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4:
5: namespace Ia.Ngn.Cl.Model.Business
6: {
7: ////////////////////////////////////////////////////////////////////////////
8:
9: /// <summary publish="true">
10: /// Optical Fiber Network's Operations Support System Management Intranet (OFN OSS) support class for Optical Fiber Network (OFN) business model
11: /// </summary>
12: ///
13: /// <value>
14: /// <appSettings>
15: /// <add key="imsHuaweiServerHost" value="https://*" />
16: /// <add key="imsHuaweiServerPort" value="*" />
17: /// <add key="imsHuaweiServerServiceUrl" value="*" />
18: /// <add key="imsHuaweiServerUser" value="*" />
19: /// <add key="imsHuaweiServerUserPassword" value="*" />
20: /// </appSettings>
21: /// </value>
22: ///
23: /// <remarks>
24: /// Copyright © 2014-2017 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
25: ///
26: /// 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
27: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
28: ///
29: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
30: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
31: ///
32: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
33: ///
34: /// Copyright notice: This notice may not be removed or altered from any source distribution.
35: /// </remarks>
36: public class Ims
37: {
38: public class ImsBasicService
39: {
40: public string MgcIp;
41: public string MgcSecondaryIp;
42: public string MgcSubnetMask;
43: public int Service;
44: public string Fsdb;
45: public string PrimarySwitch;
46: }
47:
48: ////////////////////////////////////////////////////////////////////////////
49:
50: /// <summary>
51: ///
52: /// </summary>
53: public Ims()
54: {
55: }
56:
57: ////////////////////////////////////////////////////////////////////////////
58:
59: /// <summary>
60: ///
61: /// </summary>
62: public static int NextVacantFlatTermIdFromAgcfEndpointUsingGwIdForOnt(Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentType equipmentType, int gwId)
63: {
64: int ft;
65: List<int> list;
66:
67: list = Ia.Ngn.Cl.Model.Data.Nokia.AgcfEndpoint.UsedFlatTermIdListForGatewayId(gwId);
68:
69: if (list.Count == 0) ft = 1; // this means agcfEndpoint does not exist for any number and the box is empty, and we should create agcfEndpoint at 1
70: else
71: {
72: // change this later to accommodate the Huawei ONT type
73: list = Ia.Cl.Model.Default.ExcludedNumberListFromNumberListWithinRange(list, equipmentType.TelPorts);
74:
75: if (list.Count > 0) ft = list[0];
76: else ft = 0; // something went wrong
77: }
78:
79: return ft;
80: }
81:
82: ////////////////////////////////////////////////////////////////////////////
83:
84: /// <summary>
85: ///
86: /// </summary>
87: public static Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService NokiaImsBasicServiceItemForAccessWithPbx(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont ont)
88: {
89: string primarySwitch;
90:
91: Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService imsBasicService;
92: Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService nokiaImsBasicService;
93:
94: primarySwitch = (from ibs in Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceList where ibs.MgcIp == ont.Pon.PonGroup.MgcIp select ibs.PrimarySwitch).SingleOrDefault();
95:
96: if (!string.IsNullOrEmpty(primarySwitch))
97: {
98: nokiaImsBasicService = (from ibs in Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceList where ibs.Fsdb == "fsdb0" && ibs.PrimarySwitch == primarySwitch select ibs).Single();
99: }
100: else
101: {
102: if (ont.Pon.PonGroup.MgcIp == "10.16.1.142")
103: {
104: nokiaImsBasicService = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService { MgcIp = "10.16.1.142", MgcSecondaryIp = "10.16.5.142", MgcSubnetMask = "255.255.224.0", Service = 0, Fsdb = "fsdb0", PrimarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.TEC };
105: }
106: else throw new ArgumentOutOfRangeException(@"ont.Pon.PonGroup.MgcIp != 10.16.1.142");
107: }
108:
109: imsBasicService = new ImsBasicService()
110: {
111: PrimarySwitch = nokiaImsBasicService.PrimarySwitch,
112: Fsdb = nokiaImsBasicService.Fsdb,
113: MgcIp = nokiaImsBasicService.MgcIp,
114: MgcSecondaryIp = nokiaImsBasicService.MgcSecondaryIp,
115: MgcSubnetMask = nokiaImsBasicService.MgcSubnetMask,
116: Service = nokiaImsBasicService.Service
117: };
118:
119: return imsBasicService;
120: }
121:
122: ////////////////////////////////////////////////////////////////////////////
123:
124: /// <summary>
125: ///
126: /// </summary>
127: public static Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService NokiaImsBasicServiceItem(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.PonGroup ponGroup)
128: {
129: Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService imsBasicService;
130: Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService nokiaImsBasicService;
131:
132: nokiaImsBasicService = (from ibs in Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceList where ibs.MgcIp == ponGroup.MgcIp select ibs).Single();
133:
134: imsBasicService = new ImsBasicService()
135: {
136: PrimarySwitch = nokiaImsBasicService.PrimarySwitch,
137: Fsdb = nokiaImsBasicService.Fsdb,
138: MgcIp = nokiaImsBasicService.MgcIp,
139: MgcSecondaryIp = nokiaImsBasicService.MgcSecondaryIp,
140: MgcSubnetMask = nokiaImsBasicService.MgcSubnetMask,
141: Service = nokiaImsBasicService.Service
142: };
143:
144: return imsBasicService;
145: }
146:
147: ////////////////////////////////////////////////////////////////////////////
148:
149: /// <summary>
150: ///
151: /// </summary>
152: public static bool OntHasAPbxDesignatedSubParty(string ip)
153: {
154: bool hasPbx;
155: List<string> list;
156:
157: list = Ia.Ngn.Cl.Model.Data.Nokia.Ims.AgcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList;
158:
159: if (list.Count > 0) hasPbx = list.Contains(ip);
160: else hasPbx = false;
161:
162: return hasPbx;
163: }
164:
165: ////////////////////////////////////////////////////////////////////////////
166:
167: /// <summary>
168: ///
169: /// </summary>
170: public static bool OntIpIsDesignatedFsdb0InAgcfGatewayRecord(string ip)
171: {
172: bool isFsdb0;
173: List<string> list;
174:
175: list = Ia.Ngn.Cl.Model.Data.Nokia.Ims.AgcfGatewayRecordIp1sThatIndicateFsdb0List;
176:
177: if (list.Count > 0) isFsdb0 = list.Contains(ip);
178: else isFsdb0 = false;
179:
180: return isFsdb0;
181: }
182:
183: ////////////////////////////////////////////////////////////////////////////
184:
185: /// <summary>
186: ///
187: /// </summary>
188: public static bool OntAccessHasAPbxDesignatedSubParty(string accessId)
189: {
190: bool hasPbx;
191: List<string> list;
192:
193: list = Ia.Ngn.Cl.Model.Data.Ims.AccessIdOfEmsOntSipInfoOrEmsVoipPstnUserWithSubPartiesWithCategoryServiceBundle2List;
194:
195: if (list.Count > 0) hasPbx = list.Contains(accessId);
196: else hasPbx = false;
197:
198: return hasPbx;
199: }
200:
201: ////////////////////////////////////////////////////////////////////////////
202:
203: /// <summary>
204: ///
205: /// </summary>
206: public static Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService HuaweiImsBasicServiceItem(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.PonGroup ponGroup)
207: {
208: Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService imsBasicService;
209: Ia.Ngn.Cl.Model.Business.Huawei.Ims.ImsBasicService huaweiImsBasicService;
210:
211: huaweiImsBasicService = (from ibs in Ia.Ngn.Cl.Model.Business.Huawei.Ims.ImsBasicServiceList where ibs.MgcIp == ponGroup.MgcIp select ibs).Single();
212:
213: imsBasicService = new ImsBasicService()
214: {
215: PrimarySwitch = huaweiImsBasicService.PrimarySwitch,
216: Fsdb = huaweiImsBasicService.Fsdb,
217: MgcIp = huaweiImsBasicService.MgcIp,
218: MgcSecondaryIp = huaweiImsBasicService.MgcSecondaryIp,
219: MgcSubnetMask = huaweiImsBasicService.MgcSubnetMask,
220: Service = huaweiImsBasicService.Service
221: };
222:
223: return imsBasicService;
224: }
225:
226: ////////////////////////////////////////////////////////////////////////////
227:
228: /// <summary>
229: ///
230: /// </summary>
231: public static Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService SpecialHuaweiIpHandlingForNokiaImsBasicServiceItem(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt)
232: {
233: Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService imsBasicService;
234: Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService nokiaImsBasicService;
235:
236: if (nddOnt.Pon.PonGroup.Olt.Odf.Name == "SAA")
237: {
238: /*
239: * SAA:
240: * Cable MGC Primary IP MGC Secondary
241: * Cable 5 10.16.1.38 10.16.5.38
242: * Cable 6 10.16.1.34 10.16.5.34
243: * Cable 7 10.16.1.31 10.16.5.31
244: * Cable 8 10.16.1.33 10.16.5.33
245: */
246:
247: if (Ia.Ngn.Cl.Model.Data.Huawei.Default.ListOfHuaweiOntThatWereIntiallyInstalledAndProvisionedWithNokiaMgcIp10_16_5_37BeforeNewMgcIpToCableDistributionAgreement.Contains(nddOnt.Access.Name))
248: {
249: nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.5.37");
250: }
251: else if (nddOnt.Pon.Number >= 500 && nddOnt.Pon.Number < 600) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.1.38");
252: else if (nddOnt.Pon.Number >= 600 && nddOnt.Pon.Number < 700) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.1.34");
253: else if (nddOnt.Pon.Number >= 700 && nddOnt.Pon.Number < 800) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.1.31");
254: else if (nddOnt.Pon.Number >= 800 && nddOnt.Pon.Number < 900) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.1.33");
255: // below: fake
256: else if (nddOnt.Pon.Number >= 900 && nddOnt.Pon.Number < 1000) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.1.33");
257: else
258: {
259: throw new Exception("Huawei imsBasicService undefined for access: " + nddOnt.Access.Name + ". ");
260: }
261: }
262: else if (nddOnt.Pon.PonGroup.Olt.Odf.Name == "SDQ")
263: {
264: /*
265: * SDQ:
266: * Cable MGC Primary IP MGC Secondary
267: * Cable 7 10.16.5.32 10.16.1.32
268: * Cable 8 10.16.5.35 10.16.1.35
269: * Cable 9 10.16.5.36 10.16.1.36
270: */
271:
272: if (nddOnt.Pon.Number >= 700 && nddOnt.Pon.Number < 800) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.5.32");
273: else if (nddOnt.Pon.Number >= 800 && nddOnt.Pon.Number < 900) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.5.35");
274: else if (nddOnt.Pon.Number >= 900 && nddOnt.Pon.Number < 1000) nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem("10.16.5.36");
275: else
276: {
277: throw new Exception("Huawei imsBasicService undefined for access: " + nddOnt.Access.Name + ". ");
278: }
279: }
280: else
281: {
282: nokiaImsBasicService = null;
283: }
284:
285: if (nokiaImsBasicService != null)
286: {
287: imsBasicService = new ImsBasicService()
288: {
289: PrimarySwitch = nokiaImsBasicService.PrimarySwitch,
290: Fsdb = nokiaImsBasicService.Fsdb,
291: MgcIp = nokiaImsBasicService.MgcIp,
292: MgcSecondaryIp = nokiaImsBasicService.MgcSecondaryIp,
293: MgcSubnetMask = nokiaImsBasicService.MgcSubnetMask,
294: Service = nokiaImsBasicService.Service
295: };
296: }
297: else imsBasicService = null;
298:
299: return imsBasicService;
300: }
301:
302: ////////////////////////////////////////////////////////////////////////////
303:
304: /// <summary>
305: ///
306: /// </summary>
307: public static Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService SpecialHuaweiIpHandlingForNokiaImsBasicServiceItem(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.PonGroup ponGroup)
308: {
309: Ia.Ngn.Cl.Model.Business.Ims.ImsBasicService imsBasicService;
310: Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService nokiaImsBasicService;
311:
312: nokiaImsBasicService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceItem(ponGroup.MgcIp);
313:
314: if (nokiaImsBasicService == null)
315: {
316: if (ponGroup.MgcIp == "10.16.1.142")
317: {
318: nokiaImsBasicService = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService { MgcIp = "10.16.1.142", MgcSecondaryIp = "10.16.5.142", MgcSubnetMask = "255.255.224.0", Service = 0, Fsdb = string.Empty, PrimarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.TEC };
319: }
320: else if (ponGroup.MgcIp == "10.16.5.142")
321: {
322: nokiaImsBasicService = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService { MgcIp = "10.16.5.142", MgcSecondaryIp = "10.16.1.142", MgcSubnetMask = "255.255.224.0", Service = 0, Fsdb = string.Empty, PrimarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.SKB };
323: }
324: else if (ponGroup.MgcIp == "10.10.9.254")
325: {
326: nokiaImsBasicService = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService { MgcIp = "10.10.9.254", MgcSecondaryIp = "10.10.1.254", MgcSubnetMask = "255.255.224.0", Service = 0, Fsdb = string.Empty, PrimarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.TEC };
327: }
328: else if (ponGroup.MgcIp == "10.10.1.254")
329: {
330: nokiaImsBasicService = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService { MgcIp = "10.10.1.254", MgcSecondaryIp = "10.10.9.254", MgcSubnetMask = "255.255.224.0", Service = 0, Fsdb = string.Empty, PrimarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.SKB };
331: }
332:
333: // Use fixed random to assign fsdb values from fsdb0-fsdb3 randomly to passed area with nddOnt
334:
335: switch (Ia.Cl.Model.Default.AlphanumericStringToInt(ponGroup.Symbol) % 4)
336: {
337: case 0: nokiaImsBasicService.Fsdb = "fsdb0"; break;
338: case 1: nokiaImsBasicService.Fsdb = "fsdb1"; break;
339: case 2: nokiaImsBasicService.Fsdb = "fsdb2"; break;
340: case 3: nokiaImsBasicService.Fsdb = "fsdb3"; break;
341: default: nokiaImsBasicService.Fsdb = "fsdb0"; break;
342: }
343:
344: nokiaImsBasicService.Fsdb = "fsdb0";
345: }
346:
347: imsBasicService = new ImsBasicService()
348: {
349: PrimarySwitch = nokiaImsBasicService.PrimarySwitch,
350: Fsdb = nokiaImsBasicService.Fsdb,
351: MgcIp = nokiaImsBasicService.MgcIp,
352: MgcSecondaryIp = nokiaImsBasicService.MgcSecondaryIp,
353: MgcSubnetMask = nokiaImsBasicService.MgcSubnetMask,
354: Service = nokiaImsBasicService.Service
355: };
356:
357: return imsBasicService;
358: }
359:
360: ////////////////////////////////////////////////////////////////////////////
361: ////////////////////////////////////////////////////////////////////////////
362: }
363:
364: ////////////////////////////////////////////////////////////////////////////
365: ////////////////////////////////////////////////////////////////////////////
366: }