)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation LinksHome » Code Library » ApplicationInformation

Public general use code classes and xml files that we've compiled and used over the years:

ApplicationInformation Support class for TentPlay Trek data model

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Linq;
    4: using System.Text.RegularExpressions;
    5: using System.Xml.Linq;
    6: using System.IO;
    7: using System.Reflection;
    8: using System.Web;
    9:  
   10: namespace Ia.TentPlay.Cl.Model.Data.Trek
   11: {
   12:     ////////////////////////////////////////////////////////////////////////////
   13:  
   14:     /// <summary publish="true">
   15:     /// ApplicationInformation Support class for TentPlay Trek data model
   16:     /// </summary>
   17:     /// 
   18:     /// <remarks> 
   19:     /// Copyright © 2006-2018 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   20:     ///
   21:     /// 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
   22:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   23:     ///
   24:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   25:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   26:     /// 
   27:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   28:     /// 
   29:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   30:     /// </remarks> 
   31:     public class ApplicationInformation
   32:     {
   33:         private static XDocument xDocument;
   34:         private static List<Country> countryList;
   35:         private static List<Translation> translationList;
   36:  
   37:         ////////////////////////////////////////////////////////////////////////////
   38:  
   39:         /// <summary>
   40:         ///
   41:         /// </summary>
   42:         public ApplicationInformation() { }
   43:  
   44:         ////////////////////////////////////////////////////////////////////////////
   45:         ////////////////////////////////////////////////////////////////////////////
   46:  
   47:         /// <summary>
   48:         ///
   49:         /// </summary>
   50:         public class Country
   51:         {
   52:             private List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> translationList;
   53:  
   54:             /// <summary/>
   55:             public Country() { }
   56:  
   57:             /// <summary/>
   58:             public string Iso2 { get; set; }
   59:  
   60:             /// <summary/>
   61:             public string Name { get; set; }
   62:  
   63:             /// <summary/>
   64:             public Dictionary<string, string> NameDictionary { get; set; }
   65:  
   66:             /// <summary/>
   67:             public string ManifestPackagePrefix { get; set; }
   68:  
   69:             /// <summary/>
   70:             public Dictionary<string, string> ApplicationNameDictionary { get; set; }
   71:  
   72:             /// <summary/>
   73:             public string WhatsNew { get; set; }
   74:  
   75:             /// <summary/>
   76:             public string VersionName { get; set; }
   77:  
   78:             /// <summary/>
   79:             public string CopyrightYear { get; set; }
   80:  
   81:             /// <summary/>
   82:             public string ManifestPackage { get; set; }
   83:  
   84:             /// <summary/>
   85:             public string ApplicationUrl { get; set; }
   86:  
   87:             /// <summary/>
   88:             public string GoogleMapsDebugApiKey { get; set; }
   89:  
   90:             /// <summary/>
   91:             public string GoogleMapsProductionApiKey { get; set; }
   92:  
   93:             /// <summary/>
   94:             public string GoogleAdMobAdUnitDebugId { get; set; }
   95:  
   96:             /// <summary/>
   97:             public string GoogleAdMobAppId { get; set; }
   98:  
   99:             /// <summary/>
  100:             public string GoogleAdMobAdUnitProductionId { get; set; }
  101:  
  102:             /// <summary/>
  103:             public DateTime Published { get; set; }
  104:  
  105:             /// <summary/>
  106:             public int FeatureCount { get; set; }
  107:  
  108:             /// <summary/>
  109:             public int AdministrativeFeatureCount { get; set; }
  110:  
  111:             /// <summary/>
  112:             public int PopulatedFeatureCount { get; set; }
  113:  
  114:             /// <summary/>
  115:             public int VegetationFeatureCount { get; set; }
  116:  
  117:             /// <summary/>
  118:             public int LocalityFeatureCount { get; set; }
  119:  
  120:             /// <summary/>
  121:             public int UnderseaFeatureCount { get; set; }
  122:  
  123:             /// <summary/>
  124:             public int StreetFeatureCount { get; set; }
  125:  
  126:             /// <summary/>
  127:             public int HypsographicFeatureCount { get; set; }
  128:  
  129:             /// <summary/>
  130:             public int HydrographicFeatureCount { get; set; }
  131:  
  132:             /// <summary/>
  133:             public int SpotFeatureCount { get; set; }
  134:  
  135:             /// <summary/>
  136:             public string ColorPrimary { get; set; }
  137:  
  138:             /// <summary/>
  139:             public string ColorPrimaryDark { get; set; }
  140:  
  141:             /// <summary/>
  142:             public string ColorAccent { get; set; }
  143:  
  144:             /// <summary/>
  145:             public bool LanguageListMatchesTranslationList
  146:             {
  147:                 get
  148:                 {
  149:                     bool b;
  150:  
  151:                     if (Languages != null && Translations != null)
  152:                     {
  153:                         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;
  154:                     }
  155:                     else b = false;
  156:  
  157:                     return b;
  158:                 }
  159:             }
  160:  
  161:             /// <summary/>
  162:             public virtual List<Image> NavigationHeaderImages { get; set; }
  163:  
  164:             /// <summary/>
  165:             public virtual List<Ia.Cl.Model.Language> Languages { get; set; }
  166:  
  167:             /// <summary/>
  168:             public virtual ICollection<Translation> Translations
  169:             {
  170:                 get
  171:                 {
  172:                     if (translationList == null || translationList.Count == 0)
  173:                     {
  174:                         translationList = TranslationList(this);
  175:                     }
  176:  
  177:                     return translationList;
  178:                 }
  179:             }
  180:  
  181:             ////////////////////////////////////////////////////////////////////////////
  182:  
  183:             /// <summary>
  184:             ///
  185:             /// </summary>
  186:             public string FeatureGraphicImageUrl
  187:             {
  188:                 get
  189:                 {
  190:                     return "https://cdn.tentplay.com/trek/country/" + this.Iso2 + @"/images/feature-graphic.png";
  191:                 }
  192:             }
  193:  
  194:             ////////////////////////////////////////////////////////////////////////////
  195:  
  196:             /// <summary>
  197:             ///
  198:             /// </summary>
  199:             public string PromoGraphicImageUrl
  200:             {
  201:                 get
  202:                 {
  203:                     return "https://cdn.tentplay.com/trek/country/" + this.Iso2 + @"/images/promo-graphic.png";
  204:                 }
  205:             }
  206:  
  207:             ////////////////////////////////////////////////////////////////////////////
  208:  
  209:             /// <summary>
  210:             ///
  211:             /// </summary>
  212:             public string HiResIconImageUrl
  213:             {
  214:                 get
  215:                 {
  216:                     return "https://cdn.tentplay.com/trek/country/" + this.Iso2 + @"/images/hi-res-icon.png";
  217:                 }
  218:             }
  219:  
  220:             ////////////////////////////////////////////////////////////////////////////
  221:             ////////////////////////////////////////////////////////////////////////////
  222:  
  223:             /// <summary>
  224:             ///
  225:             /// </summary>
  226:             public string MipMapLdpiIcLauncherImage
  227:             {
  228:                 get
  229:                 {
  230:                     return MipMapXIcLauncherImage("ldpi");
  231:                 }
  232:             }
  233:  
  234:             ////////////////////////////////////////////////////////////////////////////
  235:  
  236:             /// <summary>
  237:             ///
  238:             /// </summary>
  239:             public string MipMapMdpiIcLauncherImage
  240:             {
  241:                 get
  242:                 {
  243:                     return MipMapXIcLauncherImage("mdpi");
  244:                 }
  245:             }
  246:  
  247:             ////////////////////////////////////////////////////////////////////////////
  248:  
  249:             /// <summary>
  250:             ///
  251:             /// </summary>
  252:             public string MipMapHdpiIcLauncherImage
  253:             {
  254:                 get
  255:                 {
  256:                     return MipMapXIcLauncherImage("hdpi");
  257:                 }
  258:             }
  259:  
  260:             ////////////////////////////////////////////////////////////////////////////
  261:  
  262:             /// <summary>
  263:             ///
  264:             /// </summary>
  265:             public string MipMapXhdpiIcLauncherImage
  266:             {
  267:                 get
  268:                 {
  269:                     return MipMapXIcLauncherImage("xhdpi");
  270:                 }
  271:             }
  272:  
  273:             ////////////////////////////////////////////////////////////////////////////
  274:  
  275:             /// <summary>
  276:             ///
  277:             /// </summary>
  278:             public string MipMapXxhdpiIcLauncherImage
  279:             {
  280:                 get
  281:                 {
  282:                     return MipMapXIcLauncherImage("xxhdpi");
  283:                 }
  284:             }
  285:  
  286:             ////////////////////////////////////////////////////////////////////////////
  287:  
  288:             /// <summary>
  289:             ///
  290:             /// </summary>
  291:             public string MipMapXxxhdpiIcLauncherImage
  292:             {
  293:                 get
  294:                 {
  295:                     return MipMapXIcLauncherImage("xxxhdpi");
  296:                 }
  297:             }
  298:  
  299:             ////////////////////////////////////////////////////////////////////////////
  300:  
  301:             /// <summary>
  302:             ///
  303:             /// </summary>
  304:             public string MipMapXIcLauncherImage(string x)
  305:             {
  306:                 return "https://cdn.tentplay.com/trek/country/" + this.Iso2 + @"/images/mipmap-" + x + "/ic_launcher.png";
  307:             }
  308:  
  309:             ////////////////////////////////////////////////////////////////////////////
  310:             ////////////////////////////////////////////////////////////////////////////
  311:  
  312:             /// <summary>
  313:             ///
  314:             /// </summary>
  315:             public string MipMapLdpiSplashScreenImage
  316:             {
  317:                 get
  318:                 {
  319:                     return MipMapXSplashScreenImage("ldpi");
  320:                 }
  321:             }
  322:  
  323:             ////////////////////////////////////////////////////////////////////////////
  324:  
  325:             /// <summary>
  326:             ///
  327:             /// </summary>
  328:             public string MipMapMdpiSplashScreenImage
  329:             {
  330:                 get
  331:                 {
  332:                     return MipMapXSplashScreenImage("mdpi");
  333:                 }
  334:             }
  335:  
  336:             ////////////////////////////////////////////////////////////////////////////
  337:  
  338:             /// <summary>
  339:             ///
  340:             /// </summary>
  341:             public string MipMapHdpiSplashScreenImage
  342:             {
  343:                 get
  344:                 {
  345:                     return MipMapXSplashScreenImage("hdpi");
  346:                 }
  347:             }
  348:  
  349:             ////////////////////////////////////////////////////////////////////////////
  350:  
  351:             /// <summary>
  352:             ///
  353:             /// </summary>
  354:             public string MipMapXhdpiSplashScreenImage
  355:             {
  356:                 get
  357:                 {
  358:                     return MipMapXSplashScreenImage("xhdpi");
  359:                 }
  360:             }
  361:  
  362:             ////////////////////////////////////////////////////////////////////////////
  363:  
  364:             /// <summary>
  365:             ///
  366:             /// </summary>
  367:             public string MipMapXxhdpiSplashScreenImage
  368:             {
  369:                 get
  370:                 {
  371:                     return MipMapXSplashScreenImage("xxhdpi");
  372:                 }
  373:             }
  374:  
  375:             ////////////////////////////////////////////////////////////////////////////
  376:  
  377:             /// <summary>
  378:             ///
  379:             /// </summary>
  380:             public string MipMapXxxhdpiSplashScreenImage
  381:             {
  382:                 get
  383:                 {
  384:                     return MipMapXSplashScreenImage("xxxhdpi");
  385:                 }
  386:             }
  387:  
  388:             ////////////////////////////////////////////////////////////////////////////
  389:  
  390:             /// <summary>
  391:             ///
  392:             /// </summary>
  393:             public string MipMapXSplashScreenImage(string x)
  394:             {
  395:                 return "https://cdn.tentplay.com/trek/country/" + this.Iso2 + @"/images/mipmap-" + x + "/splash_screen.png";
  396:             }
  397:  
  398:             ////////////////////////////////////////////////////////////////////////////    
  399:             ////////////////////////////////////////////////////////////////////////////
  400:  
  401:             /// <summary>
  402:             ///
  403:             /// </summary>
  404:             public string StoreListingSampleScreenCapture1Image
  405:             {
  406:                 get
  407:                 {
  408:                     return StoreListingSampleScreenCaptureXImage(1);
  409:                 }
  410:             }
  411:  
  412:             ////////////////////////////////////////////////////////////////////////////
  413:  
  414:             /// <summary>
  415:             ///
  416:             /// </summary>
  417:             public string StoreListingSampleScreenCapture2Image
  418:             {
  419:                 get
  420:                 {
  421:                     return StoreListingSampleScreenCaptureXImage(2);
  422:                 }
  423:             }
  424:  
  425:             ////////////////////////////////////////////////////////////////////////////
  426:  
  427:             /// <summary>
  428:             ///
  429:             /// </summary>
  430:             public string StoreListingSampleScreenCapture3Image
  431:             {
  432:                 get
  433:                 {
  434:                     return StoreListingSampleScreenCaptureXImage(3);
  435:                 }
  436:             }
  437:  
  438:             ////////////////////////////////////////////////////////////////////////////
  439:  
  440:             /// <summary>
  441:             ///
  442:             /// </summary>
  443:             public string StoreListingSampleScreenCapture4Image
  444:             {
  445:                 get
  446:                 {
  447:                     return StoreListingSampleScreenCaptureXImage(4);
  448:                 }
  449:             }
  450:  
  451:             ////////////////////////////////////////////////////////////////////////////
  452:  
  453:             /// <summary>
  454:             ///
  455:             /// </summary>
  456:             public string StoreListingSampleScreenCapture5Image
  457:             {
  458:                 get
  459:                 {
  460:                     return StoreListingSampleScreenCaptureXImage(5);
  461:                 }
  462:             }
  463:  
  464:             ////////////////////////////////////////////////////////////////////////////
  465:  
  466:             /// <summary>
  467:             ///
  468:             /// </summary>
  469:             public string StoreListingSampleScreenCapture6Image
  470:             {
  471:                 get
  472:                 {
  473:                     return StoreListingSampleScreenCaptureXImage(6);
  474:                 }
  475:             }
  476:  
  477:             ////////////////////////////////////////////////////////////////////////////
  478:  
  479:             /// <summary>
  480:             ///
  481:             /// </summary>
  482:             public string StoreListingSampleScreenCapture7Image
  483:             {
  484:                 get
  485:                 {
  486:                     return StoreListingSampleScreenCaptureXImage(7);
  487:                 }
  488:             }
  489:  
  490:             ////////////////////////////////////////////////////////////////////////////
  491:  
  492:             /// <summary>
  493:             ///
  494:             /// </summary>
  495:             public string StoreListingSampleScreenCapture8Image
  496:             {
  497:                 get
  498:                 {
  499:                     return StoreListingSampleScreenCaptureXImage(8);
  500:                 }
  501:             }
  502:  
  503:             ////////////////////////////////////////////////////////////////////////////
  504:  
  505:             /// <summary>
  506:             ///
  507:             /// </summary>
  508:             public string StoreListingSampleScreenCaptureXImage(int i)
  509:             {
  510:                 return "https://cdn.tentplay.com/trek/country/" + this.Iso2 + @"/images/" + i + ".png";
  511:             }
  512:  
  513:             ////////////////////////////////////////////////////////////////////////////    
  514:             ////////////////////////////////////////////////////////////////////////////    
  515:         }
  516:  
  517:         ////////////////////////////////////////////////////////////////////////////    
  518:  
  519:         public class Image
  520:         {
  521:             /// <summary/>
  522:             //public string Caption { get; set; }
  523:  
  524:             /// <summary/>
  525:             //public string Photographer { get; set; }
  526:  
  527:             /// <summary/>
  528:             //public string Source { get; set; }
  529:  
  530:             /// <summary/>
  531:             public string AndroidFileName { get; set; }
  532:  
  533:             /// <summary/>
  534:             public string FileName { get; set; }
  535:         }
  536:  
  537:         ////////////////////////////////////////////////////////////////////////////    
  538:  
  539:         public class Translation
  540:         {
  541:             /// <summary/>
  542:             public Translation() { }
  543:  
  544:             /// <summary/>
  545:             public string CountryIso2 { get; set; }
  546:             /// <summary/>
  547:             public string Iso6391 { get; set; }
  548:             /// <summary/>
  549:             public string SiteName { get; set; }
  550:             /// <summary/>
  551:             public string CompanyName { get; set; }
  552:             /// <summary/>
  553:             public string ShortDescription { get; set; }
  554:             /// <summary/>
  555:             public string LongDescription { get; set; }
  556:  
  557:             /// <summary/>
  558:             public string About { get; set; }
  559:             /// <summary/>
  560:             public string AboutTitle { get; set; }
  561:             /// <summary/>
  562:             public string SearchSearchHint { get; set; }
  563:             /// <summary/>
  564:             public string Statistic { get; set; }
  565:             /// <summary/>
  566:             public string StatisticTitle { get; set; }
  567:             /// <summary/>
  568:             public string Setting { get; set; }
  569:             /// <summary/>
  570:             public string SettingTitle { get; set; }
  571:  
  572:             /// <summary/>
  573:             public string ShareTitle { get; set; }
  574:             /// <summary/>
  575:             public string ShareApplication { get; set; }
  576:             /// <summary/>
  577:             public string ShareTrek { get; set; }
  578:             /// <summary/>
  579:             public string ShareNoEmailClientInstalled { get; set; }
  580:             /// <summary/>
  581:             public string ShareContactUs { get; set; }
  582:  
  583:             /// <summary/>
  584:             public string HelpFeedbackTitle { get; set; }
  585:             /// <summary/>
  586:             public string Help { get; set; }
  587:             /// <summary/>
  588:             public string HelpTitle { get; set; }
  589:             /// <summary/>
  590:             public string HelpMagnifiyingGlass { get; set; }
  591:             /// <summary/>
  592:             public string HelpMainListOrder { get; set; }
  593:             /// <summary/>
  594:             public string HelpMapType { get; set; }
  595:             /// <summary/>
  596:             public string HelpGoogleMapRoute { get; set; }
  597:             /// <summary/>
  598:             public string HelpGoogleMapMarker { get; set; }
  599:             /// <summary/>
  600:             public string Feedback { get; set; }
  601:             /// <summary/>
  602:             public string FeedbackTitle { get; set; }
  603:             /// <summary/>
  604:             public string FeedbackEmailSubject { get; set; }
  605:  
  606:             /// <summary/>
  607:             public string Legal { get; set; }
  608:             /// <summary/>
  609:             public string LegalTitle { get; set; }
  610:             /// <summary/>
  611:             public string FeatureClassName { get; set; }
  612:             /// <summary/>
  613:             public string FeatureClassCaption { get; set; }
  614:             /// <summary/>
  615:             public string FeatureClassDescription { get; set; }
  616:             /// <summary/>
  617:             public string FeatureClassAdministrativeName { get; set; }
  618:             /// <summary/>
  619:             public string FeatureClassAdministrativeCaption { get; set; }
  620:             /// <summary/>
  621:             public string FeatureClassAdministrativeClassId { get; set; }
  622:             /// <summary/>
  623:             public string FeatureClassAdministrativeDescription { get; set; }
  624:             /// <summary/>
  625:             public string FeatureClassPopulatedName { get; set; }
  626:             /// <summary/>
  627:             public string FeatureClassPopulatedCaption { get; set; }
  628:             /// <summary/>
  629:             public string FeatureClassPopulatedClassId { get; set; }
  630:             /// <summary/>
  631:             public string FeatureClassPopulatedDescription { get; set; }
  632:             /// <summary/>
  633:             public string FeatureClassVegetationName { get; set; }
  634:             /// <summary/>
  635:             public string FeatureClassVegetationCaption { get; set; }
  636:             /// <summary/>
  637:             public string FeatureClassVegetationClassId { get; set; }
  638:             /// <summary/>
  639:             public string FeatureClassVegetationDescription { get; set; }
  640:             /// <summary/>
  641:             public string FeatureClassLocalityName { get; set; }
  642:             /// <summary/>
  643:             public string FeatureClassLocalityCaption { get; set; }
  644:             /// <summary/>
  645:             public string FeatureClassLocalityClassId { get; set; }
  646:             /// <summary/>
  647:             public string FeatureClassLocalityDescription { get; set; }
  648:             /// <summary/>
  649:             public string FeatureClassUnderseaName { get; set; }
  650:             /// <summary/>
  651:             public string FeatureClassUnderseaCaption { get; set; }
  652:             /// <summary/>
  653:             public string FeatureClassUnderseaClassId { get; set; }
  654:             /// <summary/>
  655:             public string FeatureClassUnderseaDescription { get; set; }
  656:             /// <summary/>
  657:             public string FeatureClassStreetName { get; set; }
  658:             /// <summary/>
  659:             public string FeatureClassStreetCaption { get; set; }
  660:             /// <summary/>
  661:             public string FeatureClassStreetClassId { get; set; }
  662:             /// <summary/>
  663:             public string FeatureClassStreetDescription { get; set; }
  664:             /// <summary/>
  665:             public string FeatureClassHypsographicName { get; set; }
  666:             /// <summary/>
  667:             public string FeatureClassHypsographicCaption { get; set; }
  668:             /// <summary/>
  669:             public string FeatureClassHypsographicClassId { get; set; }
  670:             /// <summary/>
  671:             public string FeatureClassHypsographicDescription { get; set; }
  672:             /// <summary/>
  673:             public string FeatureClassHydrographicName { get; set; }
  674:             /// <summary/>
  675:             public string FeatureClassHydrographicCaption { get; set; }
  676:             /// <summary/>
  677:             public string FeatureClassHydrographicClassId { get; set; }
  678:             /// <summary/>
  679:             public string FeatureClassHydrographicDescription { get; set; }
  680:             /// <summary/>
  681:             public string FeatureClassSpotName { get; set; }
  682:             /// <summary/>
  683:             public string FeatureClassSpotCaption { get; set; }
  684:             /// <summary/>
  685:             public string FeatureClassSpotClassId { get; set; }
  686:             /// <summary/>
  687:             public string FeatureClassSpotDescription { get; set; }
  688:             /// <summary/>
  689:             public virtual ICollection<Country> Countries
  690:             {
  691:                 get
  692:                 {
  693:                     return (from c in CountryList where c.Languages.Any(u => u.Iso6391 == this.Iso6391) select c).ToList();
  694:                 }
  695:             }
  696:             /// <summary/>
  697:             public List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass> FeatureClassList
  698:             {
  699:                 get
  700:                 {
  701:                     Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass fc;
  702:                     List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass> list;
  703:  
  704:                     list = new List<Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass>();
  705:  
  706:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  707:  
  708:                     fc.Id = this.FeatureClassAdministrativeClassId;
  709:                     fc.Name = this.FeatureClassAdministrativeName;
  710:                     fc.Caption = this.FeatureClassAdministrativeCaption;
  711:                     fc.Description = this.FeatureClassAdministrativeDescription;
  712:  
  713:                     list.Add(fc);
  714:  
  715:  
  716:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  717:  
  718:                     fc.Id = this.FeatureClassPopulatedClassId;
  719:                     fc.Name = this.FeatureClassPopulatedName;
  720:                     fc.Caption = this.FeatureClassPopulatedCaption;
  721:                     fc.Description = this.FeatureClassPopulatedDescription;
  722:  
  723:                     list.Add(fc);
  724:  
  725:  
  726:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  727:  
  728:                     fc.Id = this.FeatureClassVegetationClassId;
  729:                     fc.Name = this.FeatureClassVegetationName;
  730:                     fc.Caption = this.FeatureClassVegetationCaption;
  731:                     fc.Description = this.FeatureClassVegetationDescription;
  732:  
  733:                     list.Add(fc);
  734:  
  735:  
  736:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  737:  
  738:                     fc.Id = this.FeatureClassLocalityClassId;
  739:                     fc.Name = this.FeatureClassLocalityName;
  740:                     fc.Caption = this.FeatureClassLocalityCaption;
  741:                     fc.Description = this.FeatureClassLocalityDescription;
  742:  
  743:                     list.Add(fc);
  744:  
  745:  
  746:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  747:  
  748:                     fc.Id = this.FeatureClassUnderseaClassId;
  749:                     fc.Name = this.FeatureClassUnderseaName;
  750:                     fc.Caption = this.FeatureClassUnderseaCaption;
  751:                     fc.Description = this.FeatureClassUnderseaDescription;
  752:  
  753:                     list.Add(fc);
  754:  
  755:  
  756:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  757:  
  758:                     fc.Id = this.FeatureClassStreetClassId;
  759:                     fc.Name = this.FeatureClassStreetName;
  760:                     fc.Caption = this.FeatureClassStreetCaption;
  761:                     fc.Description = this.FeatureClassStreetDescription;
  762:  
  763:                     list.Add(fc);
  764:  
  765:  
  766:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  767:  
  768:                     fc.Id = this.FeatureClassHypsographicClassId;
  769:                     fc.Name = this.FeatureClassHypsographicName;
  770:                     fc.Caption = this.FeatureClassHypsographicCaption;
  771:                     fc.Description = this.FeatureClassHypsographicDescription;
  772:  
  773:                     list.Add(fc);
  774:  
  775:  
  776:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  777:  
  778:                     fc.Id = this.FeatureClassHydrographicClassId;
  779:                     fc.Name = this.FeatureClassHydrographicName;
  780:                     fc.Caption = this.FeatureClassHydrographicCaption;
  781:                     fc.Description = this.FeatureClassHydrographicDescription;
  782:  
  783:                     list.Add(fc);
  784:  
  785:  
  786:                     fc = new Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass();
  787:  
  788:                     fc.Id = this.FeatureClassSpotClassId;
  789:                     fc.Name = this.FeatureClassSpotName;
  790:                     fc.Caption = this.FeatureClassSpotCaption;
  791:                     fc.Description = this.FeatureClassSpotDescription;
  792:  
  793:                     list.Add(fc);
  794:  
  795:                     return list;
  796:                 }
  797:             }
  798:         }
  799:  
  800:         ////////////////////////////////////////////////////////////////////////////
  801:  
  802:         /// <summary>
  803:         ///
  804:         /// </summary>
  805:         public static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Country> CountryList
  806:         {
  807:             get
  808:             {
  809:                 if (countryList == null || countryList.Count == 0)
  810:                 {
  811:                     if (HttpContext.Current != null && HttpContext.Current.Application["countryList"] != null)
  812:                     {
  813:                         countryList = (List<Country>)HttpContext.Current.Application["countryList"];
  814:                     }
  815:                     else
  816:                     {
  817:                         countryList = Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation._CountryList;
  818:  
  819:                         if (HttpContext.Current != null) HttpContext.Current.Application["countryList"] = countryList;
  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.Iso2 = x.Attribute("id").Value;
  846:  
  847:                         country.Name = (from c in Ia.Cl.Model.Country.List where c.Iso2 == country.Iso2.ToUpper() select c.Name).SingleOrDefault();
  848:                         country.NameDictionary = (from c in Ia.Cl.Model.Country.List where c.Iso2 == country.Iso2.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.Iso2, 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.Iso2, 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:             if (fileCountry == "uk") fileCountry = "gb";
  951:  
  952:             countrySpokenLanguageList = (from c in Ia.Cl.Model.Country.List where c.Iso2 == fileCountry.ToUpper() 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.Iso2, rawTranslation, out result);
 1019:  
 1020:                     translation = new Translation();
 1021:                     translation.CountryIso2 = country.Iso2;
 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, "$countryIso2", applicationCountry.Iso2);
 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:                     if (HttpContext.Current != null && HttpContext.Current.Application["rawTranslationList"] != null)
 1205:                     {
 1206:                         translationList = (List<Translation>)HttpContext.Current.Application["rawTranslationList"];
 1207:                     }
 1208:                     else
 1209:                     {
 1210:                         translationList = Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation._RawTranslationList;
 1211:  
 1212:                         if (HttpContext.Current != null) HttpContext.Current.Application["rawTranslationList"] = translationList;
 1213:                     }
 1214:                 }
 1215:  
 1216:                 return translationList;
 1217:             }
 1218:         }
 1219:  
 1220:         ////////////////////////////////////////////////////////////////////////////
 1221:  
 1222:         /// <summary>
 1223:         ///
 1224:         /// </summary>
 1225:         private static List<Ia.TentPlay.Cl.Model.Data.Trek.ApplicationInformation.Translation> _RawTranslationList
 1226:         {
 1227:             get
 1228:             {
 1229:                 if (translationList == null || translationList.Count == 0)
 1230:                 {
 1231:                     Translation translation;
 1232:  
 1233:                     translationList = new List<Translation>(100);
 1234:  
 1235:                     foreach (XElement x in XDocument.Element("applicationInformation").Element("translationList").Elements("translation"))
 1236:                     {
 1237:                         translation = new Translation();
 1238:                         translation.Iso6391 = x.Attribute("id").Value;
 1239:                         translation.SiteName = x.Element("siteName").Value;
 1240:                         translation.CompanyName = x.Element("companyName").Value;
 1241:  
 1242:                         translation.About = x.Element("about").Value.Trim();
 1243:                         translation.AboutTitle = x.Element("about").Attribute("title").Value;
 1244:  
 1245:                         translation.ShortDescription = Regex.Replace(x.Element("shortDescription").Value.Trim(), @"\n[ ]+", "\n");
 1246:                         translation.LongDescription = Regex.Replace(translation.About, @"\n[ ]+", "\n");
 1247:  
 1248:                         translation.SearchSearchHint = x.Element("search").Attribute("searchHint").Value;
 1249:  
 1250:                         translation.Statistic = x.Element("statistic").Value.Trim();
 1251:                         translation.StatisticTitle = x.Element("statistic").Attribute("title").Value;
 1252:                         translation.Setting = x.Element("setting").Value.Trim();
 1253:                         translation.SettingTitle = x.Element("setting").Attribute("title").Value;
 1254:  
 1255:                         translation.ShareTitle = x.Element("share").Attribute("title").Value;
 1256:                         translation.ShareApplication = x.Element("share").Element("application").Value.Trim();
 1257:                         translation.ShareTrek = x.Element("share").Element("trek").Value.Trim();
 1258:                         translation.ShareNoEmailClientInstalled = x.Element("share").Attribute("noEmailClientInstalled").Value;
 1259:                         translation.ShareContactUs = x.Element("share").Attribute("contactUs").Value;
 1260:  
 1261:                         translation.HelpFeedbackTitle = x.Element("help_feedback").Attribute("title").Value;
 1262:                         translation.Help = x.Element("help_feedback").Element("help").Value.Trim();
 1263:                         translation.HelpTitle = x.Element("help_feedback").Element("help").Attribute("title").Value;
 1264:                         translation.HelpMainListOrder = x.Element("help_feedback").Element("help").Attribute("mainListOrder").Value;
 1265:                         translation.HelpGoogleMapRoute = x.Element("help_feedback").Element("help").Attribute("googleMapRoute").Value;
 1266:                         translation.HelpGoogleMapMarker = x.Element("help_feedback").Element("help").Attribute("googleMapMarker").Value;
 1267:                         translation.HelpMagnifiyingGlass = x.Element("help_feedback").Element("help").Attribute("magnifiyingGlass").Value;
 1268:                         translation.HelpMapType = x.Element("help_feedback").Element("help").Attribute("mapType").Value;
 1269:                         translation.Feedback = x.Element("help_feedback").Element("feedback").Value.Trim();
 1270:                         translation.FeedbackTitle = x.Element("help_feedback").Element("feedback").Attribute("title").Value;
 1271:                         translation.FeedbackEmailSubject = x.Element("help_feedback").Element("feedback").Attribute("feedbackEmailSubject").Value;
 1272:  
 1273:                         translation.Legal = x.Element("legal").Value.Trim();
 1274:                         translation.LegalTitle = x.Element("legal").Attribute("title").Value;
 1275:  
 1276:                         translation.FeatureClassName = x.Element("featureClass").Attribute("caption").Value;
 1277:                         translation.FeatureClassDescription = x.Element("featureClass").Attribute("description").Value;
 1278:  
 1279:                         translation.FeatureClassAdministrativeName = x.Element("featureClass").Element("administrative").Attribute("name").Value;
 1280:                         translation.FeatureClassAdministrativeCaption = x.Element("featureClass").Element("administrative").Attribute("caption").Value;
 1281:                         translation.FeatureClassAdministrativeClassId = x.Element("featureClass").Element("administrative").Attribute("classId").Value;
 1282:                         translation.FeatureClassAdministrativeDescription = x.Element("featureClass").Element("administrative").Attribute("description").Value;
 1283:  
 1284:                         translation.FeatureClassPopulatedName = x.Element("featureClass").Element("populated").Attribute("name").Value;
 1285:                         translation.FeatureClassPopulatedCaption = x.Element("featureClass").Element("populated").Attribute("caption").Value;
 1286:                         translation.FeatureClassPopulatedClassId = x.Element("featureClass").Element("populated").Attribute("classId").Value;
 1287:                         translation.FeatureClassPopulatedDescription = x.Element("featureClass").Element("populated").Attribute("description").Value;
 1288:  
 1289:                         translation.FeatureClassVegetationName = x.Element("featureClass").Element("vegetation").Attribute("name").Value;
 1290:                         translation.FeatureClassVegetationCaption = x.Element("featureClass").Element("vegetation").Attribute("caption").Value;
 1291:                         translation.FeatureClassVegetationClassId = x.Element("featureClass").Element("vegetation").Attribute("classId").Value;
 1292:                         translation.FeatureClassVegetationDescription = x.Element("featureClass").Element("vegetation").Attribute("description").Value;
 1293:  
 1294:                         translation.FeatureClassLocalityName = x.Element("featureClass").Element("locality").Attribute("name").Value;
 1295:                         translation.FeatureClassLocalityCaption = x.Element("featureClass").Element("locality").Attribute("caption").Value;
 1296:                         translation.FeatureClassLocalityClassId = x.Element("featureClass").Element("locality").Attribute("classId").Value;
 1297:                         translation.FeatureClassLocalityDescription = x.Element("featureClass").Element("locality").Attribute("description").Value;
 1298:  
 1299:                         translation.FeatureClassUnderseaName = x.Element("featureClass").Element("undersea").Attribute("name").Value;
 1300:                         translation.FeatureClassUnderseaCaption = x.Element("featureClass").Element("undersea").Attribute("caption").Value;
 1301:                         translation.FeatureClassUnderseaClassId = x.Element("featureClass").Element("undersea").Attribute("classId").Value;
 1302:                         translation.FeatureClassUnderseaDescription = x.Element("featureClass").Element("undersea").Attribute("description").Value;
 1303:  
 1304:                         translation.FeatureClassStreetName = x.Element("featureClass").Element("street").Attribute("name").Value;
 1305:                         translation.FeatureClassStreetCaption = x.Element("featureClass").Element("street").Attribute("caption").Value;
 1306:                         translation.FeatureClassStreetClassId = x.Element("featureClass").Element("street").Attribute("classId").Value;
 1307:                         translation.FeatureClassStreetDescription = x.Element("featureClass").Element("street").Attribute("description").Value;
 1308:  
 1309:                         translation.FeatureClassHypsographicName = x.Element("featureClass").Element("hypsography").Attribute("name").Value;
 1310:                         translation.FeatureClassHypsographicCaption = x.Element("featureClass").Element("hypsography").Attribute("caption").Value;
 1311:                         translation.FeatureClassHypsographicClassId = x.Element("featureClass").Element("hypsography").Attribute("classId").Value;
 1312:                         translation.FeatureClassHypsographicDescription = x.Element("featureClass").Element("hypsography").Attribute("description").Value;
 1313:  
 1314:                         translation.FeatureClassHydrographicName = x.Element("featureClass").Element("hydrographic").Attribute("name").Value;
 1315:                         translation.FeatureClassHydrographicCaption = x.Element("featureClass").Element("hydrographic").Attribute("caption").Value;
 1316:                         translation.FeatureClassHydrographicClassId = x.Element("featureClass").Element("hydrographic").Attribute("classId").Value;
 1317:                         translation.FeatureClassHydrographicDescription = x.Element("featureClass").Element("hydrographic").Attribute("description").Value;
 1318:  
 1319:                         translation.FeatureClassSpotName = x.Element("featureClass").Element("spot").Attribute("name").Value;
 1320:                         translation.FeatureClassSpotCaption = x.Element("featureClass").Element("spot").Attribute("caption").Value;
 1321:                         translation.FeatureClassSpotClassId = x.Element("featureClass").Element("spot").Attribute("classId").Value;
 1322:                         translation.FeatureClassSpotDescription = x.Element("featureClass").Element("spot").Attribute("description").Value;
 1323:  
 1324:                         translationList.Add(translation);
 1325:                     }
 1326:                 }
 1327:  
 1328:                 return translationList.ToList();
 1329:             }
 1330:         }
 1331:  
 1332:         ////////////////////////////////////////////////////////////////////////////
 1333:         ////////////////////////////////////////////////////////////////////////////
 1334:  
 1335:         /// <summary>
 1336:         /// 
 1337:         /// How to embed and access resources by using Visual C# http://support.microsoft.com/kb/319292/en-us
 1338:         /// 
 1339:         /// 1. Change the "Build Action" property of your XML file from "Content" to "Embedded Resource".
 1340:         /// 2. Add "using System.Reflection".
 1341:         /// 3. Manifest resource stream will start with the project namespace, the location of XML file.
 1342:         /// 
 1343:         /// </summary>
 1344:  
 1345:         private static XDocument XDocument
 1346:         {
 1347:             get
 1348:             {
 1349:                 Assembly _assembly;
 1350:                 StreamReader streamReader;
 1351:  
 1352:                 if (xDocument == null)
 1353:                 {
 1354:                     _assembly = Assembly.GetExecutingAssembly();
 1355:                     streamReader = new StreamReader(_assembly.GetManifestResourceStream("Ia.TentPlay.Cl.model.data.trek.application-information.xml"));
 1356:  
 1357:                     try
 1358:                     {
 1359:                         if (streamReader.Peek() != -1) xDocument = System.Xml.Linq.XDocument.Load(streamReader);
 1360:                     }
 1361:                     catch (Exception)
 1362:                     {
 1363:                     }
 1364:                     finally
 1365:                     {
 1366:                     }
 1367:                 }
 1368:  
 1369:                 return xDocument;
 1370:             }
 1371:         }
 1372:  
 1373:         ////////////////////////////////////////////////////////////////////////////
 1374:         ////////////////////////////////////////////////////////////////////////////    
 1375:     }
 1376: }