Imports System.Collections.ObjectModel Imports System.IO Imports EgtWPFLib5 Imports Newtonsoft.Json Imports EgtBEAMWALL.Core Imports EgtUILib Public Class ForcedStrategyPanelVM Inherits VMBase Public Const AUTOMATICSTRATEGYID As String = "AUTOMATIC" Private m_StrategyList As New ObservableCollection(Of Strategy) Public Property StrategyList As ObservableCollection(Of Strategy) Get Return m_StrategyList End Get Set(value As ObservableCollection(Of Strategy)) m_StrategyList = value End Set End Property Private m_SelStrategy As Strategy Public Property SelStrategy As Strategy Get Return m_SelStrategy End Get Set(value As Strategy) m_SelStrategy = value NotifyPropertyChanged(NameOf(SelStrategy)) End Set End Property Private m_CurrentFeature As BTLFeatureM ' Definizione Comandi Private m_cmdOk As ICommand Private m_cmdCancel As ICommand Sub New() Map.SetRefForcedStrategyPanelVM(Me) End Sub Friend Sub Init(Feature As BTLFeatureM) m_CurrentFeature = Feature LoadStrategyListFromTopology(Feature.nFeatureId, Feature.nPRC, Feature.nSelGRP) ' leggo eventuali parametri forzati Dim sStrategyID As String = "" EgtGetInfo(m_CurrentFeature.nFeatureId, "STRATEGY", sStrategyID) If String.IsNullOrWhiteSpace(sStrategyID) Then Return Dim ForcedStrategy As Strategy = m_StrategyList.FirstOrDefault(Function(x) x.sStrategyId = sStrategyID) If IsNothing(ForcedStrategy) Then Else SelStrategy = ForcedStrategy For Each Param In SelStrategy.ParameterList Select Case Param.GetType() Case GetType(BooleanStrategyParameter) Dim bValue As Boolean = False EgtGetInfo(m_CurrentFeature.nFeatureId, m_SelStrategy.sStrategyId & "_" & Param.sNameNge, bValue) DirectCast(Param, BooleanStrategyParameter).SetValue(bValue) Case GetType(DoubleStrategyParameter) Dim dValue As Double = 0 EgtGetInfo(m_CurrentFeature.nFeatureId, m_SelStrategy.sStrategyId & "_" & Param.sNameNge, dValue) DirectCast(Param, DoubleStrategyParameter).SetValue(dValue) Case GetType(ComboStrategyParameter) Dim sValue As String = 0 EgtGetInfo(m_CurrentFeature.nFeatureId, m_SelStrategy.sStrategyId & "_" & Param.sNameNge, sValue) Dim ComboStrategyParameter As ComboStrategyParameter = DirectCast(Param, ComboStrategyParameter) Dim SelCombo = ComboStrategyParameter.ComboList.FirstOrDefault(Function(x) x.sValue = sValue) ComboStrategyParameter.SelValue = SelCombo End Select Next End If End Sub Friend Function LoadStrategyListFromTopology(nFeatureId As Integer, nPRC As Integer, nGRP As Integer) As Boolean m_StrategyList.Clear() Dim sTopologyName As String = "Feature" ' carico default Dim sStrategiesDirPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath() Dim sAvailableStrategiesFilePath As String = sStrategiesDirPath & "\" & AVAILABLESTRATEGYLIST_FILE & ".json" If File.Exists(sAvailableStrategiesFilePath) Then Dim sReadedFile As String = File.ReadAllText(sAvailableStrategiesFilePath) Dim JsonStrategyFeatureList As List(Of JsonAvailableStrategyFeature) = JsonConvert.DeserializeObject(Of List(Of JsonAvailableStrategyFeature))(sReadedFile) nGRP = CalcBeamPrivateProfileGRP(nGRP) Dim JsonAvailableStrategyFeature As JsonAvailableStrategyFeature = JsonStrategyFeatureList.FirstOrDefault(Function(x) x.nGRP = nGRP AndAlso x.nPRC = nPRC) If IsNothing(JsonAvailableStrategyFeature) Then Return False Dim JsonAvailableTopology As JsonAvailableTopology = JsonAvailableStrategyFeature.TopologyList.FirstOrDefault(Function(x) x.sName = sTopologyName) If IsNothing(JsonAvailableTopology) Then ' ricavo topologia da feature FindTopologyFromFeature(nFeatureId, sTopologyName) JsonAvailableTopology = JsonAvailableStrategyFeature.TopologyList.FirstOrDefault(Function(x) x.sName = sTopologyName) End If If IsNothing(JsonAvailableTopology) Then Return False m_StrategyList = New ObservableCollection(Of Strategy)((From JsonAvailableStrategy In JsonAvailableTopology.StrategyList Select JsonAvailableStrategy.Deserialize(-1)).ToList()) End If ' recupero custom Dim nPartId As Integer = EgtGetParent(EgtGetParent(nFeatureId)) Dim nPartProjId As Integer = 0 If Not EgtGetInfo(nPartId, PROJ, nPartProjId) OrElse nPartProjId <= 0 Then Return False Dim nBTLInfoLayerId As Integer = GetCurrProjBtlInfoLayerId(nPartProjId) Dim sStrategySetupName As String = "" EgtGetInfo(nBTLInfoLayerId, "AISETUP", sStrategySetupName) If Not String.IsNullOrWhiteSpace(sStrategySetupName) Then ' carico custom Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath() Dim sStrategyConfigurationFilePath As String = sAISetupDirPath & "\" & sStrategySetupName & ".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) Dim JsonStrategyFeature As JsonStrategyFeature = JsonStrategyFeatureList.FirstOrDefault(Function(x) x.nGRP = nGRP AndAlso x.nPRC = nPRC) If IsNothing(JsonStrategyFeature) Then Return False Dim JsonTopology As JsonTopology = JsonStrategyFeature.TopologyList.FirstOrDefault(Function(x) x.sName = sTopologyName) If IsNothing(JsonTopology) Then Return False For Each Strategy In JsonTopology.StrategyList Dim DefaultStrategy As Strategy = m_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 End If ' aggiungo strategia automatica m_StrategyList.Insert(0, New Strategy() With {.sStrategyId = AUTOMATICSTRATEGYID, .sStrategyName = AUTOMATICSTRATEGYID}) NotifyPropertyChanged(NameOf(StrategyList)) Return True End Function Friend Function GetCurrProjBtlInfoLayerId(nProjId As Integer) As Integer ' cerco tra i layer BTLInfo Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) While nBTLInfoLayerId <> GDB_ID.NULL ' verifico se il layer appartiene al ProjId Dim nBTLInfoLayerProjId As Integer EgtGetInfo(nBTLInfoLayerId, BTL_PRT_PROJ, nBTLInfoLayerProjId) If nBTLInfoLayerProjId = nProjId Then Return nBTLInfoLayerId End If nBTLInfoLayerId = EgtGetNextName(nBTLInfoLayerId, BTLINFO) End While Return -1 End Function #Region "COMMANDS" #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() ' cancello precedenti valori Dim sPrecStrategyID As String = "" EgtGetInfo(m_CurrentFeature.nFeatureId, "STRATEGY", sPrecStrategyID) If Not String.IsNullOrWhiteSpace(sPrecStrategyID) Then Dim PrecInfo As String() = {} EgtGetAllInfo(m_CurrentFeature.nFeatureId, PrecInfo) Dim PrecStrategyInfo As String() = PrecInfo.Where(Function(x) x.StartsWith(sPrecStrategyID)).ToArray() For Each Info In PrecStrategyInfo EgtRemoveInfo(m_CurrentFeature.nFeatureId, Info.Split("="c)(0)) Next End If If m_SelStrategy.sStrategyId = AUTOMATICSTRATEGYID Then EgtRemoveInfo(m_CurrentFeature.nFeatureId, "STRATEGY") Else EgtSetInfo(m_CurrentFeature.nFeatureId, "STRATEGY", SelStrategy.sStrategyId) For Each Param In SelStrategy.ParameterList Select Case Param.GetType() Case GetType(BooleanStrategyParameter) EgtSetInfo(m_CurrentFeature.nFeatureId, m_SelStrategy.sStrategyId & "_" & Param.sNameNge, DirectCast(Param, BooleanStrategyParameter).bValue) Case GetType(DoubleStrategyParameter) EgtSetInfo(m_CurrentFeature.nFeatureId, m_SelStrategy.sStrategyId & "_" & Param.sNameNge, DirectCast(Param, DoubleStrategyParameter).sValue) Case GetType(ComboStrategyParameter) EgtSetInfo(m_CurrentFeature.nFeatureId, m_SelStrategy.sStrategyId & "_" & Param.sNameNge, DirectCast(Param, ComboStrategyParameter).SelValue.sValue) End Select Next End If 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