Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.Globalization
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5
Imports Newtonsoft.Json
Public Class StrategyManagerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private m_StrategyTypeList As New List(Of IdNameStruct)({New IdNameStruct(BWType.BEAM, "Beam"), New IdNameStruct(BWType.WALL, "Wall")})
Public ReadOnly Property StrategyTypeList As List(Of IdNameStruct)
Get
Return m_StrategyTypeList
End Get
End Property
Private m_SelStrategyType As IdNameStruct
Public Property SelStrategyType As IdNameStruct
Get
Return m_SelStrategyType
End Get
Set(value As IdNameStruct)
m_SelStrategyType = value
' deseleziono eventuale strategia selezionata
If Not IsNothing(m_SelTreeItem) Then
m_SelTreeItem.IsSelected = False
'SelTreeItem = Nothing
End If
End Set
End Property
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)
' deseleziono eventuale strategia precedentemente selezionata
If Not IsNothing(m_SelTreeItem) Then
m_SelTreeItem.IsSelected = False
'SelTreeItem = Nothing
End If
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
Public ReadOnly Property StrategyType_Visibility As Visibility
Get
Return If(CurrentMachine.nType = MachineType.BOTH, Visibility.Visible, Visibility.Collapsed)
End Get
End Property
Private m_StrategyManager_Visibility As Visibility = Visibility.Collapsed
Public ReadOnly Property StrategyManager_Visibility As Visibility
Get
Return m_StrategyManager_Visibility
End Get
End Property
Friend Sub SetStrategyManager_Visibility(value As Visibility)
m_StrategyManager_Visibility = value
NotifyPropertyChanged(NameOf(StrategyManager_Visibility))
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_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)
'' imposto Type a primo della lista per default
'Select Case CurrentMachine.nType
' Case MachineType.BEAM
' m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.BEAM)
' Case MachineType.WALL
' m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.WALL)
' Case MachineType.BOTH
' m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.BEAM)
'End Select
'NotifyPropertyChanged(NameOf(StrategyType_Visibility))
' Assegno riferimento funzione per aggiornare elemento selezionato dall'albero
Topology.refUpdateSelTreeItem = AddressOf UpdateSelTreeItem
'' aggiorno liste
'Update()
End Sub
#End Region ' Constructor
#Region "METHODS"
'''
''' 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
m_SelStrategySetup.Write()
End If
End Sub
Friend Sub Update()
' imposto Type a primo della lista per default
Select Case Map.refMachinePanelVM.SelectedMachine.nType
Case MachineType.BEAM
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.BEAM)
Case MachineType.WALL
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.WALL)
Case MachineType.BOTH
If Not IsNothing(ProjectManagerVM.CurrProd) Then
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = ProjectManagerVM.CurrProd.nType)
Else
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.BEAM)
End If
End Select
NotifyPropertyChanged(NameOf(StrategyType_Visibility))
' leggo cartella dei setup delle strategie
Dim AISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath(SelStrategyType.Id, False)
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
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.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
'''
''' 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 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
'''
''' Funzione che visualizza la textbox
'''
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
'''
''' Funzione apre un nuovo il file json CustomerConfig
'''
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
'''
''' Funzione che salva il file json CustomerConfig
'''
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
'''
''' 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
' 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
'''
''' 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
' 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(Map.refStrategyManagerVM.SelStrategyType.Id)
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(Map.refStrategyManagerVM.SelStrategyType.Id)).ToList())
End If
' carico custom
Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath(Map.refStrategyManagerVM.SelStrategyType.Id, False)
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(Map.refStrategyManagerVM.SelStrategyType.Id, False)
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
If value Then
refUpdateSelTreeItem(Me)
Else
SelActiveStrategy = Nothing
SelAvailableStrategy = Nothing
m_StrategyList.Clear()
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(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_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(JsonStrategy As JsonAvailableStrategy)
If IsNothing(JsonStrategy) Then Return
m_sStrategyId = JsonStrategy.sStrategyId
ReadConfigurationStrategyJson()
End Sub
#End Region ' Constructor
#Region "METHODS"
'''
''' Funzione che legge il file json delle strategie
'''
Friend Sub ReadConfigurationStrategyJson()
' Recupero file StrategyJson
Dim StrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath(Map.refStrategyManagerVM.SelStrategyType.Id) & "\" & 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)
Case GetType(StringStrategyParameter)
DirectCast(DefaultParameter, StringStrategyParameter).SetValue(Parameter.sValue)
Case GetType(ListStrategyParameter)
DirectCast(DefaultParameter, ListStrategyParameter).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_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_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_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_sSubType = JsonGenericParameter.sSubType
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
#Region "METHODS"
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", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""))
Return JsonStrategyParameter
End Function
#End Region ' Methods
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
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "d", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""))
Return JsonStrategyParameter
End Function
#End Region ' Methods
End Class
Public Class StringStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_sValue As String = String.Empty
Public Property sValue As String
Get
Return m_sValue
End Get
Set(value As String)
m_sValue = Nothing
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
End Set
End Property
Friend Sub SetValue(dValue As String)
m_sValue = dValue
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_sValue) Then
EgtOutLog("Error reading StringStrategyParameter " & JsonGenericParameter.sValue)
End If
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "s", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""))
Return JsonStrategyParameter
End Function
#End Region ' Methods
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
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, m_SelValue.sValue, "combo", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""))
Return JsonStrategyParameter
End Function
#End Region ' Methods
End Class
Public Class ListStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_ListValue As New List(Of ToolParameter)
Public Property ListValue As List(Of ToolParameter)
Get
Return m_ListValue
End Get
Set(value As List(Of ToolParameter))
m_ListValue = value
End Set
End Property
Private m_SelValue As ToolParameter
Public Property SelValue As ToolParameter
Get
Return m_SelValue
End Get
Set(value As ToolParameter)
m_SelValue = value
NotifyPropertyChanged(NameOf(SelValue))
End Set
End Property
Friend Sub SetSelValue(sValue As String)
Dim sTrimValue As String = sValue.TrimEnd(";"c)
Dim sTmpValue As String() = sTrimValue.Split(";"c)
Dim sSplitValue As String()
For Each ItemValue As String In sTmpValue
sSplitValue = ItemValue.Split(","c)
For Each ItemTool As ToolParameter In m_ListValue
If sSplitValue(0) = ItemTool.sUUID AndAlso sSplitValue(1) = ItemTool.sName Then
ItemTool.bIsActive = True
End If
Next
Next
End Sub
' Definizione comandi
Private m_cmdDeselectAll As ICommand
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sSubType As String)
' Recupero lista utensili per sottotipo
Dim nSubType As Integer = 0
Dim nType As Integer = 0
Dim sName As String = String.Empty
Dim sUUID As String = String.Empty
Dim sInfo As String = String.Empty
StringToInt(sSubType, nSubType)
Dim bNext As Boolean = EgtTdbGetFirstTool(nSubType, sName, nType)
While bNext
EgtTdbSetCurrTool(sName)
EgtTdbGetCurrToolParam(MCH_TP.UUID, sUUID)
m_ListValue.Add(New ToolParameter(sUUID, sName))
bNext = EgtTdbGetNextTool(nSubType, sName, nType)
End While
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim sInfo As String = String.Empty
If Not IsNothing(sSubType) Then
For Each ItemTool As ToolParameter In m_ListValue
If ItemTool.bIsActive Then
sInfo &= ItemTool.sUUID & "," & ItemTool.sName & ";"
End If
Next
End If
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sInfo, "tool", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""))
Return JsonStrategyParameter
End Function
#End Region ' Methods
#Region "COMMANDS"
#Region "DeselectAllCommand"
Public ReadOnly Property DeselectAllCommand As ICommand
Get
If m_cmdDeselectAll Is Nothing Then
m_cmdDeselectAll = New Command(AddressOf DeselectAll)
End If
Return m_cmdDeselectAll
End Get
End Property
Friend Sub DeselectAll()
If Not IsNothing(sSubType) Then
For Each ItemTool As ToolParameter In m_ListValue
ItemTool.bIsActive = False
Next
End If
End Sub
#End Region ' DeselectAllCommand
#End Region ' Commands
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 ToolParameter
Inherits VMBase
#Region "FIELD & PROPERTIES"
Private m_bIsActive As Boolean
Public Property bIsActive As Boolean
Get
Return m_bIsActive
End Get
Set(value As Boolean)
m_bIsActive = value
NotifyPropertyChanged(NameOf(bIsActive))
End Set
End Property
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_sUUID As String
Public Property sUUID As String
Get
Return m_sUUID
End Get
Set(value As String)
m_sUUID = value
NotifyPropertyChanged(NameOf(sUUID))
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sUUID As String, sName As String)
m_sUUID = sUUID
m_sName = sName
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