Imports System.Collections.ObjectModel Imports EgtWPFLib5 Imports Newtonsoft.Json Imports System.IO Imports EgtBEAMWALL.Core Imports EgtUILib Public Class StrategyManagerVM Inherits VMBase #Region "FIELDS & PROPERTIES" #Region "AvailableStrategy" ' Lista che contiene il file json AvailableStrategyList Private m_JsonStrategyFeatureList As New ObservableCollection(Of JsonStrategyFeature) Public Property JsonStrategyFeatureList As ObservableCollection(Of JsonStrategyFeature) Get Return m_JsonStrategyFeatureList End Get Set(value As ObservableCollection(Of JsonStrategyFeature)) m_JsonStrategyFeatureList = value NotifyPropertyChanged(NameOf(JsonStrategyFeatureList)) End Set End Property ' Lista che contiene il file json AvailableStrategyList Private m_AvailableStrategyList As New ObservableCollection(Of StrategyFeature) Public Property AvailableStrategyList As ObservableCollection(Of StrategyFeature) Get Return m_AvailableStrategyList End Get Set(value As ObservableCollection(Of StrategyFeature)) m_AvailableStrategyList = value NotifyPropertyChanged(NameOf(AvailableStrategyList)) End Set End Property #End Region ' AvailableStrategy #Region "DeactivateStrategy" ' Lista che contiene le strategie che vengono rese non attive Private m_DeactivateStrategyList As New ObservableCollection(Of Strategy) Public Property DeactivateStrategyList As ObservableCollection(Of Strategy) Get Return m_DeactivateStrategyList End Get Set(value As ObservableCollection(Of Strategy)) m_DeactivateStrategyList = value NotifyPropertyChanged(NameOf(DeactivateStrategyList)) End Set End Property ' Seleziona l'elemento della lista StrategyList Public m_SelectDeactivateStrategy As Strategy Public Property SelectDeactivateStrategy As Strategy Get Return m_SelectDeactivateStrategy End Get Set(value As Strategy) m_SelectDeactivateStrategy = value m_SelectedStrategyParamList = m_SelectDeactivateStrategy If Not IsNothing(m_SelectDeactivateStrategy) Then GetTypeMode(m_SelectDeactivateStrategy) End If NotifyPropertyChanged(NameOf(SelectDeactivateStrategy)) NotifyPropertyChanged(NameOf(SelectedStrategyParamList)) End Set End Property Friend Sub SetSelectedStrategy(value As Strategy) m_SelectDeactivateStrategy = value m_SelectedStrategyParamList = value NotifyPropertyChanged(NameOf(SelectDeactivateStrategy)) NotifyPropertyChanged(NameOf(SelectedStrategyParamList)) End Sub ' Seleziona l'elemento della lista StrategyList Public m_SelectedStrategyParamList As Strategy Public Property SelectedStrategyParamList As Strategy Get Return m_SelectedStrategyParamList End Get Set(value As Strategy) m_SelectedStrategyParamList = value NotifyPropertyChanged(NameOf(SelectedStrategyParamList)) End Set End Property #End Region ' DeactivateStrategy #Region "CustomerConfiguration" ' Lista che contiene il file json AvailableStrategyList Private m_CustomerConfigurationList As New ObservableCollection(Of StrategyFeature) Public Property CustomerConfigurationList As ObservableCollection(Of StrategyFeature) Get Return m_CustomerConfigurationList End Get Set(value As ObservableCollection(Of StrategyFeature)) m_CustomerConfigurationList = value NotifyPropertyChanged(NameOf(CustomerConfigurationList)) End Set End Property #End Region ' CustomerConfiguration #Region "SelTreeItem" ' 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 ' Riattivo pulsanti moveup e movedown If m_ActiveStrategyList.Count > 0 Then If Not m_MoveUpSelectedStrategyEnable Then SetMoveUpSelectedStrategyVisibility(True) End If If Not m_MoveDownSelectedStrategyEnable Then SetMoveDownSelectedStrategyVisibility(True) End If End If NotifyPropertyChanged(NameOf(SelTreeItem)) End Sub #End Region ' SelTreeItem #Region "ActiveStrategy" ' Lista che contiene le strategie che vengono rese attive Private m_ActiveStrategyList As New ObservableCollection(Of Strategy) Public Property ActiveStrategyList As ObservableCollection(Of Strategy) Get Return m_ActiveStrategyList End Get Set(value As ObservableCollection(Of Strategy)) m_ActiveStrategyList = value NotifyPropertyChanged(NameOf(ActiveStrategyList)) End Set End Property ' Seleziona l'elemento della lista ActiveStrategyList Public m_SelectedActiveStrategy As Strategy Public Property SelectedActiveStrategy As Strategy Get Return m_SelectedActiveStrategy End Get Set(value As Strategy) m_SelectedActiveStrategy = value m_SelectedStrategyParamList = m_SelectedActiveStrategy ' Controllo se selezionato non è nullo If Not IsNothing(m_SelectedActiveStrategy) Then GetTypeMode(m_SelectedActiveStrategy) End If NotifyPropertyChanged(NameOf(SelectedActiveStrategy)) NotifyPropertyChanged(NameOf(SelectedStrategyParamList)) End Set End Property Friend Sub SetSelectedActiveStrategy(value As Strategy) m_SelectedActiveStrategy = value m_SelectedStrategyParamList = value NotifyPropertyChanged(NameOf(SelectedActiveStrategy)) NotifyPropertyChanged(NameOf(SelectedStrategyParamList)) End Sub #End Region ' ActiveStrategy #Region "AISetup" ' Lista dei file json presenti nella cartella AISetUp Private m_sAISetUpList As New ObservableCollection(Of String) Public Property sAISetUpList As ObservableCollection(Of String) Get Return m_sAISetUpList End Get Set(value As ObservableCollection(Of String)) m_sAISetUpList = value NotifyPropertyChanged(NameOf(sAISetUpList)) End Set End Property ' File selezionato dalla lista AISetUpList Private m_sSelectedAISetUp As String Public Property sSelectedAISetUp As String Get Return m_sSelectedAISetUp End Get Set(value As String) m_sSelectedAISetUp = value If Not IsNothing(m_sSelectedAISetUp) Then m_ActiveStrategyList.Clear() m_DeactivateStrategyList.Clear() ReadAvailableStrategyJson(m_sSelectedAISetUp) End If NotifyPropertyChanged(NameOf(sSelectedAISetUp)) End Set End Property #End Region ' AISetup #Region "MoveCommad" ' Rende attivo o disattivo il pulsante moveup Private m_MoveUpSelectedStrategyEnable As Boolean = True Public ReadOnly Property MoveUpSelectedStrategyEnable As Boolean Get Return m_MoveUpSelectedStrategyEnable End Get End Property Friend Sub SetMoveUpSelectedStrategyVisibility(value As Boolean) m_MoveUpSelectedStrategyEnable = value NotifyPropertyChanged(NameOf(MoveUpSelectedStrategyEnable)) End Sub ' Rende attivo o disattivo il pulsante movedown Private m_MoveDownSelectedStrategyEnable As Boolean = True Public ReadOnly Property MoveDownSelectedStrategyEnable As Boolean Get Return m_MoveDownSelectedStrategyEnable End Get End Property Friend Sub SetMoveDownSelectedStrategyVisibility(value As Boolean) m_MoveDownSelectedStrategyEnable = value NotifyPropertyChanged(NameOf(MoveDownSelectedStrategyEnable)) End Sub #End Region ' MoveCommand #Region "ModifyStrategy" ' 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 #End Region ' ModifyStrategy #Region "Messages" Public ReadOnly Property SaveToolTip As String Get Return EgtMsg(30503) End Get End Property Public ReadOnly Property SaveAsToolTip As String Get Return EgtMsg(30504) 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 #End Region ' Field & Properties #Region "CONSTRUCTOR" Sub New() ' Setto riferimento Map.SetRefStrategyManagerVM(Me) ' Recupero i file contenti nella Cartella AISetup m_sAISetUpList = GetFileNamesAISetup(Map.refMainWindowVM.MainWindowM.GetAISetupDirPath()) ' Seleziono il primo file che trovo If m_sAISetUpList.Count > 0 Then m_sSelectedAISetUp = m_sAISetUpList(0) End If ' Leggo file json strategie If Not IsNothing(m_sSelectedAISetUp) Then ReadAvailableStrategyJson(m_sSelectedAISetUp) Else ReadAvailableStrategyJson(CUSTOMERCONFIG_FILE) End If ' Aggiorno elemento selezionato dall'albero Topology.refUpdateSelTreeItem = AddressOf UpdateSelTreeItem End Sub #End Region ' Constructor #Region "METHODS" ''' ''' Funzione che legge il file json AVAILABLESTRATEGYLIST ''' Private Sub ReadAvailableStrategyJson(fileCostumerConfig As String) ' ------------------------------- Carico DefaultConfiguration -------------------------------------------- ' Recupero file AvailableStrategyPathJson Dim AvailableStrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath() & "\" & AVAILABLESTRATEGYLIST_FILE & ".json" ' Controllo se il file esisite If File.Exists(AvailableStrategyPath) Then ' Leggo il contenuto del file JSON Dim AvailableStrategyPathJson As String = File.ReadAllText(AvailableStrategyPath) ' Deserializza il JSON in un oggetto m_JsonStrategyFeatureList = JsonConvert.DeserializeObject(Of ObservableCollection(Of JsonStrategyFeature))(AvailableStrategyPathJson) ' Aggiungo file alla lista m_AvailableStrategyList = New ObservableCollection(Of StrategyFeature)((From JsonStrategyFeature In JsonStrategyFeatureList Select New StrategyFeature(JsonStrategyFeature)).ToList()) ' Leggo tutte le strategie presenti nelle feature For Each AvailableStrategy As StrategyFeature In m_AvailableStrategyList For Each TopologyStrategy As Topology In AvailableStrategy.TopologyList For Each StrategyItem As Strategy In TopologyStrategy.StrategyList ReadConfigurationStrategyJson(StrategyItem) Next Next Next ' Leggo tutte le strategie presenti nelle feature per il file json For Each JsonStrategyFeature As JsonStrategyFeature In m_JsonStrategyFeatureList For Each JsonTopologyStrategy As JsonTopology In JsonStrategyFeature.TopologyList For Each JsonStrategyItem As JsonStrategy In JsonTopologyStrategy.StrategyList ReadConfigurationJsonStrategyJson(JsonStrategyItem) Next Next Next End If ' ------------------------------- Carico CustomConfigJson ------------------------------------------------- ' Recupero percorso file json CustomConfigJson Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath() ' Recupero file json CustomConfigJson Dim sCustomerConfigurationFilePath As String = sAISetupDirPath & "\" & fileCostumerConfig & ".json" ' Controllo se esiste If File.Exists(sCustomerConfigurationFilePath) Then ' Leggo il file json Dim sReadedFile As String = File.ReadAllText(sCustomerConfigurationFilePath) ' Deserializza il JSON in un oggetto m_CustomerConfigurationList = JsonConvert.DeserializeObject(Of ObservableCollection(Of StrategyFeature))(sReadedFile) ' Controllo se le due liste sono uguali If m_AvailableStrategyList.Select(Function(x) x.sName).SequenceEqual(m_CustomerConfigurationList.Select(Function(x) x.sName)) Then 'MessageBox.Show("OK") Else ' Devo aggiornare la lista End If ' Aggiorno la lista m_AvailableStrategyList = m_CustomerConfigurationList End If ' For Each AvailableStrategy As StrategyFeature In m_AvailableStrategyList For Each TopologyStrategy As Topology In AvailableStrategy.TopologyList For Each StrategyItem As Strategy In TopologyStrategy.StrategyList StrategyItem.SetIndexList(StrategyItem.nIndexInList) For Each ParameterItem As GenericParameter In StrategyItem.ParameterList If ParameterItem.sType = "combo" Then If ParameterItem.Choices.Count > 0 Then ParameterItem.SelectedChoice = ParameterItem.Choices.FirstOrDefault(Function(x) x.sValue = ParameterItem.sValue) NotifyPropertyChanged(NameOf(ParameterItem.SelectedChoice)) End If End If Next Next Next Next NotifyPropertyChanged(NameOf(AvailableStrategyList)) End Sub ''' ''' Funzione che legge il file json delle strategie ''' ''' Item delle singole feature Private Sub ReadConfigurationStrategyJson(SelectedStrategyItem As Strategy) ' Recupero file StrategyJson Dim StrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath() & "\" & SelectedStrategyItem.sStrategyID & "\" & SelectedStrategyItem.sStrategyID & ".json" ' Controllo se il file esiste If File.Exists(StrategyPath) Then ' Leggo il contenuto del file JSON Dim StrategyJson As String = File.ReadAllText(StrategyPath) ' Deserializza il JSON in un oggetto Dim strategyConfig As JsonStrategy = JsonConvert.DeserializeObject(Of JsonStrategy)(StrategyJson) ' Assegno ParamList per poter visualizzarla da interfaccia SelectedStrategyItem.ParameterList = New ObservableCollection(Of GenericParameter)((From Parameter In strategyConfig.ParameterList Select New GenericParameter(Parameter)).ToList()) End If End Sub ''' ''' Funzione che legge il file json delle strategie ''' ''' Private Sub ReadConfigurationJsonStrategyJson(SelectedStrategyItem As JsonStrategy) ' Recupero file StrategyJson Dim StrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath() & "\" & SelectedStrategyItem.sStrategyID & "\" & SelectedStrategyItem.sStrategyID & ".json" ' Controllo se il file esiste If File.Exists(StrategyPath) Then ' Leggo il contenuto del file JSON Dim StrategyJson As String = File.ReadAllText(StrategyPath) ' Deserializza il JSON in un oggetto Dim strategyConfig As JsonStrategy = JsonConvert.DeserializeObject(Of JsonStrategy)(StrategyJson) ' Assegno ParamList per poter visualizzarla da interfaccia SelectedStrategyItem.ParameterList = strategyConfig.ParameterList End If End Sub ''' ''' Funzione per creare file json ''' Friend Sub CreateCustumerConfigJsonFile(fileCostumerConfig As String) m_JsonStrategyFeatureList = New ObservableCollection(Of JsonStrategyFeature)(m_AvailableStrategyList.Select(Function(x) ConvertToJsonStrategy(x))) ' 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) End Sub ''' ''' Funzione per convertire da AvailableStrategy a JsonAvailableStrategy ''' ''' ''' Private Function ConvertToJsonStrategy(availableStrategy As StrategyFeature) As JsonStrategyFeature Return New JsonStrategyFeature With { .sName = availableStrategy.sName, .nPRC = availableStrategy.nPRC, .nGRP = availableStrategy.nGRP, .TopologyList = New ObservableCollection(Of JsonTopology)(availableStrategy.TopologyList.Select(Function(x) ConvertToJsonTopology(x)))} 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(Function(x) ConvertToJsonStrategyConfiguration(x))) } End Function ''' ''' Funzione per convertire da StrategyConfiguration a JsonStrategyConfiguration ''' ''' ''' Private Function ConvertToJsonStrategyConfiguration(strategyConfiguration As Strategy) As JsonStrategy Return New JsonStrategy With { .sStrategyID = strategyConfiguration.sStrategyID, .nIndexInList = strategyConfiguration.nIndexInList, .bActive = strategyConfiguration.bActive, .ParameterList = New ObservableCollection(Of JsonGenericParameter)(strategyConfiguration.ParameterList.Select(Function(x) ConvertToJsonParameter(x)))} 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(Function(x) ConvertToJsonChoiceParameter(x)))} 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 permette di scegliere se il tipo è una checkbox, testo o combobox ''' Private Sub GetTypeMode(SelectedStrategy As Strategy) For Each ParamItem As GenericParameter In SelectedStrategy.ParameterList ' Controllo se il tipo è un booleano Select Case ParamItem.sType Case "b" ' Se si setto SelTypeValue per visualizzare la checkbox ParamItem.SelTypeValue = 1 ' Converto il parametro in un booleano ParamItem.sValue = If(ParamItem.sValue = "1", "True", "False") Boolean.Parse(ParamItem.sValue) Case "combo" ' Se si setto SelTypeValue per visualizzare la combobox ParamItem.SelTypeValue = 2 End Select Next End Sub ''' ''' Funzione che restituisce la lista dei file contenuti nella cartella AISetup ''' ''' Percorso AISetup ''' Private Function GetFileNamesAISetup(AISetupPath As String) As ObservableCollection(Of String) Dim AISetupFilesList As New ObservableCollection(Of String) ' Controlla se la cartella esiste If Directory.Exists(AISetupPath) Then ' Ottieni tutti i file nella cartella Dim AISetupFiles As String() = Directory.GetFiles(AISetupPath) ' Rimuovi l'estensione e aggiungi alla lista For Each AISetupFile In AISetupFiles AISetupFilesList.Add(Path.GetFileNameWithoutExtension(AISetupFile)) Next Else EgtOutLog("La cartella specificata non esiste.") End If Return AISetupFilesList End Function #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 non è nullo If Not IsNothing(m_SelectDeactivateStrategy) Then ' Setto a true booleano per modifica SetbIsModifyStrategy(True) ' Aggiungo a ActiveStrategyList strategia selezionata m_ActiveStrategyList.Add(m_SelectDeactivateStrategy) ' Setto indice per capire che la strategia è stata spostata in ActiveStrategyList m_SelectDeactivateStrategy.SetIndexList(m_ActiveStrategyList.Count - 1) ' Rimuovo da StrategyList la strategia precedentemente selezionata m_DeactivateStrategyList.Remove(m_SelectDeactivateStrategy) ' metto il SelectedStrategy della lista DeactivateStrategyList a nullo SetSelectedStrategy(Nothing) ' seleziono l'ultimo elemento inserito SetSelectedActiveStrategy(m_ActiveStrategyList.Last()) NotifyPropertyChanged(NameOf(ActiveStrategyList)) NotifyPropertyChanged(NameOf(DeactivateStrategyList)) End If 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 non è nullo If Not IsNothing(m_SelectedActiveStrategy) Then ' Aggiungo a ActiveStrategyList strategia selezionata m_DeactivateStrategyList.Add(m_SelectedActiveStrategy) ' Setto indice per capire che la strategia è stata spostata in StrategyList m_SelectedActiveStrategy.SetIndexList(-1) ' Rimuovo da StrategyList la strategia precedentemente selezionata m_ActiveStrategyList.Remove(m_SelectedActiveStrategy) ' metto il SelectedStrategy della lista DeactivateStrategyList a nullo SetSelectedActiveStrategy(Nothing) ' seleziono l'ultimo elemento inserito SetSelectedStrategy(m_DeactivateStrategyList.Last()) NotifyPropertyChanged(NameOf(ActiveStrategyList)) NotifyPropertyChanged(NameOf(DeactivateStrategyList)) End If 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() ' Controllo se il file selezionato esiste If Not IsNothing(m_sSelectedAISetUp) Then ' Se si creo nuovo file json con il selezionato CreateCustumerConfigJsonFile(m_sSelectedAISetUp) ' Setto il booleano a false SetbIsModifyStrategy(False) Else ' Se no do nome di default CustomerConfig CreateCustumerConfigJsonFile(CUSTOMERCONFIG_FILE) End If 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 non è nullo If Not IsNothing(m_SelectedActiveStrategy) Then ' Recupero indice elemento selezionato in lista Dim IndexActiveStrategy As Integer = m_ActiveStrategyList.IndexOf(m_ActiveStrategyList.FirstOrDefault(Function(x) x.sStrategyID = m_SelectedActiveStrategy.sStrategyID)) Dim NewIndexActiveStrategy As Integer = IndexActiveStrategy - 1 ' Se l'indice è maggiore di 0 If IndexActiveStrategy > 0 Then ' Riattivo pulsante movedown If Not m_MoveDownSelectedStrategyEnable Then SetMoveDownSelectedStrategyVisibility(True) End If ' Muovo l'elemento selezionato sopra di 1 m_ActiveStrategyList.Move(IndexActiveStrategy, NewIndexActiveStrategy) ' Se l'indice è 0 If NewIndexActiveStrategy = 0 Then ' Disabilito pulsante moveup SetMoveUpSelectedStrategyVisibility(False) End If End If Else ' Se SelectedActiveStrategy è nullo esco Return End If NotifyPropertyChanged(NameOf(ActiveStrategyList)) 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() ' Controllo se SelectedActiveStrategy non è nullo If Not IsNothing(m_SelectedActiveStrategy) Then ' Recupero indice elemento selezionato in lista Dim IndexActiveStrategy As Integer = m_ActiveStrategyList.IndexOf(m_ActiveStrategyList.FirstOrDefault(Function(x) x.sStrategyID = m_SelectedActiveStrategy.sStrategyID)) Dim NewIndexActiveStrategy As Integer = IndexActiveStrategy + 1 ' Se l'indice è maggiore di 0 If IndexActiveStrategy >= 0 Then ' Riattivo pulsante moveup If Not m_MoveUpSelectedStrategyEnable Then SetMoveUpSelectedStrategyVisibility(True) End If ' Muovo l'elemento selezionato sotto di 1 m_ActiveStrategyList.Move(IndexActiveStrategy, NewIndexActiveStrategy) ' Se l'indice è 0 If NewIndexActiveStrategy = m_ActiveStrategyList.Count - 1 Then ' Disabilito pulsante movedown SetMoveDownSelectedStrategyVisibility(False) End If End If Else ' Se SelectedActiveStrategy è nullo esco Return End If NotifyPropertyChanged(NameOf(ActiveStrategyList)) End Sub #End Region ' MoveDownSelectedStrategyCommand #End Region ' Commands 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 Not IsNothing(JsonStrategyFeature) Then m_sName = JsonStrategyFeature.sName m_nPRC = JsonStrategyFeature.nPRC m_nGRP = JsonStrategyFeature.nGRP m_TopologyList = New ObservableCollection(Of Topology)((From JsonTopology In JsonStrategyFeature.TopologyList Select New Topology(JsonTopology)).ToList()) End If 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 ' Inserito per evitare di scriverlo nella creazione del file json CustomerConfig Public Property IsSelected As Boolean Get Return m_bIsSelected End Get Set(value As Boolean) Map.refStrategyManagerVM.ActiveStrategyList.Clear() Map.refStrategyManagerVM.DeactivateStrategyList.Clear() m_bIsSelected = value refUpdateSelTreeItem(Me) For Each ItemStrategy As Strategy In Me.StrategyList If ItemStrategy.bActive Then Map.refStrategyManagerVM.ActiveStrategyList.Add(ItemStrategy) Else Map.refStrategyManagerVM.DeactivateStrategyList.Add(ItemStrategy) End If Next NotifyPropertyChanged(NameOf(IsSelected)) End Set End Property ' Seleziona l'elemento della lista StrategyList Public m_SelectedStrategy As Strategy Public Property SelectedStrategy As Strategy Get Return m_SelectedStrategy End Get Set(value As Strategy) m_SelectedStrategy = value NotifyPropertyChanged(NameOf(SelectedStrategy)) End Set 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 #End Region ' Fields & Propeties #Region "CONSTRUCTOR" Sub New(JsonTopology As JsonTopology) If Not IsNothing(JsonTopology) Then m_sName = JsonTopology.sName m_StrategyList = New ObservableCollection(Of Strategy)((From JsonStrategy In JsonTopology.StrategyList Select New Strategy(Me, JsonStrategy)).ToList()) End If NotifyPropertyChanged(NameOf(StrategyList)) End Sub #End Region ' Constructor 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 = "C:\EgtData\EgtBEAMWALL\NO_XYJog.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 Not IsNothing(JsonStrategy) Then m_sStrategyID = JsonStrategy.sStrategyID m_nIndexInList = JsonStrategy.nIndexInList m_bActive = JsonStrategy.bActive m_ParameterList = New ObservableCollection(Of GenericParameter)((From JsonParameter In JsonStrategy.ParameterList Select New GenericParameter(JsonParameter)).ToList()) End If NotifyPropertyChanged(NameOf(ParameterList)) End Sub #End Region ' Constructor #Region "METHODS" Friend Sub ReadConfiguration(ConfigurationStrategy As JsonStrategy) m_nIndexInList = ConfigurationStrategy.nIndexInList NotifyPropertyChanged(NameOf(nIndexInList)) End Sub #End Region ' Methods 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 Not IsNothing(JsonGenericParameter) Then 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)((From JsonChoice In JsonGenericParameter.Choices Select New ChoiceParameter(JsonChoice)).ToList()) End If NotifyPropertyChanged(NameOf(Choices)) End Sub #End Region ' Constructor End Class 'Public Class ComboBoxParam ' Inherits GenericParameter '#Region "FIELDS & PROPERTIES" ' 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 '#End Region ' Fiels & Properties '#Region "CONSTRUCTOR" ' Public Sub New(JsonGenericParameter As JsonGenericParameter) ' MyBase.New(JsonGenericParameter) ' m_Choices = New ObservableCollection(Of ChoiceParameter)((From JsonChoice In JsonGenericParameter.Choices ' Select New ChoiceParameter(JsonChoice)).ToList()) ' 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