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_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 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" 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" 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" 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" 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