using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Composition; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using ArchestrA.Client.AppConfig; using ArchestrA.Client.AppConfigInt.Resources; using ArchestrA.Client.CommonCore; using ArchestrA.Client.CommonTypes; using ArchestrA.Client.HostContracts; using ArchestrA.Configuration; using ArchestrA.Configuration.GalaxyGraphics; using ArchestrA.Core; using ArchestrA.Diagnostics; using ArchestrA.Visualization.Client.Common; using ArchestrA.Visualization.CommandSupport; using ArchestrA.Visualization.CommonUI.Dialogs; using ArchestrA.Visualization.Display.Logic; using ArchestrA.Visualization.Display.Logic.Common; using ArchestrA.Visualization.DisplayModuleSupport; using ArchestrA.Visualization.EntitySupport; using ArchestrA.Visualization.ModernEditors; using Prism.Mvvm; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyCompany("AVEVA Software, PLC.")] [assembly: AssemblyCopyright("Copyright 2020 AVEVA Group plc and its subsidiaries. All rights reserved.")] [assembly: AssemblyTrademark("Refer to: https://sw.aveva.com/legal/trademarks")] [assembly: AssemblyProduct("AVEVA Application Server")] [assembly: AssemblyInformationalVersion("20.0.000")] [assembly: AssemblyFileVersion("2917.0626.2833.2")] [assembly: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "ArchestrA.Client.AppConfigInt")] [assembly: AssemblyTitle("ArchestrA.Client.AppConfigInt")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: CLSCompliant(false)] [assembly: NeutralResourcesLanguage("en")] [assembly: ComVisible(false)] [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] [assembly: InternalsVisibleTo("ArchestrA.Client.AppConfigInt.Fakes,PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc")] [assembly: InternalsVisibleTo("ArchestrA.Client.AppConfigInt.Test,PublicKey=0024000004800000940000000602000000240000525341310004000001000100a79fb5ce9af5b80294b8b7ae7b476bcbf30b0713351655b2170195cd14acd8ed1462df1ab3a167d5463bd76a6151dd1766b94c350994d233a7024266591ee249882a4ee9c9e4de90dcd4c3762f274652cabac4a99704a9073872505b090f638e1a0827aeac9ff572d93d1a7800669dc0ce920817bd5aa5d70bacb7df88b4fdb3")] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: AssemblyVersion("1.0.0.0")] namespace ArchestrA.Client.AppConfigInt { internal class AppCommandManager : IAppCommandManagerBase { private readonly ICommandManager commandManager; public AppCommandManager(ICommandManager commandManager) { this.commandManager = commandManager; } public IAppCommandManagerBase AddPopupCommand(IAppCommandUI appCommandUI, object content) { ICommandUI commandUI = AppCommandUIProvider.GetCommandUI(appCommandUI); commandManager.AddPopupCommand(commandUI, content); return (IAppCommandManagerBase)(object)this; } public IAppCommandManagerBase AddSimpleCommand(ICommand command, IAppCommandUI appCommandUI) { ICommandUI commandUI = AppCommandUIProvider.GetCommandUI(appCommandUI); commandManager.AddSimpleCommand(command, commandUI); return (IAppCommandManagerBase)(object)this; } public IAppCommandManagerBase AddSplitCommand(ICommand command, IAppCommandUI appCommandUI, object content) { ICommandUI commandUI = AppCommandUIProvider.GetCommandUI(appCommandUI); commandManager.AddSplitCommand(command, commandUI, content); return (IAppCommandManagerBase)(object)this; } public IAppCommandManagerBase BeginCommandGroup(IAppCommandUI appCommandUI) { ICommandUI commandUI = AppCommandUIProvider.GetCommandUI(appCommandUI); commandManager.BeginCommandGroup(commandUI); return (IAppCommandManagerBase)(object)this; } public IAppCommandManagerBase BeginCommandGroup() { commandManager.BeginCommandGroup(); return (IAppCommandManagerBase)(object)this; } public IAppCommandManagerBase ClearCommands() { commandManager.ClearCommands(); return (IAppCommandManagerBase)(object)this; } public IAppCommandManagerBase WithoutLabel() { commandManager.WithoutLabel(); return (IAppCommandManagerBase)(object)this; } public IAppCommandUI CreateAppCommandUI(string label, string toolTip, DrawingBrush icon) { return AppCommandUIProvider.CreateAppCommandUI(label, toolTip, icon); } } [SuppressMessage("Microsoft.Design", "CA1053:StaticHolderTypesShouldNotHaveConstructors")] public sealed class AppCommandUIProvider { private sealed class AutoCommandUI : BindableBase, IAppCommandUI { private readonly string label; private readonly string accessKey; private readonly string toolTip; private readonly DrawingBrush icon; public string Label => label; public string AccessKey => accessKey; public string ToolTip => toolTip; public DrawingBrush Icon => icon; public AutoCommandUI(string label, string accessKey, string toolTip, DrawingBrush icon) { this.label = label; this.accessKey = accessKey; this.toolTip = toolTip; this.icon = icon; } } private sealed class OriginalCommandUI : BindableBase, ICommandUI { private readonly string getLabel; private readonly string getAccessKey; private readonly string getToolTip; private readonly DrawingBrush icon; public string Label => getLabel; public string AccessKey => getAccessKey; public string ToolTip => getToolTip; public DrawingBrush Icon => icon; public OriginalCommandUI(string getLabel, string getAccessKey, string getToolTip, DrawingBrush icon) { this.getLabel = getLabel; this.getAccessKey = getAccessKey; this.getToolTip = getToolTip; this.icon = icon; } } internal static ICommandUI GetCommandUI(IAppCommandUI commandUI) { return (ICommandUI)(object)new OriginalCommandUI(commandUI.Label, commandUI.AccessKey, commandUI.ToolTip, commandUI.Icon); } internal static IAppCommandUI CreateAppCommandUI(string label, string toolTip, DrawingBrush icon) { return (IAppCommandUI)(object)new AutoCommandUI(label, null, toolTip, icon); } } public class AppPublisher { private static readonly object SingletonAccessLock = new object(); private static volatile AppPublisher appPublisher; private IGalaxyConfiguration galaxyConfiguration; private IGalaxyGraphics galaxyGraphics; public static AppPublisher Instance { get { if (appPublisher == null) { lock (SingletonAccessLock) { if (appPublisher == null) { appPublisher = new AppPublisher(); } } } return appPublisher; } } public void Init(IGalaxyConfiguration galaxyConfiguration) { this.galaxyConfiguration = galaxyConfiguration; galaxyGraphics = galaxyConfiguration.GetGalaxyGraphics() as IGalaxyGraphics; } public void Init(IGalaxyGraphics galaxyGraphics) { this.galaxyGraphics = galaxyGraphics; } public void PublishIfNeeded(string objectName, string destPath) { int iDFromObjectName = galaxyConfiguration.GetIDFromObjectName(Namespace.VisualElement, objectName); PublishIfNeeded(objectName, iDFromObjectName, destPath); } public void PublishIfNeeded(string objectName, int objectID, string destPath) { PublishAndGetEditorMetadata(objectName, objectID, destPath, loadEditorMetadata: false); } public Tuple PublishAndGetEditorMetadata(string objectName, int objectID, string destPath, bool loadEditorMetadata) { return PublishAndGetEditorMetadata(galaxyGraphics, objectName, objectID, destPath, loadEditorMetadata); } public static void PublishIfNeededOnServer(IGalaxyGraphics galaxyGraphics, string objectName, int objectID, string destPath) { PublishAndGetEditorMetadata(galaxyGraphics, objectName, objectID, destPath, loadEditorMetadata: false); } [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "objectID")] private static Tuple PublishAndGetEditorMetadata(IGalaxyGraphics galaxyGraphics, string objectName, int objectID, string destPath, bool loadEditorMetadata) { if (string.IsNullOrWhiteSpace(destPath)) { ArchestrA.Diagnostics.Logger.LogWarning(() => "Invalid Destination Path: Value cannot be null, empty or whitespace"); return null; } string sourceDir = null; bool flag = false; int i; for (i = 0; i < 100; i++) { if (string.IsNullOrEmpty(sourceDir)) { sourceDir = GetLibraryPath(galaxyGraphics, objectName); ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_AppSourcePath, objectName, sourceDir)); } if (!string.IsNullOrEmpty(sourceDir) && Directory.Exists(sourceDir)) { flag = true; ArchestrA.Diagnostics.Logger.LogTrace(() => $"App path {sourceDir} found {i * 200} ms after change notification."); break; } Thread.Sleep(200); if (string.IsNullOrEmpty(sourceDir)) { ArchestrA.Diagnostics.Logger.LogInfo(() => $"Checked in path for {objectName} is empty. Will retry ..."); } else { ArchestrA.Diagnostics.Logger.LogInfo(() => $"{sourceDir} in the shared folder is not available yet. Waiting ..."); } } if (string.IsNullOrEmpty(sourceDir)) { ArchestrA.Diagnostics.Logger.LogWarning(() => $"Cannot find file storage path for visual element {objectName}."); return null; } if (!flag) { ArchestrA.Diagnostics.Logger.LogWarning(() => $"File storage path for visual element {objectName} does not exist: {sourceDir}"); return null; } Tuple tuple = IsCopyRequired(sourceDir, destPath, loadEditorMetadata); if (tuple.Item1) { destPath = CopyAppAssemblies(objectName, sourceDir, destPath); } return new Tuple(destPath, tuple.Item2); } public string[] GetGalaxyCredentialNameList() { try { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); string[] credentials = (galaxyConfiguration as IGalaxyConfigurationV31).GetGalaxyCredentialNameList(); stopWatch.Stop(); ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.CredentialEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.GetCredentials_Label, stopWatch.ElapsedMilliseconds, (credentials != null) ? credentials.Length : 0)); return credentials; } catch (Exception ex) { Exception ex2 = ex; Exception ex3 = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => string.Format(CultureInfo.InvariantCulture, "Error occured while retrieving the credentials from galaxy configuration. {0}", ex3.ToString())); return null; } } private static Tuple IsCopyRequired(string sourcePath, string destPath, bool loadEditorMetadata) { string text = null; string text2 = null; AppManifestSchemaElement val = ValidateAndLoadAppManifest(sourcePath); if (val == null) { if (loadEditorMetadata) { ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_CopyAppAssembliesInformation, sourcePath, "Don't")); return new Tuple(item1: false, null); } return new Tuple(item1: true, null); } if (loadEditorMetadata && (string.IsNullOrEmpty(val.Editor.AssemblyName) || string.IsNullOrEmpty(val.Editor.FullName))) { ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_EditorAssemblyFileNotfound, sourcePath)); return new Tuple(item1: false, null); } text = val.AppVersion; AppManifestSchemaElement val2 = ValidateAndLoadAppManifest(destPath); if (val2 == null) { ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_CopyAppAssembliesInformation, destPath, string.Empty)); return new Tuple(item1: true, val.Editor); } text2 = val2.AppVersion; if (string.IsNullOrEmpty(text)) { return new Tuple(item1: false, val.Editor); } if (string.Equals(text, text2, StringComparison.Ordinal)) { return new Tuple(item1: false, val2.Editor); } return new Tuple(item1: true, val.Editor); } internal static AppManifestSchemaElement ValidateAndLoadAppManifest(string directoryPath) { //IL_0027: Expected O, but got Unknown try { string text = Path.Combine(directoryPath, "AppManifest.xml"); return File.Exists(text) ? DisplayLibraryManager.ValidateAndLoadXml(text) : null; } catch (DisplayOperationException ex) { DisplayOperationException ex2 = ex; DisplayOperationException ex3 = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => ((Exception)(object)ex3).Message); } catch (Exception ex4) { Exception ex5 = ex4; Exception ex6 = ex5; ArchestrA.Diagnostics.Logger.LogWarning(() => ex6.Message); } return null; } private static string CopyAppAssemblies(string objectName, string sourceDir, string destPath) { ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_CopyAppLibrary, objectName, sourceDir, destPath)); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); DeleteAndCopyFiles(objectName, sourceDir, ref destPath); stopWatch.Stop(); ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditorPerformance, () => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_CopyAppPerformance, objectName, sourceDir, destPath, stopWatch.ElapsedMilliseconds)); return destPath; } private static void DeleteAndCopyFiles(string objectName, string sourceDir, ref string destPath) { //IL_00af: Expected O, but got Unknown try { Utils.MaximumDirNameLengthCheck(sourceDir); if (Directory.Exists(destPath)) { string formattedString = string.Format(CultureInfo.InvariantCulture, Strings.Directory_DeletionInformation, objectName, destPath); ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => formattedString); Directory.Delete(destPath, recursive: true); } Utils.DirectoryCopy(sourceDir, destPath, true, new string[1] { "AppManifest.xml" }); string text = Path.Combine(sourceDir, "AppManifest.xml"); if (File.Exists(text)) { File.Copy(text, Path.Combine(destPath, "AppManifest.xml"), overwrite: true); } } catch (DisplayOperationException ex) { DisplayOperationException ex2 = ex; DisplayOperationException doe = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_ErrorMessage, objectName, doe)); destPath = null; } catch (DirectoryNotFoundException ex3) { DirectoryNotFoundException ex4 = ex3; DirectoryNotFoundException dnf = ex4; ArchestrA.Diagnostics.Logger.LogWarning(() => string.Format(CultureInfo.InvariantCulture, Strings.AppPublisher_ErrorMessage, objectName, dnf)); destPath = null; } catch (UnauthorizedAccessException) { destPath = null; throw; } catch (Exception ex6) { Exception ex7 = ex6; Exception ex8 = ex7; ArchestrA.Diagnostics.Logger.LogWarning(() => string.Format(CultureInfo.InvariantCulture, Strings.CopyError, ex8.Message)); } } private static string GetLibraryPath(IGalaxyGraphics galaxyGraphics, string objectName) { IVisualElementReference visualElementReference = galaxyGraphics.CreateVisualElementReference(); visualElementReference.Name = objectName; visualElementReference.Type = "DisplayModule"; ERRORCODE status; string statusMessage; return galaxyGraphics.GetVisualElementDescription(visualElementReference, preferCheckedOutVersion: true, out status, out statusMessage)?.GetAssociatedFilePath(AssociatedFilePathType.CheckedInPath); } } internal class ControlLoader : Disposable { private readonly string libraryBasePath; private readonly EditorMetadata editorMetadata; private AppDomain appDomain; public ControlLoader(string path) { libraryBasePath = path; appDomain = AppDomain.CurrentDomain; } public ControlLoader(Tuple appPathEditorTuple) { libraryBasePath = appPathEditorTuple.Item1; editorMetadata = appPathEditorTuple.Item2; appDomain = AppDomain.CurrentDomain; } internal IEditorConfig LoadEditorConfig(out bool previousVersionBinaryFound) { previousVersionBinaryFound = false; try { appDomain.AssemblyResolve += AppDomain_AssemblyResolve; if (!string.IsNullOrWhiteSpace(editorMetadata.AssemblyName) && !string.IsNullOrWhiteSpace(editorMetadata.FullName)) { Assembly assembly = Assembly.Load(editorMetadata.AssemblyName); DateTime assemblyCreationDateTime = GetAssemblyCreationDateTime(string.Join("\\", libraryBasePath, editorMetadata.AssemblyName + ".dll")); DateTime assemblyCreationDateTime2 = GetAssemblyCreationDateTime(assembly.Location); if (!DateTime.Equals(assemblyCreationDateTime, assemblyCreationDateTime2)) { previousVersionBinaryFound = true; return null; } object obj = Activator.CreateInstance(assembly.GetType(editorMetadata.FullName)); return (IEditorConfig)((obj is IEditorConfig) ? obj : null); } } catch (Exception ex) { Exception ex2 = ex; Exception ex3 = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => string.Format(CultureInfo.InvariantCulture, Strings.ControlLoader_EditorLoadFailure, libraryBasePath, ex3)); } return null; } private static DateTime GetAssemblyCreationDateTime(string path) { return new FileInfo(path).LastWriteTime; } [SuppressMessage("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods", MessageId = "System.Reflection.Assembly.LoadFrom", Justification = "Needed to load the dependent assmblies of app Editor")] private Assembly AppDomain_AssemblyResolve(object sender, ResolveEventArgs args) { try { string text = Directory.GetFiles(libraryBasePath, args.Name + ".dll", SearchOption.AllDirectories).FirstOrDefault(); if (!string.IsNullOrEmpty(text)) { return Assembly.LoadFrom(text); } } catch (Exception ex) { Exception ex2 = ex; Exception ex3 = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => string.Format(CultureInfo.InvariantCulture, Strings.ControlLoader_EditorLoadFailure, libraryBasePath, ex3)); } return null; } protected override void Dispose(bool disposing) { if (disposing && appDomain != null) { appDomain.AssemblyResolve -= AppDomain_AssemblyResolve; appDomain = null; } base.Dispose(disposing); } } public sealed class AppEditorSupportEntity : DisplayModuleEntity { public IVisualElementReferenceList References { get; set; } public bool LoadAppData(Stream stream, out Dictionary appData) { appData = null; if (!((DisplayModuleEntity)this).LoadAppData(stream)) { return false; } appData = ((DisplayModuleEntity)this).AppData; return true; } public bool SaveData(Stream stream, Dictionary appData) { ((DisplayModuleEntity)this).AppData.Clear(); foreach (KeyValuePair appDatum in appData) { ((DisplayModuleEntity)this).AppData.Add(appDatum.Key, appDatum.Value); } return ((DisplayModuleEntity)this).SaveAppData(stream); } public override bool SaveAppData(Stream stream) { if (!((DisplayModuleEntity)this).SaveAppData(stream)) { return false; } return true; } } public class CredentialEditorControlInternal : Control { public static readonly DependencyProperty ItemsSourceProperty; public static readonly DependencyProperty TextProperty; internal Dictionary ItemsSource { get { return (Dictionary)GetValue(ItemsSourceProperty); } set { SetValue(ItemsSourceProperty, value); } } public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } public event EventHandler TextChanged; private static void OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as CredentialEditorControlInternal).TextChanged?.Invoke(null, null); } public void UpdateTextProperty(string text) { if (Text != text) { Text = text; } } [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline")] static CredentialEditorControlInternal() { ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(Dictionary), typeof(CredentialEditorControlInternal), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(CredentialEditorControlInternal), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnTextPropertyChanged)); FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(CredentialEditorControlInternal), new FrameworkPropertyMetadata(typeof(CredentialEditorControlInternal))); } public override void OnApplyTemplate() { PoupulateComboBox(); } private void PoupulateComboBox() { try { string[] galaxyCredentialNameList = AppPublisher.Instance.GetGalaxyCredentialNameList(); if (galaxyCredentialNameList == null || galaxyCredentialNameList.Length == 0) { ArchestrA.Diagnostics.Logger.LogWarning(() => "Querying GalaxyConfiguration for configured credentials returns zero results. Please ensure credentials are configuired in galaxy security configuration."); return; } Dictionary dictionary = new Dictionary { { Strings.None_Label, null } }; string[] array = galaxyCredentialNameList; foreach (string text in array) { dictionary.Add(text, text); } ItemsSource = dictionary; } catch (Exception ex) { Exception ex2 = ex; Exception ex3 = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => ex3.ToString()); } } } public class EditorControlFactoryInternal : EditorControlFactory, IExtension { private const string ControlFactory = "ArchestrA.Client.AppConfig.CredentialEditorControl"; public string ExtensionTypeName => typeof(EditorControlFactoryInternal).FullName; public override FrameworkElement GetControl(string type) { if (type == "ArchestrA.Client.AppConfig.CredentialEditorControl") { return new CredentialEditorControlInternal(); } return null; } } internal static class CustomFlags { internal static readonly string AppEditor = "AppEditor"; internal static readonly string AppEditorPerformance = "AppEditorPerformance"; internal static readonly string CredentialEditor = "CredentialEditor"; } [Export(typeof(IEditorFactory))] internal sealed class EditorFactory : IEditorFactory { private const string BaseAppsDir = "ArchestrA\\Apps"; public string Codebase => "DemoTestApp.Editor"; [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "MEF")] [Import] internal IDialogService DialogService { get; private set; } public EditorViewModelBase Create(IVisualElementConfiguration configuration, bool isReadOnly) { //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Expected O, but got Unknown //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Expected O, but got Unknown //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Expected O, but got Unknown IEditorConfig control = null; AppEditorSupportViewModel appEditorSupportViewModel = null; bool previousVersionBinaryFound = false; try { string destinationPath = GetDestinationPath(configuration); Tuple appPathEditorTuple = AppPublisher.Instance.PublishAndGetEditorMetadata(configuration.ElementName, configuration.ObjectID, destinationPath, loadEditorMetadata: true); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); if (Directory.Exists(appPathEditorTuple.Item1)) { ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.EditorFactory_AppPublishedPath, configuration.ElementName, appPathEditorTuple.Item1)); using (ControlLoader controlLoader = new ControlLoader(appPathEditorTuple)) { control = controlLoader.LoadEditorConfig(out previousVersionBinaryFound); } if (control == null) { stopWatch.Stop(); if (previousVersionBinaryFound) { DialogService.DisplayNotification(new NotificationDialogParameters { Details = string.Format(CultureInfo.CurrentCulture, Strings.AppEditor_LatestAppVersionFound), Title = Strings.AppEditor_Title }); return null; } ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditorPerformance, () => string.Format(CultureInfo.InvariantCulture, Strings.EditorFactory_AppEditorPerformance, configuration.ElementName, stopWatch.ElapsedMilliseconds)); } else { ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.EditorFactory_EditorConfig, ((object)control).GetType())); appEditorSupportViewModel = new AppEditorSupportViewModel(configuration, isReadOnly, control); ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditor, () => string.Format(CultureInfo.InvariantCulture, Strings.EditorFactory_InitializeAppEditor, configuration.ElementName)); control.InitializeEditor((IEditorBase)(object)appEditorSupportViewModel); stopWatch.Stop(); ArchestrA.Diagnostics.Logger.LogCustom(CustomFlags.AppEditorPerformance, () => string.Format(CultureInfo.InvariantCulture, Strings.EditorFactory_AppEditorPerformance, configuration.ElementName, stopWatch.ElapsedMilliseconds)); } } if (appEditorSupportViewModel == null) { DialogService.DisplayNotification(new NotificationDialogParameters { Details = string.Format(CultureInfo.CurrentCulture, Strings.AppEditorNotfoundNotificationDetail, configuration.ElementName), Title = Strings.AppEditor_Title }); } } catch (UnauthorizedAccessException) { DialogService.DisplayNotification(new NotificationDialogParameters { Details = string.Format(CultureInfo.CurrentCulture, Strings.AppEditor_LatestAppVersionFound), Title = string.Format(CultureInfo.CurrentCulture, Strings.AppEditor_LatestAppVersionFound_Title, configuration.ElementName) }); } return (EditorViewModelBase)(object)appEditorSupportViewModel; } private static string GetDestinationPath(IVisualElementConfiguration configuration) { string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "ArchestrA\\Apps"); return Path.Combine(path2: configuration.ObjectID.ToString(CultureInfo.InvariantCulture), path1: Path.Combine(path, EditorLauncher.GalaxyName)); } } internal sealed class AppEditorSupportPreferences : EditorPreferencesBase { [SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] private readonly IEditorConfig control; public AppEditorSupportPreferences(IEditorConfig control) { this.control = control; } } public sealed class AppEditorSupportViewModel : EditorViewModelBase { private const string VisualElementDefinitionGrmAttribute = "_VisualElementDefinitionGRM"; private readonly IEditorConfig control; public override object SelectedItem { get; set; } public override string EditorName => ((EditorViewModelBase)this).Entity.Name + " Editor"; public AppEditorSupportViewModel(IVisualElementConfiguration configuration, bool isReadOnly, IEditorConfig control) : base(configuration, isReadOnly, (IEntity)(object)new AppEditorSupportEntity(), (EditorPreferencesBase)(object)new AppEditorSupportPreferences(control)) { this.control = control; } protected override IEnumerable CreateActivities() { Load(); return control.GetActivities(); } protected override void OnInitialized() { ((EditorViewModelBase)this).OnInitialized(); ((EditorViewModelBase)this).AppCommandManager = (IAppCommandManagerBase)(object)new AppCommandManager(((EditorViewModelBase)this).CommandManager); } [SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "VisualElementDefinitionGrmAttribute")] private void Load() { try { byte[] array = (byte[])((EditorViewModelBase)this).Configuration.GetAttribute("_VisualElementDefinitionGRM"); if (array == null || (array.Length == 1 && array[0] == 0)) { return; } ArchestrA.Diagnostics.Logger.LogTrace(() => "Loading existing data."); using MemoryStream stream = new MemoryStream(array); object[] array2 = (object[])((EditorViewModelBase)this).Configuration.GetAttribute("_VisualElementReferenceList"); object[] array3 = (object[])((EditorViewModelBase)this).Configuration.GetAttribute("_VisualElementReferenceStatusList"); VisualElementReferenceList references = ((array2 != null && array3 != null) ? new VisualElementReferenceList(array2.Cast().ToArray(), array3.Select((object s) => string.Equals((string)s, "1", StringComparison.Ordinal)).ToArray()) : new VisualElementReferenceList()); AppEditorSupportEntity obj = ((EditorViewModelBase)this).Entity as AppEditorSupportEntity; obj.References = references; obj.LoadAppData(stream, out var appData); control.Load(appData); } catch (Exception ex) { Exception ex2 = ex; Exception ex3 = ex2; ArchestrA.Diagnostics.Logger.LogError(() => $"Failed to load VisualElementDefinitionGrmAttribute value. Error details = {ex3.ToString()}"); } } public override bool Save(bool isClosing) { bool result = true; try { ((EditorViewModelBase)this).Configuration.SetAttribute("_ConfigErrors", (object)((IEnumerable)((EditorViewModelBase)this).Errors.ToArray()).ToArray()); ((EditorViewModelBase)this).Configuration.SetAttribute("_ConfigWarnings", (object)((IEnumerable)((EditorViewModelBase)this).InternalWarnings.ToArray()).ToArray()); using (MemoryStream memoryStream = new MemoryStream()) { try { AppEditorSupportEntity obj = ((EditorViewModelBase)this).Entity as AppEditorSupportEntity; Dictionary appData = control.Save(); if (!obj.SaveData(memoryStream, appData)) { return false; } } catch (Exception ex) { Exception ex2 = ex; Exception saveException = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => $"Failed to save configuration for the Entity '{((EditorViewModelBase)this).Entity.Name}'. Error = {saveException}"); return false; } ((EditorViewModelBase)this).Configuration.SetAttribute("_VisualElementDefinitionGRM", (object)memoryStream.GetBuffer()); string a = ((EditorViewModelBase)this).Validate(isClosing); if (string.Equals(a, ConfirmationDialogCommand.Cancel.Id, StringComparison.Ordinal)) { return false; } if (string.Equals(a, ConfirmationDialogCommand.No.Id, StringComparison.Ordinal)) { return true; } if (!((EditorViewModelBase)this).Configuration.Commit()) { return false; } } ((EditorViewModelBase)this).IsDirty = false; } catch (Exception ex3) { Exception ex2 = ex3; Exception ex4 = ex2; ArchestrA.Diagnostics.Logger.LogWarning(() => $"Error while saving the configuration for the entity '{((EditorViewModelBase)this).Entity.Name}'. Error = {ex4.ToString()}"); result = false; } return result; } } } namespace ArchestrA.Client.AppConfigInt.Resources { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Strings { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { resourceMan = new ResourceManager("ArchestrA.Client.AppConfigInt.Resources.Strings", typeof(Strings).Assembly); } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static string AddItem_Label => ResourceManager.GetString("AddItem_Label", resourceCulture); internal static string AppEditor_LatestAppVersionFound => ResourceManager.GetString("AppEditor_LatestAppVersionFound", resourceCulture); internal static string AppEditor_LatestAppVersionFound_Title => ResourceManager.GetString("AppEditor_LatestAppVersionFound_Title", resourceCulture); internal static string AppEditor_Title => ResourceManager.GetString("AppEditor_Title", resourceCulture); internal static string AppEditorNotfoundNotificationDetail => ResourceManager.GetString("AppEditorNotfoundNotificationDetail", resourceCulture); internal static string AppPublisher_AppSourcePath => ResourceManager.GetString("AppPublisher_AppSourcePath", resourceCulture); internal static string AppPublisher_CopyAppAssembliesInformation => ResourceManager.GetString("AppPublisher_CopyAppAssembliesInformation", resourceCulture); internal static string AppPublisher_CopyAppLibrary => ResourceManager.GetString("AppPublisher_CopyAppLibrary", resourceCulture); internal static string AppPublisher_CopyAppPerformance => ResourceManager.GetString("AppPublisher_CopyAppPerformance", resourceCulture); internal static string AppPublisher_EditorAssemblyFileNotfound => ResourceManager.GetString("AppPublisher_EditorAssemblyFileNotfound", resourceCulture); internal static string AppPublisher_ErrorMessage => ResourceManager.GetString("AppPublisher_ErrorMessage", resourceCulture); internal static string Compound1_Label => ResourceManager.GetString("Compound1_Label", resourceCulture); internal static string Compound2_Label => ResourceManager.GetString("Compound2_Label", resourceCulture); internal static string ControlLoader_EditorLoadFailure => ResourceManager.GetString("ControlLoader_EditorLoadFailure", resourceCulture); internal static string CopyError => ResourceManager.GetString("CopyError", resourceCulture); internal static string Directory_DeletionInformation => ResourceManager.GetString("Directory_DeletionInformation", resourceCulture); internal static string EditorFactory_AppEditorPerformance => ResourceManager.GetString("EditorFactory_AppEditorPerformance", resourceCulture); internal static string EditorFactory_AppPublishedPath => ResourceManager.GetString("EditorFactory_AppPublishedPath", resourceCulture); internal static string EditorFactory_EditorConfig => ResourceManager.GetString("EditorFactory_EditorConfig", resourceCulture); internal static string EditorFactory_InitializeAppEditor => ResourceManager.GetString("EditorFactory_InitializeAppEditor", resourceCulture); internal static string GetCredentials_Label => ResourceManager.GetString("GetCredentials_Label", resourceCulture); internal static string ItemCommands_Label => ResourceManager.GetString("ItemCommands_Label", resourceCulture); internal static string MoveItemDown_Label => ResourceManager.GetString("MoveItemDown_Label", resourceCulture); internal static string MoveItemUp_Label => ResourceManager.GetString("MoveItemUp_Label", resourceCulture); internal static string None_Label => ResourceManager.GetString("None_Label", resourceCulture); internal static string RedoStack_Label => ResourceManager.GetString("RedoStack_Label", resourceCulture); internal static string RemoveItem_Label => ResourceManager.GetString("RemoveItem_Label", resourceCulture); internal static string SetProperty_Label => ResourceManager.GetString("SetProperty_Label", resourceCulture); internal static string TestMainActivityViewModel_Label => ResourceManager.GetString("TestMainActivityViewModel_Label", resourceCulture); internal static string TestScriptActivityViewModel_Label => ResourceManager.GetString("TestScriptActivityViewModel_Label", resourceCulture); internal static string Toggle_Label => ResourceManager.GetString("Toggle_Label", resourceCulture); internal static string UndoStack_Label => ResourceManager.GetString("UndoStack_Label", resourceCulture); [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Strings() { } } } namespace ArchestrA.Diagnostics { [ExcludeFromCodeCoverage] internal static class Logger { private static ILoggerClient loggerClient = LoggerClient.CreateNew(Assembly.GetExecutingAssembly().GetName().Name); [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public static bool IsErrorEnabled { get { if (loggerClient == null) { return false; } return loggerClient.IsErrorEnabled; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public static bool IsWarningEnabled { get { if (loggerClient == null) { return false; } return loggerClient.IsWarningEnabled; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public static bool IsInfoEnabled { get { if (loggerClient == null) { return false; } return loggerClient.IsInfoEnabled; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public static bool IsTraceEnabled { get { if (loggerClient == null) { return false; } return loggerClient.IsTraceEnabled; } } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public static bool IsCustomLogEnabled(string customLogName) { if (loggerClient == null) { return false; } return loggerClient.IsCustomLogEnabled(customLogName); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogError(Func getMessage, Exception exception = null) { loggerClient?.LogError(getMessage, exception); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogWarning(Func getMessage, Exception exception = null) { loggerClient?.LogWarning(getMessage, exception); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogInfo(Func getMessage) { loggerClient?.LogInfo(getMessage); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogTrace(Func getMessage, Exception exception = null) { loggerClient?.LogTrace(getMessage, exception); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogCustom(string customLogName, Func getMessage) { loggerClient?.LogCustom(customLogName, getMessage); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogEntry(Func getMessage, [CallerMemberName] string callerName = "") { loggerClient?.LogEntryExit(getMessage, "Entered", callerName); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogExit(Func getMessage, [CallerMemberName] string callerName = "") { loggerClient?.LogEntryExit(getMessage, "Exiting", callerName); } [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Method does not have to be used by all clients of the Logger.")] public static void LogDispose(string className) { loggerClient?.LogWarning(() => $"Failed to call Dispose() for class {className}. Clean up of unmanaged resource was deferred to garbage collector."); } } }