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
'''
''' Funzione che aggiorna la selezione dell'elemento dell'albero
'''
''' Elemento dell'albero
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
#End Region ' Messages
' Definizione Comandi
Private m_AddSelectedStrategyCommand As ICommand
Private m_RemoveSelectedStrategyCommand 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"
'''
''' Funzione per creare file json
'''
Friend Sub CreateCustumerConfigJsonFile(fileCostumerConfig As String)
Try
Dim m_JsonStrategyFeatureList As New ObservableCollection(Of JsonStrategyFeature)(m_SelStrategySetup.StrategyFeatureList.Select(AddressOf ConvertToJsonStrategy))
' Serializzazione in JSON
Dim AvailableStrategyListjsonFile As String = JsonConvert.SerializeObject(m_JsonStrategyFeatureList, Formatting.Indented)
' Scrittura su file
File.WriteAllText(Map.refMainWindowVM.MainWindowM.GetAISetupDirPath() & "\" & fileCostumerConfig & ".json", AvailableStrategyListjsonFile)
Catch ex As Exception
EgtOutLog("Errore durante la creazione del file JSON: " & ex.Message)
End Try
End Sub
'''
''' Funzione per convertire da AvailableStrategy a JsonAvailableStrategy
'''
'''
'''
Private Function ConvertToJsonStrategy(StrategyFeature As StrategyFeature) As JsonStrategyFeature
Return New JsonStrategyFeature With {
.sName = StrategyFeature.sName,
.nPRC = StrategyFeature.nPRC,
.nGRP = StrategyFeature.nGRP,
.TopologyList = New ObservableCollection(Of JsonTopology)(StrategyFeature.TopologyList.Select(AddressOf ConvertToJsonTopology))}
End Function
'''
''' Funzione per convertire da Topology a JsonTopology
'''
'''
'''
Private Function ConvertToJsonTopology(Topology As Topology) As JsonTopology
Return New JsonTopology With {
.sName = Topology.sName,
.StrategyList = New ObservableCollection(Of JsonStrategy)(Topology.StrategyList.Select(AddressOf ConvertToJsonStrategyConfiguration))
}
End Function
'''
''' Funzione per convertire da StrategyConfiguration a JsonStrategyConfiguration
'''
'''
'''
Private Function ConvertToJsonStrategyConfiguration(Strategy As Strategy) As JsonStrategy
Return New JsonStrategy With {
.sStrategyID = Strategy.sStrategyID,
.nIndexInList = Strategy.nIndexInList,
.bActive = Strategy.bActive,
.ParameterList = New ObservableCollection(Of JsonGenericParameter)(Strategy.ParameterList.Select(AddressOf ConvertToJsonParameter))}
End Function
'''
''' Funzione per convertire da GenericParameter a JsonGenericParameter
'''
'''
'''
Private Function ConvertToJsonParameter(GenericParameter As GenericParameter) As JsonGenericParameter
Return New JsonGenericParameter With {
.sName = GenericParameter.sName,
.sNameNge = GenericParameter.sNameNge,
.sValue = GenericParameter.sValue,
.sDescriptionShort = GenericParameter.sDescriptionShort,
.sDescriptionLong = GenericParameter.sDescriptionLong,
.sType = GenericParameter.sType,
.sMessageId = GenericParameter.sMessageId,
.sMinUserLevel = GenericParameter.sMinUserLevel,
.Choices = New ObservableCollection(Of JsonChoiceParameter)(GenericParameter.Choices.Select(AddressOf ConvertToJsonChoiceParameter))}
End Function
'''
''' Funzione per convertire da ChoicesParameter a JsonChoicesParameter
'''
'''
'''
Private Function ConvertToJsonChoiceParameter(ChoiceParameter As ChoiceParameter) As JsonChoiceParameter
Return New JsonChoiceParameter With {
.sValue = ChoiceParameter.sValue,
.sDescriptionShort = ChoiceParameter.sDescriptionShort,
.sDescriptionLong = ChoiceParameter.sDescriptionLong,
.sMessageId = ChoiceParameter.sMessageId}
End Function
'''
''' Funzione che salva il file CustomConfig Json
'''
Private Sub SaveJson()
' Determina il nome del file JSON
Dim fileCustomerConfigJson As String = If(Not IsNothing(m_SelStrategySetup), CUSTOMERCONFIG_FILE, m_SelStrategySetup.sName)
' Se l'elemento selezionato è vuoto assegno il default e lo aggiungo alla lista
If IsNothing(m_SelStrategySetup) Then
m_SelStrategySetup.sName = CUSTOMERCONFIG_FILE
m_StrategySetupList.Add(m_SelStrategySetup)
NotifyPropertyChanged(NameOf(SelStrategySetup.sName))
NotifyPropertyChanged(NameOf(StrategySetupList))
End If
' Crea il file JSON
CreateCustumerConfigJsonFile(fileCustomerConfigJson)
' Se un file è stato selezionato, resetta il flag di modifica
SetbIsModifyStrategy(False)
End Sub
'''
''' Funzione che salva il file customconfig se sono presenti modifiche
'''
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
SaveJson()
End If
End Sub
'''
''' Funzione che recupera le strategie filtrate
'''
Friend Sub GetStrategyProduction()
' Pulisco la lista
m_StrategyProductionList.Clear()
' Recupero Feature selezionata
Dim selFeature As BTLFeatureVM = Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM
' Popolo la lista con le strategie
Dim AvailableStrategyItem As StrategyFeature = m_SelStrategySetup.StrategyFeatureList.FirstOrDefault(Function(AvailableStrategy) selFeature.nPRC = AvailableStrategy.nPRC AndAlso selFeature.nSelGRP = AvailableStrategy.nGRP)
' Controllo se AvailableStrategyItem non è nullo
If Not IsNothing(AvailableStrategyItem) Then
' Se esiste, popola la lista con le strategie
m_StrategyProductionList = New ObservableCollection(Of Strategy)(AvailableStrategyItem.TopologyList.SelectMany(Function(topology) topology.StrategyList))
End If
NotifyPropertyChanged(NameOf(StrategyProductionList))
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
'''
''' Funzione che permette di aggiungere la strategia da StrategyList a ActiveStrategyList
'''
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.SetIndexList(m_SelTreeItem.StrategyList.Count - 1)
' 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
'''
''' Funzione che rimuove la strategia da ActiveStrategyList e la riaggiunge a StrategyList
'''
Public Sub RemoveSelectedStrategyToActiveStrategy()
' Controllo se SelectedActiveStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Setto indice per capire che la strategia è stata spostata in StrategyList
m_SelTreeItem.SelActiveStrategy.SetIndexList(-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
'''
''' Funzione che visualizza la textbox
'''
Public Sub OpenFileNameCustomConfig()
Dim SaveAsStrategyWnd As New SaveAsStrategyV With {
.DataContext = New SaveAsStrategyVM,
.Owner = Application.Current.MainWindow
}
SaveAsStrategyWnd.ShowDialog()
End Sub
#End Region ' OpenFileNameCustomConfigCommand
#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
'''
''' Funzione che salva il file json CustomerConfig
'''
Public Sub Save()
SaveJson()
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
'''
''' Funzione che permette di spostare in alto la strategia selezionata
'''
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
' Aggiorno la lista
m_SelTreeItem.ActiveStrategyList_View.MoveCurrentToNext()
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
'''
''' Funzione che permette di spostare in basso la strategia selezionata
'''
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
' 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 JsonStrategyFeature) = JsonConvert.DeserializeObject(Of List(Of JsonStrategyFeature))(sReadedFile)
m_StrategyFeatureList = New ObservableCollection(Of StrategyFeature)((From JsonStrategyFeature In JsonStrategyFeatureList
Select New StrategyFeature(JsonStrategyFeature)).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??'
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 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
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
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New(JsonStrategyFeature As JsonStrategyFeature)
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
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(JsonTopology As JsonTopology)
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
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
'----------- 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_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
If nIndexInList > -1 Then
m_bActive = True
Else
m_bActive = False
End If
NotifyPropertyChanged(NameOf(nIndexInList))
NotifyPropertyChanged(NameOf(bActive))
End Sub
Private m_bActive As Boolean
Public ReadOnly Property bActive As Boolean
Get
Return m_bActive
End Get
End Property
Private m_sImageStrategy As String = "pack://application:,,,/Resources/NewPage/LogoProvaStrategy.png"
Public Property sImageStrategy As String
Get
Return m_sImageStrategy
End Get
Set(value As String)
m_sImageStrategy = value
NotifyPropertyChanged(NameOf(sImageStrategy))
End Set
End Property
Private m_ParameterList As New ObservableCollection(Of GenericParameter)
Public Property ParameterList As ObservableCollection(Of GenericParameter)
Get
Return m_ParameterList
End Get
Set(value As ObservableCollection(Of GenericParameter))
m_ParameterList = value
NotifyPropertyChanged(NameOf(ParameterList))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New(ParentTopology As Topology, JsonStrategy As JsonStrategy)
m_ParentTopology = ParentTopology
If IsNothing(JsonStrategy) Then Return
m_sStrategyID = JsonStrategy.sStrategyID
m_nIndexInList = JsonStrategy.nIndexInList
m_bActive = JsonStrategy.bActive
ReadConfigurationStrategyJson()
'NotifyPropertyChanged(NameOf(ParameterList))
End Sub
#End Region ' Constructor
'''
''' Funzione che legge il file json delle strategie
'''
Private 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 JsonStrategy = JsonConvert.DeserializeObject(Of JsonStrategy)(StrategyJson)
' Assegno ParamList per poter visualizzarla da interfaccia econtrollo di che tipo è se Strategy o JsonStrategy
m_ParameterList = New ObservableCollection(Of GenericParameter)(strategyConfig.ParameterList.Select(Function(p) New GenericParameter(p)).ToList())
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))
For Each Parameter In ConfigurationStrategy.ParameterList
Dim DefaultParameter As GenericParameter = m_ParameterList.FirstOrDefault(Function(x) x.sNameNge = Parameter.sNameNge)
If IsNothing(DefaultParameter) Then
m_ParameterList.Add(New GenericParameter(Parameter))
' verifico indici!!
Else
DefaultParameter.sValue = Parameter.sValue
End If
Next
End Sub
End Class
'----------- Classe che fa riferimento ai parametri delle Strategie -----------
Public Class GenericParameter
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
Friend 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_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 ChoiceParameter)
Public Property Choices As ObservableCollection(Of ChoiceParameter)
Get
Return m_Choices
End Get
Set(value As ObservableCollection(Of ChoiceParameter))
m_Choices = value
NotifyPropertyChanged(NameOf(Choices))
End Set
End Property
' Seleziona elemento nella combobox Choices
Public m_SelectedChoice As ChoiceParameter
Public Property SelectedChoice As ChoiceParameter
Get
Return m_SelectedChoice
End Get
Set(value As ChoiceParameter)
m_SelectedChoice = value
If Not IsNothing(m_SelectedChoice) Then
m_sValue = m_SelectedChoice.sValue
End If
NotifyPropertyChanged(NameOf(SelectedChoice))
NotifyPropertyChanged(NameOf(sValue))
End Set
End Property
Friend m_SelTypeValue As Integer = 0
Public Property SelTypeValue As Integer
Get
Return m_SelTypeValue
End Get
Set(value As Integer)
m_SelTypeValue = value
NotifyPropertyChanged(NameOf(SelTypeValue))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New(JsonGenericParameter As JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
m_sName = JsonGenericParameter.sName
m_sNameNge = JsonGenericParameter.sNameNge
m_sValue = JsonGenericParameter.sValue
m_sDescriptionShort = JsonGenericParameter.sDescriptionShort
m_sDescriptionLong = JsonGenericParameter.sDescriptionLong
m_sType = JsonGenericParameter.sType
m_sMessageId = JsonGenericParameter.sMessageId
m_sMinUserLevel = JsonGenericParameter.sMinUserLevel
m_Choices = New ObservableCollection(Of ChoiceParameter)(JsonGenericParameter.Choices.Select(Function(jsonChoice) New ChoiceParameter(jsonChoice)))
NotifyPropertyChanged(NameOf(Choices))
End Sub
#End Region ' Constructor
End Class
'----------- Classe che fa riferimento ai parametri delle Scelte -----------
Public Class ChoiceParameter
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(JsonChoiceParameter As JsonChoiceParameter)
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
'----------- Classe che fa riferimento alle Feature del file Json -----------
Public Class JsonStrategyFeature
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 JsonTopology)
Public Property TopologyList As ObservableCollection(Of JsonTopology)
Get
Return m_TopologyList
End Get
Set(value As ObservableCollection(Of JsonTopology))
m_TopologyList = value
NotifyPropertyChanged(NameOf(TopologyList))
End Set
End Property
#End Region ' Fields & Propeties
End Class
'----------- Classe che fa riferimento alle Topologie delle Feature del file Json -----------
Public Class JsonTopology
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 JsonStrategy)
Public Property StrategyList As ObservableCollection(Of JsonStrategy)
Get
Return m_StrategyList
End Get
Set(value As ObservableCollection(Of JsonStrategy))
m_StrategyList = value
NotifyPropertyChanged(NameOf(StrategyList))
End Set
End Property
#End Region ' Fields & Propeties
End Class
'----------- Classe che fa alle Strategie delle Topologie delle Feature del file Json -----------
Public Class JsonStrategy
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
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
Private m_bActive As Boolean
Public Property bActive As Boolean
Get
Return m_bActive
End Get
Set(value As Boolean)
m_bActive = value
NotifyPropertyChanged(NameOf(bActive))
End Set
End Property
Private m_ParameterList As New ObservableCollection(Of JsonGenericParameter)
Public Property ParameterList As ObservableCollection(Of JsonGenericParameter)
Get
Return m_ParameterList
End Get
Set(value As ObservableCollection(Of JsonGenericParameter))
m_ParameterList = value
NotifyPropertyChanged(NameOf(ParameterList))
End Set
End Property
#End Region ' Fields & Propeties
End Class
'----------- Classe che fa riferimento ai parametri delle Strategie nel file Json -----------
Public Class JsonGenericParameter
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_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 JsonChoiceParameter)
Public Property Choices As ObservableCollection(Of JsonChoiceParameter)
Get
Return m_Choices
End Get
Set(value As ObservableCollection(Of JsonChoiceParameter))
m_Choices = value
NotifyPropertyChanged(NameOf(Choices))
End Set
End Property
#End Region ' Fields & Propeties
End Class
'----------- Classe che fa riferimento ai parametri delle Scelte nel file Json -----------
Public Class JsonChoiceParameter
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
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