Files
egtbeamwall/EgtBEAMWALL.Optimizer/StrategyManagerWnd/StrategyManagerWndVM.vb
2025-04-29 01:29:17 +02:00

399 lines
12 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtWPFLib5
Imports Newtonsoft.Json
Public Class StrategyManagerWndVM
Inherits VMBase
Private m_StrategySetupList As New ObservableCollection(Of StrategySetup)
Public ReadOnly Property StrategySetupList As ObservableCollection(Of StrategySetup)
Get
Return m_StrategySetupList
End Get
End Property
Private m_SelStrategySetup As StrategySetup
Public Property SelStrategySetup As StrategySetup
Get
Return m_SelStrategySetup
End Get
Set(value As StrategySetup)
m_SelStrategySetup = value
m_SelStrategySetup.Read()
NotifyPropertyChanged(NameOf(SelStrategySetup))
End Set
End Property
Sub New()
' leggo cartella dei setup delle strategie
Dim AISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath()
Dim AISetupPaths As String() = Directory.GetFiles(AISetupDirPath)
For Each AiSetup In AISetupPaths
m_StrategySetupList.Add(New StrategySetup(Path.GetFileNameWithoutExtension(AiSetup)))
Next
End Sub
End Class
Public Class StrategySetup
Inherits VMBase
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Private m_StrategyFeatureList As New ObservableCollection(Of StrategyFeature)
Public Property StrategyFeatureList As ObservableCollection(Of StrategyFeature)
Get
Return m_StrategyFeatureList
End Get
Set(value As ObservableCollection(Of StrategyFeature))
m_StrategyFeatureList = value
End Set
End Property
Sub New(sName As String)
m_sName = sName
End Sub
Private m_SelStrategyFeature As StrategyFeature
Public Property SelStrategyFeature As StrategyFeature
Get
Return m_SelStrategyFeature
End Get
Set(value As StrategyFeature)
m_SelStrategyFeature = value
NotifyPropertyChanged(NameOf(SelStrategyFeature))
End Set
End Property
Friend Sub Read()
' carico default
Dim sStrategiesDirPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath()
Dim sAvailableStrategiesFilePath As String = sStrategiesDirPath & "\" & AVAILABLESTRATEGYLIST_FILE & ".json"
If File.Exists(sAvailableStrategiesFilePath) Then
Dim sReadedFile As String = File.ReadAllText(sAvailableStrategiesFilePath)
Dim JsonStrategyFeatureList As List(Of JsonStrategyFeature) = JsonConvert.DeserializeObject(Of List(Of JsonStrategyFeature))(sReadedFile)
m_StrategyFeatureList = New ObservableCollection(Of StrategyFeature)((From JsonStrategyFeature In JsonStrategyFeatureList
Select New StrategyFeature(JsonStrategyFeature)).ToList())
' NotifyPropertyChanged(NameOf(StrategyFeatureList))
End If
' carico custom
Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath()
Dim sStrategyConfigurationFilePath As String = sAISetupDirPath & "\" & sName & ".json"
If File.Exists(sStrategyConfigurationFilePath) Then
Dim sReadedFile As String = File.ReadAllText(sStrategyConfigurationFilePath)
Dim JsonStrategyFeatureList As List(Of JsonStrategyFeature) = JsonConvert.DeserializeObject(Of List(Of JsonStrategyFeature))(sReadedFile)
For Each Feature In JsonStrategyFeatureList
Dim DefaultFeature As StrategyFeature = m_StrategyFeatureList.FirstOrDefault(Function(x) x.nPRC = Feature.nPRC AndAlso x.nGRP = Feature.nGRP)
' gestire caso non venga trovata perchè non esiste più in default??'
If Not IsNothing(DefaultFeature) Then
For Each Topology In Feature.TopologyList
Dim DefaultTopology As Topology = DefaultFeature.TopologyList.FirstOrDefault(Function(x) x.sName = Topology.sName)
' gestire caso non venga trovata perchè non esiste più in default??'
For Each Strategy In Topology.StrategyList
Dim DefaultStrategy As Strategy = DefaultTopology.StrategyList.FirstOrDefault(Function(x) x.sStrategyID = Strategy.sStrategyID)
If IsNothing(DefaultStrategy) Then
DefaultTopology.StrategyList.Add(New Strategy(DefaultTopology, Strategy))
' verifico indici!!
Else
DefaultStrategy.ReadConfiguration(Strategy)
End If
Next
Next
End If
Next
End If
End Sub
End Class
Public Class StrategyFeature
Inherits VMBase
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
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
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
End Set
End Property
Private m_TopologyList As New ObservableCollection(Of Topology)
Public Property TopologyList As ObservableCollection(Of Topology)
Get
Return m_TopologyList
End Get
Set(value As ObservableCollection(Of Topology))
m_TopologyList = value
End Set
End Property
Private m_SelTopology As Topology
Public Property SelTopology As Topology
Get
Return m_SelTopology
End Get
Set(value As Topology)
m_SelTopology = value
NotifyPropertyChanged(NameOf(SelTopology))
End Set
End Property
Sub New(JsonStrategyFeature As JsonStrategyFeature)
m_sName = JsonStrategyFeature.sName
m_nPRC = JsonStrategyFeature.nPRC
m_nGRP = JsonStrategyFeature.nGRP
m_TopologyList = New ObservableCollection(Of Topology)((From JsonTopology In JsonStrategyFeature.TopologyList
Select New Topology(JsonTopology)).ToList())
NotifyPropertyChanged(NameOf(TopologyList))
End Sub
End Class
Public Class Topology
Inherits VMBase
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Private m_AvailableStrategyList_View As ICollectionView = Nothing
Public Property AvailableStrategyList_View As ICollectionView
Get
Return m_AvailableStrategyList_View
End Get
Set(value As ICollectionView)
End Set
End Property
Private m_ActiveStrategyList_View As ICollectionView = Nothing
Public ReadOnly Property ActiveStrategyList_View As ICollectionView
Get
Return m_ActiveStrategyList_View
End Get
End Property
Private m_StrategyList As New ObservableCollection(Of Strategy)
Public Property StrategyList As ObservableCollection(Of Strategy)
Get
Return m_StrategyList
End Get
Set(value As ObservableCollection(Of Strategy))
m_StrategyList = value
End Set
End Property
Private m_SelActiveStrategy As Strategy
Public Property SelActiveStrategy As Strategy
Get
Return m_SelActiveStrategy
End Get
Set(value As Strategy)
m_SelActiveStrategy = value
End Set
End Property
Private m_SelAvailableStrategy As Strategy
Public Property SelAvailableStrategy As Strategy
Get
Return m_SelAvailableStrategy
End Get
Set(value As Strategy)
m_SelAvailableStrategy = value
End Set
End Property
Sub New(JsonTopology As JsonTopology)
m_sName = JsonTopology.sName
m_StrategyList = New ObservableCollection(Of Strategy)((From JsonStrategy In JsonTopology.StrategyList
Select New Strategy(Me, JsonStrategy)).ToList())
m_AvailableStrategyList_View = New ListCollectionView(StrategyList)
m_AvailableStrategyList_View.Filter = AddressOf AvailableStrategyFilter
m_ActiveStrategyList_View = New ListCollectionView(StrategyList)
m_ActiveStrategyList_View.Filter = AddressOf ActiveStrategyFilter
NotifyPropertyChanged(NameOf(StrategyList))
End Sub
Private Function AvailableStrategyFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, Strategy).nIndexInList < 0
End Function
Private Function ActiveStrategyFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, Strategy).nIndexInList >= 0
End Function
End Class
Public Class Strategy
Inherits VMBase
Private m_ParentTopology As Topology
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_nIndexInList As Integer = -1
Public Property nIndexInList As Integer
Get
Return m_nIndexInList
End Get
Set(value As Integer)
m_nIndexInList = value
End Set
End Property
Sub New(ParentTopology As Topology, JsonStrategy As JsonStrategy)
m_ParentTopology = ParentTopology
m_sStrategyID = JsonStrategy.sStrategyID
End Sub
Friend Sub ReadConfiguration(ConfigurationStrategy As JsonStrategy)
m_nIndexInList = ConfigurationStrategy.nIndexInList
NotifyPropertyChanged(NameOf(nIndexInList))
m_ParentTopology.NotifyPropertyChanged(NameOf(m_ParentTopology.AvailableStrategyList_View))
m_ParentTopology.NotifyPropertyChanged(NameOf(m_ParentTopology.ActiveStrategyList_View))
End Sub
End Class
Public Class JsonStrategyFeature
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
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
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
End Set
End Property
Private m_TopologyList As New ObservableCollection(Of JsonTopology)
Public Property TopologyList As ObservableCollection(Of JsonTopology)
Get
Return m_TopologyList
End Get
Set(value As ObservableCollection(Of JsonTopology))
m_TopologyList = value
End Set
End Property
End Class
Public Class JsonTopology
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Private m_StrategyList As New ObservableCollection(Of JsonStrategy)
Public Property StrategyList As ObservableCollection(Of JsonStrategy)
Get
Return m_StrategyList
End Get
Set(value As ObservableCollection(Of JsonStrategy))
m_StrategyList = value
End Set
End Property
End Class
Public Class JsonStrategy
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_nIndexInList As Integer = -1
Public Property nIndexInList As Integer
Get
Return m_nIndexInList
End Get
Set(value As Integer)
m_nIndexInList = value
End Set
End Property
End Class