You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
4.0 KiB

'''<summary>Verwaltet eine hashtable mit den parametern, damit nicht jedes mal ein dbzugriff erfolgt</summary>
Public Class Config
#Region "Members"
Private Shared _parameterList As New Hashtable() 'parameter für alle benutzer (benutzerNr = 0)
Private Shared _userList As New Hashtable() 'liste für benutzer
#End Region
#Region "Private Functions"
'''<summary>Fügt einen neuen Parameter hinzu</summary>
Private Shared Sub Add(ByVal p As Parameter)
Try
_parameterList.Add(p.Name, p)
Catch ex As Exception
TKBLib.Errorhandling.TraceHelper.Msg("EDOKALib.BF.Config.Add", ex.Message + " " + ex.StackTrace, TraceLevel.Error)
Throw ex
End Try
End Sub
'''<summary>Fügt einen neuen Parameter hinzu</summary>
Private Shared Sub AddUserParam(ByVal p As Parameter)
Try
Dim h As Hashtable
h = _userList(p.BenutzerNr)
If h Is Nothing Then 'noch keine param für diesen benutzer
h = New Hashtable() 'neue param liste für benutzer erstellen
h.Add(p.Name, p) 'parameter hinzufügen
_userList.Add(p.BenutzerNr, h) 'parameter liste zur benutzerliste hinzufügen
Else 'user hat eine liste
h.Add(p.Name, p) 'parameter hinzufügen
End If
Catch ex As Exception
TKBLib.Errorhandling.TraceHelper.Msg("EDOKALib.BF.Config.AddUserParam", ex.Message + " " + ex.StackTrace, TraceLevel.Error)
Throw ex
End Try
End Sub
#End Region
#Region "Public Functions"
'''<summary>Gibt den Wert eines Parameters zurück</summary>
'''<param name="name">Name des Parameters</param>
Public Shared Function GetParameterValue(ByVal name As String) As String
Return GetParameter(name).Wert
End Function
'''<summary>Gibt den Wert eines Benuzer spzifischen Parameters zurück</summary>
'''<param name="name">Name des Parameters</param>
'''<param name="benutzerNr"></param>
Public Shared Function GetParameterValue(ByVal name As String, ByVal benutzerNr As Integer) As String
If benutzerNr = 0 Then
Return GetParameter(name).Wert
Else
Return GetUserParameter(name, benutzerNr).Wert
End If
End Function
Public Shared Function GetParameter(ByVal name As String) As Parameter
Try
Dim p As Parameter
p = _parameterList(name) 'suche nach param
If Not p Is Nothing Then
Return p 'gefunden & return
Else
'try to load from db
p = New Parameter(name, 0)
If p.ParameterId <> 0 Then
Add(p) 'zur hashtabelle hinzufügen
Return p
Else
Throw New ConfigException("Parameter wurde nicht gefunden!") 'weder in der db noch in der hashtable gefunden
End If
End If
Catch ex As Exception
TKBLib.Errorhandling.TraceHelper.Msg("EDOKALib.BF.Config.GetParameter", ex.Message + " " + ex.StackTrace, TraceLevel.Error)
Throw ex
End Try
End Function
Public Shared Function GetUserParameter(ByVal name As String, ByVal benutzerNr As Integer) As Parameter
Try
Dim p As Parameter
Dim h As Hashtable
If benutzerNr = 0 Then
Return GetParameter(name)
End If
h = _userList(benutzerNr) 'benutzer parameterliste suchen
If h Is Nothing Then
h = New Hashtable() 'nicht gefunden neuerstellen
End If
p = h(name) 'nach parameter suchen
If Not p Is Nothing Then
Return p 'parameter gefunden und zurückgeben
Else
'try to load from db
p = New Parameter(name, benutzerNr)
If p.ParameterId <> 0 Then
AddUserParam(p)
Return p
Else
Throw New ConfigException("Parameter wurde nicht gefunden!") 'weder in der db noch in der hashtable gefunden
End If
End If
Catch ex As Exception
TKBLib.Errorhandling.TraceHelper.Msg("EDOKALib.BF.Config.GetParameter(...)", ex.Message + " " + ex.StackTrace, TraceLevel.Error)
Throw ex
End Try
End Function
#End Region
End Class
'''<summary>Diese Klasse behandelt eine Configuration spezifische Ausnahme</summary>
Public Class ConfigException
Inherits Exception
Dim _message As String
Public Sub New(ByVal message As String)
_message = message
End Sub
Public Overrides ReadOnly Property Message() As String
Get
Return _message
End Get
End Property
End Class