'''Verwaltet eine hashtable mit den parametern, damit nicht jedes mal ein dbzugriff erfolgt
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"
'''Fügt einen neuen Parameter hinzu
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
'''Fügt einen neuen Parameter hinzu
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"
'''Gibt den Wert eines Parameters zurück
'''Name des Parameters
Public Shared Function GetParameterValue(ByVal name As String) As String
Return GetParameter(name).Wert
End Function
'''Gibt den Wert eines Benuzer spzifischen Parameters zurück
'''Name des Parameters
'''
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
'''Diese Klasse behandelt eine Configuration spezifische Ausnahme
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