Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/ASP.NET/VB/HotelBooking/App_Code/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/ASP.NET/VB/HotelBooking/App_Code/DataHelper.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.SessionState
Imports System.Xml.Linq
Public Class Data
	Private Const PopularCountriesCount As Integer = 20
	Private Const SearchQuerySID As String = "SQ"
	Private Const AllHotelsSID As String = "AH"

	Public Shared ReadOnly Property Instance() As Data
		Get
			If HttpContext.Current.Items("DG") Is Nothing Then
				HttpContext.Current.Items("DG") = New Data()
			End If
			Return CType(HttpContext.Current.Items("DG"), Data)
		End Get
	End Property

	Public Sub New()
		FakeDataHelper = New FakeDataHelper()
		LoadXmlData()
	End Sub

	Public Property CurrentQuery() As SearchQuery
		Get
			Return TryCast(Session(SearchQuerySID), SearchQuery)
		End Get
		Set(ByVal value As SearchQuery)
			Session(SearchQuerySID) = value
		End Set
	End Property
	' Data
	Private privateCountries As List(Of Country)
	Public Property Countries() As List(Of Country)
		Get
			Return privateCountries
		End Get
		Protected Set(ByVal value As List(Of Country))
			privateCountries = value
		End Set
	End Property
	Private privateHotelServices As List(Of String)
	Public Property HotelServices() As List(Of String)
		Get
			Return privateHotelServices
		End Get
		Protected Set(ByVal value As List(Of String))
			privateHotelServices = value
		End Set
	End Property
	Private privateRoomServices As List(Of String)
	Public Property RoomServices() As List(Of String)
		Get
			Return privateRoomServices
		End Get
		Protected Set(ByVal value As List(Of String))
			privateRoomServices = value
		End Set
	End Property
	Private privateRoomTypes As List(Of String)
	Public Property RoomTypes() As List(Of String)
		Get
			Return privateRoomTypes
		End Get
		Protected Set(ByVal value As List(Of String))
			privateRoomTypes = value
		End Set
	End Property
	Private privateCommonDescriptions As List(Of String)
	Public Property CommonDescriptions() As List(Of String)
		Get
			Return privateCommonDescriptions
		End Get
		Protected Set(ByVal value As List(Of String))
			privateCommonDescriptions = value
		End Set
	End Property
	Private privateHotelDescriptions As List(Of String)
	Public Property HotelDescriptions() As List(Of String)
		Get
			Return privateHotelDescriptions
		End Get
		Protected Set(ByVal value As List(Of String))
			privateHotelDescriptions = value
		End Set
	End Property
	Private privateRoomDescriptions As List(Of String)
	Public Property RoomDescriptions() As List(Of String)
		Get
			Return privateRoomDescriptions
		End Get
		Protected Set(ByVal value As List(Of String))
			privateRoomDescriptions = value
		End Set
	End Property
	Private privateRoomTypesMaxChildrenCount As List(Of Integer)
	Public Property RoomTypesMaxChildrenCount() As List(Of Integer)
		Get
			Return privateRoomTypesMaxChildrenCount
		End Get
		Protected Set(ByVal value As List(Of Integer))
			privateRoomTypesMaxChildrenCount = value
		End Set
	End Property
	Private privateHotelStars As List(Of Integer)
	Public Property HotelStars() As List(Of Integer)
		Get
			Return privateHotelStars
		End Get
		Protected Set(ByVal value As List(Of Integer))
			privateHotelStars = value
		End Set
	End Property
	Public ReadOnly Property Hotels() As List(Of Hotel)
		Get
			If Session(AllHotelsSID) Is Nothing Then
				Session(AllHotelsSID) = New List(Of Hotel)()
			End If
			Return CType(Session(AllHotelsSID), List(Of Hotel))
		End Get
	End Property
	Public Function GetPopularCountries() As IEnumerable(Of Country)
		Return FakeDataHelper.GetPopularCountries(Countries, PopularCountriesCount)
	End Function
	Public Function GetExclusiveHotels() As List(Of Hotel)
		If (Not Hotels.Any(Function(hotel) hotel.IsExclusive)) Then
			Hotels.AddRange(FakeDataHelper.GetHotels(SearchQuery.MostExclusive, TitleGroups, 10))
		End If
		Return Hotels.Where(Function(hotel) hotel.IsExclusive).ToList()
	End Function
	Public Function GetSearchResults() As IEnumerable(Of Hotel)
		FakeDataHelper.UpdateHotelsList(TitleGroups)
		Return Hotels.Where(Function(h) CurrentQuery.IsMatch(h))
	End Function
	Public Sub ClearMemory()
		Session.Clear()
		Session.Timeout = 3 * 24 * 60
	End Sub

	Private privateTitleGroups As List(Of XElement)
	Protected Property TitleGroups() As List(Of XElement)
		Get
			Return privateTitleGroups
		End Get
		Set(ByVal value As List(Of XElement))
			privateTitleGroups = value
		End Set
	End Property
	Private privateFakeDataHelper As FakeDataHelper
	Protected Property FakeDataHelper() As FakeDataHelper
		Get
			Return privateFakeDataHelper
		End Get
		Set(ByVal value As FakeDataHelper)
			privateFakeDataHelper = value
		End Set
	End Property
	Protected ReadOnly Property Session() As HttpSessionState
		Get
			Return HttpContext.Current.Session
		End Get
	End Property

	' Xml load
	Private Sub LoadXmlData()
		Countries = LoadXmlDataInternal(Of Country)("Countries", "HotelDestinations", Function(el) New Country(el.Attribute("Title").Value, el.Attribute("Image").Value, el.Elements().Select(Function(c) c.Value).OrderBy(Function(oc) oc), FakeDataHelper.GetPopularity(el.Attribute("MostPopular") IsNot Nothing)))
		HotelServices = LoadXmlDataInternal("HotelParameters", "HotelServices")
		RoomServices = LoadXmlDataInternal("HotelParameters", "RoomServices")
		RoomTypes = LoadXmlDataInternal("HotelParameters", "RoomTypes")
		RoomTypesMaxChildrenCount = LoadXmlDataInternal("HotelParameters", "RoomTypes", "Children").ConvertAll(Of Integer)(Function(v) Convert.ToInt32(v))
		HotelStars = New List(Of Integer)(New Integer() { 1, 2, 3, 4, 5 })
		TitleGroups = LoadXmlDataInternal("TitleWordsDictionary", "Dictionary", Function(el) el)

		CommonDescriptions = LoadXmlDataInternal("HotelParameters", "CommonDesc", "Text")
		HotelDescriptions = LoadXmlDataInternal("HotelParameters", "HotelDesc", "Text")
		RoomDescriptions = LoadXmlDataInternal("HotelParameters", "RoomDesc", "Text")
	End Sub
	Private Function LoadXmlDataInternal(ByVal fileName As String, ByVal rootNodeName As String) As List(Of String)
		Return LoadXmlDataInternal(fileName, rootNodeName, "Title")
	End Function
	Private Function LoadXmlDataInternal(ByVal fileName As String, ByVal rootNodeName As String, ByVal attrName As String) As List(Of String)
		Return LoadXmlDataInternal(fileName, rootNodeName, Function(el) el.Attribute(attrName).Value)
	End Function
	Private Function LoadXmlDataInternal(Of T)(ByVal fileName As String, ByVal rootNodeName As String, ByVal getElement As Func(Of XElement, T)) As List(Of T)
		Dim doc As XDocument = XDocument.Load(HttpContext.Current.Server.MapPath(String.Format("~\App_Data\{0}.xml", fileName)))
		Return ( _
				From node In doc.Root.Element(rootNodeName).Elements() _
				Select getElement(node)).ToList()
	End Function
End Class