Imports System.Text
Imports Microsoft.VisualBasic.ComponentModel
Imports Microsoft.VisualBasic.ComputingServices.TaskHost
Imports Microsoft.VisualBasic.Linq.Framework.Provider
Imports Microsoft.VisualBasic.Linq.Framework.Provider.ImportsAPI
Imports Microsoft.VisualBasic.Serialization.JsonContract
Imports RQL.StorageTek
'''
''' Repository database
'''
Public Class Repository : Implements ISaveHandle
'''
''' {lower_case.url, type_info}
'''
'''
Public ReadOnly Property Models As Dictionary(Of String, EntityProvider)
ReadOnly __types As TypeRegistry
ReadOnly __api As APIProvider
Sub New()
__api = APIProvider.LoadDefault
__types = TypeRegistry.LoadDefault
End Sub
'''
'''
'''
''' 大小写不敏感,不需要额外的处理
'''
Public Function GetRepository(url As String, Optional where As String = "") As IEnumerable
Dim api As EntityProvider = Models(url.ToLower)
If String.IsNullOrEmpty(where) Then
Return api.GetRepository
Else
Return api.LinqWhere(where, __types, __api)
End If
End Function
Public Overloads Function [GetType](url As String) As Type
Dim api As EntityProvider = Models(url.ToLower)
Return api.GetType
End Function
Public Function LoadFile(url As String) As Repository
Return LoadJsonFile(Of Repository)(url)
End Function
Public Function LoadDefault() As Repository
Return LoadFile(DefaultFile)
End Function
Public Shared ReadOnly Property DefaultFile As String =
App.ProductSharedDIR & "/RQL.Provider.json"
Private Function ISaveHandle_Save(Optional Path As String = "", Optional encoding As Encoding = Nothing) As Boolean Implements ISaveHandle.Save
If String.IsNullOrEmpty(Path) Then
Path = DefaultFile
End If
Return Me.GetJson.SaveTo(Path, encoding)
End Function
Public Function Save(Optional Path As String = "", Optional encoding As Encodings = Encodings.UTF8) As Boolean Implements ISaveHandle.Save
Return ISaveHandle_Save(Path, encoding.GetEncodings)
End Function
End Class