)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
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.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: }