Files
egtbeamwall/EgtBEAMWALL.Optimizer/StrategyManager/JsonAvailableStrategyHelper.vb
T

530 lines
16 KiB
VB.net

Imports EgtWPFLib5
Imports EgtUILib
Imports Newtonsoft.Json
Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtBEAMWALL.Core.ConstBeam
'----------- Classe che fa riferimento alle Feature del file Json -----------
Public Class JsonAvailableStrategyFeature
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_nPrc As Integer
Public Property nPrc As Integer
Get
Return m_nPrc
End Get
Set(value As Integer)
m_nPrc = value
NotifyPropertyChanged(NameOf(nPrc))
End Set
End Property
Private m_nGrp As Integer
Public Property nGrp As Integer
Get
Return m_nGrp
End Get
Set(value As Integer)
m_nGrp = value
NotifyPropertyChanged(NameOf(nGrp))
End Set
End Property
Private m_TopologyList As New ObservableCollection(Of JsonAvailableTopology)
Public Property TopologyList As ObservableCollection(Of JsonAvailableTopology)
Get
Return m_TopologyList
End Get
Set(value As ObservableCollection(Of JsonAvailableTopology))
m_TopologyList = value
NotifyPropertyChanged(NameOf(TopologyList))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
<JsonConstructor>
Sub New(sName As String, nPRC As Integer, nGRP As Integer)
m_sName = sName
m_nPrc = nPRC
m_nGrp = nGRP
End Sub
Sub New(StrategyFeature As StrategyFeature)
m_sName = StrategyFeature.sName
m_nPrc = StrategyFeature.nPrc
m_nGrp = StrategyFeature.nGrp
For Each Topology In StrategyFeature.TopologyList
m_TopologyList.Add(New JsonAvailableTopology(Topology))
Next
End Sub
Friend Function Deserialize(StrategyType As BWType) As StrategyFeature
Dim StrategyFeature As New StrategyFeature() With {.sName = m_sName,
.nPrc = m_nPrc,
.nGrp = m_nGrp}
For Each Topology In TopologyList
StrategyFeature.TopologyList.Add(Topology.Deserialize(StrategyType))
Next
Return StrategyFeature
End Function
#End Region ' Constructor
End Class
'----------- Classe che fa riferimento alle Topologie delle Feature del file Json -----------
Public Class JsonAvailableTopology
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_StrategyList As New ObservableCollection(Of JsonAvailableStrategy)
Public Property StrategyList As ObservableCollection(Of JsonAvailableStrategy)
Get
Return m_StrategyList
End Get
Set(value As ObservableCollection(Of JsonAvailableStrategy))
m_StrategyList = value
NotifyPropertyChanged(NameOf(StrategyList))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
<JsonConstructor>
Sub New(sName As String)
m_sName = sName
End Sub
Sub New(Topology As Topology)
m_sName = Topology.sName
For Each Strategy In Topology.StrategyList
m_StrategyList.Add(New JsonAvailableStrategy(Strategy))
Next
End Sub
#End Region ' Constructor
Friend Function Deserialize(StrategyType As BWType) As Topology
Dim Topology As New Topology() With {.sName = m_sName}
For StrategyIndex = 0 To StrategyList.Count - 1
Topology.StrategyList.Add(StrategyList(StrategyIndex).Deserialize(StrategyType, StrategyIndex))
Next
Topology.CreateStrategyViews()
Return Topology
End Function
End Class
'----------- Classe che fa alle Strategie delle Topologie delle Feature del file Json -----------
Public Class JsonAvailableStrategy
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sStrategyId As String
Public Property sStrategyId As String
Get
Return m_sStrategyId
End Get
Set(value As String)
m_sStrategyId = value
NotifyPropertyChanged(NameOf(sStrategyId))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
<JsonConstructor>
Sub New(sStrategyID As String)
m_sStrategyId = sStrategyID
End Sub
Sub New(Strategy As Strategy)
m_sStrategyId = Strategy.sStrategyId
End Sub
#End Region ' Constructor
Friend Function Deserialize(StrategyType As BWType, StrategyIndex As Integer) As Strategy
Dim Strategy As New Strategy() With {.sStrategyId = m_sStrategyId,
.nIndexInList = StrategyIndex}
' Recupero file StrategyJson
Dim StrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath(StrategyType) & "\" & sStrategyId & "\" & sStrategyId & ".json"
' Controllo se il file esiste
If Not File.Exists(StrategyPath) Then
EgtOutLog("Error! Strategy file not found! " & m_sStrategyId)
End If
' Leggo il contenuto del file JSON e deserializzo
Dim StrategyJson As String = File.ReadAllText(StrategyPath)
Dim strategyConfig As JsonDefaultStrategy = JsonConvert.DeserializeObject(Of JsonDefaultStrategy)(StrategyJson)
Strategy.sStrategyName = strategyConfig.sStrategyName
Dim sImagePath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath(StrategyType) & "\" & sStrategyId & "\" & sStrategyId & ".png"
If File.Exists(sImagePath) Then
Strategy.sStrategyImagePath = sImagePath
End If
If strategyConfig.sStrategyId <> m_sStrategyId Then EgtOutLog("Error! Strategy name wrong in " & m_sStrategyId)
For Each Parameter In strategyConfig.ParameterList
Strategy.ParameterList.Add(Parameter.Deserialize())
Next
Return Strategy
End Function
End Class
'----------- Classe che fa alle Strategie delle Topologie delle Feature del file Json -----------
Public Class JsonDefaultStrategy
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sStrategyId As String
Public Property sStrategyId As String
Get
Return m_sStrategyId
End Get
Set(value As String)
m_sStrategyId = value
End Set
End Property
Private m_sStrategyName As String
Public Property sStrategyName As String
Get
Return m_sStrategyName
End Get
Set(value As String)
m_sStrategyName = value
End Set
End Property
Private m_ParameterList As New ObservableCollection(Of JsonDefaultStrategyParameter)
Public Property ParameterList As ObservableCollection(Of JsonDefaultStrategyParameter)
Get
Return m_ParameterList
End Get
Set(value As ObservableCollection(Of JsonDefaultStrategyParameter))
m_ParameterList = value
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
<JsonConstructor>
Sub New(sStrategyId As String, sStrategyName As String)
m_sStrategyId = sStrategyId
m_sStrategyName = sStrategyName
End Sub
Sub New(Strategy As Strategy)
m_sStrategyId = Strategy.sStrategyId
For Each Parameter In Strategy.ParameterList
m_ParameterList.Add(New JsonDefaultStrategyParameter(Parameter))
Next
End Sub
#End Region ' Constructor
End Class
'----------- Classe che fa riferimento ai parametri delle Strategie nel file Json -----------
Public Class JsonDefaultStrategyParameter
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_sNameNge As String
Public Property sNameNge As String
Get
Return m_sNameNge
End Get
Set(value As String)
m_sNameNge = value
NotifyPropertyChanged(NameOf(sNameNge))
End Set
End Property
Private m_sValue As String
Public Property sValue As String
Get
Return m_sValue
End Get
Set(value As String)
m_sValue = value
NotifyPropertyChanged(NameOf(sValue))
End Set
End Property
Private m_sDescriptionShort As String
Public Property sDescriptionShort As String
Get
Return m_sDescriptionShort
End Get
Set(value As String)
m_sDescriptionShort = value
NotifyPropertyChanged(NameOf(sDescriptionShort))
End Set
End Property
Private m_sDescriptionLong As String
Public Property sDescriptionLong As String
Get
Return m_sDescriptionLong
End Get
Set(value As String)
m_sDescriptionLong = value
NotifyPropertyChanged(NameOf(sDescriptionLong))
End Set
End Property
Private m_sType As String
Public Property sType As String
Get
Return m_sType
End Get
Set(value As String)
m_sType = value
NotifyPropertyChanged(NameOf(sType))
End Set
End Property
Private m_sSubType As String
Public Property sSubType As String
Get
Return m_sSubType
End Get
Set(value As String)
m_sSubType = value
NotifyPropertyChanged(NameOf(sSubType))
End Set
End Property
Private m_sMessageId As String
Public Property sMessageId As String
Get
Return m_sMessageId
End Get
Set(value As String)
m_sMessageId = value
NotifyPropertyChanged(NameOf(sMessageId))
End Set
End Property
Private m_sMinUserLevel As Integer
Public Property sMinUserLevel As Integer
Get
Return m_sMinUserLevel
End Get
Set(value As Integer)
m_sMinUserLevel = value
NotifyPropertyChanged(NameOf(sMinUserLevel))
End Set
End Property
Private m_Choices As New ObservableCollection(Of JsonDefaultComboParameter)
Public Property Choices As ObservableCollection(Of JsonDefaultComboParameter)
Get
Return m_Choices
End Get
Set(value As ObservableCollection(Of JsonDefaultComboParameter))
m_Choices = value
NotifyPropertyChanged(NameOf(Choices))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
<JsonConstructor>
Sub New(sName As String, sNameNge As String, sValue As String, sDescriptionShort As String, sDescriptionLong As String, sType As String, sSubType As String, sMessageId As String, sMinUserLevel As Integer)
m_sName = sName
m_sNameNge = sNameNge
m_sValue = sValue
m_sDescriptionShort = sDescriptionShort
m_sDescriptionLong = sDescriptionLong
m_sType = sType
m_sSubType = sSubType
m_sMessageId = sMessageId
m_sMinUserLevel = sMinUserLevel
End Sub
Sub New(StrategyParameter As StrategyParameter)
m_sName = StrategyParameter.sName
m_sNameNge = StrategyParameter.sNameNge
Select Case StrategyParameter.GetType()
Case GetType(BooleanStrategyParameter)
m_sValue = If(DirectCast(StrategyParameter, BooleanStrategyParameter).bValue, "true", "false")
Case GetType(DoubleStrategyParameter)
m_sValue = DirectCast(StrategyParameter, DoubleStrategyParameter).sValue
Case GetType(ComboStrategyParameter)
m_sValue = DirectCast(StrategyParameter, ComboStrategyParameter).SelValue.sValue
Case GetType(StringStrategyParameter)
m_sValue = DirectCast(StrategyParameter, StringStrategyParameter).sValue
Case GetType(ListStrategyParameter)
m_sValue = DirectCast(StrategyParameter, ListStrategyParameter).SelValue.sName
End Select
m_sSubType = StrategyParameter.sSubType
m_sDescriptionShort = StrategyParameter.sDescriptionShort
m_sDescriptionLong = StrategyParameter.sDescriptionLong
m_sMessageId = StrategyParameter.sMessageId
m_sMinUserLevel = StrategyParameter.sMinUserLevel
End Sub
#End Region ' Constructor
Friend Function Deserialize() As StrategyParameter
Dim StrategyParameter As StrategyParameter = Nothing
Select Case m_sType
Case "b"
StrategyParameter = New BooleanStrategyParameter()
DirectCast(StrategyParameter, BooleanStrategyParameter).SetValue(m_sValue)
Case "d"
StrategyParameter = New DoubleStrategyParameter()
DirectCast(StrategyParameter, DoubleStrategyParameter).SetValue(m_sValue)
Case "combo"
StrategyParameter = New ComboStrategyParameter()
For Each Choice In Choices
DirectCast(StrategyParameter, ComboStrategyParameter).ComboList.Add(Choice.Deserialize())
Next
DirectCast(StrategyParameter, ComboStrategyParameter).SetSelValue(m_sValue)
Case "tool"
StrategyParameter = New ListStrategyParameter(m_sSubType)
Case "s"
StrategyParameter = New StringStrategyParameter()
DirectCast(StrategyParameter, StringStrategyParameter).SetValue(m_sValue)
End Select
StrategyParameter.sName = m_sName
StrategyParameter.sNameNge = m_sNameNge
StrategyParameter.sSubType = m_sSubType
StrategyParameter.sDescriptionShort = m_sDescriptionShort
StrategyParameter.sDescriptionLong = m_sDescriptionLong
StrategyParameter.sMessageId = m_sMessageId
StrategyParameter.sMinUserLevel = m_sMinUserLevel
Return StrategyParameter
End Function
End Class
'----------- Classe che fa riferimento ai parametri delle Scelte nel file Json -----------
Public Class JsonDefaultComboParameter
Inherits VMBase
Private m_sValue As String
Public Property sValue As String
Get
Return m_sValue
End Get
Set(value As String)
m_sValue = value
NotifyPropertyChanged(NameOf(sValue))
End Set
End Property
Private m_sDescriptionShort As String
Public Property sDescriptionShort As String
Get
Return m_sDescriptionShort
End Get
Set(value As String)
m_sDescriptionShort = value
NotifyPropertyChanged(NameOf(sDescriptionShort))
End Set
End Property
Private m_sDescriptionLong As String
Public Property sDescriptionLong As String
Get
Return m_sDescriptionLong
End Get
Set(value As String)
m_sDescriptionLong = value
NotifyPropertyChanged(NameOf(sDescriptionLong))
End Set
End Property
Private m_sMessageId As String
Public Property sMessageId As String
Get
Return m_sMessageId
End Get
Set(value As String)
m_sMessageId = value
NotifyPropertyChanged(NameOf(sMessageId))
End Set
End Property
#Region "CONSTRUCTOR"
<JsonConstructor>
Sub New(sValue As String, sDescriptionShort As String, sDescriptionLong As String, sMessageId As String)
m_sValue = sValue
m_sDescriptionShort = sDescriptionShort
m_sDescriptionLong = sDescriptionLong
m_sMessageId = sMessageId
End Sub
Sub New(ComboParameter As ComboParameter)
m_sValue = ComboParameter.sValue
m_sDescriptionShort = ComboParameter.sDescriptionShort
m_sDescriptionLong = ComboParameter.sDescriptionLong
m_sMessageId = ComboParameter.sMessageId
End Sub
#End Region ' Constructor
Friend Function Deserialize() As ComboParameter
Dim ComboParameter As New ComboParameter() With {.sValue = m_sValue,
.sDescriptionShort = m_sDescriptionShort,
.sDescriptionLong = m_sDescriptionLong,
.sMessageId = m_sMessageId}
Return ComboParameter
End Function
End Class