1: using System.Text.RegularExpressions;
2: using System.Xml.Linq;
3: using System.Reflection;
4:
5: namespace Ia.TentPlay.Cl.Model.Data.Trek
6: {
7: ////////////////////////////////////////////////////////////////////////////
8:
9: /// <summary publish="true">
10: /// ApplicationInformation Support class for TentPlay Trek data model
11: /// </summary>
12: ///
13: /// <remarks>
14: /// Copyright © 2006-2018 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
15: ///
16: /// 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
17: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
18: ///
19: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
20: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
21: ///
22: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
23: ///
24: /// Copyright notice: This notice may not be removed or altered from any source distribution.
25: /// </remarks>
26: public class ApplicationInformation
27: {
28: private static XDocument xDocument;
29: private static List<Country> countryList;
30: private static List<Translation> translationList;
31:
32: ////////////////////////////////////////////////////////////////////////////
33:
34: /// <summary>
35: ///
36: /// </summary>
37: public ApplicationInformation() { }
38:
39: ////////////////////////////////////////////////////////////////////////////
40: ////////////////////////////////////////////////////////////////////////////
41:
42: /// <summary>
43: ///
44: /// </summary>
45: public class Country
46: {
47: private List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> translationList;
48:
49: /// <summary/>
50: public Country() { }
51:
52: /// <summary/>
53: public string Iso3 { get; set; }
54:
55: /// <summary/>
56: public string Name { get; set; }
57:
58: /// <summary/>
59: public Dictionary<string, string> NameDictionary { get; set; }
60:
61: /// <summary/>
62: public string ManifestPackagePrefix { get; set; }
63:
64: /// <summary/>
65: public Dictionary<string, string> ApplicationNameDictionary { get; set; }
66:
67: /// <summary/>
68: public string WhatsNew { get; set; }
69:
70: /// <summary/>
71: public string VersionName { get; set; }
72:
73: /// <summary/>
74: public string CopyrightYear { get; set; }
75:
76: /// <summary/>
77: public string ManifestPackage { get; set; }
78:
79: /// <summary/>
80: public string ApplicationUrl { get; set; }
81:
82: /// <summary/>
83: public string GoogleMapsDebugApiKey { get; set; }
84:
85: /// <summary/>
86: public string GoogleMapsProductionApiKey { get; set; }
87:
88: /// <summary/>
89: public string GoogleAdMobAdUnitDebugId { get; set; }
90:
91: /// <summary/>
92: public string GoogleAdMobAppId { get; set; }
93:
94: /// <summary/>
95: public string GoogleAdMobAdUnitProductionId { get; set; }
96:
97: /// <summary/>
98: public DateTime Published { get; set; }
99:
100: /// <summary/>
101: public int FeatureCount { get; set; }
102:
103: /// <summary/>
104: public int AdministrativeFeatureCount { get; set; }
105:
106: /// <summary/>
107: public int PopulatedFeatureCount { get; set; }
108:
109: /// <summary/>
110: public int VegetationFeatureCount { get; set; }
111:
112: /// <summary/>
113: public int LocalityFeatureCount { get; set; }
114:
115: /// <summary/>
116: public int UnderseaFeatureCount { get; set; }
117:
118: /// <summary/>
119: public int StreetFeatureCount { get; set; }
120:
121: /// <summary/>
122: public int HypsographicFeatureCount { get; set; }
123:
124: /// <summary/>
125: public int HydrographicFeatureCount { get; set; }
126:
127: /// <summary/>
128: public int SpotFeatureCount { get; set; }
129:
130: /// <summary/>
131: public string ColorPrimary { get; set; }
132:
133: /// <summary/>
134: public string ColorPrimaryDark { get; set; }
135:
136: /// <summary/>
137: public string ColorAccent { get; set; }
138:
139: /// <summary/>
140: public bool LanguageListMatchesTranslationList
141: {
142: get
143: {
144: bool b;
145:
146: if (Languages != null && Translations != null)
147: {
148: b = Languages.All(u => Translations.Any(y => y.Iso6391 == u.Iso6391)) && Translations.All(u => Languages.Any(y => y.Iso6391 == u.Iso6391)) && Languages.Count == Translations.Count;
149: }
150: else b = false;
151:
152: return b;
153: }
154: }
155:
156: /// <summary/>
157: public virtual List<Image> NavigationHeaderImages { get; set; }
158:
159: /// <summary/>
160: public virtual List<Ia.Cl.Model.Language> Languages { get; set; }
161:
162: /// <summary/>
163: public virtual ICollection<Translation> Translations
164: {
165: get
166: {
167: if (translationList == null || translationList.Count == 0)
168: {
169: translationList = TranslationList(this);
170: }
171:
172: return translationList;
173: }
174: }
175:
176: ////////////////////////////////////////////////////////////////////////////
177:
178: /// <summary>
179: ///
180: /// </summary>
181: public string FeatureGraphicImageUrl
182: {
183: get
184: {
185: return "https://cdn.tentplay.com/trek/country/" + this.Iso3 + @"/images/feature-graphic.png";
186: }
187: }
188:
189: ////////////////////////////////////////////////////////////////////////////
190:
191: /// <summary>
192: ///
193: /// </summary>
194: public string PromoGraphicImageUrl
195: {
196: get
197: {
198: return "https://cdn.tentplay.com/trek/country/" + this.Iso3 + @"/images/promo-graphic.png";
199: }
200: }
201:
202: ////////////////////////////////////////////////////////////////////////////
203:
204: /// <summary>
205: ///
206: /// </summary>
207: public string HiResIconImageUrl
208: {
209: get
210: {
211: return "https://cdn.tentplay.com/trek/country/" + this.Iso3 + @"/images/hi-res-icon.png";
212: }
213: }
214:
215: ////////////////////////////////////////////////////////////////////////////
216: ////////////////////////////////////////////////////////////////////////////
217:
218: /// <summary>
219: ///
220: /// </summary>
221: public string MipMapLdpiIcLauncherImage
222: {
223: get
224: {
225: return MipMapXIcLauncherImage("ldpi");
226: }
227: }
228:
229: ////////////////////////////////////////////////////////////////////////////
230:
231: /// <summary>
232: ///
233: /// </summary>
234: public string MipMapMdpiIcLauncherImage
235: {
236: get
237: {
238: return MipMapXIcLauncherImage("mdpi");
239: }
240: }
241:
242: ////////////////////////////////////////////////////////////////////////////
243:
244: /// <summary>
245: ///
246: /// </summary>
247: public string MipMapHdpiIcLauncherImage
248: {
249: get
250: {
251: return MipMapXIcLauncherImage("hdpi");
252: }
253: }
254:
255: ////////////////////////////////////////////////////////////////////////////
256:
257: /// <summary>
258: ///
259: /// </summary>
260: public string MipMapXhdpiIcLauncherImage
261: {
262: get
263: {
264: return MipMapXIcLauncherImage("xhdpi");
265: }
266: }
267:
268: ////////////////////////////////////////////////////////////////////////////
269:
270: /// <summary>
271: ///
272: /// </summary>
273: public string MipMapXxhdpiIcLauncherImage
274: {
275: get
276: {
277: return MipMapXIcLauncherImage("xxhdpi");
278: }
279: }
280:
281: ////////////////////////////////////////////////////////////////////////////
282:
283: /// <summary>
284: ///
285: /// </summary>
286: public string MipMapXxxhdpiIcLauncherImage
287: {
288: get
289: {
290: return MipMapXIcLauncherImage("xxxhdpi");
291: }
292: }
293:
294: ////////////////////////////////////////////////////////////////////////////
295:
296: /// <summary>
297: ///
298: /// </summary>
299: public string MipMapXIcLauncherImage(string x)
300: {
301: return "https://cdn.tentplay.com/trek/country/" + this.Iso3 + @"/images/mipmap-" + x + "/ic_launcher.png";
302: }
303:
304: ////////////////////////////////////////////////////////////////////////////
305: ////////////////////////////////////////////////////////////////////////////
306:
307: /// <summary>
308: ///
309: /// </summary>
310: public string MipMapLdpiSplashScreenImage
311: {
312: get
313: {
314: return MipMapXSplashScreenImage("ldpi");
315: }
316: }
317:
318: ////////////////////////////////////////////////////////////////////////////
319:
320: /// <summary>
321: ///
322: /// </summary>
323: public string MipMapMdpiSplashScreenImage
324: {
325: get
326: {
327: return MipMapXSplashScreenImage("mdpi");
328: }
329: }
330:
331: ////////////////////////////////////////////////////////////////////////////
332:
333: /// <summary>
334: ///
335: /// </summary>
336: public string MipMapHdpiSplashScreenImage
337: {
338: get
339: {
340: return MipMapXSplashScreenImage("hdpi");
341: }
342: }
343:
344: ////////////////////////////////////////////////////////////////////////////
345:
346: /// <summary>
347: ///
348: /// </summary>
349: public string MipMapXhdpiSplashScreenImage
350: {
351: get
352: {
353: return MipMapXSplashScreenImage("xhdpi");
354: }
355: }
356:
357: ////////////////////////////////////////////////////////////////////////////
358:
359: /// <summary>
360: ///
361: /// </summary>
362: public string MipMapXxhdpiSplashScreenImage
363: {
364: get
365: {
366: return MipMapXSplashScreenImage("xxhdpi");
367: }
368: }
369:
370: ////////////////////////////////////////////////////////////////////////////
371:
372: /// <summary>
373: ///
374: /// </summary>
375: public string MipMapXxxhdpiSplashScreenImage
376: {
377: get
378: {
379: return MipMapXSplashScreenImage("xxxhdpi");
380: }
381: }
382:
383: ////////////////////////////////////////////////////////////////////////////
384:
385: /// <summary>
386: ///
387: /// </summary>
388: public string MipMapXSplashScreenImage(string x)
389: {
390: return "https://cdn.tentplay.com/trek/country/" + this.Iso3 + @"/images/mipmap-" + x + "/splash_screen.png";
391: }
392:
393: ////////////////////////////////////////////////////////////////////////////
394: ////////////////////////////////////////////////////////////////////////////
395:
396: /// <summary>
397: ///
398: /// </summary>
399: public string StoreListingSampleScreenCapture1Image
400: {
401: get
402: {
403: return StoreListingSampleScreenCaptureXImage(1);
404: }
405: }
406:
407: ////////////////////////////////////////////////////////////////////////////
408:
409: /// <summary>
410: ///
411: /// </summary>
412: public string StoreListingSampleScreenCapture2Image
413: {
414: get
415: {
416: return StoreListingSampleScreenCaptureXImage(2);
417: }
418: }
419:
420: ////////////////////////////////////////////////////////////////////////////
421:
422: /// <summary>
423: ///
424: /// </summary>
425: public string StoreListingSampleScreenCapture3Image
426: {
427: get
428: {
429: return StoreListingSampleScreenCaptureXImage(3);
430: }
431: }
432:
433: ////////////////////////////////////////////////////////////////////////////
434:
435: /// <summary>
436: ///
437: /// </summary>
438: public string StoreListingSampleScreenCapture4Image
439: {
440: get
441: {
442: return StoreListingSampleScreenCaptureXImage(4);
443: }
444: }
445:
446: ////////////////////////////////////////////////////////////////////////////
447:
448: /// <summary>
449: ///
450: /// </summary>
451: public string StoreListingSampleScreenCapture5Image
452: {
453: get
454: {
455: return StoreListingSampleScreenCaptureXImage(5);
456: }
457: }
458:
459: ////////////////////////////////////////////////////////////////////////////
460:
461: /// <summary>
462: ///
463: /// </summary>
464: public string StoreListingSampleScreenCapture6Image
465: {
466: get
467: {
468: return StoreListingSampleScreenCaptureXImage(6);
469: }
470: }
471:
472: ////////////////////////////////////////////////////////////////////////////
473:
474: /// <summary>
475: ///
476: /// </summary>
477: public string StoreListingSampleScreenCapture7Image
478: {
479: get
480: {
481: return StoreListingSampleScreenCaptureXImage(7);
482: }
483: }
484:
485: ////////////////////////////////////////////////////////////////////////////
486:
487: /// <summary>
488: ///
489: /// </summary>
490: public string StoreListingSampleScreenCapture8Image
491: {
492: get
493: {
494: return StoreListingSampleScreenCaptureXImage(8);
495: }
496: }
497:
498: ////////////////////////////////////////////////////////////////////////////
499:
500: /// <summary>
501: ///
502: /// </summary>
503: public string StoreListingSampleScreenCaptureXImage(int i)
504: {
505: return "https://cdn.tentplay.com/trek/country/" + this.Iso3 + @"/images/" + i + ".png";
506: }
507:
508: ////////////////////////////////////////////////////////////////////////////
509: ////////////////////////////////////////////////////////////////////////////
510: }
511:
512: ////////////////////////////////////////////////////////////////////////////
513:
514: public class Image
515: {
516: /// <summary/>
517: //public string Caption { get; set; }
518:
519: /// <summary/>
520: //public string Photographer { get; set; }
521:
522: /// <summary/>
523: //public string Source { get; set; }
524:
525: /// <summary/>
526: public string AndroidFileName { get; set; }
527:
528: /// <summary/>
529: public string FileName { get; set; }
530: }
531:
532: ////////////////////////////////////////////////////////////////////////////
533:
534: public class Translation
535: {
536: /// <summary/>
537: public Translation() { }
538:
539: /// <summary/>
540: public string CountryIso3 { get; set; }
541: /// <summary/>
542: public string Iso6391 { get; set; }
543: /// <summary/>
544: public string SiteName { get; set; }
545: /// <summary/>
546: public string CompanyName { get; set; }
547: /// <summary/>
548: public string ShortDescription { get; set; }
549: /// <summary/>
550: public string LongDescription { get; set; }
551:
552: /// <summary/>
553: public string About { get; set; }
554: /// <summary/>
555: public string AboutTitle { get; set; }
556: /// <summary/>
557: public string SearchSearchHint { get; set; }
558: /// <summary/>
559: public string Statistic { get; set; }
560: /// <summary/>
561: public string StatisticTitle { get; set; }
562: /// <summary/>
563: public string Setting { get; set; }
564: /// <summary/>
565: public string SettingTitle { get; set; }
566:
567: /// <summary/>
568: public string ShareTitle { get; set; }
569: /// <summary/>
570: public string ShareApplication { get; set; }
571: /// <summary/>
572: public string ShareTrek { get; set; }
573: /// <summary/>
574: public string ShareNoEmailClientInstalled { get; set; }
575: /// <summary/>
576: public string ShareContactUs { get; set; }
577:
578: /// <summary/>
579: public string HelpFeedbackTitle { get; set; }
580: /// <summary/>
581: public string Help { get; set; }
582: /// <summary/>
583: public string HelpTitle { get; set; }
584: /// <summary/>
585: public string HelpMagnifiyingGlass { get; set; }
586: /// <summary/>
587: public string HelpMainListOrder { get; set; }
588: /// <summary/>
589: public string HelpMapType { get; set; }
590: /// <summary/>
591: public string HelpGoogleMapRoute { get; set; }
592: /// <summary/>
593: public string HelpGoogleMapMarker { get; set; }
594: /// <summary/>
595: public string Feedback { get; set; }
596: /// <summary/>
597: public string FeedbackTitle { get; set; }
598: /// <summary/>
599: public string FeedbackEmailSubject { get; set; }
600:
601: /// <summary/>
602: public string Legal { get; set; }
603: /// <summary/>
604: public string LegalTitle { get; set; }
605: /// <summary/>
606: public string FeatureClassName { get; set; }
607: /// <summary/>
608: public string FeatureClassCaption { get; set; }
609: /// <summary/>
610: public string FeatureClassDescription { get; set; }
611: /// <summary/>
612: public string FeatureClassAdministrativeName { get; set; }
613: /// <summary/>
614: public string FeatureClassAdministrativeCaption { get; set; }
615: /// <summary/>
616: public string FeatureClassAdministrativeClassId { get; set; }
617: /// <summary/>
618: public string FeatureClassAdministrativeDescription { get; set; }
619: /// <summary/>
620: public string FeatureClassPopulatedName { get; set; }
621: /// <summary/>
622: public string FeatureClassPopulatedCaption { get; set; }
623: /// <summary/>
624: public string FeatureClassPopulatedClassId { get; set; }
625: /// <summary/>
626: public string FeatureClassPopulatedDescription { get; set; }
627: /// <summary/>
628: public string FeatureClassVegetationName { get; set; }
629: /// <summary/>
630: public string FeatureClassVegetationCaption { get; set; }
631: /// <summary/>
632: public string FeatureClassVegetationClassId { get; set; }
633: /// <summary/>
634: public string FeatureClassVegetationDescription { get; set; }
635: /// <summary/>
636: public string FeatureClassLocalityName { get; set; }
637: /// <summary/>
638: public string FeatureClassLocalityCaption { get; set; }
639: /// <summary/>
640: public string FeatureClassLocalityClassId { get; set; }
641: /// <summary/>
642: public string FeatureClassLocalityDescription { get; set; }
643: /// <summary/>
644: public string FeatureClassUnderseaName { get; set; }
645: /// <summary/>
646: public string FeatureClassUnderseaCaption { get; set; }
647: /// <summary/>
648: public string FeatureClassUnderseaClassId { get; set; }
649: /// <summary/>
650: public string FeatureClassUnderseaDescription { get; set; }
651: /// <summary/>
652: public string FeatureClassStreetName { get; set; }
653: /// <summary/>
654: public string FeatureClassStreetCaption { get; set; }
655: /// <summary/>
656: public string FeatureClassStreetClassId { get; set; }
657: /// <summary/>
658: public string FeatureClassStreetDescription { get; set; }
659: /// <summary/>
660: public string FeatureClassHypsographicName { get; set; }
661: /// <summary/>
662: public string FeatureClassHypsographicCaption { get; set; }
663: /// <summary/>
664: public string FeatureClassHypsographicClassId { get; set; }
665: /// <summary/>
666: public string FeatureClassHypsographicDescription { get; set; }
667: /// <summary/>
668: public string FeatureClassHydrographicName { get; set; }
669: /// <summary/>
670: public string FeatureClassHydrographicCaption { get; set; }
671: /// <summary/>
672: public string FeatureClassHydrographicClassId { get; set; }
673: /// <summary/>
674: public string FeatureClassHydrographicDescription { get; set; }
675: /// <summary/>
676: public string FeatureClassSpotName { get; set; }
677: /// <summary/>
678: public string FeatureClassSpotCaption { get; set; }
679: /// <summary/>
680: public string FeatureClassSpotClassId { get; set; }
681: /// <summary/>
682: public string FeatureClassSpotDescription { get; set; }
683: /// <summary/>
684: public virtual ICollection<Country> Countries
685: {
686: get
687: {
688: return (from c in CountryList where c.Languages.Any(u => u.Iso6391 == this.Iso6391) select c).ToList();
689: }
690: }
691: /// <summary/>
692: public List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass> FeatureClassList
693: {
694: get
695: {
696: Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass fc;
697: List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass> list;
698:
699: list = new List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass>();
700:
701: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
702:
703: fc.Id = this.FeatureClassAdministrativeClassId;
704: fc.Name = this.FeatureClassAdministrativeName;
705: fc.Caption = this.FeatureClassAdministrativeCaption;
706: fc.Description = this.FeatureClassAdministrativeDescription;
707:
708: list.Add(fc);
709:
710:
711: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
712:
713: fc.Id = this.FeatureClassPopulatedClassId;
714: fc.Name = this.FeatureClassPopulatedName;
715: fc.Caption = this.FeatureClassPopulatedCaption;
716: fc.Description = this.FeatureClassPopulatedDescription;
717:
718: list.Add(fc);
719:
720:
721: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
722:
723: fc.Id = this.FeatureClassVegetationClassId;
724: fc.Name = this.FeatureClassVegetationName;
725: fc.Caption = this.FeatureClassVegetationCaption;
726: fc.Description = this.FeatureClassVegetationDescription;
727:
728: list.Add(fc);
729:
730:
731: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
732:
733: fc.Id = this.FeatureClassLocalityClassId;
734: fc.Name = this.FeatureClassLocalityName;
735: fc.Caption = this.FeatureClassLocalityCaption;
736: fc.Description = this.FeatureClassLocalityDescription;
737:
738: list.Add(fc);
739:
740:
741: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
742:
743: fc.Id = this.FeatureClassUnderseaClassId;
744: fc.Name = this.FeatureClassUnderseaName;
745: fc.Caption = this.FeatureClassUnderseaCaption;
746: fc.Description = this.FeatureClassUnderseaDescription;
747:
748: list.Add(fc);
749:
750:
751: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
752:
753: fc.Id = this.FeatureClassStreetClassId;
754: fc.Name = this.FeatureClassStreetName;
755: fc.Caption = this.FeatureClassStreetCaption;
756: fc.Description = this.FeatureClassStreetDescription;
757:
758: list.Add(fc);
759:
760:
761: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
762:
763: fc.Id = this.FeatureClassHypsographicClassId;
764: fc.Name = this.FeatureClassHypsographicName;
765: fc.Caption = this.FeatureClassHypsographicCaption;
766: fc.Description = this.FeatureClassHypsographicDescription;
767:
768: list.Add(fc);
769:
770:
771: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
772:
773: fc.Id = this.FeatureClassHydrographicClassId;
774: fc.Name = this.FeatureClassHydrographicName;
775: fc.Caption = this.FeatureClassHydrographicCaption;
776: fc.Description = this.FeatureClassHydrographicDescription;
777:
778: list.Add(fc);
779:
780:
781: fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
782:
783: fc.Id = this.FeatureClassSpotClassId;
784: fc.Name = this.FeatureClassSpotName;
785: fc.Caption = this.FeatureClassSpotCaption;
786: fc.Description = this.FeatureClassSpotDescription;
787:
788: list.Add(fc);
789:
790: return list;
791: }
792: }
793: }
794:
795: ////////////////////////////////////////////////////////////////////////////
796:
797: /// <summary>
798: ///
799: /// </summary>
800: public static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country> CountryList
801: {
802: get
803: {
804: if (countryList == null || countryList.Count == 0)
805: {
806: /*
807: if (HttpContext.Current != null && HttpContext.Current.Application["countryList"] != null)
808: {
809: countryList = (List<Country>)HttpContext.Current.Application["countryList"];
810: }
811: else
812: {
813: */
814:
815: countryList = Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation._CountryList;
816:
817: /*
818: if (HttpContext.Current != null) HttpContext.Current.Application["countryList"] = countryList;
819: }
820: */
821: }
822:
823: return countryList;
824: }
825: }
826:
827: ////////////////////////////////////////////////////////////////////////////
828:
829: /// <summary>
830: ///
831: /// </summary>
832: private static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country> _CountryList
833: {
834: get
835: {
836: if (countryList == null || countryList.Count == 0)
837: {
838: Country country;
839:
840: countryList = new List<Country>(100);
841:
842: foreach (XElement x in XDocument.Element("applicationInformation").Element("countryList").Elements("country"))
843: {
844: country = new Country();
845: country.Iso3 = x.Attribute("id").Value;
846:
847: country.Name = (from c in Ia.Cl.Model.Country.List where c.Iso3 == country.Iso3.ToUpper() select c.Name).SingleOrDefault();
848: country.NameDictionary = (from c in Ia.Cl.Model.Country.List where c.Iso3 == country.Iso3.ToUpper() select c.NameDictionary).SingleOrDefault();
849:
850: country.ManifestPackagePrefix = x.Parent.Parent.Element("manifestPackagePrefix").Value;
851:
852: country.GoogleMapsDebugApiKey = x.Parent.Parent.Element("googleMapsDebugApiKey").Value;
853: country.GoogleAdMobAdUnitDebugId = x.Parent.Parent.Element("googleAdMobAdUnitDebugId").Value;
854:
855: country.ApplicationNameDictionary = ApplicationNameDictionary(x);
856:
857: country.WhatsNew = Regex.Replace(x.Parent.Parent.Element("googleStoreWhatsNew").Value.Trim(), @"\n[ ]+", "\n");
858:
859: country.VersionName = x.Element("version").Attribute("name").Value;
860: country.CopyrightYear = x.Element("version").Attribute("copyrightYear").Value;
861: country.ManifestPackage = x.Element("manifestPackage").Value;
862:
863: country.ApplicationUrl = ReplaceNameVariableWithName(Ia.TentPlay.Cl.Model.Data.CompanyInformation.ApplicationDownloadLink, country);
864:
865: country.GoogleMapsProductionApiKey = x.Element("googleMapsProductionApiKey").Value;
866: country.GoogleAdMobAppId = x.Element("googleAdMobAppId").Value;
867: country.GoogleAdMobAdUnitProductionId = x.Element("googleAdMobAdUnitId").Value;
868:
869: country.Published = (x.Element("version").Attribute("published") != null && x.Element("version").Attribute("published").Value != string.Empty) ? DateTime.Parse(x.Element("version").Attribute("published").Value) : DateTime.MinValue;
870:
871: country.ColorPrimary = (from e in x.Element("colorTheme").Elements("color") where e.Attribute("name").Value == "colorPrimary" select e.Attribute("value").Value).SingleOrDefault();
872: country.ColorPrimaryDark = (from e in x.Element("colorTheme").Elements("color") where e.Attribute("name").Value == "colorPrimaryDark" select e.Attribute("value").Value).SingleOrDefault();
873: country.ColorAccent = (from e in x.Element("colorTheme").Elements("color") where e.Attribute("name").Value == "colorAccent" select e.Attribute("value").Value).SingleOrDefault();
874:
875: country.NavigationHeaderImages = ApplicationImageList(x.Element("navigationHeader").Element("imageList"));
876:
877: country.Languages = ApplicationLanguageList(country.Iso3, country.ApplicationNameDictionary);
878:
879: countryList.Add(country);
880: }
881: }
882:
883: return countryList.ToList();
884: }
885: }
886:
887: ////////////////////////////////////////////////////////////////////////////
888:
889: /// <summary>
890: ///
891: /// </summary>
892: public static void CountryStatisticCalcucation(ref Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country country)
893: {
894: int featureCount, administrative, populated, vegetation, locality, undersea, street, hypsographic, hydrographic, spot;
895: Ia.Cl.Model.Result result;
896:
897: Ia.TentPlay.Cl.Model.Data.Trek.Feature.Statistic(country.Iso3, out featureCount, out administrative, out populated, out vegetation, out locality, out undersea, out street, out hypsographic, out hydrographic, out spot, out result);
898:
899: country.FeatureCount = featureCount;
900: country.AdministrativeFeatureCount = administrative;
901: country.PopulatedFeatureCount = populated;
902: country.VegetationFeatureCount = vegetation;
903: country.LocalityFeatureCount = locality;
904: country.UnderseaFeatureCount = undersea;
905: country.StreetFeatureCount = street;
906: country.HypsographicFeatureCount = hypsographic;
907: country.HydrographicFeatureCount = hydrographic;
908: country.SpotFeatureCount = spot;
909: }
910:
911: ////////////////////////////////////////////////////////////////////////////
912:
913: /// <summary>
914: ///
915: /// </summary>
916: private static Dictionary<string, string> ApplicationNameDictionary(XElement xElement)
917: {
918: XElement xe;
919: IEnumerable<XAttribute> list;
920: Dictionary<string, string> dictionary;
921:
922: dictionary = new Dictionary<string, string>();
923:
924: xe = xElement.Element("applicationName");
925:
926: if (xe.HasAttributes)
927: {
928: list = xe.Attributes();
929:
930: foreach (XAttribute xa in list)
931: {
932: dictionary.Add(xa.Name.LocalName, xa.Value);
933: }
934: }
935:
936: return dictionary;
937: }
938:
939: ////////////////////////////////////////////////////////////////////////////
940:
941: /// <summary>
942: ///
943: /// </summary>
944: private static List<Ia.Cl.Model.Language> ApplicationLanguageList(string fileCountry, Dictionary<string, string> countryApplicationNameDictionary)
945: {
946: List<Ia.Cl.Model.Language> list, countrySpokenLanguageList, featureDesignationLanguageList;
947:
948: list = new List<Ia.Cl.Model.Language>();
949:
950: countrySpokenLanguageList = (from c in Ia.Cl.Model.Country.List
951: where c.Iso3 == fileCountry
952: select c.SpokenLanguageList).SingleOrDefault();
953:
954: featureDesignationLanguageList = Ia.TentPlay.Cl.Model.Data.Trek.FeatureDesignation.LanguageList;
955:
956: // make sure to select only languages defined in application title
957:
958: list = (from c in countrySpokenLanguageList
959: join n in featureDesignationLanguageList on c.Symbol equals n.Symbol
960: join cand in countryApplicationNameDictionary on n.Symbol equals cand.Key
961: select c).ToList();
962:
963: // below: add English to all language lists for all countries
964: if (list.Find(u => u.Symbol == "en") == null) list.Add(Ia.Cl.Model.Language.List.Single(u => u.Symbol == "en"));
965:
966: return list;
967: }
968:
969: ////////////////////////////////////////////////////////////////////////////
970:
971: /// <summary>
972: ///
973: /// </summary>
974: private static List<Image> ApplicationImageList(XElement imageList)
975: {
976: Image image;
977: List<Image> list;
978:
979: list = new List<Image>();
980:
981: foreach (XElement x in imageList.Elements("image"))
982: {
983: image = new Image();
984:
985: // Attribute
986: //image.Caption = x.Attribute("caption").Value;
987: //image.Photographer = x.Attribute("photographer").Value.Replace(" ", "").ToLower();
988: //image.Source = x.Attribute("source").Value.ToLower();
989: image.FileName = x.Attribute("fileName").Value;
990: image.AndroidFileName = x.Attribute("fileName").Value.Replace("-", "_");
991:
992: list.Add(image);
993: }
994:
995: return list;
996: }
997:
998: ////////////////////////////////////////////////////////////////////////////
999: ////////////////////////////////////////////////////////////////////////////
1000:
1001: /// <summary>
1002: ///
1003: /// </summary>
1004: private static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> TranslationList(Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country country)
1005: {
1006: string s;
1007: Ia.Cl.Model.Result result;
1008: Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation translation;
1009: List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> translationList;
1010: List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureDesignation> featureDesignationNameAndCountList;
1011:
1012: translationList = new List<Translation>(100);
1013:
1014: foreach (Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation rawTranslation in RawTranslationList)
1015: {
1016: if (country.Languages.Any(u => u.Iso6391 == rawTranslation.Iso6391))
1017: {
1018: featureDesignationNameAndCountList = Ia.TentPlay.Cl.Model.Data.Trek.Default.FeatureDesignationNameAndCountWithinDatabaseList(country.Iso3, rawTranslation, out result);
1019:
1020: translation = new Translation();
1021: translation.CountryIso3 = country.Iso3;
1022: translation.Iso6391 = rawTranslation.Iso6391;
1023:
1024: translation.SiteName = rawTranslation.SiteName;
1025: translation.CompanyName = rawTranslation.CompanyName;
1026:
1027: translation.About = ReplaceNameVariableWithName(rawTranslation.About, country, translation.Iso6391);
1028: translation.AboutTitle = rawTranslation.AboutTitle;
1029:
1030: translation.ShortDescription = ReplaceNameVariableWithName(rawTranslation.ShortDescription, country, translation.Iso6391);
1031:
1032: translation.LongDescription = ReplaceNameVariableWithName(rawTranslation.LongDescription, country, translation.Iso6391);
1033: s = Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.BuildRandomDesignationListString(featureDesignationNameAndCountList);
1034: translation.LongDescription = translation.LongDescription.Replace("#randomDesignationList", s);
1035:
1036: translation.SearchSearchHint = rawTranslation.SearchSearchHint;
1037:
1038: translation.Statistic = ReplaceNameVariableWithName(rawTranslation.Statistic, country, translation.Iso6391);
1039: translation.StatisticTitle = rawTranslation.StatisticTitle;
1040: translation.Setting = rawTranslation.Setting;
1041: translation.SettingTitle = rawTranslation.SettingTitle;
1042:
1043: translation.ShareTitle = rawTranslation.ShareTitle;
1044: translation.ShareApplication = ReplaceNameVariableWithName(rawTranslation.ShareApplication, country, translation.Iso6391);
1045: translation.ShareTrek = ReplaceNameVariableWithName(rawTranslation.ShareTrek, country, translation.Iso6391);
1046: translation.ShareNoEmailClientInstalled = rawTranslation.ShareNoEmailClientInstalled;
1047: translation.ShareContactUs = rawTranslation.ShareContactUs;
1048:
1049: translation.HelpFeedbackTitle = rawTranslation.HelpFeedbackTitle;
1050: translation.Help = rawTranslation.Help;
1051: translation.HelpTitle = rawTranslation.HelpTitle;
1052: translation.HelpMainListOrder = rawTranslation.HelpMainListOrder;
1053: translation.HelpGoogleMapRoute = rawTranslation.HelpGoogleMapRoute;
1054: translation.HelpGoogleMapMarker = rawTranslation.HelpGoogleMapMarker;
1055: translation.HelpMagnifiyingGlass = rawTranslation.HelpMagnifiyingGlass;
1056: translation.HelpMapType = rawTranslation.HelpMapType;
1057: translation.Feedback = ReplaceNameVariableWithName(rawTranslation.Feedback, country, translation.Iso6391);
1058: translation.FeedbackTitle = rawTranslation.FeedbackTitle;
1059: translation.FeedbackEmailSubject = rawTranslation.FeedbackEmailSubject;
1060:
1061: translation.Legal = ReplaceNameVariableWithName(rawTranslation.Legal, country, translation.Iso6391);
1062: translation.LegalTitle = rawTranslation.LegalTitle;
1063:
1064: translation.FeatureClassName = rawTranslation.FeatureClassName;
1065: translation.FeatureClassDescription = rawTranslation.FeatureClassDescription;
1066:
1067: translation.FeatureClassAdministrativeName = rawTranslation.FeatureClassAdministrativeName;
1068: translation.FeatureClassAdministrativeCaption = rawTranslation.FeatureClassAdministrativeCaption;
1069: translation.FeatureClassAdministrativeClassId = rawTranslation.FeatureClassAdministrativeClassId;
1070: translation.FeatureClassAdministrativeDescription = rawTranslation.FeatureClassAdministrativeDescription;
1071:
1072: translation.FeatureClassPopulatedName = rawTranslation.FeatureClassPopulatedName;
1073: translation.FeatureClassPopulatedCaption = rawTranslation.FeatureClassPopulatedCaption;
1074: translation.FeatureClassPopulatedClassId = rawTranslation.FeatureClassPopulatedClassId;
1075: translation.FeatureClassPopulatedDescription = rawTranslation.FeatureClassPopulatedDescription;
1076:
1077: translation.FeatureClassVegetationName = rawTranslation.FeatureClassVegetationName;
1078: translation.FeatureClassVegetationCaption = rawTranslation.FeatureClassVegetationCaption;
1079: translation.FeatureClassVegetationClassId = rawTranslation.FeatureClassVegetationClassId;
1080: translation.FeatureClassVegetationDescription = rawTranslation.FeatureClassVegetationDescription;
1081:
1082: translation.FeatureClassLocalityName = rawTranslation.FeatureClassLocalityName;
1083: translation.FeatureClassLocalityCaption = rawTranslation.FeatureClassLocalityCaption;
1084: translation.FeatureClassLocalityClassId = rawTranslation.FeatureClassLocalityClassId;
1085: translation.FeatureClassLocalityDescription = rawTranslation.FeatureClassLocalityDescription;
1086:
1087: translation.FeatureClassUnderseaName = rawTranslation.FeatureClassUnderseaName;
1088: translation.FeatureClassUnderseaCaption = rawTranslation.FeatureClassUnderseaCaption;
1089: translation.FeatureClassUnderseaClassId = rawTranslation.FeatureClassUnderseaClassId;
1090: translation.FeatureClassUnderseaDescription = rawTranslation.FeatureClassUnderseaDescription;
1091:
1092: translation.FeatureClassStreetName = rawTranslation.FeatureClassStreetName;
1093: translation.FeatureClassStreetCaption = rawTranslation.FeatureClassStreetCaption;
1094: translation.FeatureClassStreetClassId = rawTranslation.FeatureClassStreetClassId;
1095: translation.FeatureClassStreetDescription = rawTranslation.FeatureClassStreetDescription;
1096:
1097: translation.FeatureClassHypsographicName = rawTranslation.FeatureClassHypsographicName;
1098: translation.FeatureClassHypsographicCaption = rawTranslation.FeatureClassHypsographicCaption;
1099: translation.FeatureClassHypsographicClassId = rawTranslation.FeatureClassHypsographicClassId;
1100: translation.FeatureClassHypsographicDescription = rawTranslation.FeatureClassHypsographicDescription;
1101:
1102: translation.FeatureClassHydrographicName = rawTranslation.FeatureClassHydrographicName;
1103: translation.FeatureClassHydrographicCaption = rawTranslation.FeatureClassHydrographicCaption;
1104: translation.FeatureClassHydrographicClassId = rawTranslation.FeatureClassHydrographicClassId;
1105: translation.FeatureClassHydrographicDescription = rawTranslation.FeatureClassHydrographicDescription;
1106:
1107: translation.FeatureClassSpotName = rawTranslation.FeatureClassSpotName;
1108: translation.FeatureClassSpotCaption = rawTranslation.FeatureClassSpotCaption;
1109: translation.FeatureClassSpotClassId = rawTranslation.FeatureClassSpotClassId;
1110: translation.FeatureClassSpotDescription = rawTranslation.FeatureClassSpotDescription;
1111:
1112: translationList.Add(translation);
1113: }
1114: }
1115:
1116: return translationList.ToList();
1117: }
1118:
1119: ////////////////////////////////////////////////////////////////////////////
1120:
1121: /// <summary>
1122: ///
1123: /// </summary>
1124: private static string ReplaceNameVariableWithName(string line, Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country applicationCountry)
1125: {
1126: return ReplaceNameVariableWithName(line, applicationCountry, null);
1127: }
1128:
1129: ////////////////////////////////////////////////////////////////////////////
1130:
1131: /// <summary>
1132: ///
1133: /// </summary>
1134: private static string ReplaceNameVariableWithName(string line, Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country applicationCountry, string iso6391)
1135: {
1136: string s;
1137:
1138: s = line;
1139:
1140: // this must be before $manifestPackage
1141: s = Replace(s, "$applicationUrl", applicationCountry.ApplicationUrl);
1142:
1143: if (!string.IsNullOrEmpty(iso6391))
1144: {
1145: s = Replace(s, "$applicationName", applicationCountry.ApplicationNameDictionary[iso6391]);
1146: s = Replace(s, "$countryName", applicationCountry.NameDictionary[iso6391]);
1147: }
1148:
1149: s = Replace(s, "$countryIso3", applicationCountry.Iso3);
1150: s = Replace(s, "$version", applicationCountry.VersionName);
1151: s = Replace(s, "$manifestPackagePrefix", applicationCountry.ManifestPackagePrefix);
1152: s = Replace(s, "$manifestPackage", applicationCountry.ManifestPackage);
1153: s = Replace(s, "$copyrightYear", applicationCountry.CopyrightYear);
1154: s = Replace(s, "$featureCount", applicationCountry.FeatureCount.ToString());
1155:
1156: s = Replace(s, "$companyName", Ia.TentPlay.Cl.Model.Data.CompanyInformation.CompanyName);
1157: s = Replace(s, "$companyEmail", Ia.TentPlay.Cl.Model.Data.CompanyInformation.CompanyEmail);
1158: s = Replace(s, "$companyUrl", Ia.TentPlay.Cl.Model.Data.CompanyInformation.CompanyUrl);
1159:
1160: s = Replace(s, "$applicationCompanyName", Ia.TentPlay.Cl.Model.Data.CompanyInformation.ApplicationCompanyName);
1161: s = Replace(s, "$applicationCompanyEmail", Ia.TentPlay.Cl.Model.Data.CompanyInformation.ApplicationCompanyEmail);
1162: s = Replace(s, "$applicationCompanyUrl", Ia.TentPlay.Cl.Model.Data.CompanyInformation.ApplicationCompanyUrl);
1163:
1164: return s;
1165: }
1166:
1167: ////////////////////////////////////////////////////////////////////////////
1168:
1169: /// <summary>
1170: ///
1171: /// </summary>
1172: private static string Replace(string content, string term, string replacementTerm)
1173: {
1174: return content.Replace(term, replacementTerm);
1175: }
1176:
1177: ////////////////////////////////////////////////////////////////////////////
1178:
1179: /// <summary>
1180: ///
1181: /// </summary>
1182: public static string BuildRandomDesignationListString(List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureDesignation> featureDesignationNameAndCountList)
1183: {
1184: string s;
1185:
1186: s = string.Join(", ", (from f in featureDesignationNameAndCountList where f.Name.Length < 16 select Ia.Cl.Model.Language.Pluralize(f.Name)).PickRandom(19).ToArray());
1187: s = Ia.Cl.Model.Language.FirstCharacterToUpper(s);
1188:
1189: return s;
1190:
1191: }
1192:
1193: ////////////////////////////////////////////////////////////////////////////
1194:
1195: /// <summary>
1196: ///
1197: /// </summary>
1198: public static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> RawTranslationList
1199: {
1200: get
1201: {
1202: if (translationList == null || translationList.Count == 0)
1203: {
1204: /*
1205: if (HttpContext.Current != null && HttpContext.Current.Application["rawTranslationList"] != null)
1206: {
1207: translationList = (List<Translation>)HttpContext.Current.Application["rawTranslationList"];
1208: }
1209: else
1210: {
1211: translationList = Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation._RawTranslationList;
1212:
1213: if (HttpContext.Current != null) HttpContext.Current.Application["rawTranslationList"] = translationList;
1214: }
1215: */
1216: }
1217:
1218: return translationList;
1219: }
1220: }
1221:
1222: ////////////////////////////////////////////////////////////////////////////
1223:
1224: /// <summary>
1225: ///
1226: /// </summary>
1227: private static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> _RawTranslationList
1228: {
1229: get
1230: {
1231: if (translationList == null || translationList.Count == 0)
1232: {
1233: Translation translation;
1234:
1235: translationList = new List<Translation>(100);
1236:
1237: foreach (XElement x in XDocument.Element("applicationInformation").Element("translationList").Elements("translation"))
1238: {
1239: translation = new Translation();
1240: translation.Iso6391 = x.Attribute("id").Value;
1241: translation.SiteName = x.Element("siteName").Value;
1242: translation.CompanyName = x.Element("companyName").Value;
1243:
1244: translation.About = x.Element("about").Value.Trim();
1245: translation.AboutTitle = x.Element("about").Attribute("title").Value;
1246:
1247: translation.ShortDescription = Regex.Replace(x.Element("shortDescription").Value.Trim(), @"\n[ ]+", "\n");
1248: translation.LongDescription = Regex.Replace(translation.About, @"\n[ ]+", "\n");
1249:
1250: translation.SearchSearchHint = x.Element("search").Attribute("searchHint").Value;
1251:
1252: translation.Statistic = x.Element("statistic").Value.Trim();
1253: translation.StatisticTitle = x.Element("statistic").Attribute("title").Value;
1254: translation.Setting = x.Element("setting").Value.Trim();
1255: translation.SettingTitle = x.Element("setting").Attribute("title").Value;
1256:
1257: translation.ShareTitle = x.Element("share").Attribute("title").Value;
1258: translation.ShareApplication = x.Element("share").Element("application").Value.Trim();
1259: translation.ShareTrek = x.Element("share").Element("trek").Value.Trim();
1260: translation.ShareNoEmailClientInstalled = x.Element("share").Attribute("noEmailClientInstalled").Value;
1261: translation.ShareContactUs = x.Element("share").Attribute("contactUs").Value;
1262:
1263: translation.HelpFeedbackTitle = x.Element("help_feedback").Attribute("title").Value;
1264: translation.Help = x.Element("help_feedback").Element("help").Value.Trim();
1265: translation.HelpTitle = x.Element("help_feedback").Element("help").Attribute("title").Value;
1266: translation.HelpMainListOrder = x.Element("help_feedback").Element("help").Attribute("mainListOrder").Value;
1267: translation.HelpGoogleMapRoute = x.Element("help_feedback").Element("help").Attribute("googleMapRoute").Value;
1268: translation.HelpGoogleMapMarker = x.Element("help_feedback").Element("help").Attribute("googleMapMarker").Value;
1269: translation.HelpMagnifiyingGlass = x.Element("help_feedback").Element("help").Attribute("magnifiyingGlass").Value;
1270: translation.HelpMapType = x.Element("help_feedback").Element("help").Attribute("mapType").Value;
1271: translation.Feedback = x.Element("help_feedback").Element("feedback").Value.Trim();
1272: translation.FeedbackTitle = x.Element("help_feedback").Element("feedback").Attribute("title").Value;
1273: translation.FeedbackEmailSubject = x.Element("help_feedback").Element("feedback").Attribute("feedbackEmailSubject").Value;
1274:
1275: translation.Legal = x.Element("legal").Value.Trim();
1276: translation.LegalTitle = x.Element("legal").Attribute("title").Value;
1277:
1278: translation.FeatureClassName = x.Element("featureClass").Attribute("caption").Value;
1279: translation.FeatureClassDescription = x.Element("featureClass").Attribute("description").Value;
1280:
1281: translation.FeatureClassAdministrativeName = x.Element("featureClass").Element("administrative").Attribute("name").Value;
1282: translation.FeatureClassAdministrativeCaption = x.Element("featureClass").Element("administrative").Attribute("caption").Value;
1283: translation.FeatureClassAdministrativeClassId = x.Element("featureClass").Element("administrative").Attribute("classId").Value;
1284: translation.FeatureClassAdministrativeDescription = x.Element("featureClass").Element("administrative").Attribute("description").Value;
1285:
1286: translation.FeatureClassPopulatedName = x.Element("featureClass").Element("populated").Attribute("name").Value;
1287: translation.FeatureClassPopulatedCaption = x.Element("featureClass").Element("populated").Attribute("caption").Value;
1288: translation.FeatureClassPopulatedClassId = x.Element("featureClass").Element("populated").Attribute("classId").Value;
1289: translation.FeatureClassPopulatedDescription = x.Element("featureClass").Element("populated").Attribute("description").Value;
1290:
1291: translation.FeatureClassVegetationName = x.Element("featureClass").Element("vegetation").Attribute("name").Value;
1292: translation.FeatureClassVegetationCaption = x.Element("featureClass").Element("vegetation").Attribute("caption").Value;
1293: translation.FeatureClassVegetationClassId = x.Element("featureClass").Element("vegetation").Attribute("classId").Value;
1294: translation.FeatureClassVegetationDescription = x.Element("featureClass").Element("vegetation").Attribute("description").Value;
1295:
1296: translation.FeatureClassLocalityName = x.Element("featureClass").Element("locality").Attribute("name").Value;
1297: translation.FeatureClassLocalityCaption = x.Element("featureClass").Element("locality").Attribute("caption").Value;
1298: translation.FeatureClassLocalityClassId = x.Element("featureClass").Element("locality").Attribute("classId").Value;
1299: translation.FeatureClassLocalityDescription = x.Element("featureClass").Element("locality").Attribute("description").Value;
1300:
1301: translation.FeatureClassUnderseaName = x.Element("featureClass").Element("undersea").Attribute("name").Value;
1302: translation.FeatureClassUnderseaCaption = x.Element("featureClass").Element("undersea").Attribute("caption").Value;
1303: translation.FeatureClassUnderseaClassId = x.Element("featureClass").Element("undersea").Attribute("classId").Value;
1304: translation.FeatureClassUnderseaDescription = x.Element("featureClass").Element("undersea").Attribute("description").Value;
1305:
1306: translation.FeatureClassStreetName = x.Element("featureClass").Element("street").Attribute("name").Value;
1307: translation.FeatureClassStreetCaption = x.Element("featureClass").Element("street").Attribute("caption").Value;
1308: translation.FeatureClassStreetClassId = x.Element("featureClass").Element("street").Attribute("classId").Value;
1309: translation.FeatureClassStreetDescription = x.Element("featureClass").Element("street").Attribute("description").Value;
1310:
1311: translation.FeatureClassHypsographicName = x.Element("featureClass").Element("hypsography").Attribute("name").Value;
1312: translation.FeatureClassHypsographicCaption = x.Element("featureClass").Element("hypsography").Attribute("caption").Value;
1313: translation.FeatureClassHypsographicClassId = x.Element("featureClass").Element("hypsography").Attribute("classId").Value;
1314: translation.FeatureClassHypsographicDescription = x.Element("featureClass").Element("hypsography").Attribute("description").Value;
1315:
1316: translation.FeatureClassHydrographicName = x.Element("featureClass").Element("hydrographic").Attribute("name").Value;
1317: translation.FeatureClassHydrographicCaption = x.Element("featureClass").Element("hydrographic").Attribute("caption").Value;
1318: translation.FeatureClassHydrographicClassId = x.Element("featureClass").Element("hydrographic").Attribute("classId").Value;
1319: translation.FeatureClassHydrographicDescription = x.Element("featureClass").Element("hydrographic").Attribute("description").Value;
1320:
1321: translation.FeatureClassSpotName = x.Element("featureClass").Element("spot").Attribute("name").Value;
1322: translation.FeatureClassSpotCaption = x.Element("featureClass").Element("spot").Attribute("caption").Value;
1323: translation.FeatureClassSpotClassId = x.Element("featureClass").Element("spot").Attribute("classId").Value;
1324: translation.FeatureClassSpotDescription = x.Element("featureClass").Element("spot").Attribute("description").Value;
1325:
1326: translationList.Add(translation);
1327: }
1328: }
1329:
1330: return translationList.ToList();
1331: }
1332: }
1333:
1334: ////////////////////////////////////////////////////////////////////////////
1335: ////////////////////////////////////////////////////////////////////////////
1336:
1337: /// <summary>
1338: ///
1339: /// How to embed and access resources by using Visual C# http://support.microsoft.com/kb/319292/en-us
1340: ///
1341: /// 1. Change the "Build Action" property of your XML file from "Content" to "Embedded Resource".
1342: /// 2. Add "using System.Reflection".
1343: /// 3. Manifest resource stream will start with the project namespace, the location of XML file.
1344: ///
1345: /// </summary>
1346:
1347: private static XDocument XDocument
1348: {
1349: get
1350: {
1351: Assembly _assembly;
1352: StreamReader streamReader;
1353:
1354: if (xDocument == null)
1355: {
1356: _assembly = Assembly.GetExecutingAssembly();
1357: streamReader = new StreamReader(_assembly.GetManifestResourceStream("cl.model.data.trek.application-information.xml"));
1358:
1359: try
1360: {
1361: if (streamReader.Peek() != -1) xDocument = System.Xml.Linq.XDocument.Load(streamReader);
1362: }
1363: catch (Exception)
1364: {
1365: }
1366: finally
1367: {
1368: }
1369: }
1370:
1371: return xDocument;
1372: }
1373: }
1374:
1375: ////////////////////////////////////////////////////////////////////////////
1376: ////////////////////////////////////////////////////////////////////////////
1377: }
1378: }