Files
egtbeamwall/EgtBEAMWALL.Optimizer/StrategyManager/StrategyManagerVM.vb
T
Emmanuele Sassi 64881c5869 - riportate alcune modifiche da ramo correzioni&migliorie
- evitato drag su selezione pezzo
2025-07-04 14:55:31 +02:00

1256 lines
38 KiB
VB.net

Imports System.Collections.ObjectModel
Imports EgtWPFLib5
Imports Newtonsoft.Json
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports System.ComponentModel
Imports System.Globalization
Public Class StrategyManagerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
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
' Permette di selezionare l'elemento dell'albero
Public m_SelTreeItem As Topology
Public Property SelTreeItem As Topology
Get
Return m_SelTreeItem
End Get
Set(value As Topology)
m_SelTreeItem = value
NotifyPropertyChanged(NameOf(SelTreeItem))
End Set
End Property
''' <summary>
''' Funzione che aggiorna la selezione dell'elemento dell'albero
''' </summary>
''' <param name="Item">Elemento dell'albero</param>
Friend Sub UpdateSelTreeItem(Item As Topology)
m_SelTreeItem = Item
NotifyPropertyChanged(NameOf(SelTreeItem))
End Sub
' Utilizzato per indicare che viene effettuata una modifica
Private m_bIsModifyStrategy As Boolean = False
Public ReadOnly Property bIsModifyStrategy As Boolean
Get
Return m_bIsModifyStrategy
End Get
End Property
Friend Sub SetbIsModifyStrategy(value As Boolean)
m_bIsModifyStrategy = value
If m_bIsModifyStrategy Then
SetSaveImage("pack://application:,,,/Resources/NewPage/SaveModify.png")
Else
SetSaveImage("pack://application:,,,/Resources/ProjectManager/Save.png")
End If
NotifyPropertyChanged(NameOf(bIsModifyStrategy))
End Sub
' Immagine SaveCommand
Private m_SaveImage As String = "pack://application:,,,/Resources/ProjectManager/Save.png"
Public ReadOnly Property SaveImage As String
Get
Return m_SaveImage
End Get
End Property
Friend Sub SetSaveImage(value As String)
m_SaveImage = value
NotifyPropertyChanged(NameOf(SaveImage))
End Sub
' Lista che contiene le strategie filtrate
Private m_StrategyProductionList As New ObservableCollection(Of Strategy)
Public Property StrategyProductionList As ObservableCollection(Of Strategy)
Get
Return m_StrategyProductionList
End Get
Set(value As ObservableCollection(Of Strategy))
m_StrategyProductionList = value
NotifyPropertyChanged(NameOf(StrategyProductionList))
End Set
End Property
Private m_StrategyProductionPath As String = String.Empty
Public ReadOnly Property StrategyProductionPath As String
Get
Return m_StrategyProductionPath
End Get
End Property
Friend Sub SetStrategyProductionPath(value As String)
m_StrategyProductionPath = value
NotifyPropertyChanged(NameOf(StrategyProductionPath))
End Sub
#Region "Messages"
Public ReadOnly Property SaveToolTip As String
Get
Return EgtMsg(62571)
End Get
End Property
Public ReadOnly Property SaveAsToolTip As String
Get
Return EgtMsg(62572)
End Get
End Property
Public ReadOnly Property NewToolTip As String
Get
Return EgtMsg(30501)
End Get
End Property
#End Region ' Messages
' Definizione Comandi
Private m_AddSelectedStrategyCommand As ICommand
Private m_RemoveSelectedStrategyCommand As ICommand
Private m_NewCommand As ICommand
Private m_OpenCommand As ICommand
Private m_SaveCommand As ICommand
Private m_OpenFileNameCustomConfigCommand As ICommand
Private m_MoveUpSelectedStrategyCommand As ICommand
Private m_MoveDownSelectedStrategyCommand As ICommand
Private m_cmdOk As ICommand
Private m_cmdCancel As ICommand
#End Region ' Field & Properties
#Region "CONSTRUCTOR"
Sub New()
' Setto riferimento
Map.SetRefStrategyManagerVM(Me)
' 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
If m_StrategySetupList.Count > 0 Then
SelStrategySetup = m_StrategySetupList(0)
End If
' Assegno riferimento funzione per aggiornare elemento selezionato dall'albero
Topology.refUpdateSelTreeItem = AddressOf UpdateSelTreeItem
End Sub
#End Region ' Constructor
#Region "METHODS"
''' <summary>
''' Funzione che salva il file customconfig se sono presenti modifiche
''' </summary>
Friend Sub SaveCustomConfigJson()
' Controlla se il file JSON è stato modificato
If Not m_bIsModifyStrategy Then Return
' Chiede conferma per il salvataggio
If MessageBox.Show("Il file Json è stato modificato. Vuoi salvarlo?", EgtMsg(15003), MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then
m_SelStrategySetup.Write()
End If
End Sub
#End Region ' Methods
#Region "COMMANDS"
#Region "AddSelectedStrategyCommand"
Public ReadOnly Property AddSelectedStrategyCommand As ICommand
Get
If m_AddSelectedStrategyCommand Is Nothing Then
m_AddSelectedStrategyCommand = New Command(AddressOf AddSelectedStrategyToActiveStrategy)
End If
Return m_AddSelectedStrategyCommand
End Get
End Property
''' <summary>
''' Funzione che permette di aggiungere la strategia da StrategyList a ActiveStrategyList
''' </summary>
Public Sub AddSelectedStrategyToActiveStrategy()
' Controllo se SelectedStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelAvailableStrategy) Then Return
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Setto indice per capire che la strategia è stata spostata in ActiveStrategyList
m_SelTreeItem.SelAvailableStrategy.nIndexInList = 0
' Aggiorno le liste
m_SelTreeItem.AvailableStrategyList_View.Refresh()
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' AddSelectedStrategyCommand
#Region "RemoveSelectedStrategyCommand"
Public ReadOnly Property RemoveSelectedStrategyCommand As ICommand
Get
If m_RemoveSelectedStrategyCommand Is Nothing Then
m_RemoveSelectedStrategyCommand = New Command(AddressOf RemoveSelectedStrategyToActiveStrategy)
End If
Return m_RemoveSelectedStrategyCommand
End Get
End Property
''' <summary>
''' Funzione che rimuove la strategia da ActiveStrategyList e la riaggiunge a StrategyList
''' </summary>
Public Sub RemoveSelectedStrategyToActiveStrategy()
' Controllo se SelectedActiveStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Setto indice per capire che la strategia è stata spostata in StrategyList
m_SelTreeItem.SelActiveStrategy.nIndexInList = -1
' Aggiorno le liste
m_SelTreeItem.AvailableStrategyList_View.Refresh()
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' RemoveSelectedStrategyCommand
#Region "OpenFileNameCustomConfigCommand"
Public ReadOnly Property OpenFileNameCustomConfigCommand As ICommand
Get
If m_OpenFileNameCustomConfigCommand Is Nothing Then
m_OpenFileNameCustomConfigCommand = New Command(AddressOf OpenFileNameCustomConfig)
End If
Return m_OpenFileNameCustomConfigCommand
End Get
End Property
''' <summary>
''' Funzione che visualizza la textbox
''' </summary>
Public Sub OpenFileNameCustomConfig()
Dim SaveAsStrategyVM As New SaveAsStrategyVM()
SaveAsStrategyVM.SetbSave_Visibility(Visibility.Visible)
Dim SaveAsStrategyWnd As New SaveAsStrategyV With {
.DataContext = SaveAsStrategyVM,
.Owner = Application.Current.MainWindow
}
SaveAsStrategyWnd.ShowDialog()
End Sub
#End Region ' OpenFileNameCustomConfigCommand
#Region "New"
Public ReadOnly Property New_Command As ICommand
Get
If m_NewCommand Is Nothing Then
m_NewCommand = New Command(AddressOf NewAiSetup)
End If
Return m_NewCommand
End Get
End Property
''' <summary>
''' Funzione apre un nuovo il file json CustomerConfig
''' </summary>
Public Sub NewAiSetup()
Dim NewStrategyVM As New SaveAsStrategyVM()
NewStrategyVM.SetbOpen_Visibility(Visibility.Visible)
Dim NewStrategyWnd As New SaveAsStrategyV With {
.DataContext = NewStrategyVM,
.Owner = Application.Current.MainWindow
}
NewStrategyWnd.ShowDialog()
End Sub
#End Region ' New
#Region "SaveCommand"
Public ReadOnly Property SaveCommand As ICommand
Get
If m_SaveCommand Is Nothing Then
m_SaveCommand = New Command(AddressOf Save)
End If
Return m_SaveCommand
End Get
End Property
''' <summary>
''' Funzione che salva il file json CustomerConfig
''' </summary>
Public Sub Save()
m_SelStrategySetup.Write()
SetbIsModifyStrategy(False)
End Sub
#End Region ' SaveCommand
#Region "MoveUpSelectedStrategyCommand"
Public ReadOnly Property MoveUpSelectedStrategyCommand As ICommand
Get
If m_MoveUpSelectedStrategyCommand Is Nothing Then
m_MoveUpSelectedStrategyCommand = New Command(AddressOf MoveUpSelectedStrategy)
End If
Return m_MoveUpSelectedStrategyCommand
End Get
End Property
''' <summary>
''' Funzione che permette di spostare in alto la strategia selezionata
''' </summary>
Public Sub MoveUpSelectedStrategy()
' Controllo se SelectedActiveStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Recupero indice elemento selezionato in lista
Dim IndexActiveStrategy As Integer = m_SelTreeItem.StrategyList.IndexOf(m_SelTreeItem.SelActiveStrategy)
' Recupero indice elemento selezionato in lista
Dim NewIndexActiveStrategy As Integer = IndexActiveStrategy - 1
' Se l'indice è maggiore di 0
If IndexActiveStrategy > 0 Then
' Muovo l'elemento selezionato sopra di 1
m_SelTreeItem.StrategyList.Move(IndexActiveStrategy, NewIndexActiveStrategy)
End If
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Aggiorno la lista
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' MoveUpSelectedStrategyCommand
#Region "MoveDownSelectedStrategyCommand"
Public ReadOnly Property MoveDownSelectedStrategyCommand As ICommand
Get
If m_MoveDownSelectedStrategyCommand Is Nothing Then
m_MoveDownSelectedStrategyCommand = New Command(AddressOf MoveDownSelectedStrategy)
End If
Return m_MoveDownSelectedStrategyCommand
End Get
End Property
''' <summary>
''' Funzione che permette di spostare in basso la strategia selezionata
''' </summary>
Public Sub MoveDownSelectedStrategy()
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Recupero indice elemento selezionato in lista
Dim IndexActiveStrategy As Integer = m_SelTreeItem.StrategyList.IndexOf(m_SelTreeItem.SelActiveStrategy)
' Recupero indice elemento selezionato in lista
Dim NewIndexActiveStrategy As Integer = IndexActiveStrategy + 1
' Se l'indice è maggiore di 0
If IndexActiveStrategy >= 0 Then
' Muovo l'elemento selezionato sopra di 1
m_SelTreeItem.StrategyList.Move(IndexActiveStrategy, NewIndexActiveStrategy)
End If
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Aggiorno la lista
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' MoveDownSelectedStrategyCommand
#Region "Ok_Command"
Public ReadOnly Property Ok_Command As ICommand
Get
If m_cmdOk Is Nothing Then
m_cmdOk = New Command(AddressOf Ok)
End If
Return m_cmdOk
End Get
End Property
Public Sub Ok()
Map.refProjectVM.SetSelManagerTab(ProjectVM.StrategyManagerTab.RAWPARTMANAGER)
' Abilito LeftPanel
Map.refProjectVM.SetOnlyProdLeftPanel_IsEnabled(True)
Map.refProjectVM.SetOnlyProdLeftPanel_Opacity(1)
End Sub
#End Region ' Ok_Command
#Region "Cancel_Command"
Public ReadOnly Property Cancel_Command As ICommand
Get
If m_cmdCancel Is Nothing Then
m_cmdCancel = New Command(AddressOf Cancel)
End If
Return m_cmdCancel
End Get
End Property
Public Sub Cancel()
Map.refProjectVM.SetSelManagerTab(ProjectVM.StrategyManagerTab.RAWPARTMANAGER)
' Abilito LeftPanel
Map.refProjectVM.SetOnlyProdLeftPanel_IsEnabled(True)
Map.refProjectVM.SetOnlyProdLeftPanel_Opacity(1)
End Sub
#End Region ' Cancel_Command
#End Region ' Commands
End Class
'----------- Classe che rappresenta un file di setup delle strategie -----------
Public Class StrategySetup
Inherits VMBase
#Region "FIELDS & PROPERTIES"
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
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
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sName As String)
m_sName = sName
End Sub
#End Region ' Constructor
#Region "METHODS"
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 JsonAvailableStrategyFeature) = JsonConvert.DeserializeObject(Of List(Of JsonAvailableStrategyFeature))(sReadedFile)
m_StrategyFeatureList = New ObservableCollection(Of StrategyFeature)((From JsonStrategyFeature In JsonStrategyFeatureList
Select JsonStrategyFeature.Deserialize()).ToList())
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??'
If Not IsNothing(DefaultTopology) Then
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
End If
Next
End If
Next
End If
End Sub
Friend Sub Write()
Dim JsonFromStrategyManager As New List(Of JsonStrategyFeature)
For Each StrategyFeature In m_StrategyFeatureList
JsonFromStrategyManager.Add(StrategyFeature.Serialize())
Next
Dim JsonFromStrategy As String = JsonConvert.SerializeObject(JsonFromStrategyManager, Formatting.Indented)
Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath()
Dim sStrategyConfigurationFilePath As String = sAISetupDirPath & "\" & sName & ".json"
File.WriteAllText(sStrategyConfigurationFilePath, JsonFromStrategy)
End Sub
#End Region ' Methods
End Class
'----------- Classe che fa riferimento alle Feature -----------
Public Class StrategyFeature
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
Public ReadOnly Property nPrcDesc As String
Get
Return m_nPrc.ToString("000")
End Get
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 Topology)
Public Property TopologyList As ObservableCollection(Of Topology)
Get
Return m_TopologyList
End Get
Set(value As ObservableCollection(Of Topology))
m_TopologyList = value
NotifyPropertyChanged(NameOf(TopologyList))
End Set
End Property
Private m_bIsExpanded As Boolean
Public Property IsExpanded As Boolean
Get
Return m_bIsExpanded
End Get
Set(value As Boolean)
If Not value AndAlso m_TopologyList.Any(Function(x) x.IsSelected) Then
' NotifyPropertyChanged(IsExpanded)
Else
m_bIsExpanded = value
End If
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonStrategyFeature As JsonAvailableStrategyFeature)
If IsNothing(JsonStrategyFeature) Then Return
m_sName = JsonStrategyFeature.sName
m_nPrc = JsonStrategyFeature.nPRC
m_nGrp = JsonStrategyFeature.nGRP
m_TopologyList = New ObservableCollection(Of Topology)(JsonStrategyFeature.TopologyList.Select(Function(jsonTopology) New Topology(jsonTopology)))
NotifyPropertyChanged(NameOf(TopologyList))
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Function Serialize() As JsonStrategyFeature
Dim JsonStrategyFeature As New JsonStrategyFeature(m_sName, m_nPrc, m_nGrp)
For Each Topology In m_TopologyList
JsonStrategyFeature.TopologyList.Add(Topology.Serialize())
Next
Return JsonStrategyFeature
End Function
#End Region ' Methods
End Class
'----------- Classe che fa riferimento alle Topologie delle Feature -----------
Public Class Topology
Inherits VMBase
#Region "FIELDS & PROPETIES"
Friend Shared refUpdateSelTreeItem As Action(Of Topology)
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_bIsSelected As Boolean
Public Property IsSelected As Boolean
Get
Return m_bIsSelected
End Get
Set(value As Boolean)
m_bIsSelected = value
refUpdateSelTreeItem(Me)
If Not value Then
SelActiveStrategy = Nothing
SelAvailableStrategy = Nothing
End If
m_AvailableStrategyList_View.Refresh()
m_ActiveStrategyList_View.Refresh()
End Set
End Property
Private m_AvailableStrategyList_View As ICollectionView = Nothing
Public ReadOnly Property AvailableStrategyList_View As ICollectionView
Get
Return m_AvailableStrategyList_View
End Get
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
NotifyPropertyChanged(NameOf(StrategyList))
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
SelParamStrategy = 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
SelParamStrategy = value
End Set
End Property
Private m_SelParamStrategy As Strategy
Public Property SelParamStrategy As Strategy
Get
Return m_SelParamStrategy
End Get
Set(value As Strategy)
m_SelParamStrategy = value
NotifyPropertyChanged(NameOf(SelParamStrategy))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonTopology As JsonAvailableTopology)
If IsNothing(JsonTopology) Then Return
m_sName = JsonTopology.sName
m_StrategyList = New ObservableCollection(Of Strategy)(JsonTopology.StrategyList.Select(Function(jsonStrategy) New Strategy(Me, jsonStrategy)))
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
#End Region ' Constructor
#Region "METHODS"
Friend Function AvailableStrategyFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, Strategy).nIndexInList < 0
End Function
Friend Function ActiveStrategyFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, Strategy).nIndexInList >= 0
End Function
Friend Sub CreateStrategyViews()
m_AvailableStrategyList_View = New ListCollectionView(StrategyList)
m_AvailableStrategyList_View.Filter = AddressOf AvailableStrategyFilter
m_ActiveStrategyList_View = New ListCollectionView(StrategyList)
m_ActiveStrategyList_View.Filter = AddressOf ActiveStrategyFilter
End Sub
Friend Function Serialize() As JsonTopology
Dim JsonTopology As New JsonTopology(m_sName)
For Each Strategy In m_StrategyList
JsonTopology.StrategyList.Add(Strategy.Serialize())
Next
Return JsonTopology
End Function
#End Region ' Methods
End Class
'----------- Classe che fa alle Strategie delle Topologie delle Feature -----------
Public Class Strategy
Inherits VMBase
#Region "FIELDS & PROPETIES"
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
NotifyPropertyChanged(NameOf(sStrategyId))
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
NotifyPropertyChanged(NameOf(sStrategyName))
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
NotifyPropertyChanged(NameOf(nIndexInList))
End Set
End Property
Friend Sub SetIndexList(value As Integer)
m_nIndexInList = value
NotifyPropertyChanged(NameOf(nIndexInList))
End Sub
Private m_sStrategyImagePath As String = "pack://application:,,,/Resources/NewPage/LogoProvaStrategy.png"
Public Property sStrategyImagePath As String
Get
Return m_sStrategyImagePath
End Get
Set(value As String)
m_sStrategyImagePath = value
NotifyPropertyChanged(NameOf(sStrategyImagePath))
End Set
End Property
Private m_ParameterList As New ObservableCollection(Of StrategyParameter)
Public Property ParameterList As ObservableCollection(Of StrategyParameter)
Get
Return m_ParameterList
End Get
Set(value As ObservableCollection(Of StrategyParameter))
m_ParameterList = value
NotifyPropertyChanged(NameOf(ParameterList))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(ParentTopology As Topology, JsonStrategy As JsonAvailableStrategy)
m_ParentTopology = ParentTopology
If IsNothing(JsonStrategy) Then Return
m_sStrategyId = JsonStrategy.sStrategyId
ReadConfigurationStrategyJson()
End Sub
#End Region ' Constructor
#Region "METHODS"
''' <summary>
''' Funzione che legge il file json delle strategie
''' </summary>
Friend Sub ReadConfigurationStrategyJson()
' Recupero file StrategyJson
Dim StrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath() & "\" & sStrategyId & "\" & sStrategyId & ".json"
' Controllo se il file esiste
If Not File.Exists(StrategyPath) Then Return
' Leggo il contenuto del file JSON e deserializzo
Dim StrategyJson As String = File.ReadAllText(StrategyPath)
Dim strategyConfig As JsonAvailableStrategy = JsonConvert.DeserializeObject(Of JsonAvailableStrategy)(StrategyJson)
End Sub
Friend Sub ReadConfiguration(ConfigurationStrategy As JsonStrategy)
m_nIndexInList = ConfigurationStrategy.nIndexInList
NotifyPropertyChanged(NameOf(nIndexInList))
For Each Parameter In ConfigurationStrategy.ParameterList
Dim DefaultParameter As StrategyParameter = m_ParameterList.FirstOrDefault(Function(x) x.sName = Parameter.sName)
If IsNothing(DefaultParameter) Then
' verifico indici!!
Else
Select Case DefaultParameter.GetType()
Case GetType(BooleanStrategyParameter)
DirectCast(DefaultParameter, BooleanStrategyParameter).SetValue(Parameter.sValue)
Case GetType(DoubleStrategyParameter)
DirectCast(DefaultParameter, DoubleStrategyParameter).SetValue(Parameter.sValue)
Case GetType(ComboStrategyParameter)
DirectCast(DefaultParameter, ComboStrategyParameter).SetSelValue(Parameter.sValue)
End Select
End If
Next
End Sub
Friend Function Serialize() As JsonStrategy
Dim JsonStrategy As New JsonStrategy(m_sStrategyId, m_nIndexInList)
For Each Parameter In m_ParameterList
JsonStrategy.ParameterList.Add(Parameter.Serialize())
Next
Return JsonStrategy
End Function
#End Region ' Methods
End Class
'----------- Classe che fa riferimento ai parametri delle Strategie -----------
Public MustInherit Class StrategyParameter
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_ParentStrategy As Strategy
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_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
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
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
If IsNothing(JsonGenericParameter) Then Return
m_sName = JsonGenericParameter.sName
m_sNameNge = JsonGenericParameter.sNameNge
m_sDescriptionShort = JsonGenericParameter.sDescriptionShort
m_sDescriptionLong = JsonGenericParameter.sDescriptionLong
m_sMessageId = JsonGenericParameter.sMessageId
m_sMinUserLevel = JsonGenericParameter.sMinUserLevel
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend MustOverride Function Serialize() As JsonStrategyParameter
#End Region ' Methods
End Class
Public Class BooleanStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Friend m_bValue As Boolean = False
Public Property bValue As Boolean
Get
Return m_bValue
End Get
Set(value As Boolean)
m_bValue = value
End Set
End Property
Friend Sub SetValue(bValue As Boolean)
m_bValue = bValue
End Sub
Friend Sub SetValue(sValue As String)
m_bValue = sValue.ToLower() = "true"
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
m_bValue = JsonGenericParameter.sValue.ToLower() = "true"
End Sub
#End Region ' Constructor
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim sValue As String = "false"
If bValue Then
sValue = "true"
End If
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "b")
Return JsonStrategyParameter
End Function
End Class
Public Class DoubleStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_dValue As Double? = Nothing
Public Property sValue As String
Get
Return If(Not IsNothing(m_dValue), DoubleToString(m_dValue, 2), "")
End Get
Set(value As String)
Dim dValue As Double
If String.IsNullOrWhiteSpace(value) Then
m_dValue = Nothing
ElseIf StringToDouble(value, dValue) Then
m_dValue = dValue
Else
NotifyPropertyChanged(NameOf(sValue))
End If
map.refStrategyManagerVM.SetbIsModifyStrategy(True)
End Set
End Property
Friend Sub SetValue(dValue As Double)
m_dValue = dValue
End Sub
Friend Sub SetValue(sValue As String)
Dim dValue As Double
If String.IsNullOrWhiteSpace(sValue) Then
m_dValue = Nothing
ElseIf StringToDouble(sValue, dValue) Then
m_dValue = dValue
Else
NotifyPropertyChanged(NameOf(sValue))
EgtOutLog("Error reading DoubleStrategyParameter " & sValue)
End If
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
If Not StringToDouble(JsonGenericParameter.sValue, m_dValue) Then
EgtOutLog("Error reading DoubleStrategyParameter " & JsonGenericParameter.sValue)
End If
End Sub
#End Region ' Constructor
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "d")
Return JsonStrategyParameter
End Function
End Class
Public Class ComboStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_ComboList As New List(Of ComboParameter)
Public Property ComboList As List(Of ComboParameter)
Get
Return m_ComboList
End Get
Set(value As List(Of ComboParameter))
m_ComboList = value
End Set
End Property
' Seleziona elemento nella combobox Choices
Private m_SelValue As ComboParameter
Public Property SelValue As ComboParameter
Get
Return m_SelValue
End Get
Set(value As ComboParameter)
m_SelValue = value
End Set
End Property
Friend Sub SetSelValue(sValue As String)
m_SelValue = m_ComboList.FirstOrDefault(Function(x) x.sValue = sValue)
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
ComboList = JsonGenericParameter.Choices.Select(Function(jsonChoice) New ComboParameter(jsonChoice)).ToList()
m_SelValue = m_ComboList.FirstOrDefault(Function(x) x.sValue = JsonGenericParameter.sValue)
End Sub
#End Region ' Constructor
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, m_SelValue.sValue, "combo")
Return JsonStrategyParameter
End Function
End Class
'----------- Classe che fa riferimento ai parametri delle Scelte -----------
Public Class ComboParameter
Inherits VMBase
#Region "FIELD & PROPERTIES"
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
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonChoiceParameter As JsonDefaultComboParameter)
If Not IsNothing(JsonChoiceParameter) Then
m_sValue = JsonChoiceParameter.sValue
m_sDescriptionShort = JsonChoiceParameter.sDescriptionShort
m_sDescriptionLong = JsonChoiceParameter.sDescriptionLong
m_sMessageId = JsonChoiceParameter.sMessageId
End If
End Sub
#End Region ' Constructor
End Class
Public Class StrategyTypeToFocusableConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
If TypeOf value IsNot TreeViewItem Then Return True
Select Case DirectCast(value, TreeViewItem).DataContext.GetType()
Case GetType(Topology)
Return True
Case Else ' GetType(StrategyFeature)
Return False
End Select
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class