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" 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_sImage As String Public Property sImage As String Get Return m_sImage End Get Set(value As String) m_sImage = value NotifyPropertyChanged(NameOf(sImage)) 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" Sub New(sName As String) m_sName = sName End Sub Sub New(Topology As Topology) m_sName = Topology.sName m_sImage = Topology.sImage 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, .sImage = m_sImage} 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" 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 Dim NewParameter As StrategyParameter = Parameter.Deserialize() If Not IsNothing(NewParameter) Then Strategy.ParameterList.Add(Parameter.Deserialize()) End If 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" 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_sSource As String Public Property sSource As String Get Return m_sSource End Get Set(value As String) m_sSource = value NotifyPropertyChanged(NameOf(sSource)) 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" Sub New(sName As String, sNameNge As String, sValue As String, sDescriptionShort As String, sDescriptionLong As String, sType As String, sSource 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_sSource = sSource 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_sSource = StrategyParameter.sSource 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) If m_sMinUserLevel = 1 Then DirectCast(StrategyParameter, BooleanStrategyParameter).SetbBooleanVisibility(True) End If Case "d" StrategyParameter = New DoubleStrategyParameter() DirectCast(StrategyParameter, DoubleStrategyParameter).SetValue(m_sValue) If m_sMinUserLevel = 1 Then DirectCast(StrategyParameter, DoubleStrategyParameter).SetbDoubleVisibility(True) End If Case "combo" StrategyParameter = New ComboStrategyParameter() For Each Choice In Choices DirectCast(StrategyParameter, ComboStrategyParameter).ComboList.Add(Choice.Deserialize()) Next DirectCast(StrategyParameter, ComboStrategyParameter).SetSelValue(m_sValue) If m_sMinUserLevel = 1 Then DirectCast(StrategyParameter, ComboStrategyParameter).SetbComboBoxVisibility(True) End If Case "tool" StrategyParameter = New ListStrategyParameter(m_sSubType) DirectCast(StrategyParameter, ListStrategyParameter).CreateToolsViews() If m_sMinUserLevel = 1 Then DirectCast(StrategyParameter, ListStrategyParameter).SetbListBoxVisibility(True) End If Case "s" StrategyParameter = New StringStrategyParameter() DirectCast(StrategyParameter, StringStrategyParameter).SetValue(m_sValue) If m_sMinUserLevel = 1 Then DirectCast(StrategyParameter, StringStrategyParameter).SetbStringVisibility(True) End If Case Else If Not IsNothing(m_sType) Then EgtOutLog("Tipo: " & m_sType & " non presente") Return Nothing 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" 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